public function getCMSFields($params = null)
 {
     Requirements::css(DATACHANGE_PATH . '/css/datachange-tracker.css');
     $fields = FieldList::create(ToggleCompositeField::create('Details', 'Details', array(ReadonlyField::create('ChangeType', 'Type of change'), ReadonlyField::create('ClassType', 'Record Class'), ReadonlyField::create('ClassID', 'Record ID'), ReadonlyField::create('ObjectTitle', 'Record Title'), ReadonlyField::create('Created', 'Modification Date'), ReadonlyField::create('Stage', 'Stage'), ReadonlyField::create('User', 'User', $this->getMemberDetails()), ReadonlyField::create('CurrentURL', 'URL'), ReadonlyField::create('Referer', 'Referer'), ReadonlyField::create('RemoteIP', 'Remote IP'), ReadonlyField::create('Agent', 'Agent')))->setStartClosed(false)->addExtraClass('datachange-field'), ToggleCompositeField::create('RawData', 'Raw Data', array(ReadonlyField::create('Before'), ReadonlyField::create('After'), ReadonlyField::create('GetVars'), ReadonlyField::create('PostVars')))->setStartClosed(false)->addExtraClass('datachange-field'));
     if (strlen($this->Before)) {
         $before = Object::create($this->ClassType, unserialize($this->Before), true);
         $after = Object::create($this->ClassType, unserialize($this->After), true);
         $diff = DataDifferencer::create($before, $after);
         $diffed = $diff->diffedData();
         $diffText = '';
         $changedFields = array();
         foreach ($diffed->toMap() as $field => $prop) {
             $changedFields[] = $readOnly = ReadonlyField::create('ChangedField' . $field, $field, $prop);
             $readOnly->dontEscape = true;
             $readOnly->addExtraClass('datachange-field');
         }
         $fields->insertBefore(ToggleCompositeField::create('FieldChanges', 'Changed Fields', $changedFields)->setStartClosed(false)->addExtraClass('datachange-field'), 'RawData');
     }
     $fields = $fields->makeReadonly();
     return $fields;
 }
コード例 #2
0
 public function getCMSFields($params = null)
 {
     Requirements::css(DATACHANGE_PATH . '/css/datachange-tracker.css');
     $fields = FieldList::create(ToggleCompositeField::create('Details', 'Details', array(ReadonlyField::create('ChangeType', 'Type of change'), ReadonlyField::create('ClassType', 'Record Class'), ReadonlyField::create('ClassID', 'Record ID'), ReadonlyField::create('ObjectTitle', 'Record Title'), ReadonlyField::create('Created', 'Modification Date'), ReadonlyField::create('Stage', 'Stage'), ReadonlyField::create('User', 'User', $this->getMemberDetails()), ReadonlyField::create('CurrentURL', 'URL'), ReadonlyField::create('Referer', 'Referer'), ReadonlyField::create('RemoteIP', 'Remote IP'), ReadonlyField::create('Agent', 'Agent')))->setStartClosed(false)->addExtraClass('datachange-field'), ToggleCompositeField::create('RawData', 'Raw Data', array(ReadonlyField::create('Before'), ReadonlyField::create('After'), ReadonlyField::create('GetVars'), ReadonlyField::create('PostVars')))->setStartClosed(false)->addExtraClass('datachange-field'));
     if (strlen($this->Before)) {
         $before = Object::create($this->ClassType, json_decode($this->Before, true), true);
         $after = Object::create($this->ClassType, json_decode($this->After, true), true);
         $diff = DataDifferencer::create($before, $after);
         // The solr search service injector dependency causes issues with comparison, since it has public variables that are stored in an array.
         $diff->ignoreFields(array('searchService'));
         $diffed = $diff->diffedData();
         $diffText = '';
         $changedFields = array();
         foreach ($diffed->toMap() as $field => $prop) {
             if (is_object($prop)) {
                 continue;
             }
             $changedFields[] = $readOnly = ReadonlyField::create('ChangedField' . $field, $field, $prop);
             $readOnly->dontEscape = true;
             $readOnly->addExtraClass('datachange-field');
         }
         $fields->insertBefore(ToggleCompositeField::create('FieldChanges', 'Changed Fields', $changedFields)->setStartClosed(false)->addExtraClass('datachange-field'), 'RawData');
     }
     // Flags fields that cannot be rendered with 'forTemplate'. This prevents bugs where
     // WorkflowService (of AdvancedWorkflow Module) and BlockManager (of Sheadawson/blocks module) get put
     // into a field and break the page.
     $fieldsToRemove = array();
     foreach ($fields->dataFields() as $field) {
         $value = $field->Value();
         if ($value && is_object($value)) {
             if ($value instanceof Object && !$value->hasMethod('forTemplate') || !method_exists($value, 'forTemplate')) {
                 $field->setValue('[Missing ' . get_class($value) . '::forTemplate]');
             }
         }
     }
     $fields = $fields->makeReadonly();
     return $fields;
 }