LanguageAdmin   A
last analyzed

Complexity

Total Complexity 40

Size/Duplication

Total Lines 324
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 198
c 0
b 0
f 0
dl 0
loc 324
rs 9.2
wmc 40

9 Methods

Rating   Name   Duplication   Size   Complexity  
A render() 0 26 4
A getLanguageAdminFoot() 0 11 1
A __construct() 0 5 1
A write() 0 6 1
F getLanguageAdminClass() 0 116 22
A getLanguageAdminIndex() 0 25 4
A getInstance() 0 8 2
A getLanguageAdminPermissions() 0 18 1
A getLanguageAdminPages() 0 33 4

How to fix   Complexity   

Complex Class

Complex classes like LanguageAdmin often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use LanguageAdmin, and based on these observations, apply Extract Interface, too.

1
<?php
2
3
namespace XoopsModules\Modulebuilder\Files\Language;
4
5
use XoopsModules\Modulebuilder;
6
use XoopsModules\Modulebuilder\{Files,
7
    Constants
8
};
9
10
/*
11
 You may not change or alter any portion of this comment or credits
12
 of supporting developers from this source code or any supporting source code
13
 which is considered copyrighted (c) material of the original comment or credit authors.
14
15
 This program is distributed in the hope that it will be useful,
16
 but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18
 */
19
/**
20
 * modulebuilder module.
21
 *
22
 * @copyright       XOOPS Project (https://xoops.org)
23
 * @license         GNU GPL 2 (https://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
24
 *
25
 * @since           2.5.0
26
 *
27
 * @author          Txmod Xoops https://xoops.org 
28
 *                  Goffy https://myxoops.org
29
 *
30
 */
31
32
/**
33
 * Class LanguageAdmin.
34
 */
