adds directory scanning for apps as fallback
[tine20] / tine20 / Tinebase / Record / Diff.php
1 <?php
2 /**
3  * Tine 2.0
4  * 
5  * @package     Tinebase
6  * @subpackage  Record
7  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
8  * @copyright   Copyright (c) 2012 Metaways Infosystems GmbH (http://www.metaways.de)
9  * @author      Philipp Schüle <p.schuele@metaways.de>
10  * 
11  */
12
13 /**
14  * class Tinebase_Record_Diff
15  * 
16  * @package     Tinebase
17  * @subpackage  Record
18  */
19 class Tinebase_Record_Diff extends Tinebase_Record_Abstract 
20 {
21     /**
22      * identifier field name
23      *
24      * @var string
25      */
26     protected $_identifier = 'id';
27     
28     /**
29      * application the record belongs to
30      *
31      * @var string
32      */
33     protected $_application = 'Tinebase';
34     
35     /**
36      * record validators
37      *
38      * @var array
39      */
40     protected $_validators = array(
41         'id'                => array('allowEmpty' => TRUE),
42         'model'             => array('allowEmpty' => TRUE),
43         'diff'              => array('allowEmpty' => TRUE), // array of mismatching fields
44         
45         // @todo add base / compare records -> @see DateTime compare
46     );
47     
48     /**
49      * returns array with record related properties 
50      *
51      * @param boolean $_recursive
52      * @return array
53      */
54     public function toArray($_recursive = TRUE)
55     {
56         $recordArray = parent::toArray($_recursive);
57         if ($_recursive && isset($recordArray['diff'])) {
58             foreach ($recordArray['diff'] as $property => $value) {
59                 if ($this->_hasToArray($value)) {
60                     $recordArray['diff'][$property] = $value->toArray();
61                 }
62             }
63         }
64         
65         return $recordArray;
66     }
67     
68     /**
69      * is equal = empty diff
70      * 
71      * @param array $toOmit
72      * @return boolean
73      */
74     public function isEmpty($toOmit = array())
75     {
76         $diff = array_diff(array_keys($this->diff), $toOmit);
77         
78         return count($diff) === 0;
79     }
80 }