1 <?php
2
3 4 5 6 7 8
9 class ImportLog extends DataObject {
10
11 static $db = array(
12 'StartTime' => 'SS_Datetime',
13 'EndTime' => 'SS_Datetime',
14 'CatalogDate' => 'SS_Datetime',
15 'Status' => "Enum('process,ok,error')",
16 'StatusMessage' => 'Text'
17 );
18
19 static $has_many = array(
20 'Items' => 'ImportLog_Item'
21 );
22
23 static $searchable_fields = array(
24
25 'Status',
26 );
27
28 static $summary_fields = array(
29 'StartTime',
30 'Duration',
31 'TextStatus',
32 'StatusMessage',
33 'CatalogDate',
34 );
35
36 static $default_sort = 'ID DESC';
37
38 39 40 41 42 43
44 static function get_last_log() {
45 return DataObject::get_one('ImportLog', '', true, 'ID DESC');
46 }
47
48 static function optimize_log_tables($max_log_count) {
49 $max_log_count -= 1;
50 $oldImportLogs = DataObject::get('ImportLog', '', 'ID DESC', '', "$max_log_count,100");
51 if ($oldImportLogs) {
52 foreach($oldImportLogs as $oldImportLog) {
53 $oldImportLog->delete();
54 }
55 }
56 DB::Query("OPTIMIZE TABLE `ImportLog_Item`");
57 DB::Query("OPTIMIZE TABLE `ImportLog`");
58 }
59
60 function fieldLabels($includerelations = true) {
61 $labels = parent::fieldLabels($includerelations);
62 $labels['LastEdited'] = _t('ImportLog.LastEdited', 'Last Edited');
63 $labels['Duration'] = _t('ImportLog.Duration', 'Duration');
64 $labels['TextStatus'] = _t('ImportLog.Status', 'Status');
65 return $labels;
66 }
67
68 function populateDefaults() {
69 parent::populateDefaults();
70 $this->StartTime = date('Y-m-d H:i:s');
71 $this->Status = 'process';
72 $this->StatusMessage = _t('ImportLog.ImportStart', 'Import Start');
73 }
74
75 function getCMSFields() {
76 $fields = new FieldSet();
77 $fields->push(new LiteralField('LogTextResult', $this->renderWith('ImportLog')));
78 return $fields;
79 }
80
81 82 83 84 85 86 87
88 function addLog($message, $status='message') {
89 $item = new ImportLog_Item();
90 $item->Message = $message;
91 $item->Status = $status;
92 $item->ImportLogID = $this->ID;
93 $item->write();
94 }
95
96 97 98 99 100 101 102
103 function setStatusType($type, $message) {
104 $this->Status = $type;
105 $this->StatusMessage = $message;
106 $this->write();
107 }
108
109 110 111 112 113
114 function Duration() {
115 $end = $this->EndTime ? $this->EndTime : $this->LastEdited;
116
117 return gmdate('H:i:s', strtotime($end) - strtotime($this->StartTime));
118 }
119
120 121 122 123 124
125 function TextStatus() {
126 return _t('ImportLog.Status_' . $this->Status, $this->Status);
127 }
128
129 function onBeforeWrite() {
130 parent::onBeforeWrite();
131 if (!$this->EndTime && $this->Status != 'process') {
132 $this->EndTime = date('Y-m-d H:i:s');
133 }
134 }
135
136 function onBeforeDelete() {
137 parent::onBeforeDelete();
138
139 if ($this->Items()->Count()) {
140 foreach($this->Items() as $item) {
141 $item->delete();
142 }
143 }
144 }
145
146 function canEdit() {
147 return false;
148 }
149 }
150
151 152 153
154 class ImportLog_Item extends DataObject {
155 static $db = array(
156 'Status' => "Enum('message,warning,error')",
157 'Message' => 'Text'
158 );
159
160 static $has_one = array(
161 'ImportLog' => 'ImportLog'
162 );
163 }
[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.
-