Source of file DisplayAsTimeline.php
Size: 4,232 Bytes - Last Modified: 2021-12-23T10:04:57+00:00
/var/www/docs.ssmods.com/process/src/code/Formats/DisplayAsTimeline.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 | <?php namespace Milkyway\SS\GridFieldUtils; /** * Milkyway Multimedia * DisplayAsTimeline.php * * @package milkyway-multimedia/ss-gridfield-utils * @author Mellisa Hankins <mell@milkywaymultimedia.com.au> */ use DataObject; use GridField; use Milkyway\SS\GridFieldUtils\Common\FormatsGridField; use Milkyway\SS\GridFieldUtils\Contracts\Format; use GridField_ColumnProvider; class DisplayAsTimeline implements GridField_ColumnProvider, Format { use FormatsGridField; /** @var string */ protected $iconField; /** @var array */ protected $iconClasses; /** @var string */ protected $addAttributesFromMethodOnRecord; public $formatState = 'timeline'; public $formatTitle = 'Timeline'; public function __construct($iconField = '', $iconClasses = [], $addAttributesFromMethodOnRecord = null) { $this->iconField = $iconField; $this->iconClasses = $iconClasses; $this->addAttributesFromMethodOnRecord = $addAttributesFromMethodOnRecord; } /** * Modify the list of columns displayed in the table. * * @see {@link GridFieldDataColumns->getDisplayFields()} * @see {@link GridFieldDataColumns}. * * @param GridField $gridField * @param array $columns - List reference of all column names. */ public function augmentColumns($gridField, &$columns) { if (!in_array('TimelineIcon', $columns)) { array_unshift($columns, 'TimelineIcon'); } } /** * Names of all columns which are affected by this component. * * @param GridField $gridField * * @return array */ public function getColumnsHandled($gridField) { return ['TimelineIcon']; } /** * HTML for the column, content of the <td> element. * * @param GridField $gridField * @param DataObject $record - Record displayed in this row * @param string $columnName * * @return string - HTML for the column. Return NULL to skip. */ public function getColumnContent($gridField, $record, $columnName) { $iconField = $this->getColumnForIcon($columnName); return '<div class="icon-timeline">' . $record->$iconField . '</div>'; } /** * 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) { $this->formatIfNoSwitcherAvailable($gridField); $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)), ]; } /** * Additional metadata about the column which can be used by other components, * e.g. to set a title for a search column header. * * @param GridField $gridField * @param string $columnName * * @return array - Map of arbitrary metadata identifiers to their values. */ public function getColumnMetadata($gridField, $columnName) { if ($columnName == 'TimelineIcon') { return [ 'title' => '', ]; } } /** * @param $columnName * * @return mixed */ protected function getColumnForIcon($columnName) { $iconField = $this->iconField ?: $columnName; return $iconField; } public function getFormatTitle() { return $this->formatTitle; } public function getFormatState() { return $this->formatState; } public function format(GridField $gridField) { Utilities::include_requirements(); $gridField->addExtraClass('ss-gridfield-timeline'); } public function unformat(GridField $gridField) { $gridField->removeExtraClass('ss-gridfield-timeline'); } } |