suico_install_addField()   A
last analyzed

Complexity

Conditions 3
Paths 2

Size

Total Lines 25
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 21
nc 2
nop 12
dl 0
loc 25
rs 9.584
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php declare(strict_types=1);
2
/*
3
 You may not change or alter any portion of this comment or credits
4
 of supporting developers from this source code or any supporting source code
5
 which is considered copyrighted (c) material of the original comment or credit authors.
6
7
 This program is distributed in the hope that it will be useful,
8
 but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10
*/
11
12
/**
13
 * @category        Module
14
 * @copyright       {@link https://xoops.org/ XOOPS Project}
15
 * @license         GNU GPL 2.0 or later (https://www.gnu.org/licenses/gpl-2.0.html)
16
 * @author          Jan Pedersen
17
 * @author          Taiwen Jiang <[email protected]>
18
 */
19
20
use XoopsModules\Suico\{
21
    Common\Configurator,
22
    Helper,
23
    Utility
24
};
25
/** @var Helper $helper */
26
/** @var Utility $utility */
27
/** @var Configurator $configurator */
28
include \dirname(
29
            __DIR__
30
        ) . '/preloads/autoloader.php';
31
/**
32
 * Prepares system prior to attempting to install module
33
 * @param \XoopsModule $module {@link XoopsModule}
34
 *
35
 * @return bool true if ready to install, false if not
36
 */
37
function xoops_module_pre_install_suico(
38
    XoopsModule $module
39
) {
40
    require __DIR__ . '/common.php';
41
    $utility = new Utility();
42
    //check for minimum XOOPS version
43
    $xoopsSuccess = $utility::checkVerXoops($module);
44
    // check for minimum PHP version
45
    $phpSuccess = $utility::checkVerPhp($module);
46
    if ($xoopsSuccess && $phpSuccess) {
47
        $moduleTables = &$module->getInfo('tables');
48
        foreach ($moduleTables as $table) {
49
            $GLOBALS['xoopsDB']->queryF('DROP TABLE IF EXISTS ' . $GLOBALS['xoopsDB']->prefix($table) . ';');
50
        }
51
    }
52
53
    return $xoopsSuccess && $phpSuccess;
54
}
55
56
/**
57
 * Performs tasks required during installation of the module
58
 * @param \XoopsModule $module {@link XoopsModule}
59
 *
60
 * @return bool true if installation successful, false if not
61
 */
