Source of file BaseAction.php
Size: 3,253 Bytes - Last Modified: 2021-12-23T10:53:31+00:00
/var/www/docs.ssmods.com/process/src/src/Forms/BaseAction.php
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 | <?php namespace TractorCow\Fluent\Forms; use SilverStripe\Core\Injector\Injectable; use SilverStripe\Forms\GridField\GridField; use SilverStripe\Forms\GridField\GridField_ActionMenuItem; use SilverStripe\Forms\GridField\GridField_ActionProvider; use SilverStripe\Forms\GridField\GridField_FormAction; use SilverStripe\ORM\DataObject; use TractorCow\Fluent\Model\Locale; /** * Base action for acting on a single locale / record pair * * Note: Any of these actions can be applied either to a list of locales * on a single record, or a list of records in the current locale. */ abstract class BaseAction implements GridField_ActionProvider, GridField_ActionMenuItem { use Injectable; /** * @param GridField $gridField * @param DataObject $record * @param Locale $locale * @param string $columnName * @return GridField_FormAction|null */ abstract protected function getButtonAction($gridField, DataObject $record, Locale $locale, $columnName); /** * Check if this item is enabled for the given record in locale * * @param DataObject $record * @param Locale $locale * @return mixed */ abstract protected function appliesToRecord(DataObject $record, Locale $locale); /** * @param GridField $gridField * @param DataObject $record Row record * @param string $columnName * @return array|null the attributes for the action */ public function getExtraData($gridField, $record, $columnName) { list($localisedRecord, $locale) = $this->getRecordAndLocale($gridField, $record); $field = $this->getButtonAction($gridField, $localisedRecord, $locale, $columnName); if ($field) { return $field->getAttributes(); } return null; } /** * @param GridField $gridField * @param DataObject $record Row record * @param string $columnName * @return null|string */ public function getGroup($gridField, $record, $columnName) { list($localisedRecord, $locale) = $this->getRecordAndLocale($gridField, $record); if ($locale instanceof Locale && $this->appliesToRecord($localisedRecord, $locale)) { return GridField_ActionMenuItem::DEFAULT_GROUP; } return null; } /** * Given a gridfield, and either an ID or record, return a list with * both the record being localised, and the locale object * * @param GridField $gridField Gridfield * @param DataObject $rowRecord Record in row * @return array 2 length array with localised record, and locale as adjacent items */ protected function getRecordAndLocale(GridField $gridField, DataObject $rowRecord) { $baseRecord = $gridField->getForm()->getRecord(); // Gridfield is list of locales for a single localised object // E.g. list of locales for a single record if ($rowRecord instanceof Locale) { return [$baseRecord, $rowRecord]; } // Gridfield is list of localised object in current locale // E.g. list of blog posts in one locale $locale = Locale::getCurrentLocale(); return [$rowRecord, $locale]; } } |