/**
  * Attributes for the element containing the content returned by {@link getColumnContent()}.
  *
  * @param  GridField $gridField
  * @param  DataObject $record displayed in this row
  * @param  string $columnName
  *
  * @return array
  */
 public function getColumnAttributes($gridField, $record, $columnName)
 {
     Utilities::include_requirements();
     $gridField->addExtraClass('ss-gridfield-timeline');
     $iconClasses = array_merge([$this->getColumnForIcon($columnName), 'TimelineIcon'], $this->iconClasses);
     if ($this->addAttributesFromMethodOnRecord) {
         return array_merge($iconClasses, $record->{$this->addAttributesFromMethodOnRecord});
     }
     return ['class' => implode(' ', array_unique($iconClasses))];
 }
 public function handleItem($gridField, $request)
 {
     $detailForm = $gridField->Config->getComponentByType('GridFieldDetailForm');
     if (!$detailForm) {
         throw new Exception('A GridFieldDetailForm is required to use a modal via this component');
     }
     Utilities::include_requirements();
     $detailForm->setTemplate('GridField_Modal_View');
     $itemEditCallback = $detailForm->getItemEditFormCallback();
     $link = $this->Link($gridField);
     $detailForm->setItemEditFormCallback(function ($form, $controller) use($itemEditCallback, $link) {
         $form->setAttribute('data-modal-link', $link);
         $nonModalLink = explode('/', $controller->Link());
         array_pop($nonModalLink);
         $nonModalLink = implode('/', $nonModalLink);
         $form->setAttribute('data-non-modal-link', $nonModalLink);
         if ($itemEditCallback) {
             $itemEditCallback($form, $controller);
         }
     });
     return $detailForm->handleItem($gridField, $request);
 }
 public function getColumnContent($gridField, $record, $columnName)
 {
     $flag = $this->getFlag($record, $gridField);
     if (!$this->checkPermissions($flag, $record, $gridField)) {
         return '';
     }
     if (static::$include_font_css) {
         Requirements::css(singleton('env')->get('CDN.font-awesome', 'https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css'));
     }
     Utilities::include_requirements();
     $titles = $this->titles;
     $title = '';
     $icon = '';
     if (is_array($this->field) && isset($this->field['title'])) {
         if (is_callable($this->field['title'])) {
             $titles = call_user_func_array($this->replaceStringWithRecordInCallable($this->field['title'], $record), [$flag, $record, $gridField]);
         } else {
             if (is_array($this->field['title'])) {
                 $titles = $this->field['title'];
             } else {
                 $title = $this->field['title'];
             }
         }
     }
     if (!$title && count($titles)) {
         if ($flag) {
             $title = isset($titles['true']) && isset($titles['true']['title']) ? $titles['true']['title'] : '';
             $icon = isset($titles['true']) && isset($titles['true']['icon']) ? $titles['true']['icon'] : '';
         } else {
             $title = isset($titles['false']) && isset($titles['false']['title']) ? $titles['false']['title'] : '';
             $icon = isset($titles['false']) && isset($titles['false']['icon']) ? $titles['false']['icon'] : '';
         }
     }
     $action = $this->getActions($gridField);
     return GridField_FormAction::create($gridField, $action[0] . $record->ID, $title, $action[0], ['RecordID' => $record->ID])->addExtraClass('gridfield-button-toggle-action')->setAttribute('title', $title)->setAttribute('data-icon', $icon)->Field();
 }
 public function getHTMLFragments($grid)
 {
     GridFieldExtensions::include_requirements();
     Utilities::include_requirements();
     $data = ArrayData::create(['Title' => $this->getTitle(), 'Link' => $grid->Link($this->urlSegment ?: 'add-existing-search')]);
     if ($this->async) {
         $grid->addExtraClass('ss-gridfield-add-existing-picker_async');
     }
     return [$this->fragment => $data->renderWith(['GridField_AddExistingPicker', 'GridFieldAddExistingSearchButton'])];
 }
 protected function getSelectField($record, $grid)
 {
     $list = $record->{$this->relation}();
     if (!$list || !singleton($list->dataClass())->canView() || !$record->exists()) {
         return '';
     }
     Utilities::include_requirements();
     if (!$this->_saveSourceList) {
         $this->_saveSourceList = DataList::create($list->dataClass())->map()->toArray();
     }
     return Object::create('Select2Field', $this->relation, $list, $this->sourceList ?: DataList::create($list->dataClass()), null, $this->referenceField, $this->valueField)->addExtraClass('ss-gridfield--tags-column--selector')->setAttribute('multiple', true)->setAttribute('data-tags', true)->setAttribute('data-gf-filter-link', Controller::join_links($grid->Link(), 'tag', $this->relation, 'filter', '{{ tag }}'))->setAttribute('data-gf-new-link', Controller::join_links($grid->Link(), 'tag', $this->relation, 'new', $record->ID, '{{ tag }}'))->setPrefetch(50)->requireSelection(!$this->allowNewItems);
 }
 public function getHTMLFragments($grid)
 {
     Utilities::include_requirements();
     return [$this->targetFragment => ArrayData::create(['Title' => $this->resetButtonTitle, 'Relation' => $this->relation])->renderWith('GridField_HasOneSelector')];
 }
 public function getHTMLFragments($grid)
 {
     if (!$this->canCreate($grid)) {
         return [];
     }
     $this->workingGrid = $grid;
     $grid->addExtraClass('ss-gridfield-add-inline-extended--table');
     $grid->setAttribute('data-prepend', $this->prepend);
     $fragments = [$this->getFragment() => $this->getButtonFragment($grid)];
     if (!$this->loadViaAjax) {
         \Requirements::javascript(THIRDPARTY_DIR . '/javascript-templates/tmpl.js');
         $fragments['after'] = isset($fragments['after']) ? $fragments['after'] . $this->getRowTemplate($grid) : $this->getRowTemplate($grid);
     }
     Utilities::include_requirements();
     return $fragments;
 }
 /**
  * @inheritdoc
  */
 public function getHTMLFragments($gridField)
 {
     $this->stockFormats($gridField);
     if (empty($this->formats)) {
         return [];
     }
     Utilities::include_requirements();
     $currentFormat = $this->getFormatState($gridField)->current;
     $formats = ArrayList::create();
     $icon = '<i class="ss-gridfield--format-switcher--button-icon"></i><i class="ss-gridfield--format-switcher--button-icon"></i><i class="ss-gridfield--format-switcher--button-icon"></i>';
     $action = Button::create($gridField, 'unformatted', _t('GridField_FormatSwitcher.' . $this->unformatted['title'], $this->unformatted['title']), $this->urlSegment, $this->unformatted['state']);
     $action->ButtonContent = $icon . $action->Title();
     $action->addExtraClass('ss-gridfield--format-switcher--button ss-gridfield--format-switcher--button_' . $this->unformatted['state']);
     if ($currentFormat == $this->unformatted['state']) {
         $action = $action->addExtraClass('ss-gridfield--format-switcher--button_active active')->performDisabledTransformation();
     }
     $formats->push(ArrayData::create(['Button' => $action]));
     foreach ($this->formats as $formatState => $format) {
         if (is_array($format)) {
             $title = empty($format['title']) ? FormField::name_to_label($formatState) : $format['title'];
         } else {
             if (is_callable($format)) {
                 $title = FormField::name_to_label($formatState);
             } else {
                 $title = $format->getFormatTitle();
             }
         }
         $action = Button::create($gridField, $formatState, $title, $this->urlSegment, $formatState);
         $action->ButtonContent = $icon . $action->Title();
         $action->addExtraClass('ss-gridfield--format-switcher--button ss-gridfield--format-switcher--button_' . str_replace(' ', '-', $formatState));
         if ($formatState == $currentFormat) {
             $action = $action->addExtraClass('ss-gridfield--format-switcher--button_active active')->performDisabledTransformation();
         }
         $formats->push(ArrayData::create(['Button' => $action]));
     }
     return [$this->targetFragment => ArrayData::create(['Formats' => $formats])->renderWith('GridField_FormatSwitcher')];
 }
 public function getHTMLFragments($grid)
 {
     \Requirements::javascript(THIRDPARTY_DIR . '/javascript-templates/tmpl.js');
     Utilities::include_requirements();
 }
 public function format(GridField $gridField)
 {
     Utilities::include_requirements();
     $gridField->addExtraClass('ss-gridfield-timeline');
 }