summaryrefslogtreecommitdiff
path: root/system/libraries/ORM_Versioned.php
diff options
context:
space:
mode:
Diffstat (limited to 'system/libraries/ORM_Versioned.php')
-rw-r--r--system/libraries/ORM_Versioned.php143
1 files changed, 0 insertions, 143 deletions
diff --git a/system/libraries/ORM_Versioned.php b/system/libraries/ORM_Versioned.php
deleted file mode 100644
index 078fe16a..00000000
--- a/system/libraries/ORM_Versioned.php
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php defined('SYSPATH') OR die('No direct access allowed.');
-/**
- * Object Relational Mapping (ORM) "versioned" extension. Allows ORM objects to
- * be revisioned instead of updated.
- *
- * $Id$
- *
- * @package ORM
- * @author Kohana Team
- * @copyright (c) 2007-2008 Kohana Team
- * @license http://kohanaphp.com/license.html
- */
-class ORM_Versioned_Core extends ORM {
-
- protected $last_version = NULL;
-
- /**
- * Overload ORM::save() to support versioned data
- *
- * @chainable
- * @return ORM
- */
- public function save()
- {
- $this->last_version = 1 + ($this->last_version === NULL ? $this->object['version'] : $this->last_version);
- $this->__set('version', $this->last_version);
-
- parent::save();
-
- if ($this->saved)
- {
- $data = array();
- foreach ($this->object as $key => $value)
- {
- if ($key === 'id')
- continue;
-
- $data[$key] = $value;
- }
- $data[$this->foreign_key()] = $this->id;
-
- $this->db->insert($this->table_name.'_versions', $data);
- }
-
- return $this;
- }
-
- /**
- * Loads previous version from current object
- *
- * @chainable
- * @return ORM
- */
- public function previous()
- {
- if ( ! $this->loaded)
- return $this;
-
- $this->last_version = ($this->last_version === NULL) ? $this->object['version'] : $this->last_version;
- $version = $this->last_version - 1;
-
- $query = $this->db
- ->where($this->foreign_key(), $this->object[$this->primary_key])
- ->where('version', $version)
- ->limit(1)
- ->get($this->table_name.'_versions');
-
- if ($query->count())
- {
- $this->load_values($query->result(FALSE)->current());
- }
-
- return $this;
- }
-
- /**
- * Restores the object with data from stored version
- *
- * @param integer version number you want to restore
- * @return ORM
- */
- public function restore($version)
- {
- if ( ! $this->loaded)
- return $this;
-
- $query = $this->db
- ->where($this->foreign_key(), $this->object[$this->primary_key])
- ->where('version', $version)
- ->limit(1)
- ->get($this->table_name.'_versions');
-
- if ($query->count())
- {
- $row = $query->result(FALSE)->current();
-
- foreach ($row as $key => $value)
- {
- if ($key === $this->primary_key OR $key === $this->foreign_key())
- {
- // Do not overwrite the primary key
- continue;
- }
-
- if ($key === 'version')
- {
- // Always use the current version
- $value = $this->version;
- }
-
- $this->__set($key, $value);
- }
-
- $this->save();
- }
-
- return $this;
- }
-
- /**
- * Overloads ORM::delete() to delete all versioned entries of current object
- * and the object itself
- *
- * @param integer id of the object you want to delete
- * @return ORM
- */
- public function delete($id = NULL)
- {
- if ($id === NULL)
- {
- // Use the current object id
- $id = $this->object[$this->primary_key];
- }
-
- if ($status = parent::delete($id))
- {
- $this->db->where($this->foreign_key(), $id)->delete($this->table_name.'_versions');
- }
-
- return $status;
- }
-
-} \ No newline at end of file