35
class LanguageAdmin extends Files\CreateFile
36
{
37
    /**
38
     * @var mixed
39
     */
40
    private $ld = null;
41
    /**
42
     * @var mixed
43
     */
44
    private $pc = null;
45
46
    /**
47
     * @public function constructor
48
     * @param null
49
     */
50
    public function __construct()
51
    {
52
        parent::__construct();
53
        $this->ld = LanguageDefines::getInstance();
54
        $this->pc = Modulebuilder\Files\CreatePhpCode::getInstance();
55
    }
56
57
    /**
58
     * @static function getInstance
59
     * @param null
60
     * @return LanguageAdmin
61
     */
62
    public static function getInstance()
63
    {
64
        static $instance = false;
65
        if (!$instance) {
66
            $instance = new self();
67
        }
68
69
        return $instance;
70
    }
71
72
    /**
73
     * @public function write
74
     * @param string $module
75
     * @param        $table
76
     * @param string $tables
77
     * @param string $filename
78
     */
79
    public function write($module, $table, $tables, $filename)
80
    {
81
        $this->setModule($module);
82
        $this->setTable($table);
83
        $this->setTables($tables);
84
        $this->setFileName($filename);
85
    }
86
87
    /**
88
     * @public function getLanguageAdminIndex
89
     * @param string $language
90
     * @param array  $tables
91
     * @return string
92
     */
93
    public function getLanguageAdminIndex($language, $tables)
94
    {
95
        $thereare  = '';
96
        $tableUser = 0;
97
        foreach (\array_keys($tables) as $t) {
98
            if (1 == (int)$tables[$t]->getVar('table_user')) {
99
                $tableUser = 1;
100
            }
101
            $tableName    = $tables[$t]->getVar('table_name');
102
            $stuTableName = \mb_strtoupper($tableName);
103
            $stlTableName = \mb_strtolower($tableName);
104
            $thereare     .= $this->ld->getDefine($language, "THEREARE_{$stuTableName}", "There are <span class='bold'>%s</span> {$stlTableName} in the database", true);
105
        }
106
        $ret = $this->ld->getBlankLine();
107
        $ret .= $this->pc->getPhpCodeIncludeDir('__DIR__', 'common', true);
108
        if ($tableUser) {
109
            $ret .= $this->pc->getPhpCodeIncludeDir('__DIR__', 'main', true);
110
        }
111
        $ret .= $this->ld->getBlankLine();
112
        $ret .= $this->ld->getAboveHeadDefines('Admin Index');
113
        $ret .= $this->ld->getDefine($language, 'STATISTICS', 'Statistics');
114
        $ret .= $this->ld->getAboveDefines('There are');
115
        $ret .= $thereare;
116
117
        return $ret;
118
    }
119
120
    /**
121
     * @public function getLanguageAdminPages
122
     * @param string $language
123
     * @param array  $tables
124
     * @return string
125
     */
126
    public function getLanguageAdminPages($language, $tables)
127
    {
128
        $ret = $this->ld->getAboveHeadDefines('Admin Files');
129
        $ret .= $this->ld->getAboveDefines('There aren\'t');
130
        foreach (\array_keys($tables) as $t) {
131
            $tableName    = $tables[$t]->getVar('table_name');
132
            $stuTableName = \mb_strtoupper($tableName);
133
            $stlTableName = \mb_strtolower($tableName);
134
            $ret          .= $this->ld->getDefine($language, "THEREARENT_{$stuTableName}", "There aren't {$stlTableName}", true);
135
        }
136
        $ret .= $this->ld->getAboveDefines('Save/Delete');
137
        $ret .= $this->ld->getDefine($language, 'FORM_OK', 'Successfully saved');
138
        $ret .= $this->ld->getDefine($language, 'FORM_DELETE_OK', 'Successfully deleted');
139
        $ret .= $this->ld->getDefine($language, 'FORM_SURE_DELETE', "Are you sure to delete: <b><span style='color : Red;'>%s </span></b>", true);
140
        $ret .= $this->ld->getDefine($language, 'FORM_SURE_RENEW', "Are you sure to update: <b><span style='color : Red;'>%s </span></b>", true);
141
        $ret .= $this->ld->getAboveDefines('Buttons');
142
143
        foreach (\array_keys($tables) as $t) {
144
            $tableSoleName    = $tables[$t]->getVar('table_solename');
145
            $stuTableSoleName = \mb_strtoupper($tableSoleName);
146
            $ucfTableSoleName = \ucfirst($tableSoleName);
147
            $ret              .= $this->ld->getDefine($language, "ADD_{$stuTableSoleName}", "Add New {$ucfTableSoleName}");
148
        }
149
        $ret .= $this->ld->getAboveDefines('Lists');
150
151
        foreach (\array_keys($tables) as $t) {
152
            $tableName    = $tables[$t]->getVar('table_name');
153
            $stuTableName = \mb_strtoupper($tableName);
154
            $ucfTableName = \ucfirst($tableName);
155
            $ret          .= $this->ld->getDefine($language, "LIST_{$stuTableName}", "List of {$ucfTableName}");
156
        }
157
158
        return $ret;
159
    }
160
161
    /**
162
     * @public function getLanguageAdminClass
163
     * @param string $language
164
     * @param array  $tables
165
     * @return string
166
     */
167
    public function getLanguageAdminClass($language, $tables)
168
    {
169
        $ret                  = $this->ld->getAboveHeadDefines('Admin Classes');
170
        $fieldStatus          = 0;
171
        $fieldSampleListValue = 0;
172
        $tableBroken          = 0;
173
        foreach (\array_keys($tables) as $t) {
174
            $tableId          = $tables[$t]->getVar('table_id');
175
            $tableMid         = $tables[$t]->getVar('table_mid');
176
            $tableSoleName    = $tables[$t]->getVar('table_solename');
177
            $tableBroken      = $tables[$t]->getVar('table_broken');
178
            $ucfTableSoleName = \ucfirst($tableSoleName);
179
180
            $fields      = $this->getTableFields($tableMid, $tableId);
181
            $fieldInForm = 0;
182
            foreach (\array_keys($fields) as $f) {
183
                if ($fieldInForm < $fields[$f]->getVar('field_inform')) {
184
                    $fieldInForm = $fields[$f]->getVar('field_inform');
185
                }
186
            }
187
            if (1 == $fieldInForm) {
188
                $ret .= $this->ld->getAboveDefines("{$ucfTableSoleName} add/edit");
189
                $ret .= $this->ld->getDefine($language, "{$tableSoleName}_ADD", "Add {$ucfTableSoleName}");
190
                $ret .= $this->ld->getDefine($language, "{$tableSoleName}_EDIT", "Edit {$ucfTableSoleName}");
191
            }
192
            $ret .= $this->ld->getAboveDefines("Elements of {$ucfTableSoleName}");
193
194
            foreach (\array_keys($fields) as $f) {
195
                $fieldName    = $fields[$f]->getVar('field_name');
196
                $fieldElement = $fields[$f]->getVar('field_element');
197
                $rpFieldName  = $this->getRightString($fieldName);
198
                if ($fieldElement >= Constants::FIRST_FIELDELEMENT_TABLE) {
199
                    $fieldElements    = Modulebuilder\Helper::getInstance()->getHandler('Fieldelements')->get($fieldElement);
200
                    $fieldElementName = $fieldElements->getVar('fieldelement_name');
201
                    $fieldNameDesc    = mb_substr($fieldElementName, \mb_strrpos($fieldElementName, ':'), mb_strlen($fieldElementName));
202
                    $fieldNameDesc    = \str_replace(': ', '', $fieldNameDesc);
203
                } else {
204
                    $fieldNameDesc = false !== mb_strpos($rpFieldName, '_') ? \str_replace('_', ' ', \ucfirst($rpFieldName)) : \ucfirst($rpFieldName);
205
                }
206
                $ret .= $this->ld->getDefine($language, $tableSoleName . '_' . $rpFieldName, $fieldNameDesc);
207
208
                switch ($fieldElement) {
209
                    case 10:
210
                        $ret .= $this->ld->getDefine($language, $tableSoleName . '_' . $rpFieldName . '_UPLOADS', "{$fieldNameDesc} in frameworks images: %s");
211
                        break;
212
                    case 12:
213
                        $ret .= $this->ld->getDefine($language, $tableSoleName . '_' . $rpFieldName . '_UPLOADS', "{$fieldNameDesc} in uploads");
214
                        break;
215
                    case 11:
216
                    case 13:
217
                    case 14:
218
                        $ret .= $this->ld->getDefine($language, $tableSoleName . '_' . $rpFieldName . '_UPLOADS', "{$fieldNameDesc} in %s :");
219
                        break;
220
                    case 16:
221
                        $fieldStatus++;
222
                        break;
223
                    case 20:
224
                    case 22:
225
                        $fieldSampleListValue++;
226
                        break;
227
                }
228
                if (16 === (int)$fieldElement) {
229
                    $fieldStatus++;
230
                }
231
                if (20 === (int)$fieldElement || 20 === (int)$fieldElement) {
232
                    $fieldSampleListValue++;
233
                }
234
            }
235
        }
236
        $ret .= $this->ld->getAboveDefines('General');
237
        $ret .= $this->ld->getDefine($language, 'FORM_UPLOAD', 'Upload file');
238
        $ret .= $this->ld->getDefine($language, 'FORM_UPLOAD_NEW', 'Upload new file: ');
239
        $ret .= $this->ld->getDefine($language, 'FORM_UPLOAD_SIZE', 'Max file size: ');
240
        $ret .= $this->ld->getDefine($language, 'FORM_UPLOAD_SIZE_MB', 'MB');
241
        $ret .= $this->ld->getDefine($language, 'FORM_UPLOAD_IMG_WIDTH', 'Max image width: ');
242
        $ret .= $this->ld->getDefine($language, 'FORM_UPLOAD_IMG_HEIGHT', 'Max image height: ');
243
        $ret .= $this->ld->getDefine($language, 'FORM_IMAGE_PATH', 'Files in %s :');
244
        $ret .= $this->ld->getDefine($language, 'FORM_ACTION', 'Action');
245
        $ret .= $this->ld->getDefine($language, 'FORM_EDIT', 'Modification');
246
        $ret .= $this->ld->getDefine($language, 'FORM_DELETE', 'Clear');
247
        if ($fieldStatus > 0) {
248
            $ret .= $this->ld->getAboveDefines('Status');
249
            $ret .= $this->ld->getDefine($language, 'STATUS_NONE', 'No status');
250
            $ret .= $this->ld->getDefine($language, 'STATUS_OFFLINE', 'Offline');
251
            $ret .= $this->ld->getDefine($language, 'STATUS_SUBMITTED', 'Submitted');
252
            $ret .= $this->ld->getDefine($language, 'STATUS_APPROVED', 'Approved');
253
            $ret .= $this->ld->getDefine($language, 'STATUS_BROKEN', 'Broken');
254
        }
255
        if ($tableBroken > 0) {
256
            $ret .= $this->ld->getAboveDefines('Broken');
257
            $ret .= $this->ld->getDefine($language, 'BROKEN_RESULT', 'Broken items in table %s');
258
            $ret .= $this->ld->getDefine($language, 'BROKEN_NODATA', 'No broken items in table %s');
259
            $ret .= $this->ld->getDefine($language, 'BROKEN_TABLE', 'Table');
260
            $ret .= $this->ld->getDefine($language, 'BROKEN_KEY', 'Key field');
261
            $ret .= $this->ld->getDefine($language, 'BROKEN_KEYVAL', 'Key value');
262
            $ret .= $this->ld->getDefine($language, 'BROKEN_MAIN', 'Info main');
263
        }
264
        if ($fieldSampleListValue > 0) {
265
            $ret .= $this->ld->getAboveDefines('Sample List Values');
266
            $ret .= $this->ld->getDefine($language, 'LIST_1', 'Sample List Value 1');
267
            $ret .= $this->ld->getDefine($language, 'LIST_2', 'Sample List Value 2');
268
            $ret .= $this->ld->getDefine($language, 'LIST_3', 'Sample List Value 3');
269
        }
270
        $ret .= $this->ld->getAboveDefines('Clone feature');
271
        $ret .= $this->ld->getDefine($language, 'CLONE', 'Clone');
272
        $ret .= $this->ld->getDefine($language, 'CLONE_DSC', 'Cloning a module has never been this easy! Just type in the name you want for it and hit submit button!');
273
        $ret .= $this->ld->getDefine($language, 'CLONE_TITLE', 'Clone %s');
274
        $ret .= $this->ld->getDefine($language, 'CLONE_NAME', 'Choose a name for the new module');
275
        $ret .= $this->ld->getDefine($language, 'CLONE_NAME_DSC', 'Do not use special characters! <br>Do not choose an existing module dirname or database table name!');
276
        $ret .= $this->ld->getDefine($language, 'CLONE_INVALIDNAME', 'ERROR: Invalid module name, please try another one!');
277
        $ret .= $this->ld->getDefine($language, 'CLONE_EXISTS', 'ERROR: Module name already taken, please try another one!');
278
        $ret .= $this->ld->getDefine($language, 'CLONE_CONGRAT', 'Congratulations! %s was sucessfully created!<br>You may want to make changes in language files.');
279
        $ret .= $this->ld->getDefine($language, 'CLONE_IMAGEFAIL', 'Attention, we failed creating the new module logo. Please consider modifying assets/images/logo_module.png manually!');
280
        $ret .= $this->ld->getDefine($language, 'CLONE_FAIL', 'Sorry, we failed in creating the new clone. Maybe you need to temporally set write permissions (CHMOD 777) to modules folder and try again.');
281
282
        return $ret;
283
    }
284
285
    /**
286
     * @public function getLanguageAdminPermissions
287
     * @param string $language
288
     * @return string
289
     */
290
    public function getLanguageAdminPermissions($language)
291
    {
292
        $ret = $this->ld->getAboveHeadDefines('Admin Permissions');
293
        $ret .= $this->ld->getAboveDefines('Permissions');
294
        $ret .= $this->ld->getDefine($language, 'PERMISSIONS_GLOBAL', 'Permissions global');
295
        $ret .= $this->ld->getDefine($language, 'PERMISSIONS_GLOBAL_DESC', 'Permissions global to check type of.');
296
        $ret .= $this->ld->getDefine($language, 'PERMISSIONS_GLOBAL_4', 'Permissions global to approve');
297
        $ret .= $this->ld->getDefine($language, 'PERMISSIONS_GLOBAL_8', 'Permissions global to submit');
298
        $ret .= $this->ld->getDefine($language, 'PERMISSIONS_GLOBAL_16', 'Permissions global to view');
299
        $ret .= $this->ld->getDefine($language, 'PERMISSIONS_APPROVE', 'Permissions to approve');
300
        $ret .= $this->ld->getDefine($language, 'PERMISSIONS_APPROVE_DESC', 'Permissions to approve');
301
        $ret .= $this->ld->getDefine($language, 'PERMISSIONS_SUBMIT', 'Permissions to submit');
302
        $ret .= $this->ld->getDefine($language, 'PERMISSIONS_SUBMIT_DESC', 'Permissions to submit');
303
        $ret .= $this->ld->getDefine($language, 'PERMISSIONS_VIEW', 'Permissions to view');
304
        $ret .= $this->ld->getDefine($language, 'PERMISSIONS_VIEW_DESC', 'Permissions to view');
305
        $ret .= $this->ld->getDefine($language, 'NO_PERMISSIONS_SET', 'No permission set');
306
307
        return $ret;
308
    }
309
310
    /**
311
     * @public function getLanguageAdminFoot
312
     * @param string $language
313
     * @return string
314
     */
315
    public function getLanguageAdminFoot($language)
316
    {
317
        $ret = $this->ld->getAboveHeadDefines('Admin Others');
318
        $ret .= $this->ld->getDefine($language, 'ABOUT_MAKE_DONATION', 'Submit');
319
        $ret .= $this->ld->getDefine($language, 'SUPPORT_FORUM', 'Support Forum');
320
        $ret .= $this->ld->getDefine($language, 'DONATION_AMOUNT', 'Donation Amount');
321
        $ret .= $this->ld->getDefine($language, 'MAINTAINEDBY', ' is maintained by ');
322
        $ret .= $this->ld->getBelowDefines('End');
323
        $ret .= $this->ld->getBlankLine();
324
325
        return $ret;
326
    }
327
328
    /**
329
     * @public function render
330
     * @param null
331
     * @return bool|string
332
     */
333
    public function render()
334
    {
335
        $module           = $this->getModule();
336
        $tables           = $this->getTableTables($module->getVar('mod_id'));
337
        $tablePermissions = [];
338
        foreach (\array_keys($tables) as $t) {
339
            $tablePermissions[] = $tables[$t]->getVar('table_permissions');
340
        }
341
        $tables        = $this->getTables();
342
        $filename      = $this->getFileName();
343
        $moduleDirname = $module->getVar('mod_dirname');
344
        $language      = $this->getLanguage($moduleDirname, 'AM', '', false);
345
        $content       = $this->getHeaderFilesComments($module);
346
        if (\is_array($tables)) {
347
            $content .= $this->getLanguageAdminIndex($language, $tables);
348
            $content .= $this->getLanguageAdminPages($language, $tables);
349
            $content .= $this->getLanguageAdminClass($language, $tables);
350
        }
351
        if (\in_array(1, $tablePermissions)) {
352
            $content .= $this->getLanguageAdminPermissions($language);
353
        }
354
        $content .= $this->getLanguageAdminFoot($language);
355
356
        $this->create($moduleDirname, 'language/' . $GLOBALS['xoopsConfig']['language'], $filename, $content, \_AM_MODULEBUILDER_FILE_CREATED, \_AM_MODULEBUILDER_FILE_NOTCREATED);
357
358
        return $this->renderFile();
359
    }
360
}
361