Completed
Pull Request — master (#8)
by Michael
02:48
created

main.php ➔ delBrokenLinks()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 22
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 15
nc 3
nop 0
dl 0
loc 22
rs 9.2
c 0
b 0
f 0
1
<?php
0 ignored issues
show
Coding Style Compatibility introduced by
For compatibility and reusability of your code, PSR1 recommends that a file should introduce either new symbols (like classes, functions, etc.) or have side-effects (like outputting something, or including other files), but not both at the same time. The first symbol is defined on line 55 and the first side effect is on line 37.

The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.

The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.

To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.

Loading history...
2
/**
3
 * MyLinks category.php
4
 *
5
 * Xoops mylinks - a multicategory links module
6
 *
7
 * @copyright ::  {@link http://xoops.org/ XOOPS Project}
8
 * @license   ::    {@link http://www.gnu.org/licenses/gpl-2.0.html GNU Public License}
9
 * @package   ::    mylinks
10
 * @subpackage:: admin
11
 * @author    ::     Thatware - http://thatware.org/
12
 */
13
// ------------------------------------------------------------------------- //
14
//                XOOPS - PHP Content Management System                      //
15
//                       <http://www.xoops.org/>                             //
16
// ------------------------------------------------------------------------- //
17
// Based on:                                                                 //
18
// myPHPNUKE Web Portal System - http://myphpnuke.com/                       //
19
// PHP-NUKE Web Portal System - http://phpnuke.org/                          //
20
// Thatware - http://thatware.org/                                           //
21
// ------------------------------------------------------------------------- //
22
//  This program is free software; you can redistribute it and/or modify     //
23
//  it under the terms of the GNU General Public License as published by     //
24
//  the Free Software Foundation; either version 2 of the License, or        //
25
//  (at your option) any later version.                                      //
26
//                                                                           //
27
//  This program is distributed in the hope that it will be useful,          //
28
//  but WITHOUT ANY WARRANTY; without even the implied warranty of           //
29
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            //
30
//  GNU General Public License for more details.                             //
31
//                                                                           //
32
//  You should have received a copy of the GNU General Public License        //
33
//  along with this program; if not, write to the Free Software              //
34
//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA //
35
// ------------------------------------------------------------------------- //
36
37
include __DIR__ . '/admin_header.php';
38
xoops_loadLanguage('main', $xoopsModule->getVar('dirname'));
39
include_once dirname(__DIR__) . '/class/utility.php';
40
//xoops_load('utility', $xoopsModule->getVar('dirname'));
0 ignored issues
show
Unused Code Comprehensibility introduced by
77% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
41
42
include dirname(__DIR__) . '/include/functions.php';
43
include_once XOOPS_ROOT_PATH . '/class/tree.php';
44
include_once XOOPS_ROOT_PATH . '/class/xoopslists.php';
45
include_once XOOPS_ROOT_PATH . '/include/xoopscodes.php';
46
//include_once XOOPS_ROOT_PATH . '/class/module.errorhandler.php';
0 ignored issues
show
Unused Code Comprehensibility introduced by
38% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
47
48
$myts = MyTextSanitizer::getInstance();
49
//$eh = new ErrorHandler;
0 ignored issues
show
Unused Code Comprehensibility introduced by
38% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
50
51
$mylinksCatHandler = xoops_getModuleHandler('category', $xoopsModule->getVar('dirname'));
52
$catObjs           = $mylinksCatHandler->getAll();
53
$myCatTree         = new XoopsObjectTree($catObjs, 'cid', 'pid');
54
55
function listNewLinks()
56
{
57
    global $xoopsDB, $myts, $myCatTree, $xoopsModule;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
58
    // List links waiting for validation
59
    $linkimg_array = XoopsLists::getImgListAsArray(XOOPS_ROOT_PATH . '/modules/' . $xoopsModule->getVar('dirname') . '/images/shots/');
60
    $result        = $xoopsDB->query('SELECT lid, cid, title, url, logourl, submitter FROM ' . $xoopsDB->prefix('mylinks_links') . " WHERE status='0' ORDER BY date DESC");
61
    $numrows       = $xoopsDB->getRowsNum($result);
62
    xoops_cp_header();
63
64
    $indexAdmin = new ModuleAdmin();
65
    echo $indexAdmin->addNavigation(basename(__FILE__) . '?op=listNewLinks');
66
67
    //@TODO: change to use XoopsForm
68
    echo "<table  class='outer' style='width: 100%; border-width: 0px; margin: 1px;'>\n" . "  <tr><th colspan='7'>" . sprintf(_MD_MYLINKS_LINKSWAITING, $numrows) . "<br></th></tr>\n";
69
    if ($numrows > 0) {
70
        while (list($lid, $cid, $title, $url, $logourl, $submitterid) = $xoopsDB->fetchRow($result)) {
71
            $result2 = $xoopsDB->query('SELECT description FROM ' . $xoopsDB->prefix('mylinks_text') . " WHERE lid='{$lid}'");
72
            list($description) = $xoopsDB->fetchRow($result2);
73
            $title = $myts->htmlSpecialChars($title);
74
            $url   = $myts->htmlSpecialChars($url);
75
            //      $url = urldecode($url);
0 ignored issues
show
Unused Code Comprehensibility introduced by
50% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
76
            //      $logourl = $myts->htmlSpecialChars($logourl);
0 ignored issues
show
Unused Code Comprehensibility introduced by
59% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
77
            //      $logourl = urldecode($logourl);
0 ignored issues
show
Unused Code Comprehensibility introduced by
50% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
78
            $description = $myts->htmlSpecialChars($description);
79
            $submitter   = XoopsUser::getUnameFromId($submitterid);
80
            echo "  <tr><td>\n" . "    <form action='main.php' method='post'>\n" . "        <table style='width: 80%;'>\n" . "          <tr><td style='text-align: right; nowrap='nowrap'>" . _MD_MYLINKS_SUBMITTER . "</td>\n" . "            <td><a href=\"" . XOOPS_URL . '/userinfo.php?uid='
81
                 . $submitterid . "\">$submitter</a></td>\n" . "          </tr>\n" . "          <tr><td style='text-align: right;' nowrap='nowrap'>" . _MD_MYLINKS_SITETITLE . "</td>\n" . "            <td><input type='text' name='title' size='50' maxlength='100' value='{$title}'></td>\n"
82
                 . "          </tr>\n" . "          <tr><td style='text-align: right;' nowrap='nowrap'>" . _MD_MYLINKS_SITEURL . "</td>\n" . "            <td><input type='text' name='url' size='50' maxlength='250' value='{$url}'>&nbsp;\n" . "              [&nbsp;<a href='"
83
                 . preg_replace('/javascript:/si', 'java script:', $url) . "' target='_blank'>" . _MD_MYLINKS_VISIT . "</a>&nbsp;]\n" . "            </td>\n" . "          </tr>\n" . "          <tr><td style='text-align: right;' nowrap'nowrap'>" . _MD_MYLINKS_CATEGORYC . "</td>\n"
84
                 . '            <td>' . $myCatTree->makeSelBox('cid', 'title', '- ', $cid) . "</td>\n" . "          </tr>\n" . "        <tr><td style='text-align: right; vertical-align: top;' nowrap='nowrap'>" . _MD_MYLINKS_DESCRIPTIONC . "</td>\n"
85
                 . "          <td><textarea name='description' cols='60' rows='5'>{$description}</textarea></td>\n" . "        </tr>\n" . "        <tr><td style='text-align: right; nowrap='nowrap'>" . _MD_MYLINKS_SHOTIMAGE . "</td>\n"
86
                 . "            <td><select size='1' name='logourl'><option value=' '>------</option>";
87
            foreach ($linkimg_array as $image) {
88
                echo "<option value='{$image}'>{$image}</option>";
89
            }
90
            $shotdir = '<strong>' . XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/images/shots/</strong>';
91
            echo "</select></td>\n" . "        </tr>\n" . '        <tr><td></td><td>' . sprintf(_MD_MYLINKS_SHOTMUST, $shotdir) . "</td></tr>\n" . "      </table>\n" . "      <br><input type='hidden' name='op' value='approve'>\n" . "      <input type='hidden' name='lid' value='{$lid}'>\n"
92
                 . "      <input type='submit' value='" . _MD_MYLINKS_APPROVE . "'>\n" . "    </form>\n";
93
            echo "    <form action='main.php?op=delNewLink&amp;lid={$lid}' method='post'><input type='submit' value='" . _DELETE . "'></form>\n" . "    <br><br>\n" . "  </td></tr>\n";
94
        }
95
    } else {
96
        echo "  <tr><td colspan='7' class='odd bold italic'>" . _MD_MYLINKS_NOSUBMITTED . "</td></tr>\n";
97
    }
98
    echo "</table>\n";
99
100
    include __DIR__ . '/admin_footer.php';
101
}
102
103
function linksConfigMenu()
104
{
105
    global $xoopsDB, $myts, $myCatTree, $xoopsModule;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
106
107
    $mylinksCatHandler = xoops_getModuleHandler('category', $xoopsModule->getVar('dirname'));
108
    $catCount          = $mylinksCatHandler->getCount();
109
    $linkimg_array     = XoopsLists::getImgListAsArray(XOOPS_ROOT_PATH . '/modules/' . $xoopsModule->getVar('dirname') . '/images/shots/');
110
111
    xoops_cp_header();
112
    $indexAdmin = new ModuleAdmin();
113
    echo $indexAdmin->addNavigation(basename(__FILE__) . '?op=linksConfigMenu');
114
115
    //    echo "<h4>" . _MD_MYLINKS_WEBLINKSCONF . "</h4>\n";
116
117
    // If there is a category, display add a New Link table
118
    //@TODO:  change to use XoopsForm
119
    if ($catCount) {
120
        echo "<table class='outer' style='width: 100%; border-width: 0px; margin: 1px;'>\n" . "  <tr><th style='font-size: larger;'>" . _MD_MYLINKS_ADDNEWLINK . "</th></tr>\n" . "  <tr class='odd'><td style='padding: 0 10em;'>\n" . "    <form method='post' action='main.php'>\n"
121
             . "      <table style='width: 80%;'>\n" . "        <tr>\n" . "          <td style='text-align: right;'>" . _MD_MYLINKS_SITETITLE . "</td>\n" . "            <td><input type='text' name='title' size='50' maxlength='100'></td>\n" . "          </tr>\n" . "        <tr>\n"
122
             . "          <td style='text-align: right;' nowrap='nowrap'>" . _MD_MYLINKS_SITEURL . "</td>\n" . "          <td><input type='text' name='url' size='50' maxlength='250' value='http://'></td>\n" . "        </tr>\n" . "        <tr>\n"
123
             . "          <td style='text-align: right;' nowrap='nowrap'>" . _MD_MYLINKS_CATEGORYC . "</td>\n" . "          <td>\n" . '            ' . $myCatTree->makeSelBox('cid', 'title') . "\n" . "            </td>\n" . "          </tr>\n" . "          <tr>\n"
124
             . "          <td style='text-align: right; vertical-align: top;' nowrap='nowrap'>" . _MD_MYLINKS_DESCRIPTIONC . "</td>\n" . '          <td>';
125
        xoopsCodeTarea('descarea', 60, 8);
126
        xoopsSmilies('descarea');
127
        echo "          </td>\n" . "        </tr>\n" . "        <tr>\n" . "          <td style='text-align: right; nowrap='nowrap'>" . _MD_MYLINKS_SHOTIMAGE . "</td>\n" . "          <td><select size='1' name='logourl'><option value=' '>------</option>";
128
        foreach ($linkimg_array as $image) {
129
            echo "<option value='{$image}'>{$image}</option>";
130
        }
131
        echo "</select></td>\n" . "        </tr>\n";
132
        $shotdir = '<strong>' . XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/images/shots/</strong>';
133
        echo '        <tr><td></td><td>' . sprintf(_MD_MYLINKS_SHOTMUST, $shotdir) . "</td></tr>\n" . "      </table><br>\n" . "      <div style='text-align: center;'>\n" . "        <input type='hidden' name='op' value='addLink'>\n" . "        <input type='submit' class='button' value='" . _ADD
134
             . "'>\n" . "      </div>\n" . "    </form>\n" . "  </td></tr>\n" . "</table>\n" . "<br>\n";
135
136
        // Modify Link
137
        $result2 = $xoopsDB->query('SELECT COUNT(*) FROM ' . $xoopsDB->prefix('mylinks_links') . '');
138
        list($numLinks) = $xoopsDB->fetchRow($result2);
139
        if ($numLinks) {
140
            echo "<table class='outer' style='width: 100%; border-width: 0px; margin: 1px;'>\n" . "  <tr><th style='font-size: larger;'>" . _MD_MYLINKS_MODLINK . "</th></tr>\n" . "  <tr class='odd'><td style='text-align: center;'>\n" . "    <form method='get' action='main.php'>\n" . '      '
141
                 . _MD_MYLINKS_LINKID . "\n" . "      <input type='text' name='lid' size='12' maxlength='11'>\n" . "      <input type='hidden' name='fct' value='mylinks'>\n" . "      <input type='hidden' name='op' value='modLink'><br><br>\n" . "      <input type='submit' value='"
142
                 . _MD_MYLINKS_MODIFY . "'>\n" . "    </form>\n" . "  </td></tr>\n" . '</table>';
143
        }
144
    }
145
146
    // Add a New Main Category
147
    echo "<table class='outer' style='width: 100%; border-width: 0px; margin: 1px;'>\n" . "  <tr><th style='font-size: larger;'>" . _MD_MYLINKS_ADDMAIN . "</th></tr>\n" . "  <tr class='odd'><td style='text-align: center;'>\n" . "    <form method='post' action='main.php'>\n" . '      '
148
         . _MD_MYLINKS_TITLEC . "\n" . "      <input type='text' name='title' size='30' maxlength='50'><br>\n" . '      ' . _MD_MYLINKS_IMGURL . "<br>\n" . "      <input type='text' name='imgurl' size='100' maxlength='150' value='http://'><br><br>\n"
149
         . "      <input type='hidden' name='cid' value='0'>\n" . "      <input type='hidden' name='op' value='addCat'>\n" . "      <input type='submit' value='" . _ADD . "'><br>\n" . "    </form>\n" . "  </td></tr>\n";
150
    if (!$catCount) {
151
        echo "  <tr><th style='font-size: larger;'>" . _MD_MYLINKS_IMPORTCATHDR . "</th></tr>\n" . "  <tr class='even'><td style='text-align: center;'>\n" . "    <form method='post' action='main.php'>\n" . '      ' . _MD_MYLINKS_IMPORTCATS . "<br>\n"
152
             . "      <input type='hidden' name='op' value='importCats'>\n" . "      <input type='hidden' name='ok' value='0'>\n" . "      <input style='margin: .5em 0em;' type='submit' value='" . _SUBMIT . "'><br>\n" . "    </form>\n" . '  </td></tr>' . "</table>\n" . "<br>\n";
153
    }
154
    // Add a New Sub-Category
155 View Code Duplication
    if ($catCount) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
156
        echo "<table class='outer' style='width: 100%; border-width: 0px; margin: 1px;'>\n" . "  <tr><th style='font-size: larger;'>" . _MD_MYLINKS_ADDSUB . "</th></tr>\n" . "  <tr class='odd'><td style='text-align: center;'>\n" . "    <form method='post' action='main.php'>\n" . '      '
157
             . _MD_MYLINKS_TITLEC . "\n" . "      <input type='text' name='title' size='30' maxlength='50'>&nbsp;" . _MD_MYLINKS_IN . "&nbsp;\n" . '      ' . $myCatTree->makeSelBox('pid', 'title') . "\n" . "      <input type='hidden' name='op' value='addCat'><br><br>\n"
158
             . "      <input type='submit' value='" . _ADD . "'><br>\n" . "    </form>\n" . "  </td></tr>\n" . "</table>\n" . '<br>';
159
    }
160
161
    // Modify Category Table Display
162 View Code Duplication
    if ($catCount) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
163
        echo "<table class='outer' style='width: 100%; border-width: 0px; margin: 1px;'>\n" . "  <tr><th style='font-size: larger;'>" . _MD_MYLINKS_MODCAT . "</th></tr>\n" . "  <tr class='odd'><td style='text-align: center;'>\n" . "    <form method='get' action='main.php'>\n"
164
             //            ."      <h4>" . _MD_MYLINKS_MODCAT . "</h4><br>\n"
165
             . '      ' . _MD_MYLINKS_CATEGORYC . "\n" . '      ' . $myCatTree->makeSelBox('cid', 'title') . "\n" . "      <br><br>\n" . "      <input type='hidden' name='op' value='modCat'>\n" . "      <input type='submit' value='" . _MD_MYLINKS_MODIFY . "'>\n" . "    </form>\n" . "  </td></tr>\n"
166
             . "</table>\n" . "<br>\n";
167
    }
