1 <?php
2
3 4 5 6 7
8 class LogItem extends DataObject {
9
10 static $db = array(
11 'Class' => 'Varchar(255)',
12 'ItemID' => 'Int',
13 'ItemTitle' => 'Varchar(255)',
14 'Action' => "Enum('Create,Delete,Modify,Login,Logout,Publish,Unpublish')",
15 'MemberID' => 'Int',
16 'MemberLogin' => 'Varchar(50)',
17 'IP' => 'Varchar(15)'
18 );
19
20 static $indexes = array(
21 'Class' => true,
22 'Created' => true,
23 'Action' => true,
24 'MemberID' => true,
25 );
26
27 static $searchable_fields = array('Class', 'ItemTitle', 'ItemID'=>'ExactMatchFilter', 'Action', 'MemberID', 'IP');
28 static $summary_fields = array('LastEdited', 'MemberTitle', 'ActionTitle', 'ClassTitle', 'ItemTitle', 'ItemID', 'IP');
29 static $default_sort = 'ID DESC';
30
31 32 33
34 private static $enabled = false;
35
36 37 38 39 40
41 private static $disabled_classes = array('LogItem', 'DataObjectFileTracking');
42
43 44 45 46 47
48 static function enable($value = true) {
49 self::$enabled = $value;
50 }
51
52 53 54 55 56
57 static function disable_class($class) {
58 self::$disabled_classes[] = $class;
59 }
60
61 62 63 64 65 66 67
68 static function check($data = null) {
69 if (!self::$enabled) return false;
70 if (is_array($data) && isset($data['Class']) && array_search($data['Class'], self::$disabled_classes) !== false) return false;
71 return true;
72 }
73
74 75 76 77 78
79 static function add($data) {
80 if (!self::check($data)) return;
81
82 $data['MemberID'] = Member::currentUserID();
83 $member = Member::currentUser();
84 if ($member) {
85
86 $data['MemberLogin'] = $member->Title;
87 }
88 $data['IP'] = self::getUserIP();
89 $log = new LogItem($data);
90 $log->write();
91 }
92
93 static function getUserIP() {
94
95 return $_SERVER['REMOTE_ADDR'];
96 }
97
98 static function get_member_name($id) {
99 if ($id) {
100 $title = '';
101 if ($member = DataObject::get_by_id('Member', $id)) {
102 $title = $member->getField(Member::get_unique_identifier_field());
103 }
104 return $title . ' (#' . $id . ')';
105 }
106 return '-';
107 }
108
109 static function get_class_name($class) {
110 $className = $class;
111 if (class_exists($class) && $title = singleton($class)->i18n_singular_name()) {
112 $className = $title;
113 if (Director::isDev()) $className .= ' (' . $class . ')';
114 }
115 return $className;
116 }
117
118 function canEdit($member = NULL) {
119 return false;
120 }
121
122 function getClassTitle() {
123 return self::get_class_name($this->Class);
124 }
125
126 function getActionTitle() {
127 return _t("Logs.Action" . $this->Action, $this->Action);
128 }
129
130 function getMemberTitle() {
131 return ($this->MemberLogin) ? $this->MemberLogin . ' (#'. $this->MemberID . ')' : self::get_member_name($this->MemberID);
132 }
133
134 function getItemTitle() {
135 if ($this->getField('ItemTitle')) return $this->getField('ItemTitle');
136 if ($this->ItemID) {
137 if ($this->Class && class_exists($this->Class) && $item = DataObject::get_by_id($this->Class, $this->ItemID)) return sprintf('%s (#%d)', $item->Title, $this->ItemID);
138 return sprintf('(#%d)', $this->ItemID);
139 }
140 return '';
141 }
142
143 function fieldLabels($relations = true) {
144 $labels = parent::fieldLabels($relations);
145 $labels['ClassTitle'] = _t('LogItem.ClassTitle', 'Class');
146 $labels['LastEdited'] = _t('LogItem.LastEdited', 'Date');
147 $labels['ActionTitle'] = _t('LogItem.ActionTitle', 'Action');
148 $labels['MemberTitle'] = _t('LogItem.MemberTitle', 'Member');
149 $labels['ItemTitle'] = _t('LogItem.ItemTitle', 'Item');
150 return $labels;
151 }
152 }
153
[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.
-