62
function xoops_module_install_suico(XoopsModule $module)
63
{
64
    global $module_id;
65
    $module_id = $module->getVar('mid');
66
    xoops_loadLanguage('user');
67
    require_once \dirname(__DIR__) . '/preloads/autoloader.php';
68
    $moduleDirName = \basename(\dirname(__DIR__));
69
    // Create registration steps
70
    suico_install_addStep(_MI_SUICO_STEP_BASIC, '', 1, 1);
71
    // Create categories
72
    suico_install_addCategory(_MI_SUICO_CATEGORY_PERSONAL, 1);
73
    suico_install_addCategory(_MI_SUICO_CATEGORY_MESSAGING, 2);
74
    suico_install_addCategory(_MI_SUICO_CATEGORY_SETTINGS, 3);
75
    suico_install_addCategory(_MI_SUICO_CATEGORY_COMMUNITY, 4);
76
    // Add user fields
77
    xoops_loadLanguage('notification');
78
    xoops_loadLanguage('main', $module->getVar('dirname', 'n'));
0 ignored issues
show
Bug introduced by
It seems like $module->getVar('dirname', 'n') can also be of type array and array; however, parameter $domain of xoops_loadLanguage() 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

78
    xoops_loadLanguage('main', /** @scrutinizer ignore-type */ $module->getVar('dirname', 'n'));
Loading history...
79
    require_once $GLOBALS['xoops']->path('include/notification_constants.php');
80
    $umode_options         = [
81
        'nest'   => _NESTED,
82
        'flat'   => _FLAT,
83
        'thread' => _THREADED,
84
    ];
85
    $uorder_options        = [
86
        0 => _OLDESTFIRST,
87
        1 => _NEWESTFIRST,
88
    ];
89
    $notify_mode_options   = [
90
        XOOPS_NOTIFICATION_MODE_SENDALWAYS         => _NOT_MODE_SENDALWAYS,
91
        XOOPS_NOTIFICATION_MODE_SENDONCETHENDELETE => _NOT_MODE_SENDONCE,
92
        XOOPS_NOTIFICATION_MODE_SENDONCETHENWAIT   => _NOT_MODE_SENDONCEPERLOGIN,
93
    ];
94
    $notify_method_options = [
95
        XOOPS_NOTIFICATION_METHOD_DISABLE => _NOT_METHOD_DISABLE,
96
        XOOPS_NOTIFICATION_METHOD_PM      => _NOT_METHOD_PM,
97
        XOOPS_NOTIFICATION_METHOD_EMAIL   => _NOT_METHOD_EMAIL,
98
    ];
99
    suico_install_addField('name', _US_REALNAME, '', 1, 'textbox', 1, 1, 1, [], 0, 255);
100
    suico_install_addField('user_from', _US_LOCATION, '', 1, 'textbox', 1, 2, 1, [], 0, 255);
101
    suico_install_addField('user_occ', _US_OCCUPATION, '', 1, 'textbox', 1, 3, 1, [], 0, 255);
102
    suico_install_addField('user_intrest', _US_INTEREST, '', 1, 'textbox', 1, 4, 1, [], 0, 255);
103
    suico_install_addField('bio', _US_EXTRAINFO, '', 1, 'textarea', 2, 5, 1, [], 0, 0);
104
    suico_install_addField('user_sig', _US_SIGNATURE, '', 1, 'dhtml', 1, 6, 1, [], 0, 0);
105
    suico_install_addField('url', _MI_SUICO_URL_TITLE, '', 1, 'textbox', 1, 7, 1, [], 0, 255, false);
106
    suico_install_addField('timezone_offset', _US_TIMEZONE, '', 3, 'timezone', 1, 0, 1, [], 0, 0, false);
107
    suico_install_addField('user_viewemail', _US_ALLOWVIEWEMAIL, '', 3, 'yesno', 3, 1, 1, [], 0, 1, false);
108
    suico_install_addField('attachsig', _US_SHOWSIG, '', 3, 'yesno', 3, 2, 1, [], 0, 1, false);
109
    suico_install_addField('user_mailok', _US_MAILOK, '', 3, 'yesno', 3, 3, 1, [], 0, 1, false);
110
    suico_install_addField('theme', _MD_SUICO_THEME, '', 3, 'theme', 1, 4, 1, [], 0, 0, false);
111
    suico_install_addField('umode', _US_CDISPLAYMODE, '', 3, 'select', 1, 5, 1, $umode_options, 0, 0, false);
112
    suico_install_addField('uorder', _US_CSORTORDER, '', 3, 'select', 3, 6, 1, $uorder_options, 0, 0, false);
113
    suico_install_addField('notify_mode', _NOT_NOTIFYMODE, '', 3, 'select', 3, 7, 1, $notify_mode_options, 0, 0, false);
114
    suico_install_addField('notify_method', _NOT_NOTIFYMETHOD, '', 3, 'select', 3, 8, 1, $notify_method_options, 0, 0, false);
115
    suico_install_addField('user_regdate', _US_MEMBERSINCE, '', 4, 'datetime', 3, 1, 0, [], 0, 10);
116
    suico_install_addField('posts', _US_POSTS, '', 4, 'textbox', 3, 2, 0, [], 0, 255);
117
    suico_install_addField('rank', _US_RANK, '', 4, 'rank', 3, 3, 2, [], 0, 0);
118
    suico_install_addField('last_login', _US_LASTLOGIN, '', 4, 'datetime', 3, 4, 0, [], 0, 10);
119
    suico_install_initializeProfiles();
120
    $helper       = Helper::getInstance();
121
    $utility      = new Utility();
122
    $configurator = new Configurator();
123
    // Load language files
124
    $helper->loadLanguage('admin');
125
    $helper->loadLanguage('modinfo');
126
    // default Permission Settings ----------------------
127
    $moduleId = $module->getVar('mid');
128
    //$moduleName = $module->getVar('name');
129
    $grouppermHandler = xoops_getHandler('groupperm');
130
    // access rights ------------------------------------------
131
    $grouppermHandler->addRight(
0 ignored issues
show
Bug introduced by
The method addRight() does not exist on XoopsObjectHandler. It seems like you code against a sub-type of XoopsObjectHandler such as XoopsGroupPermHandler or XoopsPersistableObjectHandler. ( Ignorable by Annotation )

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

131
    $grouppermHandler->/** @scrutinizer ignore-call */ 
132
                       addRight(
Loading history...
132
        $moduleDirName . '_approve',
133
        1,
134
        XOOPS_GROUP_ADMIN,
135
        $moduleId
136
    );
137
    $grouppermHandler->addRight($moduleDirName . '_submit', 1, XOOPS_GROUP_ADMIN, $moduleId);
138
    $grouppermHandler->addRight($moduleDirName . '_view', 1, XOOPS_GROUP_ADMIN, $moduleId);
139
    $grouppermHandler->addRight($moduleDirName . '_view', 1, XOOPS_GROUP_USERS, $moduleId);
140
    $grouppermHandler->addRight($moduleDirName . '_view', 1, XOOPS_GROUP_ANONYMOUS, $moduleId);
141
    //  ---  CREATE FOLDERS ---------------
142
    if (count($configurator->uploadFolders) > 0) {
143
        //    foreach (array_keys($GLOBALS['uploadFolders']) as $i) {
144
        foreach (
145
            array_keys(
146
                $configurator->uploadFolders
147
            ) as $i
148
        ) {
149
            $utility::createFolder($configurator->uploadFolders[$i]);
150
        }
151
    }
152
    //  ---  COPY blank.png FILES ---------------
153
    if (count($configurator->copyBlankFiles) > 0) {
154
        $file = \dirname(__DIR__) . '/assets/images/blank.png';
155
        foreach (array_keys($configurator->copyBlankFiles) as $i) {
156
            $dest = $configurator->copyBlankFiles[$i] . '/blank.png';
157
            $utility::copyFile($file, $dest);
158
        }
159
    }
160
    /*
161
        //  ---  COPY test folder files ---------------
162
    if (count($configurator->copyTestFolders) > 0) {
163
        //        $file =  \dirname(__DIR__) . '/testdata/images/';
164
        foreach (array_keys($configurator->copyTestFolders) as $i) {
165
            $src  = $configurator->copyTestFolders[$i][0];
166
            $dest = $configurator->copyTestFolders[$i][1];
167
            $utility::xcopy($src, $dest);
168
        }
169
    }
170
    */
171
    //delete .html entries from the tpl table
172
    $sql = 'DELETE FROM ' . $GLOBALS['xoopsDB']->prefix(
173
            'tplfile'
174
        ) . " WHERE `tpl_module` = '" . $module->getVar(
175
            'dirname',
176
            'n'
177
        ) . "' AND `tpl_file` LIKE '%.html%'";
178
    $GLOBALS['xoopsDB']->queryF($sql);
179
180
    return true;
181
}
182
183
/**
184
 * @return void
185
 */
186
function suico_install_initializeProfiles(): void
187
{
188
    global $module_id;
189
    $GLOBALS['xoopsDB']->queryF('   INSERT INTO ' . $GLOBALS['xoopsDB']->prefix('suico_profile') . ' (profile_id) ' . '   SELECT uid ' . '   FROM ' . $GLOBALS['xoopsDB']->prefix('users'));
190
    $sql = 'INSERT INTO '
191
           . $GLOBALS['xoopsDB']->prefix('group_permission')
192
           . ' (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) '
193
           . ' VALUES '
194
           . ' ('
195
           . XOOPS_GROUP_ADMIN
196
           . ', '
197
           . XOOPS_GROUP_ADMIN
198
           . ", {$module_id}, 'profile_access'), "
199
           . ' ('
200
           . XOOPS_GROUP_ADMIN
201
           . ', '
202
           . XOOPS_GROUP_USERS
203
           . ", {$module_id}, 'profile_access'), "
204
           . ' ('
205
           . XOOPS_GROUP_USERS
206
           . ', '
207
           . XOOPS_GROUP_USERS
208
           . ", {$module_id}, 'profile_access'), "
209
           . ' ('
210
           . XOOPS_GROUP_ANONYMOUS
211
           . ', '
212
           . XOOPS_GROUP_USERS
213
           . ", {$module_id}, 'profile_access') "
214
           . ' ';
215
    $GLOBALS['xoopsDB']->queryF($sql);
216
}
217
218
// canedit: 0 - no; 1 - admin; 2 - admin & owner
219
/**
220
 * @param      $name
221
 * @param      $title
222
 * @param      $description
223
 * @param      $category
224
 * @param      $type
225
 * @param      $valuetype
226
 * @param      $weight
227
 * @param      $canedit
228
 * @param      $options
229
 * @param      $step_id
230
 * @param      $length
231
 * @param bool $visible
232
 *
233
 * @return bool
234
 */
235
function suico_install_addField($name, $title, $description, $category, $type, $valuetype, $weight, $canedit, $options, $step_id, $length, $visible = true)
236
{
237
    global $module_id;
238
    $fieldHandler = Helper::getInstance()->getHandler('Field');
239
    $obj          = $fieldHandler->create();
240
    $obj->setVar('field_name', $name, true);
241
    $obj->setVar('field_moduleid', $module_id, true);
242
    $obj->setVar('field_show', 1);
243
    $obj->setVar('field_edit', $canedit ? 1 : 0);
244
    $obj->setVar('field_config', 0);
245
    $obj->setVar('field_title', strip_tags($title), true);
246
    $obj->setVar('field_description', strip_tags($description), true);
247
    $obj->setVar('field_type', $type, true);
248
    $obj->setVar('field_valuetype', $valuetype, true);
249
    $obj->setVar('field_options', $options, true);
250
    if ($canedit) {
251
        $obj->setVar('field_maxlength', $length, true);
252
    }
253
    $obj->setVar('field_weight', $weight, true);
254
    $obj->setVar('cat_id', $category, true);
255
    $obj->setVar('step_id', $step_id, true);
256
    $fieldHandler->insert($obj);
257
    suico_install_setPermissions($obj->getVar('field_id'), $module_id, $canedit, $visible);
258
259
    return true;
260
    /*
261
    //$GLOBALS['xoopsDB']->query("INSERT INTO ".$GLOBALS['xoopsDB']->prefix("suico_field")." VALUES (0, {$category}, '{$type}', {$valuetype}, '{$name}', " . $GLOBALS['xoopsDB']->quote($title) . ", " . $GLOBALS['xoopsDB']->quote($description) . ", 0, {$length}, {$weight}, '', 1, {$canedit}, 1, 0, '" . serialize($options) . "', {$step_id})");
262
    $gperm_itemid = $obj->getVar('field_id');
263
    unset($obj);
264
    $gperm_modid = $module_id;
265
    $sql = "INSERT INTO " . $GLOBALS['xoopsDB']->prefix("group_permission") .
266
        " (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) " .
267
        " VALUES " .
268
        ($canedit ?
269
            " (" . XOOPS_GROUP_ADMIN . ", {$gperm_itemid}, {$gperm_modid}, 'suico_edit'), "
270
        : "" ) .
271
        ($canedit == 1 ?
272
            " (" . XOOPS_GROUP_USERS . ", {$gperm_itemid}, {$gperm_modid}, 'suico_edit'), "
273
        : "" ) .
274
        " (" . XOOPS_GROUP_ADMIN . ", {$gperm_itemid}, {$gperm_modid}, 'suico_search'), " .
275
        " (" . XOOPS_GROUP_USERS . ", {$gperm_itemid}, {$gperm_modid}, 'suico_search') " .
276
        " ";
277
    $GLOBALS['xoopsDB']->query($sql);
278
279
    if ($visible) {
280
        $sql = "INSERT INTO " . $GLOBALS['xoopsDB']->prefix("suico_profile_visibility") .
281
            " (field_id, user_group, suico_group) " .
282
            " VALUES " .
283
            " ({$gperm_itemid}, " . XOOPS_GROUP_ADMIN . ", " . XOOPS_GROUP_ADMIN . "), " .
284
            " ({$gperm_itemid}, " . XOOPS_GROUP_ADMIN . ", " . XOOPS_GROUP_USERS . "), " .
285
            " ({$gperm_itemid}, " . XOOPS_GROUP_USERS . ", " . XOOPS_GROUP_ADMIN . "), " .
286
            " ({$gperm_itemid}, " . XOOPS_GROUP_USERS . ", " . XOOPS_GROUP_USERS . "), " .
287
            " ({$gperm_itemid}, " . XOOPS_GROUP_ANONYMOUS . ", " . XOOPS_GROUP_ADMIN . "), " .
288
            " ({$gperm_itemid}, " . XOOPS_GROUP_ANONYMOUS . ", " . XOOPS_GROUP_USERS . ")" .
289
            " ";
290
        $GLOBALS['xoopsDB']->query($sql);
291
    }
292
    */
293
}
294
295
/**
296
 * @param $field_id
297
 * @param $module_id
298
 * @param $canedit
299
 * @param $visible
300
 */
301
function suico_install_setPermissions($field_id, $module_id, $canedit, $visible): void
302
{
303
    $gperm_itemid = $field_id;
304
    $gperm_modid  = $module_id;
305
    $sql          = 'INSERT INTO '
306
                    . $GLOBALS['xoopsDB']->prefix('group_permission')
307
                    . ' (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) '
308
                    . ' VALUES '
309
                    . ($canedit ? ' (' . XOOPS_GROUP_ADMIN . ", {$gperm_itemid}, {$gperm_modid}, 'profile_edit'), " : '')
310
                    . (1 == $canedit ? ' ('
311
                                       . XOOPS_GROUP_USERS
312
                                       . ", {$gperm_itemid}, {$gperm_modid}, 'profile_edit'), " : '')
313
                    . ' ('
314
                    . XOOPS_GROUP_ADMIN
315
                    . ", {$gperm_itemid}, {$gperm_modid}, 'profile_search'), "
316
                    . ' ('
317
                    . XOOPS_GROUP_USERS
318
                    . ", {$gperm_itemid}, {$gperm_modid}, 'profile_search') "
319
                    . ' ';
320
    $GLOBALS['xoopsDB']->queryF($sql);
321
    if ($visible) {
322
        $sql = 'INSERT INTO '
323
               . $GLOBALS['xoopsDB']->prefix('suico_profile_visibility')
324
               . ' (field_id, user_group, profile_group) '
325
               . ' VALUES '
326
               . " ({$gperm_itemid}, "
327
               . XOOPS_GROUP_ADMIN
328
               . ', '
329
               . XOOPS_GROUP_ADMIN
330
               . '), '
331
               . " ({$gperm_itemid}, "
332
               . XOOPS_GROUP_ADMIN
333
               . ', '
334
               . XOOPS_GROUP_USERS
335
               . '), '
336
               . " ({$gperm_itemid}, "
337
               . XOOPS_GROUP_USERS
338
               . ', '
339
               . XOOPS_GROUP_ADMIN
340
               . '), '
341
               . " ({$gperm_itemid}, "
342
               . XOOPS_GROUP_USERS
343
               . ', '
344
               . XOOPS_GROUP_USERS
345
               . '), '
346
               . " ({$gperm_itemid}, "
347
               . XOOPS_GROUP_ANONYMOUS
348
               . ', '
349
               . XOOPS_GROUP_ADMIN
350
               . '), '
351
               . " ({$gperm_itemid}, "
352
               . XOOPS_GROUP_ANONYMOUS
353
               . ', '
354
               . XOOPS_GROUP_USERS
355
               . ')'
356
               . ' ';
357
        $GLOBALS['xoopsDB']->queryF($sql);
358
    }
359
}
360
361
/**
362
 * @param $name
363
 * @param $weight
364
 */
365
function suico_install_addCategory($name, $weight): void
366
{
367
    $GLOBALS['xoopsDB']->query('INSERT INTO ' . $GLOBALS['xoopsDB']->prefix('suico_profile_category') . ' VALUES (0, ' . $GLOBALS['xoopsDB']->quote($name) . ", '', {$weight})");
368
}
369
370
/**
371
 * @param $name
372
 * @param $desc
373
 * @param $order
374
 * @param $save
375
 */
376
function suico_install_addStep($name, $desc, $order, $save): void
377
{
378
    $GLOBALS['xoopsDB']->query('INSERT INTO ' . $GLOBALS['xoopsDB']->prefix('suico_profile_regstep') . ' VALUES (0, ' . $GLOBALS['xoopsDB']->quote($name) . ', ' . $GLOBALS['xoopsDB']->quote($desc) . ", {$order}, {$save})");
379
}
380