Source of file GridFieldSoftDeleteAction.php
Size: 4,153 Bytes - Last Modified: 2021-12-23T10:01:30+00:00
/var/www/docs.ssmods.com/process/src/code/GridFieldSoftDeleteAction.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 | <?php use SilverStripe\ORM\DataList; use SilverStripe\ORM\HasManyList; use SilverStripe\ORM\ManyManyList; use SilverStripe\ORM\ValidationException; use SilverStripe\Forms\GridField\GridField; use SilverStripe\Forms\GridField\GridField_FormAction; use SilverStripe\Forms\GridField\GridField_ActionProvider; use SilverStripe\Forms\GridField\GridField_ColumnProvider; /** * A GridField action to handle soft delete */ class GridFieldSoftDeleteAction implements GridField_ColumnProvider, GridField_ActionProvider { /** * Add a column 'Delete' * * @param GridField $gridField * @param array $columns */ public function augmentColumns($gridField, &$columns) { if (!in_array('Actions', $columns)) { $columns[] = 'Actions'; } } /** * Return any special attributes that will be used for FormField::create_tag() * * @param GridField $gridField * @param DataObject $record * @param string $columnName * @return array */ public function getColumnAttributes($gridField, $record, $columnName) { return array('class' => 'grid-field__col-compact'); } /** * Add the title * * @param GridField $gridField * @param string $columnName * @return array */ public function getColumnMetadata($gridField, $columnName) { if ($columnName == 'Actions') { return array('title' => ''); } } /** * Which columns are handled by this component * * @param GridField $gridField * @return array */ public function getColumnsHandled($gridField) { return array('Actions'); } /** * Which GridField actions are this component handling * * @param GridField $gridField * @return array */ public function getActions($gridField) { return array('softdeleterecord'); } /** * @param GridField $gridField * @param DataObject $record * @param string $columnName * @return string - the HTML for the column */ public function getColumnContent($gridField, $record, $columnName) { if (!$record->canDelete()) { return; } $field = GridField_FormAction::create( $gridField, 'SoftDeleteRecord' . $record->ID, false, "softdeleterecord", array('RecordID' => $record->ID) ) ->addExtraClass('gridfield-button-delete btn--icon-md font-icon-trash-bin btn--no-text grid-field__icon-action') ->setAttribute('title', _t(__CLASS__ . '.Delete', "Delete")) ->setDescription(_t(__CLASS__ . '.DELETE_DESCRIPTION', 'Delete')); return $field->Field(); } /** * @param GridField $gridField * @return DataList */ protected function getListFromGridField($gridField) { return $gridField->getList(); } /** * Handle the actions and apply any changes to the GridField * * @param GridField $gridField * @param string $actionName * @param mixed $arguments * @param array $data - form data * @return void */ public function handleAction( GridField $gridField, $actionName, $arguments, $data ) { if ($actionName == 'softdeleterecord') { $item = $this->getListFromGridField($gridField)->byID($arguments['RecordID']); if (!$item) { return; } if (!$item->canDelete()) { throw new ValidationException( _t( 'GridFieldAction_Delete.DeletePermissionsFailure', "No delete permissions" ), 0 ); } $item->softDelete(); $list = $gridField->getList(); // Remove from the list if it's a non destructive operation if ($list instanceof HasManyList || $list instanceof ManyManyList) { $list->remove($item); } } } } |