Passed
Pull Request — master (#18)
by Michael
02:44
created

xoops_module_update_xoopspoll()   F

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
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 http://www.fsf.org/copyleft/gpl.html GNU public license}
17
 * @package  ::   xoopspoll
18
 * @since    ::     1.40
19
 * @author   ::    zyspec <[email protected]>
20
 */
21
22
use XoopsModules\Xoopspoll\{
23
    Helper,
24
    Utility
25
};
26
27
28
/**
29
 * @param \XoopsDatabase|null $db
30
 * @param                     $fromTable
31
 * @param                     $toTable
32
 * @return bool
33
 */
34
function xoopspollChangeTableName(\XoopsDatabase $db, $fromTable, $toTable)
35
{
36
    $fromTable = addslashes($fromTable);
37
    $toTable   = addslashes($toTable);
38
    /*
39
        $fromThisTable = $db->prefix("{$fromTable}");
40
        $toThisTable = $db->prefix("{$toTable}");
41
    */
42
    $helper = Helper::getInstance();
43
    $success = false;
44
    if (Utility::dbTableExists($db, $fromTable) && !Utility::dbTableExists($db, $toTable)) {
45
        $sql     = sprintf('ALTER TABLE ' . $db->prefix((string)$fromTable) . ' RENAME ' . $db->prefix('{$toTable}'));
46
        $success = $db->queryF($sql);
47
        if (false === $success) {
48
            $moduleHandler   = $helper->getHandler('Module');
49
            $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

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