LanguageAdmin::getLanguageAdminClass()   F
last analyzed

Complexity

Conditions 21
Paths 2620

Size

Total Lines 98
Code Lines 76

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 21
eloc 76
nc 2620
nop 2
dl 0
loc 98
rs 0
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace XoopsModules\Tdmcreate\Files\Language;
4
5
use XoopsModules\Tdmcreate;
6
use XoopsModules\Tdmcreate\Files;
7
8
/*
9
 You may not change or alter any portion of this comment or credits
10
 of supporting developers from this source code or any supporting source code
11
 which is considered copyrighted (c) material of the original comment or credit authors.
12
13
 This program is distributed in the hope that it will be useful,
14
 but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16
 */
17
/**
18
 * tdmcreate module.
19
 *
20
 * @copyright       XOOPS Project (https://xoops.org)
21
 * @license         GNU GPL 2 (http://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
22
 *
23
 * @since           2.5.0
24
 *
25
 * @author          Txmod Xoops http://www.txmodxoops.org
26
 *
27
 */
28
29
/**
30
 * Class LanguageAdmin.
31
 */
32
class LanguageAdmin extends Files\CreateFile
33
{
34
    /**
35
     * @var mixed
36
     */
37
    private $defines = null;
38
39
40
    /**
41
     * @public function constructor
42
     * @param null
43
     */
44
    public function __construct()
45
    {
46
        parent::__construct();
47
        $this->defines = LanguageDefines::getInstance();
48
    }
49
50
    /**
51
     * @static function getInstance
52
     * @param null
53
     * @return LanguageAdmin
54
     */
55
    public static function getInstance()
56
    {
57
        static $instance = false;
58
        if (!$instance) {
59
            $instance = new self();
60
        }
61
62
        return $instance;
63
    }
64
65
    /**
66
     * @public function write
67
     * @param string $module
68
     * @param        $table
69
     * @param string $tables
70
     * @param string $filename
71
     */
72
    public function write($module, $table, $tables, $filename)
73
    {
74
        $this->setModule($module);
75
        $this->setTable($table);
76
        $this->setTables($tables);
77
        $this->setFileName($filename);
78
    }
79
80
    /**
81
     * @public function getLanguageAdminIndex
82
     * @param string $language
83
     * @param string $tables
84
     * @return string
85
     */
86
    public function getLanguageAdminIndex($language, $tables)
87
    {
88
        $pc  = Tdmcreate\Files\CreatePhpCode::getInstance();
89
        $ret = $this->defines->getBlankLine();
90
        $ret .= $pc->getPhpCodeIncludeDir("'common.php'",'', true, true, 'include');
91
        $ret .= $this->defines->getBlankLine();
92
        $ret .= $this->defines->getAboveHeadDefines('Admin Index');
93
        $ret .= $this->defines->getDefine($language, 'STATISTICS', 'Statistics');
94
        $ret .= $this->defines->getAboveDefines('There are');
95
        foreach (array_keys($tables) as $t) {
0 ignored issues
show
Bug introduced by
$tables of type string is incompatible with the type array expected by parameter $input of array_keys(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

95
        foreach (array_keys(/** @scrutinizer ignore-type */ $tables) as $t) {
Loading history...
96
            $tableName    = $tables[$t]->getVar('table_name');
97
            $stuTableName = mb_strtoupper($tableName);
98
            $stlTableName = mb_strtolower($tableName);
99
            $ret          .= $this->defines->getDefine($language, "THEREARE_{$stuTableName}", "There are <span class='bold'>%s</span> {$stlTableName} in the database", true);
100
        }
101
102
        return $ret;
103
    }
104
105
    /**
106
     * @public function getLanguageAdminPages
107
     * @param string $language
108
     * @param string $tables
109
     * @return string
110
     */
111
    public function getLanguageAdminPages($language, $tables)
112
    {
113
        $ret = $this->defines->getAboveHeadDefines('Admin Files');
114
        $ret .= $this->defines->getAboveDefines('There aren\'t');
115
        foreach (array_keys($tables) as $t) {
0 ignored issues
show
Bug introduced by
$tables of type string is incompatible with the type array expected by parameter $input of array_keys(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

115
        foreach (array_keys(/** @scrutinizer ignore-type */ $tables) as $t) {
Loading history...
116
            $tableName    = $tables[$t]->getVar('table_name');
117
            $stuTableName = mb_strtoupper($tableName);
118
            $stlTableName = mb_strtolower($tableName);
119
            $ret          .= $this->defines->getDefine($language, "THEREARENT_{$stuTableName}", "There aren't {$stlTableName}", true);
120
        }
121
        $ret .= $this->defines->getAboveDefines('Save/Delete');
122
        $ret .= $this->defines->getDefine($language, 'FORM_OK', 'Successfully saved');
123
        $ret .= $this->defines->getDefine($language, 'FORM_DELETE_OK', 'Successfully deleted');
124
        $ret .= $this->defines->getDefine($language, 'FORM_SURE_DELETE', "Are you sure to delete: <b><span style='color : Red;'>%s </span></b>", true);
125
        $ret .= $this->defines->getDefine($language, 'FORM_SURE_RENEW', "Are you sure to update: <b><span style='color : Red;'>%s </span></b>", true);
126
        $ret .= $this->defines->getAboveDefines('Buttons');
127
128
        foreach (array_keys($tables) as $t) {
129
            $tableSoleName    = $tables[$t]->getVar('table_solename');
130
            $stuTableSoleName = mb_strtoupper($tableSoleName);
131
            $ucfTableSoleName = ucfirst($tableSoleName);
132
            $ret              .= $this->defines->getDefine($language, "ADD_{$stuTableSoleName}", "Add New {$ucfTableSoleName}");
133
        }
134
        $ret .= $this->defines->getAboveDefines('Lists');
135
136
        foreach (array_keys($tables) as $t) {
137
            $tableName    = $tables[$t]->getVar('table_name');
138
            $stuTableName = mb_strtoupper($tableName);
139
            $ucfTableName = ucfirst($tableName);
140
            $ret          .= $this->defines->getDefine($language, "{$stuTableName}_LIST", "List of {$ucfTableName}");
141
        }
142
143
        return $ret;
144
    }
145
146
    /**
147
     * @public function getLanguageAdminClass
148
     * @param string $language
149
     * @param string $tables
150
     * @return string
151
     */
152
    public function getLanguageAdminClass($language, $tables)
153
    {
154
        $ret = $this->defines->getAboveHeadDefines('Admin Classes');
155
156
        foreach (array_keys($tables) as $t) {
0 ignored issues
show
Bug introduced by
$tables of type string is incompatible with the type array expected by parameter $input of array_keys(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

156
        foreach (array_keys(/** @scrutinizer ignore-type */ $tables) as $t) {
Loading history...
157
            $tableId          = $tables[$t]->getVar('table_id');
158
            $tableMid         = $tables[$t]->getVar('table_mid');
159
            $tableSoleName    = $tables[$t]->getVar('table_solename');
160
            $ucfTableSoleName = ucfirst($tableSoleName);
161
162
            $fields      = $this->getTableFields($tableMid, $tableId);
163
            $fieldInForm = 0;
164
165
            foreach (array_keys($fields) as $f) {
166
                if ($fieldInForm < $fields[$f]->getVar('field_inform')) {
167
                    $fieldInForm = $fields[$f]->getVar('field_inform');
168
                }
169
            }
170
            if (1 == $fieldInForm) {
171
                $ret .= $this->defines->getAboveDefines("{$ucfTableSoleName} add/edit");
172
                $ret .= $this->defines->getDefine($language, "{$tableSoleName}_ADD", "Add {$ucfTableSoleName}");
173
                $ret .= $this->defines->getDefine($language, "{$tableSoleName}_EDIT", "Edit {$ucfTableSoleName}");
174
            }
175
            $ret .= $this->defines->getAboveDefines("Elements of {$ucfTableSoleName}");
176
177
            $fieldStatus          = 0;
178
            $fieldSampleListValue = 0;
179
            foreach (array_keys($fields) as $f) {
180
                $fieldName    = $fields[$f]->getVar('field_name');
181
                $fieldElement = $fields[$f]->getVar('field_element');
182
183
                $rpFieldName = $this->getRightString($fieldName);
184
                if ($fieldElement > 16) {
185
                    $fieldElements    = Tdmcreate\Helper::getInstance()->getHandler('fieldelements')->get($fieldElement);
186
                    $fieldElementName = $fieldElements->getVar('fieldelement_name');
187
                    $fieldNameDesc    = mb_substr($fieldElementName, mb_strrpos($fieldElementName, ':'), mb_strlen($fieldElementName));
0 ignored issues
show
Bug introduced by
It seems like $fieldElementName can also be of type array and array; however, parameter $str of mb_substr() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

187
                    $fieldNameDesc    = mb_substr(/** @scrutinizer ignore-type */ $fieldElementName, mb_strrpos($fieldElementName, ':'), mb_strlen($fieldElementName));
Loading history...
Bug introduced by
It seems like $fieldElementName can also be of type array and array; however, parameter $str of mb_strlen() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

187
                    $fieldNameDesc    = mb_substr($fieldElementName, mb_strrpos($fieldElementName, ':'), mb_strlen(/** @scrutinizer ignore-type */ $fieldElementName));
Loading history...
Bug introduced by
It seems like $fieldElementName can also be of type array and array; however, parameter $haystack of mb_strrpos() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

187
                    $fieldNameDesc    = mb_substr($fieldElementName, mb_strrpos(/** @scrutinizer ignore-type */ $fieldElementName, ':'), mb_strlen($fieldElementName));
Loading history...
188
                    $fieldNameDesc    = str_replace(': ', '', $fieldNameDesc);
189
                } else {
190
                    $fieldNameDesc = false !== mb_strpos($rpFieldName, '_') ? str_replace('_', ' ', ucfirst($rpFieldName)) : ucfirst($rpFieldName);
191
                }
192
193
                $ret          .= $this->defines->getDefine($language, $tableSoleName . '_' . $rpFieldName, $fieldNameDesc);
194
195
                switch ($fieldElement) {
196
                    case 10:
197
                        $ret .= $this->defines->getDefine($language, $tableSoleName . '_' . $rpFieldName . '_UPLOADS', "{$fieldNameDesc} in frameworks images: %s");
198
                        break;
199
                    case 12:
200
                        $ret .= $this->defines->getDefine($language, $tableSoleName . '_' . $rpFieldName . '_UPLOADS', "{$fieldNameDesc} in uploads");
201
                        break;
202
                    case 11:
203
                    case 13:
204
                    case 14:
205
                        $ret .= $this->defines->getDefine($language, $tableSoleName . '_' . $rpFieldName . '_UPLOADS', "{$fieldNameDesc} in %s :");
206
                        break;
207
                    case 16:
208
                        $fieldStatus++;
209
                        break;
210
                    case 20:
211
                    case 22:
212
                        $fieldSampleListValue++;
213
                        break;
214
                }
215
                if (16 === (int)$fieldElement) {
216
                    $fieldStatus++;
217
                }
218
                if (20 === (int)$fieldElement || 20 === (int)$fieldElement) {
219
                    $fieldSampleListValue++;
220
                }
221
            }
222
        }
223
        $ret .= $this->defines->getAboveDefines('General');
224
        $ret .= $this->defines->getDefine($language, 'FORM_UPLOAD', 'Upload file');
225
        $ret .= $this->defines->getDefine($language, 'FORM_UPLOAD_NEW', 'Upload new file: ');
226
        $ret .= $this->defines->getDefine($language, 'FORM_UPLOAD_SIZE', 'Max file size: ');
227
        $ret .= $this->defines->getDefine($language, 'FORM_UPLOAD_SIZE_MB', 'MB');
228
        $ret .= $this->defines->getDefine($language, 'FORM_UPLOAD_IMG_WIDTH', 'Max image width: ');
229
        $ret .= $this->defines->getDefine($language, 'FORM_UPLOAD_IMG_HEIGHT', 'Max image height: ');
230
        $ret .= $this->defines->getDefine($language, 'FORM_IMAGE_PATH', 'Files in %s :');
231
        $ret .= $this->defines->getDefine($language, 'FORM_ACTION', 'Action');
232
        $ret .= $this->defines->getDefine($language, 'FORM_EDIT', 'Modification');
233
        $ret .= $this->defines->getDefine($language, 'FORM_DELETE', 'Clear');
234
235
        if ($fieldStatus > 0) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $fieldStatus seems to be defined by a foreach iteration on line 156. Are you sure the iterator is never empty, otherwise this variable is not defined?
Loading history...
236
            $ret .= $this->defines->getAboveDefines('Status');
237
            $ret .= $this->defines->getDefine($language, 'STATUS_NONE', 'No status');
238
            $ret .= $this->defines->getDefine($language, 'STATUS_OFFLINE', 'Offline');
239
            $ret .= $this->defines->getDefine($language, 'STATUS_SUBMITTED', 'Submitted');
240
            $ret .= $this->defines->getDefine($language, 'STATUS_APPROVED', 'Approved');
241
        }
242
        if ($fieldSampleListValue > 0) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $fieldSampleListValue seems to be defined by a foreach iteration on line 156. Are you sure the iterator is never empty, otherwise this variable is not defined?
Loading history...
243
            $ret .= $this->defines->getAboveDefines('Sample List Values');
244
            $ret .= $this->defines->getDefine($language, 'LIST_1', 'Sample List Value 1');
245
            $ret .= $this->defines->getDefine($language, 'LIST_2', 'Sample List Value 2');
246
            $ret .= $this->defines->getDefine($language, 'LIST_3', 'Sample List Value 3');
247
        }
248
249
        return $ret;
250
    }
251
252
    /**
253
     * @public function getLanguageAdminPermissions
254
     * @param string $language
255
     * @return string
256
     */
257
    public function getLanguageAdminPermissions($language)
258
    {
259
        $ret = $this->defines->getAboveHeadDefines('Admin Permissions');
260
        $ret .= $this->defines->getAboveDefines('Permissions');
261
        $ret .= $this->defines->getDefine($language, 'PERMISSIONS_GLOBAL', 'Permissions global');
262
        $ret .= $this->defines->getDefine($language, 'PERMISSIONS_GLOBAL_DESC', 'Permissions global to check type of.');
263
        $ret .= $this->defines->getDefine($language, 'PERMISSIONS_GLOBAL_4', 'Permissions global to approve');
264
        $ret .= $this->defines->getDefine($language, 'PERMISSIONS_GLOBAL_8', 'Permissions global to submit');
265
        $ret .= $this->defines->getDefine($language, 'PERMISSIONS_GLOBAL_16', 'Permissions global to view');
266
        $ret .= $this->defines->getDefine($language, 'PERMISSIONS_APPROVE', 'Permissions to approve');
267
        $ret .= $this->defines->getDefine($language, 'PERMISSIONS_APPROVE_DESC', 'Permissions to approve');
268
        $ret .= $this->defines->getDefine($language, 'PERMISSIONS_SUBMIT', 'Permissions to submit');
269
        $ret .= $this->defines->getDefine($language, 'PERMISSIONS_SUBMIT_DESC', 'Permissions to submit');
270
        $ret .= $this->defines->getDefine($language, 'PERMISSIONS_VIEW', 'Permissions to view');
271
        $ret .= $this->defines->getDefine($language, 'PERMISSIONS_VIEW_DESC', 'Permissions to view');
272
        $ret .= $this->defines->getDefine($language, 'NO_PERMISSIONS_SET', 'No permission set');
273
274
        return $ret;
275
    }
276
277
    /**
278
     * @public function getLanguageAdminFoot
279
     * @param string $language
280
     * @return string
281
     */
282
    public function getLanguageAdminFoot($language)
283
    {
284
        $ret = $this->defines->getAboveHeadDefines('Admin Others');
285
        $ret .= $this->defines->getDefine($language, 'MAINTAINEDBY', ' is maintained by ');
286
        $ret .= $this->defines->getBelowDefines('End');
287
        $ret .= $this->defines->getBlankLine();
288
289
        return $ret;
290
    }
291
292
    /**
293
     * @public function render
294
     * @param null
295
     * @return bool|string
296
     */
297
    public function render()
298
    {
299
        $module = $this->getModule();
300
        $tables = $this->getTableTables($module->getVar('mod_id'));
301
        $tablePermissions = [];
302
        foreach (array_keys($tables) as $t) {
303
            $tablePermissions[] = $tables[$t]->getVar('table_permissions');
304
        }
305
        $tables        = $this->getTables();
306
        $filename      = $this->getFileName();
307
        $moduleDirname = $module->getVar('mod_dirname');
308
        $language      = $this->getLanguage($moduleDirname, 'AM');
309
        $content       = $this->getHeaderFilesComments($module);
310
        if (is_array($tables)) {
311
            $content .= $this->getLanguageAdminIndex($language, $tables);
312
            $content .= $this->getLanguageAdminPages($language, $tables);
313
            $content .= $this->getLanguageAdminClass($language, $tables);
314
        }
315
        if (in_array(1, $tablePermissions)) {
316
            $content .= $this->getLanguageAdminPermissions($language);
317
        }
318
        $content .= $this->getLanguageAdminFoot($language);
319
320
        $this->create($moduleDirname, 'language/' . $GLOBALS['xoopsConfig']['language'], $filename, $content, _AM_TDMCREATE_FILE_CREATED, _AM_TDMCREATE_FILE_NOTCREATED);
321
322
        return $this->renderFile();
323
    }
324
}
325