Passed
Push — 1.11.x ( fc0059...7816ed )
by Julito
14:04
created

ExerciseSignaturePlugin::getSignature()   A

Complexity

Conditions 5
Paths 3

Size

Total Lines 14
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
eloc 7
c 1
b 0
f 0
nc 3
nop 2
dl 0
loc 14
rs 9.6111
1
<?php
2
3
/* For licensing terms, see /license.txt */
4
5
class ExerciseSignaturePlugin extends Plugin
6
{
7
    public function __construct()
8
    {
9
        parent::__construct(
10
            '0.1',
11
            'Julio Montoya',
12
            [
13
                'tool_enable' => 'boolean',
14
            ]
15
        );
16
        $this->isAdminPlugin = true;
17
    }
18
19
    /**
20
     * @return $this
21
     */
22
    public static function create()
23
    {
24
        static $instance = null;
25
26
        return $instance ? $instance : $instance = new self();
27
    }
28
29
    public static function saveSignature($userId, $trackInfo, $file)
30
    {
31
        if (false === self::validateSignatureAccess($userId, $trackInfo)) {
32
            return false;
33
        }
34
35
        $signature = self::getSignature($userId, $trackInfo);
36
        if (false !== $signature) {
37
            return false;
38
        }
39
40
        if (empty($file)) {
41
            return false;
42
        }
43
44
        $params = [
45
            'item_id' => $trackInfo['exe_id'],
46
            'extra_signature' => $file,
47
        ];
48
        $extraFieldValue = new ExtraFieldValue('track_exercise');
49
        $extraFieldValue->saveFieldValues(
50
            $params,
51
            true
52
        );
53
54
        $signature = self::getSignature($userId, $trackInfo);
55
        if (false !== $signature) {
56
            return true;
57
        }
58
59
        return true;
60
    }
61
62
    public static function validateSignatureAccess($userId, $trackInfo)
63
    {
64
        $userId = (int) $userId;
65
        if (isset($trackInfo['exe_id']) && isset($trackInfo['exe_user_id']) &&
66
            !empty($trackInfo['exe_id']) && !empty($trackInfo['exe_user_id']) &&
67
            $trackInfo['status'] !== 'incomplete'
68
        ) {
69
            if ($userId === (int) $trackInfo['exe_user_id']) {
70
                return true;
71
            }
72
        }
73
74
        return false;
75
    }
76
77
    public static function getSignature($userId, $trackInfo)
78
    {
79
        if (false === self::validateSignatureAccess($userId, $trackInfo)) {
80
            return false;
81
        }
82
83
        $extraFieldValue = new ExtraFieldValue('track_exercise');
84
        $result = $extraFieldValue->get_values_by_handler_and_field_variable($trackInfo['exe_id'], 'signature');
85
86
        if ($result && isset($result['value']) && !empty($result['value'])) {
87
            return $result['value'];
88
        }
89
90
        return false;
91
    }
92
93
    /**
94
     * Get the plugin Name.
95
     *
96
     * @return string
97
     */
98
    public function get_name()
99
    {
100
        return 'exercise_signature';
101
    }
102
103
    /**
104
     * Creates this plugin's related tables in the internal database.
105
     * Installs course fields in all courses.
106
     */
107
    public function install()
108
    {
109
        $extraField = new ExtraField('track_exercise');
110
        $extraFieldHandler = $extraField->get_handler_field_info_by_field_variable('signature_activated');
111
        $exists = $extraFieldHandler !== false;
112
113
        if (!$exists) {
114
            $extraField->save(
115
                [
116
                    'field_type' => 13, // checkbox yes/no
117
                    'variable' => 'signature_activated',
118
                    'display_text' => get_plugin_lang('SignatureActivated', 'ExerciseSignaturePlugin'),
119
                    'default_value' => null,
120
                    'field_order' => null,
121
                    'visible_to_self' => 1,
122
                    'changeable' => 1,
123
                    'filter' => null,
124
                ]
125
            );
126
        }
127
128
        $extraField = new ExtraField('exercise');
129
        $extraFieldHandler = $extraField->get_handler_field_info_by_field_variable('signature');
130
        $exists = $extraFieldHandler !== false;
131
132
        if (!$exists) {
133
            $extraField->save(
134
                [
135
                    'field_type' => 2, // textarea
136
                    'variable' => 'signature',
137
                    'display_text' => get_plugin_lang('Signature', 'ExerciseSignaturePlugin'),
138
                    'default_value' => null,
139
                    'field_order' => null,
140
                    'visible_to_self' => 1,
141
                    'changeable' => 1,
142
                    'filter' => null,
143
                ]
144
            );
145
        }
146
147
        $table = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
148
        $sql = "ALTER TABLE $table MODIFY COLUMN value LONGTEXT null;";
149
        Database::query($sql);
150
    }
151
152
    /**
153
     * Drops this plugins' related tables from the internal database.
154
     * Uninstalls course fields in all courses().
155
     */
156
    public function uninstall()
157
    {
158
        $extraField = new ExtraField('track_exercise');
159
        $fieldInfo = $extraField->get_handler_field_info_by_field_variable('signature_activated');
160
161
        if ($fieldInfo) {
162
            $extraField->delete($fieldInfo['id']);
163
        }
164
165
        $extraField = new ExtraField('exercise');
166
        $fieldInfo = $extraField->get_handler_field_info_by_field_variable('signature');
167
        if ($fieldInfo) {
168
            $extraField->delete($fieldInfo['id']);
169
        }
170
    }
171
}
172