Passed
Branch ss4 (364df2)
by Simon
01:53
created

GridfieldInviteResendAction::getColumnAttributes()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 3
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Firesphere\StripeSlack\Actions;
4
5
use SilverStripe\Control\Controller;
6
use SilverStripe\Forms\GridField\GridField;
7
use SilverStripe\Forms\GridField\GridField_ActionProvider;
8
use SilverStripe\Forms\GridField\GridField_ColumnProvider;
9
use SilverStripe\Forms\GridField\GridField_FormAction;
10
use SilverStripe\ORM\FieldType\DBHTMLText;
11
use SilverStripe\SiteConfig\SiteConfig;
12
use Firesphere\StripeSlack\Model\SlackInvite;
13
use SilverStripe\ORM\ValidationException;
14
15
/**
16
 * class GridfieldInviteResendAction adds the resend button to the CMS for easy re-inviting
17
 */
18
class GridfieldInviteResendAction implements GridField_ColumnProvider, GridField_ActionProvider
19
{
20
21
    /**
22
     * @param GridField $gridField
23
     * @param array $columns
24
     */
25
    public function augmentColumns($gridField, &$columns)
26
    {
27
        if (!in_array('Actions', $columns, true)) {
28
            $columns[] = 'Actions';
29
        }
30
    }
31
32
    /**
33
     * {@inheritDoc}
34
     */
35
    public function getColumnAttributes($gridField, $record, $columnName)
36
    {
37
        return array('class' => 'col-buttons');
38
    }
39
40
    /**
41
     * {@inheritDoc}
42
     */
43
    public function getColumnMetadata($gridField, $columnName)
44
    {
45
        if ($columnName === 'Actions') {
46
            return array('title' => '');
47
        }
48
    }
49
50
    /**
51
     * {@inheritDoc}
52
     */
53
    public function getColumnsHandled($gridField)
54
    {
55
        return array('Actions');
56
    }
57
58
    /**
59
     * @param GridField $gridField
60
     * @param SlackInvite $record
61
     * @param string $columnName
62
     * @return DBHTMLText
63
     */
64
    public function getColumnContent($gridField, $record, $columnName)
65
    {
66
        $config = SiteConfig::current_site_config();
67
        // No point in showing the re-send button, if there's no token
68
        if ($config->SlackToken) {
69
            $field = $this->getGridField($gridField, $record);
70
71
            if (!$record->Invited) {
72
                $field
73
                    ->setAttribute('title', 'Retry invite')
74
                    ->setAttribute('data-icon', 'arrow-circle-135-left')
75
                    ->setDescription(_t('GridfieldInviteResendAction.Resend', 'Retry failed invitation'));
76
            } else {
77
                $field
78
                    ->setAttribute('title', 'Resend invite')
79
                    ->setAttribute('data-icon', 'arrow-circle-double')
80
                    ->setDescription('Resend invite');
81
            }
82
83
            return $field->Field();
84
        }
85
    }
86
87
    /**
88
     * {@inheritDoc}
89
     */
90
    public function getActions($gridField)
91
    {
92
        return array('resend');
93
    }
94
95
    /**
96
     * @param GridField $gridField
97
     * @param $actionName
98
     * @param $arguments
99
     * @param $data
100
     * @throws ValidationException
101
     */
102
    public function handleAction(GridField $gridField, $actionName, $arguments, $data)
103
    {
104
        if ($actionName === 'resend') {
105
            /** @var SlackInvite $item */
106
            $item = SlackInvite::get()->byID($arguments['RecordID']);
107
            if (!$item) {
108
                return;
109
            }
110
111
            $result = $item->resendInvite();
112
            if ($result) {
113
                Controller::curr()->getResponse()->setStatusCode(
114
                    200,
115
                    'User successfully invited.'
116
                );
117
            } else {
118
                Controller::curr()->getResponse()->setStatusCode(
119
                    200,
120
                    $result
121
                );
122
            }
123
        }
124
    }
125
126
    /**
127
     * @param $gridField
128
     * @param $record
129
     * @return GridField_FormAction
130
     */
131
    private function getGridField($gridField, $record)
132
    {
133
        $field = GridField_FormAction::create(
134
            $gridField,
135
            'Resend' . $record->ID,
136
            false,
137
            'resend',
138
            ['RecordID' => $record->ID]
139
        )->addExtraClass('gridfield-button-resend');
140
141
        return $field;
142
    }
143
}
144