Source for file AuditLog.php

Documentation is available at AuditLog.php

  1. <?php
  2. /*
  3.  *  $Id$
  4.  *
  5.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  6.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  7.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  8.  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  9.  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  10.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  11.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  12.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  13.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  14.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  15.  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  16.  *
  17.  * This software consists of voluntary contributions made by many individuals
  18.  * and is licensed under the LGPL. For more information, see
  19.  * <http://www.phpdoctrine.com>.
  20.  */
  21. /**
  22.  * Doctrine_AuditLog
  23.  *
  24.  * @package     Doctrine
  25.  * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
  26.  * @category    Object Relational Mapping
  27.  * @link        www.phpdoctrine.com
  28.  * @since       1.0
  29.  * @version     $Revision$
  30.  * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
  31.  */
  32. {
  33.     protected $_options = array(
  34.                             'className'     => '%CLASS%Version',
  35.                             'versionColumn' => 'version',
  36.                             'generateFiles' => false,
  37.                             'table'         => false,
  38.                             );
  39.  
  40.     protected $_auditTable;
  41.  
  42.     public function __construct($options)
  43.     {
  44.         $this->_options = array_merge($this->_options$options);
  45.     }
  46.     /**
  47.      * __get
  48.      * an alias for getOption
  49.      *
  50.      * @param string $option 
  51.      */
  52.     public function __get($option)
  53.     {
  54.         if (isset($this->options[$option])) {
  55.             return $this->_options[$option];
  56.         }
  57.         return null;
  58.     }
  59.     /**
  60.      * __isset
  61.      *
  62.      * @param string $option 
  63.      */
  64.     public function __isset($option
  65.     {
  66.         return isset($this->_options[$option]);
  67.     }
  68.     /**
  69.      * getOptions
  70.      * returns all options of this table and the associated values
  71.      *
  72.      * @return array    all options and their values
  73.      */
  74.     public function getOptions()
  75.     {
  76.         return $this->_options;
  77.     }
  78.     /**
  79.      * setOption
  80.      * sets an option and returns this object in order to
  81.      * allow flexible method chaining
  82.      *
  83.      * @see slef::$_options             for available options
  84.      * @param string $name              the name of the option to set
  85.      * @param mixed $value              the value of the option
  86.      * @return Doctrine_AuditLog        this object
  87.      */
  88.     public function setOption($name$value)
  89.     {
  90.         if isset($this->_options[$name])) {
  91.             throw new Doctrine_Exception('Unknown option ' $name);
  92.         }
  93.         $this->_options[$name$value;
  94.     }
  95.     /**
  96.      * getOption
  97.      * returns the value of given option
  98.      *
  99.      * @param string $name  the name of the option
  100.      * @return mixed        the value of given option
  101.      */
  102.     public function getOption($name)
  103.     {
  104.         if (isset($this->_options[$name])) {
  105.             return $this->_options[$name];
  106.         }
  107.         return null;
  108.     }
  109.  
  110.     public function getVersion(Doctrine_Record $record$version)
  111.     {           
  112.         $className $this->_options['className'];
  113.  
  114.         $q new Doctrine_Query();
  115.  
  116.         $values array();
  117.         foreach ((array) $this->_options['table']->getIdentifier(as $id{
  118.             $conditions[$className '.' $id ' = ?';
  119.             $values[$record->get($id);
  120.         }
  121.         $where implode(' AND '$conditions' AND ' $className '.' $this->_options['versionColumn'' = ?';
  122.         
  123.         $values[$version;
  124.  
  125.         $q->from($className)
  126.           ->where($where);
  127.  
  128.         return $q->execute($valuesDoctrine_HYDRATE::HYDRATE_ARRAY);
  129.     }
  130.     public function buildDefinition(Doctrine_Table $table)
  131.     {
  132.         $this->_options['className'str_replace('%CLASS%'
  133.                                                    $this->_options['table']->getComponentName(),
  134.                                                    $this->_options['className']);
  135.  
  136.         $name $table->getComponentName();
  137.  
  138.         $className $name 'Version';
  139.         
  140.         if (class_exists($className)) {
  141.             return false;
  142.         }
  143.  
  144.         $columns $table->getColumns();
  145.         
  146.         // the version column should be part of the primary key definition
  147.         $columns[$this->_options['versionColumn']]['primary'true;
  148.  
  149.         $id $table->getIdentifier();
  150.  
  151.         $options array('className' => $className);
  152.  
  153.         $builder new Doctrine_Import_Builder();
  154.  
  155.         $def $builder->buildDefinition($options$columns);
  156.  
  157.         if $this->_options['generateFiles']{
  158.             eval($def);
  159.         }
  160.         return true;
  161.     }
  162. }