1 <?php
2 /**
3 * A DataObjectLog is a log of changes that have been made to the database in this session.
4 * It was designed to help with updates to the CMS tree, and could be used wherever an Ajax call
5 * needs to update a complex on-screen representation of your data.
6 * @package sapphire
7 * @subpackage model
8 */
9 class DataObjectLog extends Object {
10 /**
11 * This must be set to true for the DataObjectLog to work
12 */
13 static $enabled = false;
14
15
16 /**
17 * The DataObjects that have been added to the database in this session.
18 * @var array
19 */
20 static $added = array();
21
22 /**
23 * The DataObjects that have been deleted from the database in this session.
24 * @var array
25 */
26 static $deleted = array();
27
28 /**
29 * The DataObjects that have been changed in the database in this session.
30 */
31 static $changed = array();
32
33 /**
34 * Add this DataObject as added in the log.
35 * @param DataObject $object
36 */
37 static function addedObject($object) {
38 if(self::$enabled) {
39 self::$added[$object->class][] = $object;
40 }
41 }
42
43 /**
44 * Add this DataObject as deleted in the log.
45 * @param DataObject $object
46 */
47 static function deletedObject($object) {
48 if(self::$enabled) {
49 self::$deleted[$object->class][] = $object;
50 }
51 }
52
53 /**
54 * Add this DataObject as changed in the log.
55 * @param DataObject $object
56 */
57 static function changedObject($object) {
58 if(self::$enabled) {
59 self::$changed[$object->class][] = $object;
60 }
61 }
62
63 /**
64 * Get all DataObjects that have been added this session that are of
65 * the class or a subclass of the class provided.
66 * @param string $className The class name.
67 * @return array
68 */
69 static function getAdded($className) {
70 return self::getByClass($className, self::$added);
71 }
72
73 /**
74 * Get all DataObjects that have been deleted this session that are of
75 * the class or a subclass of the class provided.
76 * @param string $className The class name.
77 * @return array
78 */
79 static function getDeleted($className) {
80 return self::getByClass($className, self::$deleted);
81 }
82
83 /**
84 * Get all DataObjects that have been changed this session that are of
85 * the class or a subclass of the class provided.
86 * @param string $className The class name.
87 * @return array
88 */
89 static function getChanged($className) {
90 return self::getByClass($className, self::$changed);
91 }
92
93 /**
94 * Get all DataObjects in the given set that are of the class or a
95 * subclass of the class provided.
96 * @param string $className The class name.
97 * @param array $set The set to search in.
98 * @return array
99 */
100 static function getByClass($className, $set) {
101 $allClasses = ClassInfo::subclassesFor($className);
102 foreach($allClasses as $subClass) {
103 if(isset($set[$subClass])) {
104 foreach($set[$subClass] as $page) {
105 $result[$page->ID] = $page;
106 }
107 }
108 }
109 return isset($result) ? $result : null;
110 }
111 }
112
113 ?>