xoops_module_update_xoopspoll()   F
last analyzed

Complexity

Conditions 18
Paths 1301

Size

Total Lines 70
Code Lines 41

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 18
eloc 41
c 0
b 0
f 0
nc 1301
nop 2
dl 0
loc 70
rs 0.7

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 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
 * Xoopspoll install functions.php
14
 *
15
 * @copyright:: {@link https://xoops.org/ XOOPS Project}
16
 * @license  ::   {@link https://www.gnu.org/licenses/gpl-2.0.html GNU GPL 2.0 or later}
17
 * @since    ::     1.40
18
 * @author   ::    zyspec <[email protected]>
19
 */
20
21
use XoopsModules\Xoopspoll\{
22
    Helper,
23
    Utility
24
};
25
26
/**
27
 * @param \XoopsDatabase|null $db
28
 * @param                     $fromTable
29
 * @param                     $toTable
30
 * @return bool
31
 */
32
function xoopspollChangeTableName(\XoopsDatabase $db, $fromTable, $toTable): bool
33
{
34
    $fromTable = addslashes($fromTable);
35
    $toTable   = addslashes($toTable);
36
    /*
37
        $fromThisTable = $db->prefix("{$fromTable}");
38
        $toThisTable = $db->prefix("{$toTable}");
39
    */
40
    $helper  = Helper::getInstance();
41
    $success = false;
42
    if (Utility::dbTableExists($db, $fromTable) && !Utility::dbTableExists($db, $toTable)) {
43
        $sql     = 'ALTER TABLE ' . $db->prefix((string)$fromTable) . ' RENAME ' . $db->prefix('{$toTable}');
44
        $success = $db->queryF($sql);
45
        if (false === $success) {
46
            $moduleHandler   = $helper->getHandler('Module');
47
            $xoopspollModule = $moduleHandler->getByDirname('xoopspoll');
0 ignored issues
show
Bug introduced by
The method getByDirname() does not exist on XoopsObjectHandler. It seems like you code against a sub-type of XoopsObjectHandler such as XoopsModuleHandler 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

47
            /** @scrutinizer ignore-call */ 
48
            $xoopspollModule = $moduleHandler->getByDirname('xoopspoll');
Loading history...
48
            $xoopspollModule->setErrors(sprintf(_AM_XOOPSPOLL_UPGRADE_FAILED, $fromTable));
49
        }
50
    }
51
52
    return $success;
53
}
54
55
/**
56
 * @param \XoopsModule $module
57
 * @param              $prev_version
58
 * @return bool
59
 */
60
function xoops_module_update_xoopspoll(\XoopsModule $module, $prev_version): bool
61
{
62
    // referer check
63
    $success = false;
64
    $ref     = xoops_getenv('HTTP_REFERER');
65
    $helper  = Helper::getInstance();
66
    if (('' === $ref) || 0 === mb_strpos($ref, $GLOBALS['xoops']->url('modules/system/admin.php'))) {
67
        /* module specific part */
68
        require_once $helper->path('include/oninstall.php');
69
70
        $installedVersion = (int)$prev_version;
71
        xoops_loadLanguage('admin', 'xoopspoll');
72
        $db      = \XoopsDatabaseFactory::getDatabaseConnection();
73
        $success = true;
74
        if ($installedVersion < 140) {
75
            /* add column for poll anonymous which was created in versions prior
76
             * to 1.40 of xoopspoll but not automatically created
77
             */
78
            $result    = $db->queryF('SHOW COLUMNS FROM ' . $db->prefix('xoopspoll_desc') . " LIKE 'anonymous'");
79
            $foundAnon = $db->getRowsNum($result);
80
            if (empty($foundAnon)) {
81
                // column doesn't exist, so try and add it
82
                $success = $db->queryF('ALTER TABLE ' . $db->prefix('xoopspoll_desc') . ' ADD anonymous TINYINT( 1 ) DEFAULT 0 NOT NULL AFTER multiple');
83
                if (false === $success) {
84
                    $module->setErrors(_AM_XOOPSPOLL_ERROR_COLUMN . 'anonymous');
85
                }
86
            }
87
            /* change description to TINYTEXT */
88
            if ($success) {
89
                $success = $db->queryF('ALTER TABLE ' . $db->prefix('xoopspoll_desc') . ' MODIFY description TINYTEXT NOT NULL');
90
                if (false === $success) {
91
                    $module->setErrors(_AM_XOOPSPOLL_ERROR_COLUMN . 'description');
92
                }
93
            }
94
95
            if ($success) {
96
                $success = $db->queryF('ALTER TABLE ' . $db->prefix('xoopspoll_desc') . " ADD multilimit TINYINT( 63 ) UNSIGNED DEFAULT '0' NOT NULL AFTER multiple");
97
                if (false === $success) {
98
                    $module->setErrors(_AM_XOOPSPOLL_ERROR_COLUMN . 'multilimit');
99
                }
100
            }
101
            if ($success) {
102
                $success = $db->queryF('ALTER TABLE ' . $db->prefix('xoopspoll_desc') . " ADD mail_voter TINYINT( 1 ) UNSIGNED DEFAULT '0' NOT NULL AFTER mail_status");
103
                if (false === $success) {
104
                    $module->setErrors(_AM_XOOPSPOLL_ERROR_COLUMN . 'mail_voter');
105
                }
106
            }
107
            if ($success) {
108
                $result   = $db->queryF('SHOW COLUMNS FROM ' . $db->prefix('xoopspoll_desc') . " LIKE 'visibility'");
109
                $foundCol = $db->getRowsNum($result);
110
                if (empty($foundCol)) {
111
                    // column doesn't exist, so try and add it
112
                    $success = $db->queryF('ALTER TABLE ' . $db->prefix('xoopspoll_desc') . " ADD visibility INT( 3 ) DEFAULT '0' NOT NULL AFTER display");
113
                    if (false === $success) {
114
                        $module->setErrors(_AM_XOOPSPOLL_ERROR_COLUMN . 'visibility');
115
                    }
116
                }
117
            }
118
        }
119
120
        if ($success) {
121
            /* now reverse table names changes from 1.40 Beta  */
122
            $s1      = xoopspollChangeTableName($db, 'mod_xoopspoll_option', 'xoopspoll_option');
123
            $s2      = xoopspollChangeTableName($db, 'mod_xoopspoll_desc', 'xoopspoll_desc');
124
            $s3      = xoopspollChangeTableName($db, 'mod_xoopspoll_log', 'xoopspoll_log');
125
            $success = ($s1 && $s2 && $s3);
126
        }
127
    }
128
129
    return $success;
130
}
131