/
GridFieldExportAction.php
139 lines (127 loc) · 3.96 KB
/
GridFieldExportAction.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<?php
namespace Symbiote\AdvancedWorkflow\Forms\GridField;
use SilverStripe\Control\Controller;
use SilverStripe\Control\Director;
use SilverStripe\Core\Config\Config;
use SilverStripe\Forms\GridField\AbstractGridFieldComponent;
use SilverStripe\Forms\GridField\GridField;
use SilverStripe\Forms\GridField\GridField_ActionProvider;
use SilverStripe\Forms\GridField\GridField_ColumnProvider;
use SilverStripe\Forms\GridField\GridField_FormAction;
use SilverStripe\ORM\DataObject;
use SilverStripe\Security\Permission;
use SilverStripe\View\ArrayData;
use SilverStripe\View\SSViewer;
use Symbiote\AdvancedWorkflow\Admin\AdvancedWorkflowAdmin;
/**
* This class is a {@link GridField} component that adds an export action for
* WorkflowDefinition objects shown in GridFields.
*
* @license BSD License (http://silverstripe.org/bsd-license/)
* @package advancedworkflow
*/
class GridFieldExportAction extends AbstractGridFieldComponent 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 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('exportrecord');
}
/**
*
* @param GridField $gridField
* @param DataObject $record
* @param string $columnName
* @return string - the HTML for the column
*/
public function getColumnContent($gridField, $record, $columnName)
{
// Disable the export icon if current user doesn't have access to view CMS Security settings
if (!Permission::check('CMS_ACCESS_SecurityAdmin')) {
return '';
}
$field = GridField_FormAction::create(
$gridField,
'ExportRecord' . $record->ID,
false,
"exportrecord",
array('RecordID' => $record->ID)
)
->addExtraClass('btn btn--no-text btn--icon-md font-icon-export');
$segment1 = Director::baseURL();
$segment2 = Config::inst()->get(AdvancedWorkflowAdmin::class, 'url_segment');
$segment3 = str_replace('\\', '-', $record->getClassName() ?? '');
$data = new ArrayData(array(
'Link' => Controller::join_links($segment1, 'admin', $segment2, $segment3, 'export', $record->ID),
'ExtraClass' => $field->extraClass(),
));
$template = SSViewer::get_templates_by_class($this, '', __CLASS__);
return $data->renderWith($template);
}
/**
* 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)
{
}
}