dimaslanjaka /
universal-framework
| 1 | <?php |
||||||
| 2 | |||||||
| 3 | |||||||
| 4 | /** |
||||||
| 5 | * This will generate a comments system for you in no time... |
||||||
| 6 | * It includes an installed build in so all you have to do is upload the class file run a few commands |
||||||
| 7 | * and you are ready to go :) |
||||||
| 8 | * The intention is to make this a stand alone class so we are using ``mysqli`` to handle the mysql interactions |
||||||
| 9 | * therefor you will need to pass your mysql details also |
||||||
| 10 | * @author Mihai Ionut Vilcu ([email protected]) |
||||||
| 11 | * July-2013 |
||||||
| 12 | */ |
||||||
| 13 | class Comments_System |
||||||
| 14 | { |
||||||
| 15 | /** |
||||||
| 16 | * Default settings |
||||||
| 17 | * @var array |
||||||
| 18 | */ |
||||||
| 19 | var $settings = array( |
||||||
| 20 | 'comments_table' => '_comments', // the name of the table in which the comments will be hold |
||||||
| 21 | 'banned_table' => '_banned', // the name of the table in which the comments will be hold |
||||||
| 22 | 'auto_install' => true, // if the class is not already installed it will attempt to install it |
||||||
| 23 | 'public' => true, // if true unregistered users are allowed to post a comment |
||||||
| 24 | 'optional_email' => false, // if true users don't need to enter a valid email |
||||||
| 25 | 'isAdmin' => false, // if true some extra options are displyed delete |
||||||
| 26 | 'adminStyle' => array( // special formating to admin messages |
||||||
| 27 | 'username' => 'color: #0000ff; font-weidth: bold;', |
||||||
| 28 | 'box' => 'background-color: #FFFCDD' |
||||||
| 29 | ), |
||||||
| 30 | 'user_details' => array( // if public is false we use this user details to the added message |
||||||
| 31 | 'name' => 'user', |
||||||
| 32 | 'email' => '[email protected]', |
||||||
| 33 | ), |
||||||
| 34 | 'sort' => 'ORDER BY `id` DESC', // the sort, this is pasted as is so make sure it is parsed |
||||||
| 35 | ); |
||||||
| 36 | var $link; // it will hold the mysql connection |
||||||
| 37 | var $error = false; // it will hold an error message if any |
||||||
| 38 | var $success = false; // it will hold an success message if any |
||||||
| 39 | var $tmp = false; // it will carry some temporary data |
||||||
| 40 | var $ignore = array('comm_edit', 'comm_del', 'comm_reply', 'comm_ban', 'comm_unban'); // keep the url clean |
||||||
| 41 | var $checked_ips = array(); // will hold the ips checked if banned or not |
||||||
| 42 | |||||||
| 43 | /** |
||||||
| 44 | * setup the mysql connction and some settings |
||||||
| 45 | * @param array $db_details contains the database details |
||||||
| 46 | * @param array $settings settings to overwrite the default ones |
||||||
| 47 | */ |
||||||
| 48 | function __construct($db_details, $settings = array()) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 49 | { |
||||||
| 50 | if (session_id() == '') |
||||||
| 51 | session_start(); |
||||||
| 52 | |||||||
| 53 | // we first manage the mysql connection |
||||||
| 54 | $this->link = @mysqli_connect($db_details['db_host'], $db_details['db_user'], $db_details['db_pass']); |
||||||
|
0 ignored issues
–
show
The call to
mysqli_connect() has too few arguments starting with database.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check compares calls to functions or methods with their respective definitions. If the call has less arguments than are defined, it raises an issue. If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above. Loading history...
|
|||||||
| 55 | |||||||
| 56 | if (!$this->link) die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); |
||||||
|
0 ignored issues
–
show
|
|||||||
| 57 | |||||||
| 58 | mysqli_select_db($this->link, $db_details['db_name']) or die(mysqli_error($this->link)); |
||||||
|
0 ignored issues
–
show
|
|||||||
| 59 | |||||||
| 60 | // we add the new settings if any |
||||||
| 61 | $this->settings = array_merge($this->settings, $settings); |
||||||
| 62 | |||||||
| 63 | $this->settings['comments_table'] = str_replace("`", "``", $this->settings['comments_table']); |
||||||
| 64 | |||||||
| 65 | // auto install |
||||||
| 66 | if ($this->settings['auto_install'] && !@mysqli_num_rows(mysqli_query($this->link, "SELECT `id` FROM `" . $this->settings['comments_table'] . "`"))) |
||||||
|
0 ignored issues
–
show
It seems like
mysqli_query($this->link...comments_table'] . '`') can also be of type true; however, parameter $result of mysqli_num_rows() does only seem to accept mysqli_result, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 67 | $this->install(); |
||||||
| 68 | |||||||
| 69 | |||||||
| 70 | // edit comment |
||||||
| 71 | if (isset($_POST['comm_edit']) && ($comm = mysqli_query($this->link, "SELECT * FROM `" . $this->settings['comments_table'] . "` |
||||||
| 72 | WHERE `id`='" . (int) $_POST['comm_edit'] . "'"))) { |
||||||
| 73 | // if the comment exists and the user has the rights to edit it |
||||||
| 74 | if (mysqli_num_rows($comm) && $this->hasRights(mysqli_fetch_object($comm))) { |
||||||
|
0 ignored issues
–
show
It seems like
$comm can also be of type true; however, parameter $result of mysqli_fetch_object() does only seem to accept mysqli_result, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 75 | $this->grabComment($_SESSION['comm_pageid'], (int) $_POST['comm_edit']); |
||||||
| 76 | $this->tmp = "edited"; |
||||||
| 77 | } |
||||||
| 78 | } |
||||||
| 79 | |||||||
| 80 | |||||||
| 81 | // delete comment |
||||||
| 82 | if (isset($_POST['comm_del'])) |
||||||
| 83 | if ($this->delComm($_POST['comm_del'])) |
||||||
| 84 | $this->success = "Comment deleted !"; |
||||||
| 85 | |||||||
| 86 | // bann ip |
||||||
| 87 | if (isset($_GET['comm_ban']) && $this->banIP($_GET['comm_ban'])) // we banned the ip |
||||||
| 88 | $this->success = "IP banned !"; |
||||||
| 89 | |||||||
| 90 | // UnBann ip |
||||||
| 91 | if (isset($_GET['comm_unban']) && $this->unBanIP($_GET['comm_unban'])) |
||||||
| 92 | $this->success = "IP UnBanned !"; |
||||||
| 93 | |||||||
| 94 | return true; |
||||||
| 95 | } |
||||||
| 96 | |||||||
| 97 | |||||||
| 98 | |||||||
| 99 | function grabComment($pageid, $update_id = false) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 100 | { |
||||||
| 101 | if (session_id() == '') |
||||||
| 102 | session_start(); |
||||||
| 103 | |||||||
| 104 | $_SESSION['comm_pageid'] = $pageid; |
||||||
| 105 | |||||||
| 106 | // we make sure it's a valid post |
||||||
| 107 | if ( |
||||||
| 108 | isset($_POST['comm_submit']) && isset($_SESSION['comm_token']) && ($_POST['comm_token'] === $_SESSION['comm_token']) && |
||||||
| 109 | ($this->tmp != 'edited') |
||||||
| 110 | ) { // we make sure we don't handle the data again if it was an edit |
||||||
| 111 | |||||||
| 112 | $name = isset($_POST['comm_name']) ? $_POST['comm_name'] : ''; |
||||||
| 113 | $email = isset($_POST['comm_email']) ? $_POST['comm_email'] : ''; |
||||||
| 114 | |||||||
| 115 | $min = 2; |
||||||
| 116 | |||||||
| 117 | if (!$this->settings['public']) { // if it's not public we use the provided details |
||||||
| 118 | // if it's not public and it has $_POST[name] something is wrong |
||||||
| 119 | if (isset($_POST['comm_name'])) { |
||||||
| 120 | $this->error = "Something is wrong !"; |
||||||
| 121 | return false; |
||||||
| 122 | } |
||||||
| 123 | |||||||
| 124 | $min = 0; |
||||||
| 125 | $name = $this->settings['user_details']['name']; |
||||||
| 126 | $email = $this->settings['user_details']['email']; |
||||||
| 127 | } |
||||||
| 128 | |||||||
| 129 | if ($this->isBanned($this->ip())) { |
||||||
| 130 | $this->error = "You are banned !"; |
||||||
| 131 | return false; |
||||||
| 132 | } |
||||||
| 133 | |||||||
| 134 | if (!isset($name[$min])) { |
||||||
| 135 | $this->error = "Invalid name !"; |
||||||
| 136 | return false; |
||||||
| 137 | } |
||||||
| 138 | $message = $_POST['comm_msg']; |
||||||
| 139 | |||||||
| 140 | if (!isset($message[2])) { |
||||||
| 141 | $this->error = "Invalid message !"; |
||||||
| 142 | return false; |
||||||
| 143 | } |
||||||
| 144 | |||||||
| 145 | |||||||
| 146 | // we check in case the email is not valid |
||||||
| 147 | if (!$this->settings['optional_email']) |
||||||
| 148 | if (!$this->isValidMail($email)) { |
||||||
| 149 | $this->error = "Invalid email !"; |
||||||
| 150 | return false; |
||||||
| 151 | } |
||||||
| 152 | |||||||
| 153 | |||||||
| 154 | // we check if it's an update or a new message |
||||||
| 155 | if ($update_id) { |
||||||
| 156 | if ($this->settings['public']) |
||||||
| 157 | $upd_fields = ",`name` = '" . mysqli_real_escape_string($this->link, $name) . "', |
||||||
|
0 ignored issues
–
show
It seems like
$this->link can also be of type boolean; however, parameter $mysql of mysqli_real_escape_string() does only seem to accept mysqli, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 158 | `email` = '" . mysqli_real_escape_string($this->link, $email) . "'"; |
||||||
| 159 | else |
||||||
| 160 | $upd_fields = ''; |
||||||
| 161 | |||||||
| 162 | |||||||
| 163 | if (mysqli_query($this->link, "UPDATE `" . $this->settings['comments_table'] . "` SET |
||||||
|
0 ignored issues
–
show
It seems like
$this->link can also be of type boolean; however, parameter $mysql of mysqli_query() does only seem to accept mysqli, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 164 | `message` = '" . mysqli_real_escape_string($this->link, $message) . "' |
||||||
| 165 | $upd_fields |
||||||
| 166 | WHERE `id` = '" . (int) $update_id . "'")) { |
||||||
| 167 | |||||||
| 168 | $this->success = "Comment edited successfully !"; |
||||||
| 169 | return true; |
||||||
| 170 | } |
||||||
| 171 | } |
||||||
| 172 | |||||||
| 173 | |||||||
| 174 | // we check if this is a valid reply |
||||||
| 175 | if ( |
||||||
| 176 | isset($_POST['comm_reply']) && |
||||||
| 177 | mysqli_num_rows(mysqli_query($this->link, "SELECT `id` FROM `" . $this->settings['comments_table'] . "` |
||||||
|
0 ignored issues
–
show
It seems like
mysqli_query($this->link...' AND `parent` = '0'') can also be of type true; however, parameter $result of mysqli_num_rows() does only seem to accept mysqli_result, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 178 | WHERE `id`= '" . (int) $_POST['comm_reply'] . "' AND `parent` = '0'")) |
||||||
| 179 | ) |
||||||
| 180 | $reply = ",`parent` = '" . (int) $_POST['comm_reply'] . "'"; |
||||||
| 181 | else |
||||||
| 182 | $reply = ''; |
||||||
| 183 | |||||||
| 184 | |||||||
| 185 | |||||||
| 186 | if (mysqli_query($this->link, "INSERT INTO `" . $this->settings['comments_table'] . "` SET |
||||||
| 187 | `name` = '" . mysqli_real_escape_string($this->link, $name) . "', |
||||||
| 188 | `message` = '" . mysqli_real_escape_string($this->link, $message) . "', |
||||||
| 189 | `time` = '" . time() . "', |
||||||
| 190 | `ip` = '" . mysqli_real_escape_string($this->link, $this->ip()) . "', |
||||||
| 191 | `email` = '" . mysqli_real_escape_string($this->link, $email) . "', |
||||||
| 192 | `browser` = '" . mysqli_real_escape_string($this->link, $_SERVER['HTTP_USER_AGENT']) . "', |
||||||
| 193 | `pageid` = '" . mysqli_real_escape_string($this->link, $pageid) . "', |
||||||
| 194 | `isadmin` = '" . (int) $this->settings['isAdmin'] . "' |
||||||
| 195 | $reply |
||||||
| 196 | ")) { |
||||||
| 197 | $_SESSION['comm_last_id'] = mysqli_insert_id($this->link); |
||||||
|
0 ignored issues
–
show
It seems like
$this->link can also be of type boolean; however, parameter $mysql of mysqli_insert_id() does only seem to accept mysqli, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 198 | $this->success = "Comment posted successfully !"; |
||||||
| 199 | return true; |
||||||
| 200 | } else { |
||||||
| 201 | $this->error = "Some error camed up !"; |
||||||
| 202 | return false; |
||||||
| 203 | } |
||||||
| 204 | } else if (isset($_POST['comm_submit']) && isset($_SESSION['comm_token']) && ($this->tmp != 'edited')) { |
||||||
| 205 | unset($_SESSION['comm_token']); |
||||||
| 206 | $this->error = "Invalid request !"; |
||||||
| 207 | } |
||||||
| 208 | } |
||||||
| 209 | |||||||
| 210 | /** |
||||||
| 211 | * Lists the comments for the inserted page id |
||||||
| 212 | * @param integer $pageid |
||||||
| 213 | * @param integer $perpage |
||||||
| 214 | * @return string the generated html code |
||||||
| 215 | */ |
||||||
| 216 | function generateComments($pageid = 0, $perpage = 10) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 217 | { |
||||||
| 218 | |||||||
| 219 | if (session_id() == '') |
||||||
| 220 | session_start(); |
||||||
| 221 | |||||||
| 222 | $_SESSION['comm_pageid'] = $pageid; |
||||||
| 223 | |||||||
| 224 | $html = ""; |
||||||
| 225 | |||||||
| 226 | |||||||
| 227 | $comments = $this->getComments($pageid, $perpage); |
||||||
| 228 | |||||||
| 229 | |||||||
| 230 | // we generate the output of the comments |
||||||
| 231 | if ($comments) { |
||||||
| 232 | foreach ($comments as $comment) { |
||||||
| 233 | if (!($name = $this->getUsername($comment->name))) |
||||||
| 234 | $name = $comment->name; |
||||||
| 235 | |||||||
| 236 | // show reply link or form |
||||||
| 237 | if (isset($_GET['comm_reply']) && ($comment->id == $_GET['comm_reply'])) { |
||||||
| 238 | $show_reply = $this->generateForm("?" . $this->queryString('', $this->ignore), 1); |
||||||
| 239 | } else { |
||||||
| 240 | $show_reply = "<a href='?" . $this->queryString('', $this->ignore) . "&comm_reply=$comment->id#$comment->id'>Reply</a>"; |
||||||
| 241 | } |
||||||
| 242 | // show normal username or with adminStyles |
||||||
| 243 | $style = ""; |
||||||
| 244 | if ($comment->isadmin) { |
||||||
| 245 | $show_name = "<span style='" . $this->settings['adminStyle']['username'] . "'>" . $this->html($name) . "</span>"; |
||||||
| 246 | $style = $this->settings['adminStyle']['box']; |
||||||
| 247 | } else { |
||||||
| 248 | $show_name = $this->html($name); |
||||||
| 249 | } |
||||||
| 250 | // show extra info only to admin |
||||||
| 251 | $show_extra = ""; |
||||||
| 252 | if ($this->settings['isAdmin']) { |
||||||
| 253 | $browser = explode(" ", $comment->browser); |
||||||
| 254 | $show_extra = "($comment->email | " . $browser[0] . " | $comment->ip)"; |
||||||
| 255 | } |
||||||
| 256 | $is_del = (isset($_GET['comm_del']) && ($_GET['comm_del'] === $comment->id) && $this->hasRights($comment)) |
||||||
| 257 | ? " background-color: #FFDE89; border: 1px solid red;" : null; |
||||||
| 258 | |||||||
| 259 | $html .= " |
||||||
| 260 | <div class='card' id='$comment->id' style='" . $style . $is_del . "'> |
||||||
| 261 | <div class='card-body'>"; |
||||||
| 262 | |||||||
| 263 | if (isset($_GET['comm_edit']) && ($_GET['comm_edit'] === $comment->id) && $this->hasRights($comment)) { |
||||||
| 264 | // we generate the form in edit mode with precompleted data |
||||||
| 265 | $html .= $this->generateForm('', 2, $comment); |
||||||
| 266 | } else { |
||||||
| 267 | $html .= "<a class='float-left mr-2' rel='nofollow, noopener' href='http://gravatar.com'> |
||||||
| 268 | <img class='img-thumbnail' src='http://gravatar.com/avatar/" . md5($comment->email) . "'> |
||||||
| 269 | </a>"; |
||||||
| 270 | $html .= "<h5 class='card-title'> |
||||||
| 271 | $show_name $show_extra |
||||||
| 272 | <small class='text-muted'>" . $this->tsince($comment->time) . "</small> |
||||||
| 273 | " . $this->admin_options($comment) . " |
||||||
| 274 | </h5> |
||||||
| 275 | <p>" . nl2br($this->html($comment->message)) . "</p>"; |
||||||
| 276 | } |
||||||
| 277 | if ($is_del) { |
||||||
| 278 | $html .= $this->gennerateConfirm('', 'comm_del', $comment->id); |
||||||
| 279 | } else { |
||||||
| 280 | $html .= $show_reply; |
||||||
| 281 | } |
||||||
| 282 | $html .= $this->generateReplies($comment->id) . " |
||||||
| 283 | </div> |
||||||
| 284 | </div>"; |
||||||
| 285 | } |
||||||
| 286 | } |
||||||
| 287 | $html .= $this->generatePages($pageid, $perpage); |
||||||
| 288 | |||||||
| 289 | return $html; |
||||||
| 290 | } |
||||||
| 291 | |||||||
| 292 | |||||||
| 293 | function generateReplies($comm_id, $limit = 3) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 294 | { |
||||||
| 295 | $html = ""; |
||||||
| 296 | $comments = $this->getReplies($comm_id, $limit); |
||||||
| 297 | // we generate the output of the comments |
||||||
| 298 | if ($comments) |
||||||
| 299 | foreach ($comments as $comment) { |
||||||
| 300 | if (!($name = $this->getUsername($comment->name))) |
||||||
| 301 | $name = $comment->name; |
||||||
| 302 | |||||||
| 303 | // show normal username or with adminStyles |
||||||
| 304 | $style = ""; |
||||||
| 305 | if ($comment->isadmin) { |
||||||
| 306 | $show_name = "<span style='" . $this->settings['adminStyle']['username'] . "'>" . $this->html($name) . "</span>"; |
||||||
| 307 | $style = $this->settings['adminStyle']['box']; |
||||||
| 308 | } else |
||||||
| 309 | $show_name = $this->html($name); |
||||||
| 310 | |||||||
| 311 | // show extra info only to admin |
||||||
| 312 | $show_extra = ""; |
||||||
| 313 | if ($this->settings['isAdmin']) { |
||||||
| 314 | $browser = explode(" ", $comment->browser); |
||||||
| 315 | $show_extra = "($comment->email | " . $browser[0] . " | $comment->ip)"; |
||||||
| 316 | } |
||||||
| 317 | $is_del = (isset($_GET['comm_del']) && ($_GET['comm_del'] === $comment->id) && $this->hasRights($comment)) |
||||||
| 318 | ? " background-color: #FFDE89; border: 1px solid red;" : null; |
||||||
| 319 | |||||||
| 320 | $html .= " |
||||||
| 321 | <div class='media' id='$comment->id' style='" . $style . $is_del . "'> |
||||||
| 322 | <a class='pull-left' href='http://gravatar.com'> |
||||||
| 323 | <img class='media-object' src='http://gravatar.com/avatar/" . md5($comment->email) . "'> |
||||||
| 324 | </a> |
||||||
| 325 | <div class='media-body'>"; |
||||||
| 326 | |||||||
| 327 | |||||||
| 328 | if (isset($_GET['comm_edit']) && ($_GET['comm_edit'] === $comment->id) && $this->hasRights($comment)) |
||||||
| 329 | // we generate the form in edit mode with precompleted data |
||||||
| 330 | $html .= $this->generateForm('', 2, $comment); |
||||||
| 331 | else |
||||||
| 332 | $html .= "<h4 class='media-heading'> |
||||||
| 333 | $show_name $show_extra |
||||||
| 334 | <small class='muted'>" . $this->tsince($comment->time) . " replied </small> |
||||||
| 335 | " . $this->admin_options($comment) . " |
||||||
| 336 | </h4> |
||||||
| 337 | <p>" . nl2br($this->html($comment->message)) . "</p>"; |
||||||
| 338 | |||||||
| 339 | if ($is_del) |
||||||
| 340 | $html .= $this->gennerateConfirm('', 'comm_del', $comment->id); |
||||||
| 341 | |||||||
| 342 | $html .= "</div></div>"; |
||||||
| 343 | } |
||||||
| 344 | |||||||
| 345 | return $html; |
||||||
| 346 | } |
||||||
| 347 | |||||||
| 348 | function generateForm($location = '', $type = 0, $comment = false) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 349 | { |
||||||
| 350 | $this->setToken(); |
||||||
| 351 | if ($location == '') |
||||||
| 352 | $location = "?" . $this->queryString('', $this->ignore); |
||||||
| 353 | |||||||
| 354 | |||||||
| 355 | if (!$comment) |
||||||
| 356 | $comment = (object) array("name" => "", "email" => "", "message" => ""); |
||||||
| 357 | |||||||
| 358 | if ($type == 1) |
||||||
| 359 | $title = "<input type='hidden' name='comm_reply' value='" . (int) $_GET['comm_reply'] . "'>Post a reply"; |
||||||
| 360 | else if ($type == 2) |
||||||
| 361 | $title = "<input type='hidden' name='comm_edit' value='" . (int) $_GET['comm_edit'] . "'>Edit comment"; |
||||||
| 362 | else |
||||||
| 363 | $title = "Post a comment"; |
||||||
| 364 | |||||||
| 365 | $show_name_email = ''; |
||||||
| 366 | |||||||
| 367 | if ($this->settings['public']) { |
||||||
| 368 | $show_name_email = "<div class='control-group'> |
||||||
| 369 | <label class='control-label' for='comm_name'>Name</label> |
||||||
| 370 | <div class='controls'> |
||||||
| 371 | <input id='comm_name' name='comm_name' type='text' class='input-xlarge' value='$comment->name'> |
||||||
| 372 | |||||||
| 373 | </div> |
||||||
| 374 | </div> |
||||||
| 375 | |||||||
| 376 | <div class='control-group'> |
||||||
| 377 | <label class='control-label' for='comm_email'>Email</label> |
||||||
| 378 | <div class='controls'> |
||||||
| 379 | <input id='comm_email' name='comm_email' type='text' class='input-xlarge' value='$comment->email'> |
||||||
| 380 | <p> |
||||||
| 381 | " . ($this->settings['optional_email'] ? "(optional, it will not be public.)" : "") . " |
||||||
| 382 | </p> |
||||||
| 383 | </div> |
||||||
| 384 | </div>"; |
||||||
| 385 | } |
||||||
| 386 | |||||||
| 387 | |||||||
| 388 | $html = " |
||||||
| 389 | <form class='form-horizontal' action='$location#comm_status' method='post'> |
||||||
| 390 | <fieldset> |
||||||
| 391 | <legend>$title</legend> |
||||||
| 392 | |||||||
| 393 | $show_name_email |
||||||
| 394 | |||||||
| 395 | <div class='md-form mb-2'> |
||||||
| 396 | <label class='control-label' for='comm_msg'>Message</label> |
||||||
| 397 | <div class='controls'> |
||||||
| 398 | <textarea class='form-control' id='comm_msg' name='comm_msg'>$comment->message</textarea> |
||||||
| 399 | </div> |
||||||
| 400 | </div> |
||||||
| 401 | |||||||
| 402 | <input type='hidden' name='comm_token' value='" . $_SESSION['comm_token'] . "'> |
||||||
| 403 | |||||||
| 404 | <div class='md-form mb-2'> |
||||||
| 405 | <div class='controls'> |
||||||
| 406 | <input type='submit' id='comm_submit' name='comm_submit' class='btn btn-primary' value='Post'> |
||||||
| 407 | " . ($type ? "<input type='submit' id='comm_cancel' value='Cancel' class='btn'>" : "") . " |
||||||
| 408 | </div> |
||||||
| 409 | </div> |
||||||
| 410 | |||||||
| 411 | </fieldset> |
||||||
| 412 | </form>"; |
||||||
| 413 | |||||||
| 414 | return $html; |
||||||
| 415 | } |
||||||
| 416 | |||||||
| 417 | /** |
||||||
| 418 | * it will create the table to hold the comments |
||||||
| 419 | * @return boolean true if the install succeeds |
||||||
| 420 | */ |
||||||
| 421 | function install() |
||||||
|
0 ignored issues
–
show
|
|||||||
| 422 | { |
||||||
| 423 | |||||||
| 424 | $sql = "CREATE TABLE IF NOT EXISTS `" . $this->settings['comments_table'] . "` ( |
||||||
| 425 | `id` int(11) NOT NULL AUTO_INCREMENT, |
||||||
| 426 | `name` varchar(255) NOT NULL, |
||||||
| 427 | `message` text NOT NULL, |
||||||
| 428 | `time` int(11) NOT NULL, |
||||||
| 429 | `ip` varchar(255) NOT NULL, |
||||||
| 430 | `email` varchar(255) NOT NULL, |
||||||
| 431 | `browser` varchar(255) NOT NULL, |
||||||
| 432 | `pageid` int(11) NOT NULL, |
||||||
| 433 | `parent` int(11) NOT NULL, |
||||||
| 434 | `isadmin` int(11) NOT NULL, |
||||||
| 435 | PRIMARY KEY (`id`) |
||||||
| 436 | );"; |
||||||
| 437 | |||||||
| 438 | $sql2 = "CREATE TABLE IF NOT EXISTS `_banned` ( |
||||||
| 439 | `ip` varchar(255) NOT NULL, |
||||||
| 440 | UNIQUE KEY `ip` (`ip`) |
||||||
| 441 | );"; |
||||||
| 442 | |||||||
| 443 | if (mysqli_query($this->link, $sql) && mysqli_query($this->link, $sql2)) |
||||||
|
0 ignored issues
–
show
It seems like
$this->link can also be of type boolean; however, parameter $mysql of mysqli_query() does only seem to accept mysqli, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 444 | return true; |
||||||
| 445 | |||||||
| 446 | return false; |
||||||
| 447 | } |
||||||
| 448 | /** |
||||||
| 449 | * gets the comments from the db |
||||||
| 450 | * @param integer $pageid the id for the specific page |
||||||
| 451 | * @param integer $perpage number of comments perpage |
||||||
| 452 | * @return array the comments |
||||||
| 453 | */ |
||||||
| 454 | function getComments($pageid = 0, $perpage = 10) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 455 | { |
||||||
| 456 | $comments = array(); |
||||||
| 457 | |||||||
| 458 | $sql = "SELECT * FROM `" . $this->settings['comments_table'] . "` WHERE `parent` = 0 "; |
||||||
| 459 | |||||||
| 460 | if ($pageid) |
||||||
| 461 | $sql .= "AND `pageid` = '" . mysqli_real_escape_string($this->link, $pageid) . "'"; |
||||||
|
0 ignored issues
–
show
It seems like
$this->link can also be of type boolean; however, parameter $mysql of mysqli_real_escape_string() does only seem to accept mysqli, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 462 | |||||||
| 463 | // some sorting options |
||||||
| 464 | $sql .= " " . $this->settings['sort'] . " "; // this is pasted as is |
||||||
| 465 | |||||||
| 466 | |||||||
| 467 | // grab the page number |
||||||
| 468 | $page_number = !isset($_GET['comm_page']) || ((int) $_GET['comm_page'] <= 0) ? 1 : (int) $_GET['comm_page']; |
||||||
| 469 | |||||||
| 470 | $total_results = mysqli_num_rows(mysqli_query($this->link, $sql)); |
||||||
|
0 ignored issues
–
show
It seems like
mysqli_query($this->link, $sql) can also be of type true; however, parameter $result of mysqli_num_rows() does only seem to accept mysqli_result, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
It seems like
$this->link can also be of type boolean; however, parameter $mysql of mysqli_query() does only seem to accept mysqli, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 471 | |||||||
| 472 | if ($page_number > ceil($total_results / $perpage)) |
||||||
| 473 | $page_number = ceil($total_results / $perpage); |
||||||
| 474 | |||||||
| 475 | $start = ($page_number - 1) * $perpage; |
||||||
| 476 | |||||||
| 477 | $sql .= "LIMIT $start, $perpage"; |
||||||
| 478 | |||||||
| 479 | if ($result = mysqli_query($this->link, $sql)) |
||||||
| 480 | while ($row = mysqli_fetch_object($result)) |
||||||
|
0 ignored issues
–
show
It seems like
$result can also be of type true; however, parameter $result of mysqli_fetch_object() does only seem to accept mysqli_result, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 481 | $comments[] = $row; |
||||||
| 482 | else |
||||||
| 483 | return false; |
||||||
|
0 ignored issues
–
show
|
|||||||
| 484 | |||||||
| 485 | return $comments; |
||||||
| 486 | } |
||||||
| 487 | /** |
||||||
| 488 | * gets the replies to a certain comment |
||||||
| 489 | * @param integer $comm_id the id for the specific comment |
||||||
| 490 | * @param integer $limit max number of comments to be displayed as reply |
||||||
| 491 | * @return array the comments |
||||||
| 492 | */ |
||||||
| 493 | function getReplies($comm_id = 0, $limit = 3) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 494 | { |
||||||
| 495 | $comments = array(); |
||||||
| 496 | |||||||
| 497 | $sql = "SELECT * FROM `" . $this->settings['comments_table'] . "` |
||||||
| 498 | WHERE `parent` = '" . mysqli_real_escape_string($this->link, $comm_id) . "'"; |
||||||
|
0 ignored issues
–
show
It seems like
$this->link can also be of type boolean; however, parameter $mysql of mysqli_real_escape_string() does only seem to accept mysqli, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 499 | |||||||
| 500 | // limitation |
||||||
| 501 | $sql .= "LIMIT 0, $limit"; |
||||||
| 502 | |||||||
| 503 | if ($result = mysqli_query($this->link, $sql)) |
||||||
|
0 ignored issues
–
show
It seems like
$this->link can also be of type boolean; however, parameter $mysql of mysqli_query() does only seem to accept mysqli, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 504 | while ($row = mysqli_fetch_object($result)) |
||||||
|
0 ignored issues
–
show
It seems like
$result can also be of type true; however, parameter $result of mysqli_fetch_object() does only seem to accept mysqli_result, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 505 | $comments[] = $row; |
||||||
| 506 | else |
||||||
| 507 | return false; |
||||||
|
0 ignored issues
–
show
|
|||||||
| 508 | |||||||
| 509 | return $comments; |
||||||
| 510 | } |
||||||
| 511 | |||||||
| 512 | /** |
||||||
| 513 | * it parses the text for output |
||||||
| 514 | * @param string $text the text to be parsed |
||||||
| 515 | * @return string paesed text |
||||||
| 516 | */ |
||||||
| 517 | function html($text) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 518 | { |
||||||
| 519 | return htmlentities($text, ENT_QUOTES); |
||||||
| 520 | } |
||||||
| 521 | |||||||
| 522 | /** |
||||||
| 523 | * while developing this class a small problem camed up, |
||||||
| 524 | * what if i have a user system already and i want to store the userid instread of he's username(in case he changes it) ? |
||||||
| 525 | * for this matter i made this function which by default will return false |
||||||
| 526 | * which means that we will consider that the `name` column is a string not an integer(userid) |
||||||
| 527 | * BUT if you store the userid in the name column you have to make sure that this function |
||||||
| 528 | * will return the username coresponding to that id, i included an example |
||||||
| 529 | * |
||||||
| 530 | */ |
||||||
| 531 | function getUsername($userid) |
||||||
|
0 ignored issues
–
show
The parameter
$userid is not used and could be removed.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for parameters that have been defined for a function or method, but which are not used in the method body. Loading history...
|
|||||||
| 532 | { |
||||||
| 533 | return false; |
||||||
| 534 | // in case you decide to store the userid use this |
||||||
| 535 | // $user = mysqli_fetch_object(mysql_query($this->link, "SELECT * FROM `users` WHERE 'userid' = '".(int)$userid."'")); |
||||||
| 536 | // return $user->username; |
||||||
| 537 | } |
||||||
| 538 | |||||||
| 539 | /** |
||||||
| 540 | * Time elapes since a times |
||||||
| 541 | * @param int $time The past time |
||||||
| 542 | * @return string time elapssed |
||||||
| 543 | * credits: http://stackoverflow.com/a/2916189/1579481 |
||||||
| 544 | */ |
||||||
| 545 | function tsince($time, $end_msg = 'ago') |
||||||
|
0 ignored issues
–
show
|
|||||||
| 546 | { |
||||||
| 547 | |||||||
| 548 | $time = abs(time() - $time); // to get the time since that moment |
||||||
| 549 | |||||||
| 550 | if ($time == 0) |
||||||
| 551 | return "Just now"; |
||||||
| 552 | |||||||
| 553 | $tokens = array( |
||||||
| 554 | 31536000 => 'year', |
||||||
| 555 | 2592000 => 'month', |
||||||
| 556 | 604800 => 'week', |
||||||
| 557 | 86400 => 'day', |
||||||
| 558 | 3600 => 'hour', |
||||||
| 559 | 60 => 'minute', |
||||||
| 560 | 1 => 'second' |
||||||
| 561 | ); |
||||||
| 562 | |||||||
| 563 | foreach ($tokens as $unit => $text) { |
||||||
| 564 | if ($time < $unit) continue; |
||||||
| 565 | $numberOfUnits = floor($time / $unit); |
||||||
| 566 | return $numberOfUnits . ' ' . $text . (($numberOfUnits > 1) ? 's' : '') . ' ' . $end_msg; |
||||||
| 567 | } |
||||||
| 568 | } |
||||||
| 569 | |||||||
| 570 | function isValidMail($mail) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 571 | { |
||||||
| 572 | |||||||
| 573 | if (!filter_var($mail, FILTER_VALIDATE_EMAIL)) |
||||||
| 574 | return FALSE; |
||||||
| 575 | |||||||
| 576 | |||||||
| 577 | list($username, $maildomain) = explode("@", $mail); |
||||||
| 578 | if (checkdnsrr($maildomain, "MX")) |
||||||
| 579 | return TRUE; |
||||||
| 580 | |||||||
| 581 | return FALSE; |
||||||
| 582 | } |
||||||
| 583 | |||||||
| 584 | // Returns the real IP address of the user |
||||||
| 585 | function ip() |
||||||
|
0 ignored issues
–
show
|
|||||||
| 586 | { |
||||||
| 587 | // No IP found (will be overwritten by for |
||||||
| 588 | // if any IP is found behind a firewall) |
||||||
| 589 | $ip = FALSE; |
||||||
| 590 | |||||||
| 591 | // If HTTP_CLIENT_IP is set, then give it priority |
||||||
| 592 | if (!empty($_SERVER["HTTP_CLIENT_IP"])) { |
||||||
| 593 | $ip = $_SERVER["HTTP_CLIENT_IP"]; |
||||||
| 594 | } |
||||||
| 595 | |||||||
| 596 | // User is behind a proxy and check that we discard RFC1918 IP addresses |
||||||
| 597 | // if they are behind a proxy then only figure out which IP belongs to the |
||||||
| 598 | // user. Might not need any more hackin if there is a squid reverse proxy |
||||||
| 599 | // infront of apache. |
||||||
| 600 | if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { |
||||||
| 601 | |||||||
| 602 | // Put the IP's into an array which we shall work with shortly. |
||||||
| 603 | $ips = explode(", ", $_SERVER['HTTP_X_FORWARDED_FOR']); |
||||||
| 604 | if ($ip) { |
||||||
| 605 | array_unshift($ips, $ip); |
||||||
| 606 | $ip = FALSE; |
||||||
| 607 | } |
||||||
| 608 | |||||||
| 609 | for ($i = 0; $i < count($ips); $i++) { |
||||||
|
0 ignored issues
–
show
It seems like you are calling the size function
count() as part of the test condition. You might want to compute the size beforehand, and not on each iteration.
If the size of the collection does not change during the iteration, it is generally a good practice to compute it beforehand, and not on each iteration: for ($i=0; $i<count($array); $i++) { // calls count() on each iteration
}
// Better
for ($i=0, $c=count($array); $i<$c; $i++) { // calls count() just once
}
Loading history...
|
|||||||
| 610 | // Skip RFC 1918 IP's 10.0.0.0/8, 172.16.0.0/12 and |
||||||
| 611 | // 192.168.0.0/16 |
||||||
| 612 | if (!preg_match('/^(?:10|172\.(?:1[6-9]|2\d|3[01])|192\.168)\./', $ips[$i])) { |
||||||
| 613 | if (version_compare(phpversion(), "5.0.0", ">=")) { |
||||||
| 614 | if (ip2long($ips[$i]) != false) { |
||||||
|
0 ignored issues
–
show
|
|||||||
| 615 | $ip = $ips[$i]; |
||||||
| 616 | break; |
||||||
| 617 | } |
||||||
| 618 | } else { |
||||||
| 619 | if (ip2long($ips[$i]) != -1) { |
||||||
| 620 | $ip = $ips[$i]; |
||||||
| 621 | break; |
||||||
| 622 | } |
||||||
| 623 | } |
||||||
| 624 | } |
||||||
| 625 | } |
||||||
| 626 | } |
||||||
| 627 | |||||||
| 628 | // Return with the found IP or the remote address |
||||||
| 629 | return ($ip ? $ip : $_SERVER['REMOTE_ADDR']); |
||||||
| 630 | } |
||||||
| 631 | /** |
||||||
| 632 | * sets a random token stored in the session used to validate the form submit |
||||||
| 633 | */ |
||||||
| 634 | function setToken() |
||||||
|
0 ignored issues
–
show
|
|||||||
| 635 | { |
||||||
| 636 | if (session_id() == '') |
||||||
| 637 | session_start(); |
||||||
| 638 | |||||||
| 639 | $_SESSION['comm_token'] = md5(time() . rand()); |
||||||
| 640 | } |
||||||
| 641 | /** |
||||||
| 642 | * it will return the query string as hidden fields or as url |
||||||
| 643 | * @param string $type type of output |
||||||
| 644 | * @param array $ignore ignored elements |
||||||
| 645 | * @return string |
||||||
| 646 | */ |
||||||
| 647 | function queryString($type = '', $ignore = array()) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 648 | { |
||||||
| 649 | |||||||
| 650 | $result = ''; |
||||||
| 651 | |||||||
| 652 | foreach ($_GET as $k => $v) { |
||||||
| 653 | if ((is_array($ignore) && in_array($k, $ignore)) |
||||||
| 654 | || (is_string($ignore) && preg_match($ignore, $k)) |
||||||
| 655 | ) |
||||||
| 656 | continue; |
||||||
| 657 | |||||||
| 658 | if ($type == 'hidden') { |
||||||
| 659 | $result .= "<input type='hidden' name='" . urlencode($k) . "' value='" . urlencode($v) . "'>"; |
||||||
| 660 | } else { |
||||||
| 661 | $result[] = urlencode($k) . "=" . urlencode($v); |
||||||
| 662 | } |
||||||
| 663 | } |
||||||
| 664 | |||||||
| 665 | if (is_array($result)) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 666 | return implode("&", $result); |
||||||
| 667 | |||||||
| 668 | return $result; |
||||||
| 669 | } |
||||||
| 670 | |||||||
| 671 | |||||||
| 672 | /** |
||||||
| 673 | * generates a confirmation form |
||||||
| 674 | * @return string the html code of the form |
||||||
| 675 | */ |
||||||
| 676 | function gennerateConfirm($location = '', $info_name = 'comm_del', $info_value = 0, $submit = "I'm sure, Delete") |
||||||
|
0 ignored issues
–
show
|
|||||||
| 677 | { |
||||||
| 678 | |||||||
| 679 | if ($location == '') |
||||||
| 680 | $location = "?" . $this->queryString('', $this->ignore); |
||||||
| 681 | |||||||
| 682 | return "<form class='form-horizontal' action='$location' method='post'> |
||||||
| 683 | <div class='control-group'> |
||||||
| 684 | <div class='controls'> |
||||||
| 685 | " . ($info_name ? "<input type='hidden' name='$info_name' value='$info_value'>" : "") . " |
||||||
| 686 | <input type='submit' id='comm_submit' name='comm_confirm' class='btn btn-primary' value='$submit'> |
||||||
| 687 | <a href='" . $_SERVER['HTTP_REFERER'] . "' class='btn'>Cancel</a> |
||||||
| 688 | </div> |
||||||
| 689 | </div> |
||||||
| 690 | </form>"; |
||||||
| 691 | } |
||||||
| 692 | /** |
||||||
| 693 | * checks if the current user has the rights to delete/edit a comment |
||||||
| 694 | * @param object $comment data related to one comment |
||||||
| 695 | * @return boolean [description] |
||||||
| 696 | */ |
||||||
| 697 | function hasRights($comment) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 698 | { |
||||||
| 699 | if (session_id() == '') |
||||||
| 700 | session_start(); |
||||||
| 701 | |||||||
| 702 | if ($this->settings['isAdmin'] || (isset($_SESSION['comm_last_id']) && $_SESSION['comm_last_id'] == $comment->id)) |
||||||
| 703 | return true; |
||||||
| 704 | return false; |
||||||
| 705 | } |
||||||
| 706 | /** |
||||||
| 707 | * returns the html code of the options available |
||||||
| 708 | * @param object $comment data related to one comment |
||||||
| 709 | * @return string the html code to display the options |
||||||
| 710 | */ |
||||||
| 711 | function admin_options($comment) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 712 | { |
||||||
| 713 | // if is admin or the person who posted the message |
||||||
| 714 | if ($this->hasRights($comment)) |
||||||
| 715 | return "<a href='?" . $this->queryString('', $this->ignore) . "&comm_edit=$comment->id#$comment->id'>Edit</a> |
||||||
| 716 | | <a href='?" . $this->queryString('', $this->ignore) . "&comm_del=$comment->id#$comment->id'>Delete</a>" . |
||||||
| 717 | ($this->settings['isAdmin'] ? //if is admin |
||||||
| 718 | " | <a href='?" . $this->queryString('', $this->ignore) . "&comm_" . |
||||||
| 719 | ($this->isBanned($comment->ip) ? "un" : "") . "ban=" . urlencode($comment->ip) . "'>" . |
||||||
| 720 | ($this->isBanned($comment->ip) ? "Un" : "") . "Ban</a>" : ""); |
||||||
| 721 | } |
||||||
| 722 | |||||||
| 723 | |||||||
| 724 | /** |
||||||
| 725 | * will generate the html code for page numbers |
||||||
| 726 | * @param interger $total the total number of elements |
||||||
|
0 ignored issues
–
show
The type
interger was not found. Maybe you did not declare it correctly or list all dependencies?
The issue could also be caused by a filter entry in the build configuration.
If the path has been excluded in your configuration, e.g. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths Loading history...
|
|||||||
| 727 | * @param interger $page current page |
||||||
| 728 | * @param integer $perpage number of elements per page |
||||||
| 729 | * @return string the generated html code |
||||||
| 730 | */ |
||||||
| 731 | function generatePages($pageid, $perpage = 10) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 732 | { |
||||||
| 733 | |||||||
| 734 | |||||||
| 735 | $sql = "SELECT `id` FROM `" . $this->settings['comments_table'] . "` WHERE `parent` = 0 "; |
||||||
| 736 | |||||||
| 737 | if ($pageid) |
||||||
| 738 | $sql .= " AND `pageid`='" . (int) $pageid . "'"; |
||||||
| 739 | |||||||
| 740 | |||||||
| 741 | $total = mysqli_num_rows(mysqli_query($this->link, $sql)); |
||||||
|
0 ignored issues
–
show
It seems like
mysqli_query($this->link, $sql) can also be of type true; however, parameter $result of mysqli_num_rows() does only seem to accept mysqli_result, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
It seems like
$this->link can also be of type boolean; however, parameter $mysql of mysqli_query() does only seem to accept mysqli, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 742 | |||||||
| 743 | $total_pages = ceil($total / $perpage); |
||||||
| 744 | |||||||
| 745 | $page = !isset($_GET['comm_page']) || ((int) $_GET['comm_page'] <= 0) ? 1 : (int) $_GET['comm_page']; |
||||||
| 746 | |||||||
| 747 | $query = "&" . $this->queryString('', array('comm_page')); |
||||||
| 748 | |||||||
| 749 | $html = "<div class='pagination'><ul>"; |
||||||
| 750 | |||||||
| 751 | if ($page > 4) |
||||||
| 752 | $html .= "<li><a href='?$query'>First</a></li>"; |
||||||
| 753 | |||||||
| 754 | if ($page > 1) |
||||||
| 755 | $html .= "<li><a href='?comm_page=" . ($page - 1) . "$query'>Prev</a> </li>"; |
||||||
| 756 | |||||||
| 757 | for ($i = max(1, $page - 3); $i <= min($page + 3, $total_pages); $i++) |
||||||
| 758 | $html .= ($i == $page ? "<li class='active'><a>" . $i . "</a></li>" : " <li><a href='?comm_page=$i$query'>$i</a></li> "); |
||||||
| 759 | |||||||
| 760 | if ($page < $total_pages) |
||||||
| 761 | $html .= "<li><a href='?comm_page=" . ($page + 1) . "$query'>Next</a></li>"; |
||||||
| 762 | |||||||
| 763 | if ($page < $total_pages - 3) |
||||||
| 764 | $html .= "<li><a href='?comm_page=$total_pages$query'> Last </a></li>"; |
||||||
| 765 | |||||||
| 766 | $html .= "</ul></div>"; |
||||||
| 767 | |||||||
| 768 | return $html; |
||||||
| 769 | } |
||||||
| 770 | |||||||
| 771 | /** |
||||||
| 772 | * deletes comment based on the comment id, it also checks for the rights of the user. |
||||||
| 773 | * @param interger $comment_id the id of the comment to be deleted |
||||||
| 774 | * @return boolean true on success |
||||||
| 775 | */ |
||||||
| 776 | function delComm($comment_id) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 777 | { |
||||||
| 778 | $comm = mysqli_query($this->link, "SELECT `id` FROM `" . $this->settings['comments_table'] . "` WHERE `id` = '" . (int) $comment_id . "'"); |
||||||
|
0 ignored issues
–
show
It seems like
$this->link can also be of type boolean; however, parameter $mysql of mysqli_query() does only seem to accept mysqli, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 779 | if (mysqli_num_rows($comm) && $this->hasRights(mysqli_fetch_object($comm))) { |
||||||
|
0 ignored issues
–
show
It seems like
$comm can also be of type true; however, parameter $result of mysqli_num_rows() does only seem to accept mysqli_result, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
It seems like
$comm can also be of type true; however, parameter $result of mysqli_fetch_object() does only seem to accept mysqli_result, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 780 | mysqli_query($this->link, "DELETE FROM `" . $this->settings['comments_table'] . "` |
||||||
| 781 | WHERE `id` = '" . (int) $comment_id . "' OR `parent` = '" . (int) $comment_id . "'"); |
||||||
| 782 | |||||||
| 783 | return true; |
||||||
| 784 | } |
||||||
| 785 | |||||||
| 786 | return false; |
||||||
| 787 | } |
||||||
| 788 | /** |
||||||
| 789 | * Adds the inserted ip in the banned list |
||||||
| 790 | * @param string $ip the ip to be banned |
||||||
| 791 | */ |
||||||
| 792 | function banIP($ip) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 793 | { |
||||||
| 794 | if ($this->settings['isAdmin']) |
||||||
| 795 | if (mysqli_query($this->link, "INSERT INTO `" . $this->settings['banned_table'] . "` |
||||||
|
0 ignored issues
–
show
It seems like
$this->link can also be of type boolean; however, parameter $mysql of mysqli_query() does only seem to accept mysqli, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 796 | SET `ip` = '" . mysqli_real_escape_string($this->link, $ip) . "'")) |
||||||
|
0 ignored issues
–
show
It seems like
$this->link can also be of type boolean; however, parameter $mysql of mysqli_real_escape_string() does only seem to accept mysqli, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 797 | return true; |
||||||
| 798 | return false; |
||||||
| 799 | } |
||||||
| 800 | |||||||
| 801 | /** |
||||||
| 802 | * Deletes an ip from the banned list. |
||||||
| 803 | * @param string $ip the ip to be unbanned |
||||||
| 804 | */ |
||||||
| 805 | function unBanIP($ip) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 806 | { |
||||||
| 807 | if ($this->settings['isAdmin']) { |
||||||
| 808 | mysqli_query($this->link, "DELETE FROM `" . $this->settings['banned_table'] . "` |
||||||
|
0 ignored issues
–
show
It seems like
$this->link can also be of type boolean; however, parameter $mysql of mysqli_query() does only seem to accept mysqli, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 809 | WHERE `ip` = '" . mysqli_real_escape_string($this->link, $ip) . "'"); |
||||||
|
0 ignored issues
–
show
It seems like
$this->link can also be of type boolean; however, parameter $mysql of mysqli_real_escape_string() does only seem to accept mysqli, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 810 | return true; |
||||||
| 811 | } |
||||||
| 812 | |||||||
| 813 | return false; |
||||||
| 814 | } |
||||||
| 815 | /** |
||||||
| 816 | * checks if an ip is banned |
||||||
| 817 | * @param string $ip ip to be checked |
||||||
| 818 | * @return boolean true if the ip is banned |
||||||
| 819 | */ |
||||||
| 820 | function isBanned($ip) |
||||||
|
0 ignored issues
–
show
|
|||||||
| 821 | { |
||||||
| 822 | // no need to check the same ip 2 times in a row |
||||||
| 823 | if (count($this->checked_ips) && in_array($ip, array_keys($this->checked_ips))) |
||||||
| 824 | return $this->checked_ips[$ip]; |
||||||
| 825 | |||||||
| 826 | $this->checked_ips[$ip] = $ip; |
||||||
| 827 | |||||||
| 828 | |||||||
| 829 | if (mysqli_num_rows(mysqli_query($this->link, "SELECT * FROM `" . $this->settings['banned_table'] . "` |
||||||
|
0 ignored issues
–
show
It seems like
$this->link can also be of type boolean; however, parameter $mysql of mysqli_query() does only seem to accept mysqli, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
It seems like
mysqli_query($this->link...this->link, $ip) . ''') can also be of type true; however, parameter $result of mysqli_num_rows() does only seem to accept mysqli_result, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 830 | WHERE `ip` = '" . mysqli_real_escape_string($this->link, $ip) . "'"))) { |
||||||
|
0 ignored issues
–
show
It seems like
$this->link can also be of type boolean; however, parameter $mysql of mysqli_real_escape_string() does only seem to accept mysqli, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 831 | $this->checked_ips[$ip] = true; |
||||||
| 832 | return true; |
||||||
| 833 | } |
||||||
| 834 | $this->checked_ips[$ip] = false; |
||||||
| 835 | |||||||
| 836 | |||||||
| 837 | return false; |
||||||
| 838 | } |
||||||
| 839 | } |
||||||
| 840 |
Adding explicit visibility (
private,protected, orpublic) is generally recommend to communicate to other developers how, and from where this method is intended to be used.