168
    include __DIR__ . '/admin_footer.php';
169
}
170
171
function modLink()
0 ignored issues
show
Coding Style introduced by
modLink uses the super-global variable $_GET which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
Coding Style introduced by
modLink uses the super-global variable $GLOBALS which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
172
{
173
    global $xoopsDB, $myts, $myCatTree, $xoopsModule;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
174
175
    $linkimg_array = XoopsLists::getImgListAsArray(XOOPS_ROOT_PATH . '/modules/' . $xoopsModule->getVar('dirname') . '/images/shots/');
176
    $lid           = MylinksUtility::mylinks_cleanVars($_GET, 'lid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'lid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
177
    $bknrptid      = MylinksUtility::mylinks_cleanVars($_GET, 'bknrptid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'bknrptid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
178
179
    xoops_cp_header();
180
181
    $result = $xoopsDB->query('SELECT cid, title, url, logourl FROM ' . $xoopsDB->prefix('mylinks_links') . " WHERE lid={$lid}");
182
    if (!$result) {
183
        MylinksUtility::show_message(_MD_MYLINKS_NORECORDFOUND);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
184
        exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function modLink() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
185
    }
186
    list($cid, $title, $url, $logourl) = $xoopsDB->fetchRow($result);
187
188
    $title   = $myts->htmlSpecialChars($myts->stripSlashesGPC($title));
189
    $url     = $myts->htmlSpecialChars($myts->stripSlashesGPC($url));
190
    $logourl = $myts->htmlSpecialChars($myts->stripSlashesGPC($logourl));
191
    //$url                    = urldecode($url);
0 ignored issues
show
Unused Code Comprehensibility introduced by
56% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
192
    //$logourl                = urldecode($logourl);
0 ignored issues
show
Unused Code Comprehensibility introduced by
56% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
193
    $result2 = $xoopsDB->query('SELECT description FROM ' . $xoopsDB->prefix('mylinks_text') . " WHERE lid={$lid}");
194
    list($description) = $xoopsDB->fetchRow($result2);
195
    $GLOBALS['description'] = $myts->htmlSpecialChars($myts->stripSlashesGPC($description));
196
197
    echo '<h4>' . _MD_MYLINKS_WEBLINKSCONF . '</h4>' . "<table class='outer' style='width: 100%; border-width: 0px; margin: 1px;'>" . "  <tr><th colspan='2'>" . _MD_MYLINKS_MODLINK . "</th></tr>\n" . "  <tr class='odd'>\n" . "    <td>\n"
198
         . "      <form method='post' action='main.php' style='display: inline;'>\n" . "        <table>\n" . '          <tr><td>' . _MD_MYLINKS_LINKID . "</td><td style='font-weight: bold;'>{$lid}</td></tr>\n" . '          <tr><td>' . _MD_MYLINKS_SITETITLE
199
         . "</td><td><input type='text' name='title' value='{$title}' size='50' maxlength='100'></td></tr>\n" . '          <tr><td>' . _MD_MYLINKS_SITEURL . "</td><td><input type='text' name='url' value='{$url}' size='50' maxlength='250'></td></tr>\n"
200
         . "          <tr><td style='vertical-align: top;'>" . _MD_MYLINKS_DESCRIPTIONC . '</td><td>';
201
    xoopsCodeTarea('description', 60, 8);
202
    xoopsSmilies('description');
203
    echo "</td></tr>\n" . '          <tr><td>' . _MD_MYLINKS_CATEGORYC . '</td><td>' . '' . $myCatTree->makeSelBox('cid', 'title', '- ', $cid) . '' . "          </td></tr>\n" . '          <tr><td>' . _MD_MYLINKS_SHOTIMAGE . '</td><td>' . "<select size='1' name='logourl'>"
204
         . "<option value=' '>------</option>";
205
    foreach ($linkimg_array as $image) {
206
        $opt_selected = ($image == $logourl) ? " selected='selected'" : '';
207
        echo "<option value='{$image}'{$opt_selected}>{$image}</option>";
208
    }
209
    echo '</select>' . "</td></tr>\n";
210
211
    $shotdir = '<strong>' . XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/images/shots/</strong>';
212
    echo '          <tr><td>&nbsp;</td><td>' . sprintf(_MD_MYLINKS_SHOTMUST, $shotdir) . "</td></tr>\n" . '        </table>' . "        <br><br><input type='hidden' name='lid' value='{$lid}'>\n" . "        <input type='hidden' name='bknrptid' value='{$bknrptid}'>\n"
213
         . "        <input type='hidden' name='op' value='modLinkS'>\n" . "        <input type='submit' value='" . _MD_MYLINKS_MODIFY . "'>" . "      </form>\n"
214
         . "      <form action='main.php?op=delLink&amp;lid={$lid}' method='post' style='margin-left: 1em; display: inline;'><input type='submit' value='" . _DELETE . "'></form>\n"
215
         . "      <form action='main.php?op=linksConfigMenu' method='post' style='margin-left: 1em; display: inline;'><input type='submit' value='" . _CANCEL . "'></form>\n" . '      <hr>';
216
217
    $result5 = $xoopsDB->query('SELECT COUNT(*) FROM ' . $xoopsDB->prefix('mylinks_votedata') . " WHERE lid='{$lid}'");
218
    list($totalvotes) = $xoopsDB->fetchRow($result5);
219
    echo "      <table style='width: 100%;'>\n" . "        <tr><td colspan='7' style='font-weight: bold;'>" . sprintf(_MD_MYLINKS_TOTALVOTES, $totalvotes) . "<br><br></td></tr>\n";
220
    // Show Registered Users Votes
221
    $result5 = $xoopsDB->query('SELECT ratingid, ratinguser, rating, ratinghostname, ratingtimestamp FROM ' . $xoopsDB->prefix('mylinks_votedata') . " WHERE lid='{$lid}' AND ratinguser >0 ORDER BY ratingtimestamp DESC");
222
    $votes   = $xoopsDB->getRowsNum($result5);
223
    echo "        <tr><td colspan='7' style='font-weight: bold;'><br><br>" . sprintf(_MD_MYLINKS_USERTOTALVOTES, $votes) . "<br><br></td></tr>\n";
224
    echo "        <tr>\n" . '          <th>' . _MD_MYLINKS_USER . "  </th>\n" . '          <th>' . _MD_MYLINKS_IP . "  </th>\n" . '          <th>' . _MD_MYLINKS_RATING . "  </th>\n" . '          <th>' . _MD_MYLINKS_USERAVG . "  </th>\n" . '          <th>' . _MD_MYLINKS_TOTALRATE . "  </th>\n"
225
         . '          <th>' . _MD_MYLINKS_DATE . "  </th>\n" . '          <th>' . _DELETE . "</td>\n" . "        </tr>\n";
226
    if (0 == $votes) {
227
        echo "        <tr><td style='text-align: center;' colspan='7'>" . _MD_MYLINKS_NOREGVOTES . "<br></td></tr>\n";
228
    }
229
230
    $x           = 0;
231
    $colorswitch = '#DDDDDD';
232
233
    while (list($ratingid, $ratinguser, $rating, $ratinghostname, $ratingtimestamp) = $xoopsDB->fetchRow($result5)) {
234
        //  $ratingtimestamp = formatTimestamp($ratingtimestamp);
0 ignored issues
show
Unused Code Comprehensibility introduced by
50% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
235
        //Individual user information
236
        //v3.11 changed to let SQL do calculations instead of PHP
237
        $result2 = $xoopsDB->query('SELECT COUNT(), FORMAT(AVG(rating),2) FROM ' . $xoopsDB->prefix('mylinks_votedata') . " WHERE ratinguser = '$ratinguser'");
238
        list($uservotes, $useravgrating) = $xoopsDB->fetchRow($result2);
239
        //        $useravgrating = ($rating2) ? sprintf("%01.2f", ($useravgrating / $uservotes)) : 0;
0 ignored issues
show
Unused Code Comprehensibility introduced by
56% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
240
        /*
0 ignored issues
show
Unused Code Comprehensibility introduced by
56% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
241
                $result2=$xoopsDB->query("SELECT rating FROM ".$xoopsDB->prefix("mylinks_votedata")." WHERE ratinguser = '$ratinguser'");
242
                $uservotes = $xoopsDB->getRowsNum($result2);
243
                $useravgrating = 0;
244
                while ( list($rating2) = $xoopsDB->fetchRow($result2) ) {
245
                    $useravgrating = $useravgrating + $rating2;
246
                }
247
                $useravgrating = sprintf("%01.2f", ($useravgrating / $uservotes));
248
        */
249
        $ratingusername = XoopsUser::getUnameFromId($ratinguser);
250
        echo "        <tr>\n" . "          <td style='background-color: {$colorswitch};'>{$ratingusername}</td>\n" . "          <td style='background-color: {$colorswitch};'>{$ratinghostname}</td>\n" . "          <td style='background-color: {$colorswitch};'>{$rating}</td>\n"
251
             . "          <td style='background-color: {$colorswitch};'>{$useravgrating}</td>\n" . "          <td style='background-color: {$colorswitch};'>{$uservotes}</td>\n" . "          <td style='background-color: {$colorswitch};'>{$ratingtimestamp}</td>\n"
252
             . "          <td style='background-color: {$colorswitch}; text-align: center; font-weight: bold;'>\n" . "            <form action='main.php?op=delVote&amp;lid={$lid}&amp;rid={$ratingid}' method='post'><input type='submit' value='X'></form>\n" . "          </td>\n" . "        </tr>\n";
253
        $x++;
254
        $colorswitch = ($colorswitch == '#DDDDDD') ? '#FFFFFF' : '#DDDDDD';
255
    }
256
    // Show Unregistered Users Votes
257
    $result5 = $xoopsDB->query('SELECT ratingid, rating, ratinghostname, ratingtimestamp FROM ' . $xoopsDB->prefix('mylinks_votedata') . " WHERE lid ='{$lid}' AND ratinguser='0' ORDER BY ratingtimestamp DESC");
258
    $votes   = $xoopsDB->getRowsNum($result5);
259
    echo "        <tr><td colspan='7' style='font-weight: bold;'><br><br>" . sprintf(_MD_MYLINKS_ANONTOTALVOTES, $votes) . "<br><br></td></tr>\n" . "        <tr>\n" . "          <th colspan='2'>" . _MD_MYLINKS_IP . "  </th>\n" . "          <th colspan='3' style='font-weight: bold;'>"
260
         . _MD_MYLINKS_RATING . "  </th>\n" . "          <th style='font-weight: bold;'>" . _MD_MYLINKS_DATE . "  </th>\n" . "          <th style='text-align: center; font-weight: bold;'>" . _DELETE . "<br></th>\n" . "        </tr>\n";
261
    if (0 == $votes) {
262
        echo "        <tr><td colspan='7' style='text-align: center;'>" . _MD_MYLINKS_NOUNREGVOTES . "<br></td></tr>\n";
263
    }
264
    $x           = 0;
265
    $colorswitch = '#DDDDDD';
266
    while (list($ratingid, $rating, $ratinghostname, $ratingtimestamp) = $xoopsDB->fetchRow($result5)) {
267
        $formatted_date = formatTimestamp($ratingtimestamp);
268
        echo "        <tr>\n" . "          <td colspan='2' style='background-color: {$colorswitch}'>{$ratinghostname}</td>\n" . "          <td colspan='3' style='background-color: {$colorswitch}'>{$rating}</td>\n" . "          <td style='background-color: {$colorswitch}'>{$formatted_date}</td>\n"
269
             . "          <td style='background-color: {$colorswitch} text-align: center; font-weight: bold;'>\n" . "            <form action='main.php?op=delVote&amp;lid={$lid}&amp;rid={$ratingid}' method='post'><input type='submit' value='X'></form>\n" . '          </td>' . '        </tr>';
270
        $x++;
271
        $colorswitch = ($colorswitch == '#DDDDDD') ? '#FFFFFF' : '#DDDDDD';
272
    }
273
    echo "        <tr><td colspan='7'>&nbsp;<br></td></tr>\n" . "      </table>\n" . "    </td>\n" . "  </tr>\n" . "</table>\n";
274
    include __DIR__ . '/admin_footer.php';
275
}
276
277
function delVote()
0 ignored issues
show
Coding Style introduced by
delVote uses the super-global variable $_POST which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
278
{
279
    global $xoopsDB;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
280
    $lid = MylinksUtility::mylinks_cleanVars($_POST, 'lid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'lid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
281
    $rid = MylinksUtility::mylinks_cleanVars($_POST, 'rid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'rid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
282
283
    $sql    = sprintf('DELETE FROM %s WHERE ratingid = %u', $xoopsDB->prefix('mylinks_votedata'), $rid);
284
    $result = $xoopsDB->query($sql);
0 ignored issues
show
Unused Code introduced by
$result is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
285
    if (!result) {
286
        MylinksUtility::show_message(_MD_MYLINKS_NORECORDFOUND);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
287
        exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function delVote() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
288
    }
289
    updaterating($lid);
0 ignored issues
show
Bug introduced by
It seems like $lid defined by \MylinksUtility::mylinks...nt', array('min' => 0)) on line 280 can also be of type double; however, updaterating() does only seem to accept integer, maybe add an additional type check?

If a method or function can return multiple different values and unless you are sure that you only can receive a single value in this context, we recommend to add an additional type check:

/**
 * @return array|string
 */
function returnsDifferentValues($x) {
    if ($x) {
        return 'foo';
    }

    return array();
}

$x = returnsDifferentValues($y);
if (is_array($x)) {
    // $x is an array.
}

If this a common case that PHP Analyzer should handle natively, please let us know by opening an issue.

Loading history...
290
    redirect_header('index.php', 2, _MD_MYLINKS_VOTEDELETED);
291
    exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function delVote() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
292
}
293
294
function listBrokenLinks()
0 ignored issues
show
Coding Style introduced by
listBrokenLinks uses the super-global variable $GLOBALS which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
Coding Style introduced by
listBrokenLinks uses the super-global variable $_SERVER which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
295
{
296
    global $xoopsDB, $xoopsModule, $pathIcon16, $myts;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
297
298
    $result           = $xoopsDB->query('SELECT * FROM ' . $xoopsDB->prefix('mylinks_broken') . ' GROUP BY lid ORDER BY reportid DESC');
299
    $totalBrokenLinks = $xoopsDB->getRowsNum($result);
300
    xoops_cp_header();
301
302
    $indexAdmin = new ModuleAdmin();
303
    echo $indexAdmin->addNavigation(basename(__FILE__) . '?op=listBrokenLinks');
304
    $GLOBALS['xoTheme']->addStylesheet(mylinksGetStylePath('mylinks.css', 'include'));
305
    //    echo "<link rel='stylesheet' href='" . $GLOBALS['xoops']->url('browse.php?modules/mylinks/include/mylinks.css') . "' type='text/css'>";
0 ignored issues
show
Unused Code Comprehensibility introduced by
58% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
306
307
    echo "<table class='outer' style='width: 100%; border-width: 0px; margin: 1px;'>\n" . '  <tr><th>' . sprintf(_MD_MYLINKS_BROKENREPORTS, $totalBrokenLinks) . "<br></th></tr>\n" . "  <tr class='odd'><td>\n";
308
309
    if (0 == $totalBrokenLinks) {
310
        echo "    <span class='italic bold'>" . _MD_MYLINKS_NOBROKEN . '</span>';
311
    } else {
312
        $colorswitch = '#DDDDDD';
313
        echo "<img src='{$pathIcon16}/on.png'> = " . _MD_MYLINKS_IGNOREDESC . '<br>' . "<img src='{$pathIcon16}/edit.png'> = " . _MD_MYLINKS_EDITDESC . '<br>' . "<img src='{$pathIcon16}/delete.png'> = " . _MD_MYLINKS_DELETEDESC . '<br>' . "   <table class='center width100'>\n"
314
             //           ."      <tr><th colspan='6'>" . _MD_MYLINKS_DELETEDESC . "</th><tr>"
315
             . "      <tr>\n" . '        <th>' . _MD_MYLINKS_LINKNAME . "</th>\n" . '        <th>' . _MD_MYLINKS_REPORTER . "</th>\n" . '        <th>' . _MD_MYLINKS_LINKSUBMITTER . "</th>\n" . '        <th>' . _MD_MYLINKS_ACTIONS . "</th>\n" . "      </tr>\n";
316
317
        $formToken = $GLOBALS['xoopsSecurity']->getTokenHTML();
318
319
        while (list($reportid, $lid, $sender, $ip) = $xoopsDB->fetchRow($result)) {
320
            $result2 = $xoopsDB->query('SELECT title, url, submitter FROM ' . $xoopsDB->prefix('mylinks_links') . " WHERE lid={$lid}");
321
            if (0 != $sender) {
322
                $result3 = $xoopsDB->query('SELECT uname, email FROM ' . $xoopsDB->prefix('users') . " WHERE uid={$sender}");
323
                list($uname, $email) = $xoopsDB->fetchRow($result3);
324
            }
325
            list($title, $url, $ownerid) = $xoopsDB->fetchRow($result2);
326
            $title = $myts->stripSlashesGPC($title);
327
            //          $url=urldecode($url);
0 ignored issues
show
Unused Code Comprehensibility introduced by
63% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
328
            $result4 = $xoopsDB->query('SELECT uname, email FROM ' . $xoopsDB->prefix('users') . " WHERE uid='{$ownerid}'");
329
            list($owner, $owneremail) = $xoopsDB->fetchRow($result4);
330
            echo "      <tr>\n" . "        <td style='background-color: {$colorswitch}'><a href=$url target='_blank'>{$title}</a></td>\n";
331
            if ($email == '') {
332
                echo "        <td style='background-color: {$colorswitch};'>{$sender} ({$ip})";
333
            } else {
334
                echo "        <td style='background-color: {$colorswitch};'><a href='mailto:{$email}'>{$uname}</a> ({$ip})";
0 ignored issues
show
Bug introduced by
The variable $email does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
Bug introduced by
The variable $uname does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
335
            }
336
            echo "        </td>\n";
337
            if ('' == $owneremail) {
338
                echo "        <td style='background-color: {$colorswitch};'>{$owner}";
339
            } else {
340
                echo "        <td style='background-color: {$colorswitch};'><a href='mailto:{$owneremail}'>{$owner}</a>\n";
341
            }
342
            echo "        <td style='text-align: center; background-color: {$colorswitch};'>\n"
343
                 //                ."          <a href='main.php?op=ignoreBrokenLinks&amp;lid={$lid}'><img src=". $pathIcon16 ."/on.png alt='" . _AM_MYLINKS_IGNORE . "' title='" . _AM_MYLINKS_IGNORE . "'></a>\n"
344
                 //                ."          <a href='main.php?op=modLink&amp;lid={$lid}&amp;bknrptid={$reportid}'><img src=". $pathIcon16 ."/edit.png alt='" . _EDIT . "' title='" . _EDIT . "'></a>\n"
345
                 //                ."          <a href='main.php?op=delBrokenLinks&amp;lid={$lid}'><img src=". $pathIcon16 ."/delete.png alt='" . _DELETE . "' title='" . _DELETE . "'></a>\n"
346
                 . "          <form class='inline' action='" . $_SERVER['PHP_SELF'] . "' method='post'>\n" . "             <input type='hidden' name='op' value='ignoreBrokenLinks'>\n" . "             <input type='hidden' name='bknrptid' value='{$reportid}'>\n" . "            {$formToken}\n"
347
                 . "            <input type='button' title='" . _MD_MYLINKS_IGNOREDESC . "' alt='" . _AM_MYLINKS_IGNORE . "' id='image-button-on' onclick='this.form.submit();'></input>\n" . "          </form>\n" . "          <form class='inline' action='" . $_SERVER['PHP_SELF']
348
                 . "'?op=modLink&amp;lid={$lid} method='get'>\n" . "            <input type='hidden' name='op' value='modLink'>\n" . "            <input type='hidden' name='bknrptid' value='{$reportid}'>\n" . "            <input type='hidden' name='lid' value={$lid}>\n"
349
                 . "            <input type='button' title='" . _MD_MYLINKS_EDITDESC . "' alt='" . _EDIT . "' id='image-button-edit' onclick='this.form.submit();'></input>\n" . "          </form>\n" . "          <form class='inline' action='" . $_SERVER['PHP_SELF'] . "' method='post'>\n"
350
                 . "             <input type='hidden' name='op' value='delBrokenLinks'>\n" . "             <input type='hidden' name='lid' value='{$lid}'>\n" . "            {$formToken}\n" . "            <input type='button' title='" . _MD_MYLINKS_DELETEDESC . "' alt='" . _DELETE
351
                 . "' id='image-button-delete' onclick='this.form.submit();'></input>\n" . "          </form>\n" . "        </td>\n" . "      </tr>\n";
352
353
            $colorswitch = ($colorswitch == '#DDDDDD') ? '#FFFFFF' : '#DDDDDD';
354
        }
355
        echo "    </table>\n";
356
    }
357
358
    echo '</td></tr></table>';
359
    include __DIR__ . '/admin_footer.php';
360
}
361
362
function delBrokenLinks()
0 ignored issues
show
Coding Style introduced by
delBrokenLinks uses the super-global variable $_GET which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
363
{
364
    global $xoopsDB;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
365
366
    $lid = MylinksUtility::mylinks_cleanVars($_GET, 'lid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'lid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
367
368
    $sql    = sprintf('DELETE FROM %s WHERE lid = %u', $xoopsDB->prefix('mylinks_broken'), $lid);
369
    $result = $xoopsDB->queryF($sql);
0 ignored issues
show
Unused Code introduced by
$result is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
370
    if (!result) {
371
        MylinksUtility::show_message(_MD_MYLINKS_NOBROKEN);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
372
        exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function delBrokenLinks() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
373
    }
374
375
    $sql    = sprintf('DELETE FROM %s WHERE lid = %u', $xoopsDB->prefix('mylinks_links'), $lid);
376
    $result = $xoopsDB->queryF($sql);
0 ignored issues
show
Unused Code introduced by
$result is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
377
    if (!result) {
378
        MylinksUtility::show_message(_MD_MYLINKS_NORECORDFOUND);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
379
    } else {
380
        MylinksUtility::show_message(_MD_MYLINKS_LINKDELETED);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
381
    }
382
    exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function delBrokenLinks() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
383
}
384
385 View Code Duplication
function ignoreBrokenLinks()
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
Coding Style introduced by
ignoreBrokenLinks uses the super-global variable $_POST which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
386
{
387
    global $xoopsDB;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
388
389
    $bknrptid = MylinksUtility::mylinks_cleanVars($_POST, 'bknrptid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'bknrptid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
390
    $sql      = sprintf('DELETE FROM %s WHERE reportid = %u', $xoopsDB->prefix('mylinks_broken'), $bknrptid);
391
    $result   = $xoopsDB->queryF($sql);
0 ignored issues
show
Unused Code introduced by
$result is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
392
    if (!result) {
393
        MylinksUtility::show_message(_MD_MYLINKS_NORECORDFOUND);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
394
    } else {
395
        MylinksUtility::show_message(_MD_MYLINKS_BROKENDELETED);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
396
    }
397
    exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function ignoreBrokenLinks() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
398
}
399
400
function listModReq()
401
{
402
    global $xoopsDB, $myts, $xoopsModuleConfig, $xoopsModule;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
403
404
    $result           = $xoopsDB->query('SELECT requestid, lid, cid, title, url, logourl, description, modifysubmitter FROM ' . $xoopsDB->prefix('mylinks_mod') . ' ORDER BY requestid');
405
    $totalModRequests = $xoopsDB->getRowsNum($result);
406
    xoops_cp_header();
407
    $indexAdmin = new ModuleAdmin();
408
    echo $indexAdmin->addNavigation(basename(__FILE__) . '?op=listModReq');
409
410
    $mylinksCatHandler = xoops_getModuleHandler('category', $xoopsModule->getVar('dirname'));
411
412
    //echo "<h4>" . _MD_MYLINKS_WEBLINKSCONF . "</h4>\n";
413
    echo "<table class='outer' style='width: 100%; border-weight: 0px; margin: 1px;'>\n" . "  <tr class='even'><th>" . sprintf(_MD_MYLINKS_MODREQUESTS, $totalModRequests) . "</th></tr>\n" . "  <tr class='odd'>\n" . "    <td>\n";
414
    if ($totalModRequests > 0) {
415
        echo "  <table style='width: 95%;'>\n" . "    <tr>\n" . "      <td>\n";
416
        $lookup_lid = array();
417
        while (list($requestid, $lid, $cid, $title, $url, $logourl, $description, $submitterid) = $xoopsDB->fetchRow($result)) {
418
            $catObj                 = $mylinksCatHandler->get($cid);
419
            $lookup_lid[$requestid] = $lid;
420
            $result2                = $xoopsDB->query('SELECT cid, title, url, logourl, submitter FROM ' . $xoopsDB->prefix('mylinks_links') . " WHERE lid='{$lid}'");
421
            list($origcid, $origtitle, $origurl, $origlogourl, $ownerid) = $xoopsDB->fetchRow($result2);
422
            $origCatObj = $mylinksCatHandler->get($origcid);
423
            $result2    = $xoopsDB->query('SELECT description FROM ' . $xoopsDB->prefix('mylinks_text') . " WHERE lid='{$lid}'");
424
            list($origdescription) = $xoopsDB->fetchRow($result2);
425
            $result7      = $xoopsDB->query('SELECT uname, email FROM ' . $xoopsDB->prefix('users') . " WHERE uid='{$submitterid}'");
426
            $result8      = $xoopsDB->query('SELECT uname, email FROM ' . $xoopsDB->prefix('users') . " WHERE uid='{$ownerid}'");
427
            $cidtitle     = $catObj->getVar('title');
428
            $cidtitle     = $myts->htmlSpecialChars($cidtitle);
429
            $origcidtitle = $origCatObj->getVar('title');
430
            $origcidtitle = $myts->htmlSpecialChars($origcidtitle);
431
            /*
0 ignored issues
show
Unused Code Comprehensibility introduced by
55% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
432
                        $cidtitle     = $catObj->getPathFromID();
433
                        $origcidtitle = $origCatObj->getPathFromID();
434
            */
435
            list($submitter, $submitteremail) = $xoopsDB->fetchRow($result7);
436
            list($owner, $owneremail) = $xoopsDB->fetchRow($result8);
437
            $title = $myts->htmlSpecialChars($title);
438
            $url   = $myts->htmlSpecialChars($url);
439
            //$url   = urldecode($url);
0 ignored issues
show
Unused Code Comprehensibility introduced by
56% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
440
441
            // use original image file to prevent users from changing screen shots file
442
            $origlogourl = $myts->htmlSpecialChars($origlogourl);
443
            $logourl     = $origlogourl;
444
445
            //$logourl     = urldecode($logourl);
0 ignored issues
show
Unused Code Comprehensibility introduced by
56% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
446
            $description = $myts->displayTarea($myts->stripSlashesGPC($description), 0);
447
            $origurl     = $myts->htmlSpecialChars($origurl);
448
            //$origurl     = urldecode($origurl);
0 ignored issues
show
Unused Code Comprehensibility introduced by
56% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
449
            //$origlogourl = urldecode($origlogourl);
0 ignored issues
show
Unused Code Comprehensibility introduced by
56% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
450
            $origdescription = $myts->displayTarea($myts->stripSlashesGPC($origdescription), 0);
451
            $owner           = ('' == $owner) ? 'administration' : $owner;
452
            echo "        <table style='border-width: 1px; border-color: black; padding: 5px; margin: auto; text-align: center; width: 800px;'>\n" . "          <tr><td>\n" . "            <table style='width: 100%; background-color: #DDDDDD'>\n" . "              <tr>\n"
453
                 . "                <td style='vertical-align: top; width: 45%; font-weight: bold;'>" . _MD_MYLINKS_ORIGINAL . "</td>\n" . "                <td rowspan='14' style='vertical-align: top; text-align: left; font-size: small;'><br>" . _MD_MYLINKS_DESCRIPTIONC
454
                 . "<br>{$origdescription}</td>\n" . "              </tr>\n" . "              <tr><td style='vertical-align: top; width: 45%; font-size: small;'>" . _MD_MYLINKS_SITETITLE . "{$myts->stripSlashesGPC($origtitle)}</td></tr>\n"
455
                 . "              <tr><td style='vertical-align: top; width: 45%; font-size: small;'>" . _MD_MYLINKS_SITEURL . "{$origurl}</td></tr>\n" . "              <tr><td style='vertical-align= top; width: 45%; font-size: small;'>" . _MD_MYLINKS_CATEGORYC . "{$origcidtitle}</td></tr>\n"
456
                 . "              <tr><td style='vertical-align: top; width: 45%; font-size: small;'>" . _MD_MYLINKS_SHOTIMAGE . '';
457
            if ($xoopsModuleConfig['useshots'] && !empty($origlogourl)) {
458
                echo "<img src='" . XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . "/images/shots/{$origlogourl}' style='width: " . $xoopsModuleConfig['shotwidth'] . ";'>";
459
            } else {
460
                echo '&nbsp;';
461
            }
462
            echo "</td></tr>\n" . "        </table>\n" . "      </td></tr>\n" . "      <tr><td>\n" . "        <table style='width: 100%; background-color: #DDDDDD'>\n" . "          <tr>\n" . "            <td style='vertical-align: top; width: 45%; font-weight: bold;'>" . _MD_MYLINKS_PROPOSED
463
                 . "</td>\n" . "            <td rowspan='14' style='vertical-align: top; text-align: left; font-size: small;'><br>" . _MD_MYLINKS_DESCRIPTIONC . "<br>{$description}</td>\n" . "          </tr>\n" . "          <tr><td style='vertical-align: top; width: 45%; font-size: small;'>"
464
                 . _MD_MYLINKS_SITETITLE . "{$title}</td></tr>\n" . "          <tr><td style='vertical-align: top; width: 45%; font-size: small;'>" . _MD_MYLINKS_SITEURL . "{$url}</td></tr>\n" . "          <tr><td style='vertical-align: top; width: 45%; font-size: small;'>" . _MD_MYLINKS_CATEGORYC
465
                 . "{$cidtitle}</td></tr>\n" . "          <tr><td style='vertical-align: top; width: 45%; font-size: small;'>" . _MD_MYLINKS_SHOTIMAGE . '';
466
            if ($xoopsModuleConfig['useshots'] == 1 && !empty($logourl)) {
467
                echo "<img src='" . XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . "/images/shots/{$logourl}' style='width: " . $xoopsModuleConfig['shotwidth'] . ";' alt=''>";
468
            } else {
469
                echo '&nbsp;';
470
            }
471
            echo "</td></tr>\n" . "        </table>\n" . "      </td></tr>\n" . "    </table>\n" . "    <table style='text-align: center; width: 800px; margin: auto;'>\n" . "      <tr>\n";
472
            if ('' == $submitteremail) {
473
                echo "      <td style='text-align: center; font-weight: bold;'>" . _MD_MYLINKS_SUBMITTER . "{$submitter}</td>\n";
474
            } else {
475
                echo "      <td style='text-align: center; font-size: small;'>" . _MD_MYLINKS_SUBMITTER . "<a href='mailto:{$submitteremail}'>{$submitter}</a></td>\n";
476
            }
477
            if ('' == $owneremail) {
478
                echo "      <td style='text-align: center; font-size: small;'>" . _MD_MYLINKS_OWNER . "{$owner}</td>\n";
479
            } else {
480
                echo "      <td style='text-align: center; font-size: small;'>" . _MD_MYLINKS_OWNER . "<a href='mailto:{$owneremail}'>{$owner}</a></td>\n";
481
            }
482
            echo "      <td style='text-align: center; font-size: small;'>\n" //                ."        <form style='display: inline; margin-right: 1.5em;' action='main.php?op=changeModReq&amp;requestid={$requestid}' method='get'>\n"
483
                 . "        <form style='display: inline; margin-right: 1.5em;' action='main.php' method='post'>\n" . "          <input type='hidden' name='op' value='changeModReq'>\n" . "          <input type='hidden' name='requestid' value='{$requestid}'>\n"
484
                 . "          <input type='submit' value='" . _MD_MYLINKS_APPROVE . "'>\n" . "        </form>\n" //                ."        <form style='display: inline; margin-right: 1.5em;' action='main.php?op=modLink&amp;lid={$lid}' method='get'>\n"
485
                 . "        <form style='display: inline; margin-right: 1.5em;' action='main.php' method='get'>\n" . "          <input type='hidden' name='op' value='modLink'>\n" . "          <input type='hidden' name='lid' value='{$lid}'>\n" . "          <input type='submit' value='" . _EDIT
486
                 . "'></form>\n" //                ."        <form style='display: inline;' action='main.php?op=ignoreModReq&amp;requestid={$requestid}' method='post'><input type='submit' value='" . _MD_MYLINKS_IGNORE . "'></form>\n"
487
                 . "        <form style='display: inline;' action='main.php' method='post'>\n" . "          <input type='hidden' name='op' value='ignoreModReq'>\n" . "          <input type='hidden' name='requestid' value='{$requestid}'>\n" . "          <input type='submit' value='"
488
                 . _MD_MYLINKS_IGNORE . "'>\n" . "        </form>\n" . "      </td>\n" . "    </tr>\n" . "  </table><br><br>\n";
489
        }
490
        echo '    </td></tr></table>';
491
    } else {
492
        echo '      <em>' . _MD_MYLINKS_NOMODREQ . "</em>\n";
493
    }
494
    echo "    </td>\n" . "  </tr>\n" . "</table>\n";
495
    include __DIR__ . '/admin_footer.php';
496
}
497
498
function changeModReq()
0 ignored issues
show
Coding Style introduced by
changeModReq uses the super-global variable $_POST which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
499
{
500
    global $xoopsDB, $myts;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
501
502
    $requestid = MylinksUtility::mylinks_cleanVars($_POST, 'requestid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'requestid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
503
    $query     = 'SELECT lid, cid, title, url, logourl, description FROM ' . $xoopsDB->prefix('mylinks_mod') . " WHERE requestid='{$requestid}'";
504
    $result    = $xoopsDB->query($query);
505
    while (list($lid, $cid, $title, $url, $logourl, $description) = $xoopsDB->fetchRow($result)) {
506
        $url         = addslashes($url);
507
        $logourl     = addslashes($logourl);
508
        $title       = addslashes($title);
509
        $description = addslashes($description);
510
511
        $sql    = sprintf("UPDATE %s SET cid = %u, title = '%s', url = '%s', logourl = '%s', status = 1, date = %u WHERE lid = %u", $xoopsDB->prefix('mylinks_links'), $cid, $title, $url, $logourl, time(), $lid);
512
        $result = $xoopsDB->query($sql);
0 ignored issues
show
Unused Code introduced by
$result is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
513
        if (!result) {
514
            MylinksUtility::show_message(_MD_MYLINKS_DBNOTUPDATED);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
515
            exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function changeModReq() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
516
        } else {
517
            $sql    = sprintf("UPDATE %s SET description = '%s' WHERE lid = %u", $xoopsDB->prefix('mylinks_text'), $description, $lid);
518
            $result = $xoopsDB->query($sql);
519
            if (!$result) {
520
                MylinksUtility::show_message(_MD_MYLINKS_DBNOTUPDATED);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
521
                exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function changeModReq() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
522
            } else {
523
                $sql = sprintf('DELETE FROM %s WHERE requestid = %u', $xoopsDB->prefix('mylinks_mod'), $requestid);
524
                $xoopsDB->query($sql);
525
                if (!result) {
526
                    MylinksUtility::show_message(_MD_MYLINKS_DBNOTUPDATED);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
527
                    exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function changeModReq() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
528
                }
529
            }
530
        }
531
    }
532
    redirect_header('index.php', 2, _MD_MYLINKS_DBUPDATED);
533
    exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function changeModReq() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
534
}
535
536 View Code Duplication
function ignoreModReq()
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
Coding Style introduced by
ignoreModReq uses the super-global variable $_POST which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
537
{
538
    global $xoopsDB;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
539
540
    $requestid = MylinksUtility::mylinks_cleanVars($_POST, 'requestid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'requestid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
541
    $sql       = sprintf('DELETE FROM %s WHERE requestid = %u', $xoopsDB->prefix('mylinks_mod'), $requestid);
542
    $result    = $xoopsDB->query($sql);
0 ignored issues
show
Unused Code introduced by
$result is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
543
    if (!result) {
544
        MylinksUtility::show_message(_MD_MYLINKS_DBNOTUPDATED);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
545
    } else {
546
        MylinksUtility::show_message(_MD_MYLINKS_MODREQDELETED);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
547
    }
548
    exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function ignoreModReq() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
549
}
550
551
function modLinkS()
0 ignored issues
show
Coding Style introduced by
modLinkS uses the super-global variable $_POST which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
552
{
553
    global $xoopsDB, $myts;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
554
555
    $cid         = MylinksUtility::mylinks_cleanVars($_POST, 'cid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'cid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
556
    $lid         = MylinksUtility::mylinks_cleanVars($_POST, 'lid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'lid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
557
    $bknrptid    = MylinksUtility::mylinks_cleanVars($_POST, 'bknrptid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'bknrptid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
558
    $url         = MylinksUtility::mylinks_cleanVars($_POST, 'url', '', 'string');
0 ignored issues
show
Documentation introduced by
'url' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
559
    $logourl     = MylinksUtility::mylinks_cleanVars($_POST, 'logourl', '', 'string');
0 ignored issues
show
Documentation introduced by
'logourl' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
560
    $title       = MylinksUtility::mylinks_cleanVars($_POST, 'title', '', 'string');
0 ignored issues
show
Documentation introduced by
'title' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
561
    $description = MylinksUtility::mylinks_cleanVars($_POST, 'description', '', 'string');
0 ignored issues
show
Documentation introduced by
'description' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
562
    /*
0 ignored issues
show
Unused Code Comprehensibility introduced by
65% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
563
        $url     = $myts->addSlashes($url);
564
        $logourl = $myts->addSlashes($_POST['logourl']);
565
        $title   = $myts->addSlashes($_POST['title']);
566
        $description = $myts->addSlashes($_POST['description']);
567
    */
568
    $xoopsDB->query('UPDATE ' . $xoopsDB->prefix('mylinks_links') . " SET cid='{$cid}', title='{$title}', url='{$url}', logourl='{$logourl}', status='2', date=" . time() . " WHERE lid='{$lid}'");
569
    $result = $xoopsDB->query('UPDATE ' . $xoopsDB->prefix('mylinks_text') . " SET description='{$description}' where lid='{$lid}'");
0 ignored issues
show
Unused Code introduced by
$result is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
570
    if (!result) {
571
        redirect_header('main.php', 2, _MD_MYLINKS_DBNOTUPDATED);
572
        exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function modLinkS() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
573
    }
574
    if ($bknrptid) {
575
        // edit came after following link from a broken report, so delete broken report too
576
        $sql    = sprintf('DELETE FROM %s WHERE reportid = %u', $xoopsDB->prefix('mylinks_broken'), $bknrptid);
577
        $result = $xoopsDB->query($sql);
578
        if (!$result) {
579
            MylinksUtility::show_message(_MD_MYLINKS_DBNOTUPDATED);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
580
            exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function modLinkS() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
581
        }
582
    }
583
    redirect_header('index.php', 1, _MD_MYLINKS_DBUPDATED);
584
    exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function modLinkS() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
585
}
586
587
function delLink()
0 ignored issues
show
Coding Style introduced by
delLink uses the super-global variable $_GET which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
588
{
589
    global $xoopsDB, $xoopsModule;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
590
    $lid = MylinksUtility::mylinks_cleanVars($_GET, 'lid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'lid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
591
592
    $dbTables = array('links', 'text', 'votedata', 'broken', 'mod');
593 View Code Duplication
    foreach ($dbTables as $thisTable) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
594
        $sql    = sprintf('DELETE FROM %s WHERE lid = %u', $xoopsDB->prefix("mylinks_{$thisTable}"), $lid);
595
        $result = $xoopsDB->query($sql);
596
        if (!$result) {
597
            MylinksUtility::show_message(_MD_MYLINKS_DBNOTUPDATED);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
598
            exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function delLink() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
599
        }
600
    }
601
    // delete comments & notifications
602
    xoops_comment_delete($xoopsModule->getVar('mid'), $lid);
603
    xoops_notification_deletebyitem($xoopsModule->getVar('mid'), 'link', $lid);
604
605
    redirect_header('index.php', 2, _MD_MYLINKS_LINKDELETED);
606
    exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function delLink() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
607
}
608
609
function modCat()
0 ignored issues
show
Coding Style introduced by
modCat uses the super-global variable $_GET which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
610
{
611
    global $xoopsDB, $myts, $xoopsModule;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
612
613
    $cid = MylinksUtility::mylinks_cleanVars($_GET, 'cid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'cid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
614
    xoops_cp_header();
615
616
    echo '<h4>' . _MD_MYLINKS_WEBLINKSCONF . "</h4>\n" . "<table class='outer' style='width: 100%; border-width: 0px; margin: 1px;'>\n" . '  <tr><th>' . _MD_MYLINKS_MODCAT . "<br></th></tr>\n" . "  <tr class='odd'>\n" . "    <td>\n";
617
    $mylinksCatHandler = xoops_getModuleHandler('category', $xoopsModule->getVar('dirname'));
618
    $catObj            = $mylinksCatHandler->get($cid);
619
620
    if (isset($catObj) && is_object($catObj)) {
621
        $criteria = new CriteriaCompo();
622
        $criteria->add(new Criteria('cid', $cid, '!='));
623
        $catListObjs = $mylinksCatHandler->getAll($criteria);
624
        $catListTree = new XoopsObjectTree($catListObjs, 'cid', 'pid');
625
626
        $title  = $myts->htmlSpecialChars($catObj->getVar('title'));
627
        $imgurl = $myts->htmlSpecialChars($catObj->getVar('imgurl'), 'n');
628
        $pid    = $catObj->getVar('pid');
629
        echo "      <form action='main.php' method='post'>" . _MD_MYLINKS_TITLEC . "\n" . "        <input type='text' name='title' value='{$title}' size='51' maxlength='50'>\n" . "        <br><br>\n";
630
        if (0 == $catObj->getVar('pid')) {
631
            echo '        ' . _MD_MYLINKS_IMGURLMAIN . "<br>\n" . "        <input type='text' name='imgurl' value='{$imgurl}' size='100' maxlength='150'>\n" . "        <br><br>\n";
632
        }
633
        echo '        ' . _MD_MYLINKS_PARENT . "&nbsp;\n" . '        ' . $catListTree->makeSelBox('pid', 'title', '- ', $pid, true) . "\n" . "        <br>\n" . "        <input type='hidden' name='cid' value='{$cid}'>\n" . "        <input type='hidden' name='op' value='modCatS'><br>\n"
634
             . "        <input type='submit' value='" . _MD_MYLINKS_SAVE . "'>\n" . "        <input type='button' value='" . _DELETE . "' onclick=\"location='main.php?pid={$pid}&amp;cid={$cid}&amp;op=delCat'\">&nbsp;\n" . "        <input type='button' value='" . _CANCEL
635
             . "' onclick=\"javascript:history.go(-1)\">\n" . "      </form>\n";
636
    } else {
637
        echo '  <tr><td>' . _MD_MYLINKS_CIDERROR . "</td></tr>\n" . "  <tr><td><input type='button' value='" . _BACK . "' onclick=\"history.go(-1)\"></td></tr>\n";
638
    }
639
    echo "    </td>\n" . "  </tr>\n" . "</table>\n";
640
    include __DIR__ . '/admin_footer.php';
641
}
642
643
function modCatS()
0 ignored issues
show
Coding Style introduced by
modCatS uses the super-global variable $_POST which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
644
{
645
    global $xoopsDB, $myts, $xoopsModule;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
646
    $cid    = MylinksUtility::mylinks_cleanVars($_POST, 'cid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'cid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
647
    $imgurl = MylinksUtility::mylinks_cleanVars($_POST, 'imgurl', '', 'string');
0 ignored issues
show
Documentation introduced by
'imgurl' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
648
    $title  = MylinksUtility::mylinks_cleanVars($_POST, 'title', '', 'string');
0 ignored issues
show
Documentation introduced by
'title' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
649
    //    $title  = $myts->addSlashes($title);
0 ignored issues
show
Unused Code Comprehensibility introduced by
59% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
650
651
    if (empty($title)) {
652
        redirect_header('index.php', 3, _MD_MYLINKS_ERRORTITLE);
653
    }
654
655
    //    $imgurl = $myts->addSlashes($imgurl);
0 ignored issues
show
Unused Code Comprehensibility introduced by
59% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
656
    $updateInfo = array(
657
        'pid'    => (int)$_POST['pid'],
658
        //                        'title'  =>  $myts->addSlashes($_POST['title']),
0 ignored issues
show
Unused Code Comprehensibility introduced by
74% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
659
        'title'  => $title,
660
        'imgurl' => $imgurl
661
    );
662
663
    $mylinksCatHandler = xoops_getModuleHandler('category', $xoopsModule->getVar('dirname'));
664
    $catObj            = $mylinksCatHandler->get($cid);
665
666
    if (isset($catObj) && is_object($catObj)) {
667
        $catObj->setVars($updateInfo);
668
        $result = $mylinksCatHandler->insert($catObj);
669
    } else {
670
        $result = false;
671
    }
672
673
    if (!$result) {
674
        MylinksUtility::show_message(_MD_MYLINKS_DBNOTUPDATED);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
675
        exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function modCatS() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
676
    } else {
677
        redirect_header('index.php', 2, _MD_MYLINKS_DBUPDATED);
678
    }
679
}
680
681
function delCat()
0 ignored issues
show
Coding Style introduced by
delCat uses the super-global variable $_REQUEST which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
Coding Style introduced by
delCat uses the super-global variable $_POST which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
682
{
683
    global $xoopsDB, $myCatTree, $xoopsModule, $xoopsUser;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
684
685
    $cid = MylinksUtility::mylinks_cleanVars($_REQUEST, 'cid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'cid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
686
    $ok  = MylinksUtility::mylinks_cleanVars($_POST, 'ok', 0, 'int', array('min' => 0, 'max' => 1));
0 ignored issues
show
Documentation introduced by
'ok' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
687
688
    if (1 == $ok) {
689
        /**
690
         * nickname code:
691
         *
692
         *  get all subcategories
693
         *  get all links in these categories/subcategories
694
         *  get all links in category & subcategories
695
         *  delete all links in links, text, votedata, broken, & mod db tables that are in any of these categories
696
         *  delete all comments and notifications for the links that have been deleted
697
         *  delete category and all subcategories from category db table
698
         *  delete all notifications for the categories that have been deleted
699
         */
700
        $mylinksCatHandler = xoops_getModuleHandler('category', $xoopsModule->getVar('dirname'));
701
702
        //get all subcategories under the specified category
703
        $catObjArr = $myCatTree->getAllChild($cid);
704
        $cidArray  = array();
705
        foreach ($catObjArr as $catObj) {
706
            $cidArray[] = $catObj->getVar('cid');
707
        }
708
709
        array_push($cidArray, $cid); //add this category id to the array
710
        $catIDs   = implode(',', $cidArray);
711
        $criteria = new CriteriaCompo();
712
        $criteria->add(new Criteria('cid', '(' . (int)$cid . ',' . $catIDs . ')', 'IN'));
713
714
        // get list ids in any of these categories
715
        $sql    = sprintf('SELECT lid FROM %s WHERE cid IN %s', $xoopsDB->prefix('mylinks_links'), "({$catIDs})");
716
        $result = $xoopsDB->query($sql);
717
        if (!$result) {
718
            MylinksUtility::show_message(_MD_MYLINKS_NORECORDFOUND);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
719
            exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function delCat() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
720
        }
721
        $lidArray = $xoopsDB->fetchArray($result);
722
723
        // delete any links, link notifications and link comments from the database tables
724
        if ($lidArray) {
725
            $linkIDs  = '(' . implode(',', $lidArray) . ')';
726
            $dbTables = array('links', 'text', 'votedata', 'broken', 'mod');
727 View Code Duplication
            foreach ($dbTables as $thisTable) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
728
                $sql    = sprintf('DELETE FROM %s WHERE lid IN %s', $xoopsDB->prefix("mylinks_{$thisTable}"), $linkIDs);
729
                $result = $xoopsDB->query($sql);
0 ignored issues
show
Unused Code introduced by
$result is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
730
                if (!result) {
731
                    MylinksUtility::show_message(_MD_MYLINKS_NORECORDFOUND);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
732
                    exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function delCat() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
733
                }
734
            }
735
            // remove any notifications and comments for these listings
736
            foreach ($lidArray as $this_lid) {
737
                xoops_comment_delete($xoopsModule->getVar('mid'), $this_lid);
738
                xoops_notification_deletebyitem($xoopsModule->getVar('mid'), 'link', $this_lid);
739
            }
740
        }
741
        // delete category and all subcategories from database
742
        if (!$mylinksCatHandler->deleteAll($criteria)) {
743
            redirect_header('main.php', 2, _MD_MYLINKS_NORECORDFOUND);
744
            exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function delCat() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
745
        }
746
747
        // delete the notification settings for each (sub)category
748
        foreach ($cidArray as $key => $id) {
749
            xoops_notification_deletebyitem($xoopsModule->getVar('mid'), 'category', $id);
750
        }
751
752
        redirect_header('index.php', 2, _MD_MYLINKS_CATDELETED);
753
        exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function delCat() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
754
    } else {
755
        xoops_cp_header();
756
        xoops_confirm(array('op' => 'delCat', 'cid' => $cid, 'ok' => 1), 'main.php', _MD_MYLINKS_WARNING);
757
        include __DIR__ . '/admin_footer.php';
758
    }
759
}
760
761
function delNewLink()
0 ignored issues
show
Coding Style introduced by
delNewLink uses the super-global variable $_GET which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
762
{
763
    global $xoopsDB, $xoopsModule;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
764
    $lid = MylinksUtility::mylinks_cleanVars($_GET, 'lid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'lid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
765
766
    $sql    = sprintf('DELETE FROM %s WHERE lid = %u', $xoopsDB->prefix('mylinks_links'), $lid);
767
    $result = $xoopsDB->query($sql);
0 ignored issues
show
Unused Code introduced by
$result is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
768
    if (!result) {
769
        redirect_header('main.php', 2, _MD_MYLINKS_NORECORDFOUND);
770
        exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function delNewLink() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
771
    }
772
    $sql    = sprintf('DELETE FROM %s WHERE lid = %u', $xoopsDB->prefix('mylinks_text'), $lid);
773
    $result = $xoopsDB->query($sql);
774
    if (!$result) {
775
        MylinksUtility::show_message(_MD_MYLINKS_NORECORDFOUND);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
776
        exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function delNewLink() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
777
    }
778
    // delete comments
779
    xoops_comment_delete($xoopsModule->getVar('mid'), $lid);
780
    // delete notifications
781
    xoops_notification_deletebyitem($xoopsModule->getVar('mid'), 'link', $lid);
782
    redirect_header('index.php', 2, _MD_MYLINKS_LINKDELETED);
783
}
784
785
function addCat()
0 ignored issues
show
Coding Style introduced by
addCat uses the super-global variable $_POST which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
786
{
787
    global $xoopsDB, $myts, $xoopsModule;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
788
    $pid    = MylinksUtility::mylinks_cleanVars($_POST, 'pid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'pid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
789
    $title  = MylinksUtility::mylinks_cleanVars($_POST, 'title', '', 'string');
0 ignored issues
show
Documentation introduced by
'title' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
790
    $imgurl = MylinksUtility::mylinks_cleanVars($_POST, 'imgurl', '', 'string');
0 ignored issues
show
Documentation introduced by
'imgurl' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
791
    /*
0 ignored issues
show
Unused Code Comprehensibility introduced by
59% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
792
        $title  = $myts->addSlashes($title);
793
        $imgurl = $myts->addSlashes($imgurl);
794
    */
795
    if (empty($title)) {
796
        redirect_header('index.php', 2, _MD_MYLINKS_ERRORTITLE);
797
        exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function addCat() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
798
    }
799
800
    $newCatVars = array(
801
        'pid'    => $pid,
802
        'title'  => $title,
803
        'imgurl' => $imgurl
804
    );
805
806
    $mylinksCatHandler = xoops_getModuleHandler('category', $xoopsModule->getVar('dirname'));
807
    $newCatObj         = $mylinksCatHandler->create();
808
    $newCatObj->setVars($newCatVars);
809
    $newCatId = $mylinksCatHandler->insert($newCatObj);
810
    if ($newCatId) {
811
        //now update notification handler & trigger new cat added event
812
        $tags                  = array();
813
        $tags['CATEGORY_NAME'] = $title;
814
        $tags['CATEGORY_URL']  = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . '/viewcat.php?cid=' . $newCatId;
815
        $notificationHandler  = xoops_getHandler('notification');
816
        $notificationHandler->triggerEvent('global', 0, 'new_category', $tags);
817
        redirect_header('index.php', 2, _MD_MYLINKS_NEWCATADDED);
818
    } else {
819
        redirect_header('index.php', 2, _MD_MYLINKS_DBNOTUPDATED);
820
    }
821
}
822
823
function importCats()
0 ignored issues
show
Coding Style introduced by
importCats uses the super-global variable $_POST which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
824
{
825
    global $xoopsDB, $xoopsModule, $xoopsConfig, $myts;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
826
827
    $ok = MylinksUtility::mylinks_cleanVars($_POST, 'ok', 0, 'int', array('min' => 0, 'max' => 1));
0 ignored issues
show
Documentation introduced by
'ok' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
828
    if (1 == $ok) {
829
        if (file_exists(XOOPS_ROOT_PATH . '/modules/' . $xoopsModule->getVar('dirname') . '/language/' . $xoopsConfig['language'] . '/sql/mylinks_cat.dat')) {
830
            $importFile = XOOPS_ROOT_PATH . '/modules/' . $xoopsModule->getVar('dirname') . '/language/' . $xoopsConfig['language'] . '/sql/mylinks_cat.dat';
831
        } else {
832
            $importFile = XOOPS_ROOT_PATH . '/modules/' . $xoopsModule->getVar('dirname') . '/language/english/sql/mylinks_cat.dat';
833
        }
834
835
        if (file_exists($importFile)) {
836
            /* the following will not work on some shared servers even though it's the most efficient
837
            $sql = "LOAD DATA INFILE '{$importFile}' INTO TABLE " . $xoopsDB->prefix('mylinks_cat') . " FIELDS TERMINATED BY ',' IGNORE 1 LINES";
838
            $result = $xoopsDB->query($sql);
839
            */
840
841
            if (($handle = fopen($importFile, 'r')) !== false) {
842
                // set 1000 to 0 in the following line if input line is truncated
843
                while (($data = fgetcsv($handle, 1000, ',')) !== false) {
844
                    $sql    = sprintf("INSERT INTO %s (cid, pid, title, imgurl) VALUES (%u, %u, '%s', '%s')", $xoopsDB->prefix('mylinks_cat'), (int)$data[0], (int)$data[1], $myts->addSlashes($data[2]), $myts->addSlashes($data[3]));
845
                    $result = $xoopsDB->query($sql);
846
                    if (!$result) {
847
                        MylinksUtility::show_message(_MD_MYLINKS_NORECORDFOUND);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
848
                        exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function importCats() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
849
                    }
850
                }
851
                fclose($handle);
852
                redirect_header('index.php', 2, _MD_MYLINKS_CATSIMPORTED);
853
            } else {
854
                // problem importing categories
855
                $mylinksCatHandler = xoops_getModuleHandler('category', $xoopsModule->getVar('dirname'));
856
                $result            = $mylinksCatHandler->getAll();
857
                if (count($result)) {
858
                    $result = $mylinksCatHandler->deleteAll();  // empty the dB table from partial import
0 ignored issues
show
Unused Code introduced by
$result is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
859
                }
860
                redirect_header('index.php', 2, _MD_MYLINKS_CATSNOTIMPORTED);
861
            }
862
        } else {  //exit somewhat gracefully if import file not found
863
            redirect_header('index.php', 2, sprintf(_MD_MYLINKS_IMPORTFILENOTFOUND, $importFile));
864
        }
865
        exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function importCats() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
866
    } else {
867
        xoops_cp_header();
868
        xoops_confirm(array('op' => 'importCats', 'ok' => 1), 'main.php', _MD_MYLINKS_CATWARNING);
869
        include __DIR__ . '/admin_footer.php';
870
    }
871
}
872
873
function addLink()
0 ignored issues
show
Coding Style introduced by
addLink uses the super-global variable $_POST which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
874
{
875
    global $xoopsDB, $myts, $xoopsUser, $xoopsModule;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
876
877
    $cid         = MylinksUtility::mylinks_cleanVars($_POST, 'cid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'cid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
878
    $url         = MylinksUtility::mylinks_cleanVars($_POST, 'url', '', 'string');
0 ignored issues
show
Documentation introduced by
'url' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
879
    $logourl     = MylinksUtility::mylinks_cleanVars($_POST, 'logourl', '', 'string');
0 ignored issues
show
Documentation introduced by
'logourl' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
880
    $title       = MylinksUtility::mylinks_cleanVars($_POST, 'title', '', 'string');
0 ignored issues
show
Documentation introduced by
'title' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
881
    $description = MylinksUtility::mylinks_cleanVars($_POST, 'descarea', '', 'string');
0 ignored issues
show
Documentation introduced by
'descarea' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
882
    /*
0 ignored issues
show
Unused Code Comprehensibility introduced by
59% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
883
        $url           = $myts->addSlashes($url);
884
        $logourl       = $myts->addSlashes($logourl);
885
        $title         = $myts->addSlashes($title);
886
        $description   = $myts->addSlashes($description);
887
    */
888
    $submitter = $xoopsUser->uid();
889
    $result    = $xoopsDB->query('SELECT COUNT(*) FROM ' . $xoopsDB->prefix('mylinks_links') . " WHERE url='{$url}'");
890
    list($numrows) = $xoopsDB->fetchRow($result);
891
    $errormsg = array();
892
    $error    = false;
893
    if ($numrows > 0) {
894
        $errormsg[] = "<h4 style='color: #FF0000'>" . _MD_MYLINKS_ERROREXIST . '</h4>';
895
        $error      = true;
896
    }
897
    if ($title == '') {  // check if title exists
898
        $errormsg[] = "<h4 style='color: #FF0000'>" . _MD_MYLINKS_ERRORTITLE . '</h4>';
899
        $error      = true;
900
    }
901
    if ($url == '') {  // check if url exists
902
        $errormsg[] = "<h4 style='color: #FF0000'>" . _MD_MYLINKS_ERRORURL . '</h4>';
903
        $error      = true;
904
    }
905
    if ($description == '') { // check if description exists
906
        $errormsg[] = "<h4 style='color: #FF0000'>" . _MD_MYLINKS_ERRORDESC . '</h4>';
907
        $error      = true;
908
    }
909
    if ($error) {
910
        xoops_cp_header();
911
        $displayMsg = implode('<br>', $errormsg);
912
        echo "<div style='text-align: center;'><fieldset>{$displayMsg}</fieldset></div>\n";
913
        xoops_cp_footer();
914
        exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function addLink() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
915
    }
916
917
    $newid  = $xoopsDB->genId($xoopsDB->prefix('mylinks_links') . '_lid_seq');
918
    $sql    = sprintf("INSERT INTO %s (lid, cid, title, url, logourl, submitter, status, date, hits, rating, votes, comments) VALUES (%u, %u, '%s', '%s', '%s', %u, %u, %u, %u, %u, %u, %u)", $xoopsDB->prefix('mylinks_links'), $newid, $cid, $title, $url, $logourl, $submitter, 1, time(), 0, 0, 0, 0);
919
    $result = $xoopsDB->query($sql);
920
    if (!$result) {
921
        MylinksUtility::show_message(_MD_MYLINKS_NORECORDFOUND);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
922
        exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function addLink() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
923
    }
924
    if (0 == $newid) {
925
        $newid = $xoopsDB->getInsertId();
926
    }
927
    $sql    = sprintf("INSERT INTO %s (lid, description) VALUES (%u, '%s')", $xoopsDB->prefix('mylinks_text'), $newid, $description);
928
    $result = $xoopsDB->query($sql);
929
    if (!$result) {
930
        MylinksUtility::show_message(_MD_MYLINKS_NORECORDFOUND);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
931
        exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function addLink() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
932
    }
933
    $tags              = array();
934
    $tags['LINK_NAME'] = $title;
935
    $tags['LINK_URL']  = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . "/singlelink.php?cid={$cid}&amp;lid={$newid}";
936
937
    $mylinksCatHandler     = xoops_getModuleHandler('category', $xoopsModule->getVar('dirname'));
938
    $catObj                = $mylinksCatHandler->get($cid);
939
    $tags['CATEGORY_NAME'] = $catObj->getVar('title');
940
    unset($catObj, $mylinksCatHandler);
941
942
    $tags['CATEGORY_URL'] = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . "/viewcat.php?cid={$cid}";
943
    $notificationHandler = xoops_getHandler('notification');
944
    $notificationHandler->triggerEvent('global', 0, 'new_link', $tags);
945
    $notificationHandler->triggerEvent('category', $cid, 'new_link', $tags);
946
    redirect_header('main.php?op=linksConfigMenu', 2, _MD_MYLINKS_NEWLINKADDED);
947
}
948
949
function approve()
0 ignored issues
show
Coding Style introduced by
approve uses the super-global variable $_POST which is generally not recommended.

Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable:

// Bad
class Router
{
    public function generate($path)
    {
        return $_SERVER['HOST'].$path;
    }
}

// Better
class Router
{
    private $host;

    public function __construct($host)
    {
        $this->host = $host;
    }

    public function generate($path)
    {
        return $this->host.$path;
    }
}

class Controller
{
    public function myAction(Request $request)
    {
        // Instead of
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;

        // Better (assuming you use the Symfony2 request)
        $page = $request->query->get('page', 1);
    }
}
Loading history...
950
{
951
    global $xoopsDB, $myts, $xoopsModule;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
952
953
    $lid         = MylinksUtility::mylinks_cleanVars($_POST, 'lid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'lid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
954
    $cid         = MylinksUtility::mylinks_cleanVars($_POST, 'cid', 0, 'int', array('min' => 0));
0 ignored issues
show
Documentation introduced by
'cid' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
955
    $title       = MylinksUtility::mylinks_cleanVars($_POST, 'title', '', 'string');
0 ignored issues
show
Documentation introduced by
'title' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
956
    $url         = MylinksUtility::mylinks_cleanVars($_POST, 'url', '', 'string');
0 ignored issues
show
Documentation introduced by
'url' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
957
    $logourl     = MylinksUtility::mylinks_cleanVars($_POST, 'logourl', '', 'string');
0 ignored issues
show
Documentation introduced by
'logourl' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
958
    $description = MylinksUtility::mylinks_cleanVars($_POST, 'description', '', 'string');
0 ignored issues
show
Documentation introduced by
'description' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
959
    /*
0 ignored issues
show
Unused Code Comprehensibility introduced by
59% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
960
        $url         = $myts->addSlashes($url);
961
        $logourl     = $myts->addSlashes($logourl);
962
        $title       = $myts->addSlashes($title);
963
        $description = $myts->addSlashes($description);
964
    */
965
    $query  = 'UPDATE ' . $xoopsDB->prefix('mylinks_links') . " set cid='{$cid}', title='{$title}', url='{$url}', logourl='{$logourl}', status='1', date=" . time() . " WHERE lid='{$lid}'";
966
    $result = $xoopsDB->query($query);
967
    if ($result) {
968
        $query  = 'UPDATE ' . $xoopsDB->prefix('mylinks_text') . " SET description='{$description}' WHERE lid='{$lid}'";
969
        $result = $xoopsDB->query($query);
970
        if (!$result) {
971
            MylinksUtility::show_message(_MD_MYLINKS_NORECORDFOUND);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
972
            exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function approve() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
973
        }
974
    } else {
975
        MylinksUtility::show_message(_MD_MYLINKS_NORECORDFOUND);
0 ignored issues
show
Deprecated Code introduced by
The method MylinksUtility::show_message() has been deprecated.

This method has been deprecated.

Loading history...
976
        exit();
0 ignored issues
show
Coding Style Compatibility introduced by
The function approve() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
977
    }
978
    $tags              = array();
979
    $tags['LINK_NAME'] = $title;
980
    $tags['LINK_URL']  = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . "/singlelink.php?cid={$cid}&amp;lid={$lid}";
981
    $mylinksCatHandler = xoops_getModuleHandler('category', $xoopsModule->getVar('dirname'));
982
    $catObj            = $mylinksCatHandler->get($cid);
983
    /*
0 ignored issues
show
Unused Code Comprehensibility introduced by
55% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
984
    $sql = "SELECT title FROM " . $xoopsDB->prefix("mylinks_cat") . " WHERE cid=" . $cid;
985
    $result = $xoopsDB->query($sql);
986
    $row = $xoopsDB->fetchArray($result);
987
    $tags['CATEGORY_NAME'] = $row['title'];
988
    */
989
    if ($catObj) {
990
        $tags['CATEGORY_NAME'] = $catObj->getVar('title');
991
        $tags['CATEGORY_URL']  = XOOPS_URL . '/modules/' . $xoopsModule->getVar('dirname') . "/viewcat.php?cid={$cid}";
992
        $notificationHandler  = xoops_getHandler('notification');
993
        $notificationHandler->triggerEvent('global', 0, 'new_link', $tags);
994
        $notificationHandler->triggerEvent('category', $cid, 'new_link', $tags);
995
        $notificationHandler->triggerEvent('link', $lid, 'approve', $tags);
996
        redirect_header('index.php', 2, _MD_MYLINKS_NEWLINKADDED);
997
    } else {
998
        redirect_header('index.php', 2, _MD_MYLINKS_DBNOTUPDATED);
999
    }
1000
}
1001
1002
$op = MylinksUtility::mylinks_cleanVars($_REQUEST, 'op', 'main', 'string');
0 ignored issues
show
Documentation introduced by
'op' is of type string, but the function expects a object<unknown_type>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1003
1004
switch ($op) {
1005
    case 'delNewLink':
1006
        delNewLink();
1007
        break;
1008
    case 'approve':
1009
        approve();
1010
        break;
1011
    case 'addCat':
1012
        addCat();
1013
        break;
1014
    case 'importCats':
1015
        importCats();
1016
        break;
1017
    case 'addLink':
1018
        addLink();
1019
        break;
1020
    case 'listBrokenLinks':
1021
        listBrokenLinks();
1022
        break;
1023
    case 'delBrokenLinks':
1024
        delBrokenLinks();
1025
        break;
1026
    case 'ignoreBrokenLinks':
1027
        ignoreBrokenLinks();
1028
        break;
1029
    case 'listModReq':
1030
        listModReq();
1031
        break;
1032
    case 'changeModReq':
1033
        changeModReq();
1034
        break;
1035
    case 'ignoreModReq':
1036
        ignoreModReq();
1037
        break;
1038
    case 'delCat':
1039
        delCat();
1040
        break;
1041
    case 'modCat':
1042
        modCat();
1043
        break;
1044
    case 'modCatS':
1045
        modCatS();
1046
        break;
1047
    case 'modLink':
1048
        modLink();
1049
        break;
1050
    case 'modLinkS':
1051
        modLinkS();
1052
        break;
1053
    case 'delLink':
1054
        delLink();
1055
        break;
1056
    case 'delVote':
1057
        delVote();
1058
        break;
1059
    case 'linksConfigMenu':
1060
    default:
1061
        linksConfigMenu();
1062
        break;
1063
    case 'listNewLinks':
1064
        listNewLinks();
1065
        break;
1066
    case 'main':
1067
        break;
1068
}
1069