removeRelation = $unlinkRelation; } /** * Add a column 'Delete' * * @param type $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::createTag() * * @param GridField $gridField * @param DataObject $record * @param string $columnName * @return array */ public function getColumnAttributes($gridField, $record, $columnName) { return array(); } /** * 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 type $gridField * @return type */ 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('deleterecord', 'unlinkrelation'); } /** * * @param GridField $gridField * @param DataObject $record * @param string $columnName * @return string - the HTML for the column */ public function getColumnContent($gridField, $record, $columnName) { if($this->removeRelation) { $field = Object::create('GridField_FormAction', $gridField, 'UnlinkRelation'.$record->ID, false, "unlinkrelation", array('RecordID' => $record->ID)) ->addExtraClass('gridfield-button-unlink') ->setAttribute('title', _t('GridAction.UnlinkRelation', "Unlink")) ->setAttribute('data-icon', 'chain--minus'); } else { if(!$record->canDelete()) { return; } $field = Object::create('GridField_FormAction', $gridField, 'DeleteRecord'.$record->ID, false, "deleterecord", array('RecordID' => $record->ID)) ->addExtraClass('gridfield-button-delete') ->setAttribute('title', _t('GridAction.Delete', "Delete")) ->setAttribute('data-icon', 'decline'); } return $field->Field(); } /** * 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 == 'deleterecord' || $actionName == 'unlinkrelation') { $item = $gridField->getList()->byID($arguments['RecordID']); if(!$item) { return; } if($actionName == 'deleterecord' && !$item->canDelete()) { throw new ValidationException(_t('GridFieldAction_Delete.DeletePermissionsFailure',"No delete permissions"),0); } $gridField->getList()->remove($item); } } }