1 <?php
2 3 4 5 6 7 8 9
10
11 class DataObjectFileTracking extends DataObject {
12 static $db = array(
13 'ObjectID' => 'Int',
14 'ObjectClass' => 'Varchar(150)',
15 'FieldName' => 'Varchar(150)',
16 );
17
18 static $has_one = array(
19 'File' => 'File',
20 );
21
22 23 24 25 26
27 function LinkedObject() {
28 return DataObject::get_by_id($this->ObjectClass, $this->ObjectID);
29 }
30
31 32 33 34 35 36 37 38 39
40 static function get_track($objectID, $objectClass, $fieldName='') {
41 $where = "ObjectID = {$objectID} AND ObjectClass = '{$objectClass}'";
42 if ($fieldName) {
43 $where .= " AND FieldName = '{$fieldName}'";
44 }
45 return DataObject::get('DataObjectFileTracking', $where);
46 }
47
48 49 50 51 52 53 54 55
56 static function update_track($objectID, $objectClass, $fieldName, $fileIDs) {
57
58 $currentTrackIDs = DB::Query("SELECT FileID FROM DataObjectFileTracking WHERE FieldName = '{$fieldName}' AND ObjectID = {$objectID} AND ObjectClass = '{$objectClass}'")->keyedColumn();
59
60
61 foreach($fileIDs as $fileID) {
62 if (isset($currentTrackIDs[$fileID])) {
63
64 unset($currentTrackIDs[$fileID]);
65 } else {
66
67 self::save_track($objectID, $objectClass, $fieldName, $fileID);
68 }
69
70 }
71
72 if (count($currentTrackIDs)) {
73 self::delete_track($objectID, $objectClass, $fieldName, $currentTrackIDs);
74 }
75 }
76
77 78 79 80 81 82 83 84 85 86 87
88 static function delete_track($objectID=0, $objectClass='', $fieldName='', $fileIDs=array()) {
89 $where = array();
90 if ($objectID) {
91 $where[] = "ObjectID = {$objectID}";
92 }
93 if ($objectClass) {
94 $where[] = "ObjectClass = '{$objectClass}'";
95 }
96 if ($fieldName) {
97 $where[] = "FieldName = '{$fieldName}'";
98 }
99 if ($fileIDs) {
100 $where[] = "FileID IN (" . join(',', $fileIDs) . ")";
101 }
102 if (count($where)) {
103 DB::Query("DELETE FROM `DataObjectFileTracking` WHERE " . implode(' AND ', $where));
104 }
105 }
106
107 108 109 110 111 112 113 114 115 116
117 static function save_track($objectID, $objectClass, $fieldName, $fileID) {
118 $obj = new DataObjectFileTracking();
119 $obj->ObjectID = $objectID;
120 $obj->ObjectClass = $objectClass;
121 $obj->FieldName = $fieldName;
122 $obj->FileID = $fileID;
123 $obj->write();
124 return $obj->ID;
125 }
126 }
[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the
Silverstripe Forums to ask development related questions.
-