diff options
author | Bharat Mediratta <bharat@menalto.com> | 2009-11-24 19:20:36 -0800 |
---|---|---|
committer | Bharat Mediratta <bharat@menalto.com> | 2009-11-24 19:20:36 -0800 |
commit | 9b6663f87a7e679ffba691cf516191fc840cf978 (patch) | |
tree | 20cf9f3aaf93b4ba69d282dcf10d259db4a752de /system/libraries/ORM_Versioned.php | |
parent | 82ee5f9d338017c69331b2907f37a468ced8c66e (diff) |
Update to Kohana r4684 which is now Kohana 2.4 and has substantial
changes.
Diffstat (limited to 'system/libraries/ORM_Versioned.php')
-rw-r--r-- | system/libraries/ORM_Versioned.php | 143 |
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 |