1<?php 2/** 3 * XOOPS news story 4 * 5 * You may not change or alter any portion of this comment or credits 6 * of supporting developers from this source code or any supporting source code 7 * which is considered copyrighted (c) material of the original comment or credit authors. 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11 * 12 * @copyright (c) 2000-2016 XOOPS Project (www.xoops.org) 13 * @license GNU GPL 2 (http://www.gnu.org/licenses/gpl-2.0.html) 14 * @package kernel 15 * @since 2.0.0 16 * @author Kazumi Ono (AKA onokazu) http://www.myweb.ne.jp/, http://jp.xoops.org/ 17 * @deprecated 18 */ 19 20defined('XOOPS_ROOT_PATH') || exit('XOOPS root path not defined'); 21 22$GLOBALS['xoopsLogger']->addDeprecated("'/class/xoopstory.php' is deprecated since XOOPS 2.5.4, please create your own class instead."); 23include_once XOOPS_ROOT_PATH . '/class/xoopstopic.php'; 24include_once XOOPS_ROOT_PATH . '/kernel/user.php'; 25 26/** 27 * Class XoopsStory 28 */ 29class XoopsStory 30{ 31 public $table; 32 public $storyid; 33 public $topicid; 34 public $uid; 35 public $title; 36 public $hometext; 37 public $bodytext = ''; 38 public $counter; 39 public $created; 40 public $published; 41 public $expired; 42 public $hostname; 43 public $nohtml = 0; 44 public $nosmiley = 0; 45 public $ihome = 0; 46 public $notifypub = 0; 47 public $type; 48 public $approved; 49 public $topicdisplay; 50 public $topicalign; 51 public $db; 52 public $topicstable; 53 public $comments; 54 55 /** 56 * @param int|array $storyid 57 */ 58 public function Story($storyid = -1) 59 { 60 $this->db = XoopsDatabaseFactory::getDatabaseConnection(); 61 $this->table = ''; 62 $this->topicstable = ''; 63 if (is_array($storyid)) { 64 $this->makeStory($storyid); 65 } elseif ($storyid != -1) { 66 $this->getStory((int)$storyid); 67 } 68 } 69 70 /** 71 * @param $value 72 */ 73 public function setStoryId($value) 74 { 75 $this->storyid = (int)$value; 76 } 77 78 /** 79 * @param $value 80 */ 81 public function setTopicId($value) 82 { 83 $this->topicid = (int)$value; 84 } 85 86 /** 87 * @param $value 88 */ 89 public function setUid($value) 90 { 91 $this->uid = (int)$value; 92 } 93 94 /** 95 * @param $value 96 */ 97 public function setTitle($value) 98 { 99 $this->title = $value; 100 } 101 102 /** 103 * @param $value 104 */ 105 public function setHometext($value) 106 { 107 $this->hometext = $value; 108 } 109 110 /** 111 * @param $value 112 */ 113 public function setBodytext($value) 114 { 115 $this->bodytext = $value; 116 } 117 118 /** 119 * @param $value 120 */ 121 public function setPublished($value) 122 { 123 $this->published = (int)$value; 124 } 125 126 /** 127 * @param $value 128 */ 129 public function setExpired($value) 130 { 131 $this->expired = (int)$value; 132 } 133 134 /** 135 * @param $value 136 */ 137 public function setHostname($value) 138 { 139 $this->hostname = $value; 140 } 141 142 /** 143 * @param int $value 144 */ 145 public function setNohtml($value = 0) 146 { 147 $this->nohtml = $value; 148 } 149 150 /** 151 * @param int $value 152 */ 153 public function setNosmiley($value = 0) 154 { 155 $this->nosmiley = $value; 156 } 157 158 /** 159 * @param $value 160 */ 161 public function setIhome($value) 162 { 163 $this->ihome = $value; 164 } 165 166 /** 167 * @param $value 168 */ 169 public function setNotifyPub($value) 170 { 171 $this->notifypub = $value; 172 } 173 174 /** 175 * @param $value 176 */ 177 public function setType($value) 178 { 179 $this->type = $value; 180 } 181 182 /** 183 * @param $value 184 */ 185 public function setApproved($value) 186 { 187 $this->approved = (int)$value; 188 } 189 190 /** 191 * @param $value 192 */ 193 public function setTopicdisplay($value) 194 { 195 $this->topicdisplay = $value; 196 } 197 198 /** 199 * @param $value 200 */ 201 public function setTopicalign($value) 202 { 203 $this->topicalign = $value; 204 } 205 206 /** 207 * @param $value 208 */ 209 public function setComments($value) 210 { 211 $this->comments = (int)$value; 212 } 213 214 /** 215 * @param bool $approved 216 * 217 * @return bool 218 */ 219 public function store($approved = false) 220 { 221 //$newpost = 0; 222 $myts = MyTextSanitizer::getInstance(); 223 $title = $myts->censorString($this->title); 224 $hometext = $myts->censorString($this->hometext); 225 $bodytext = $myts->censorString($this->bodytext); 226 $title = $myts->addSlashes($title); 227 $hometext = $myts->addSlashes($hometext); 228 $bodytext = $myts->addSlashes($bodytext); 229 if (!isset($this->nohtml) || $this->nohtml != 1) { 230 $this->nohtml = 0; 231 } 232 if (!isset($this->nosmiley) || $this->nosmiley != 1) { 233 $this->nosmiley = 0; 234 } 235 if (!isset($this->notifypub) || $this->notifypub != 1) { 236 $this->notifypub = 0; 237 } 238 if (!isset($this->topicdisplay) || $this->topicdisplay != 0) { 239 $this->topicdisplay = 1; 240 } 241 $expired = !empty($this->expired) ? $this->expired : 0; 242 if (!isset($this->storyid)) { 243 //$newpost = 1; 244 $newstoryid = $this->db->genId($this->table . '_storyid_seq'); 245 $created = time(); 246 $published = $this->approved ? $this->published : 0; 247 248 $sql = sprintf("INSERT INTO %s (storyid, uid, title, created, published, expired, hostname, nohtml, nosmiley, hometext, bodytext, counter, topicid, ihome, notifypub, story_type, topicdisplay, topicalign, comments) VALUES (%u, %u, '%s', %u, %u, %u, '%s', %u, %u, '%s', '%s', %u, %u, %u, %u, '%s', %u, '%s', %u)", $this->table, $newstoryid, $this->uid, $title, $created, $published, $expired, $this->hostname, $this->nohtml, $this->nosmiley, $hometext, $bodytext, 0, $this->topicid, $this->ihome, $this->notifypub, $this->type, $this->topicdisplay, $this->topicalign, $this->comments); 249 } else { 250 if ($this->approved) { 251 $sql = sprintf("UPDATE %s SET title = '%s', published = %u, expired = %u, nohtml = %u, nosmiley = %u, hometext = '%s', bodytext = '%s', topicid = %u, ihome = %u, topicdisplay = %u, topicalign = '%s', comments = %u WHERE storyid = %u", $this->table, $title, $this->published, $expired, $this->nohtml, $this->nosmiley, $hometext, $bodytext, $this->topicid, $this->ihome, $this->topicdisplay, $this->topicalign, $this->comments, $this->storyid); 252 } else { 253 $sql = sprintf("UPDATE %s SET title = '%s', expired = %u, nohtml = %u, nosmiley = %u, hometext = '%s', bodytext = '%s', topicid = %u, ihome = %u, topicdisplay = %u, topicalign = '%s', comments = %u WHERE storyid = %u", $this->table, $title, $expired, $this->nohtml, $this->nosmiley, $hometext, $bodytext, $this->topicid, $this->ihome, $this->topicdisplay, $this->topicalign, $this->comments, $this->storyid); 254 } 255 $newstoryid = $this->storyid; 256 } 257 if (!$result = $this->db->query($sql)) { 258 return false; 259 } 260 if (empty($newstoryid)) { 261 $newstoryid = $this->db->getInsertId(); 262 $this->storyid = $newstoryid; 263 } 264 265 return $newstoryid; 266 } 267 268 /** 269 * @param $storyid 270 */ 271 public function getStory($storyid) 272 { 273 $storyid = (int)$storyid; 274 $sql = 'SELECT * FROM ' . $this->table . ' WHERE storyid=' . $storyid . ''; 275 $array = $this->db->fetchArray($this->db->query($sql)); 276 $this->makeStory($array); 277 } 278 279 /** 280 * @param $array 281 */ 282 public function makeStory($array) 283 { 284 foreach ($array as $key => $value) { 285 $this->$key = $value; 286 } 287 } 288 289 /** 290 * @return bool 291 */ 292 public function delete() 293 { 294 $sql = sprintf('DELETE FROM %s WHERE storyid = %u', $this->table, $this->storyid); 295 if (!$result = $this->db->query($sql)) { 296 return false; 297 } 298 299 return true; 300 } 301 302 /** 303 * @return bool 304 */ 305 public function updateCounter() 306 { 307 $sql = sprintf('UPDATE %s SET counter = counter+1 WHERE storyid = %u', $this->table, $this->storyid); 308 if (!$result = $this->db->queryF($sql)) { 309 return false; 310 } 311 312 return true; 313 } 314 315 /** 316 * @param $total 317 * 318 * @return bool 319 */ 320 public function updateComments($total) 321 { 322 $sql = sprintf('UPDATE %s SET comments = %u WHERE storyid = %u', $this->table, $total, $this->storyid); 323 if (!$result = $this->db->queryF($sql)) { 324 return false; 325 } 326 327 return true; 328 } 329 330 public function topicid() 331 { 332 return $this->topicid; 333 } 334 335 /** 336 * @return XoopsTopic 337 */ 338 public function topic() 339 { 340 return new XoopsTopic($this->topicstable, $this->topicid); 341 } 342 343 public function uid() 344 { 345 return $this->uid; 346 } 347 348 /** 349 * @return string 350 */ 351 public function uname() 352 { 353 return XoopsUser::getUnameFromId($this->uid); 354 } 355 356 /** 357 * @param string $format 358 * 359 * @return mixed 360 */ 361 public function title($format = 'Show') 362 { 363 $myts = MyTextSanitizer::getInstance(); 364 $smiley = 1; 365 if ($this->nosmiley()) { 366 $smiley = 0; 367 } 368 switch ($format) { 369 case 'Show': 370 case 'Edit': 371 $title = $myts->htmlSpecialChars($this->title); 372 break; 373 case 'Preview': 374 case 'InForm': 375 $title = $myts->htmlSpecialChars($myts->stripSlashesGPC($this->title)); 376 break; 377 } 378 379 return $title; 380 } 381 382 /** 383 * @param string $format 384 * 385 * @return string 386 */ 387 public function hometext($format = 'Show') 388 { 389 $myts = MyTextSanitizer::getInstance(); 390 $html = 1; 391 $smiley = 1; 392 $xcodes = 1; 393 if ($this->nohtml()) { 394 $html = 0; 395 } 396 if ($this->nosmiley()) { 397 $smiley = 0; 398 } 399 switch ($format) { 400 case 'Show': 401 $hometext = $myts->displayTarea($this->hometext, $html, $smiley, $xcodes); 402 break; 403 case 'Edit': 404 $hometext = htmlspecialchars($this->hometext, ENT_QUOTES); 405 break; 406 case 'Preview': 407 $hometext = $myts->previewTarea($this->hometext, $html, $smiley, $xcodes); 408 break; 409 case 'InForm': 410 $hometext = htmlspecialchars($myts->stripSlashesGPC($this->hometext), ENT_QUOTES); 411 break; 412 } 413 414 return $hometext; 415 } 416 417 /** 418 * @param string $format 419 * 420 * @return string 421 */ 422 public function bodytext($format = 'Show') 423 { 424 $myts = MyTextSanitizer::getInstance(); 425 $html = 1; 426 $smiley = 1; 427 $xcodes = 1; 428 if ($this->nohtml()) { 429 $html = 0; 430 } 431 if ($this->nosmiley()) { 432 $smiley = 0; 433 } 434 switch ($format) { 435 case 'Show': 436 $bodytext = $myts->displayTarea($this->bodytext, $html, $smiley, $xcodes); 437 break; 438 case 'Edit': 439 $bodytext = htmlspecialchars($this->bodytext, ENT_QUOTES); 440 break; 441 case 'Preview': 442 $bodytext = $myts->previewTarea($this->bodytext, $html, $smiley, $xcodes); 443 break; 444 case 'InForm': 445 $bodytext = htmlspecialchars($myts->stripSlashesGPC($this->bodytext), ENT_QUOTES); 446 break; 447 } 448 449 return $bodytext; 450 } 451 452 public function counter() 453 { 454 return $this->counter; 455 } 456 457 public function created() 458 { 459 return $this->created; 460 } 461 462 public function published() 463 { 464 return $this->published; 465 } 466 467 public function expired() 468 { 469 return $this->expired; 470 } 471 472 public function hostname() 473 { 474 return $this->hostname; 475 } 476 477 public function storyid() 478 { 479 return $this->storyid; 480 } 481 482 /** 483 * @return int 484 */ 485 public function nohtml() 486 { 487 return $this->nohtml; 488 } 489 490 /** 491 * @return int 492 */ 493 public function nosmiley() 494 { 495 return $this->nosmiley; 496 } 497 498 /** 499 * @return int 500 */ 501 public function notifypub() 502 { 503 return $this->notifypub; 504 } 505 506 public function type() 507 { 508 return $this->type; 509 } 510 511 /** 512 * @return int 513 */ 514 public function ihome() 515 { 516 return $this->ihome; 517 } 518 519 public function topicdisplay() 520 { 521 return $this->topicdisplay; 522 } 523 524 /** 525 * @param bool $astext 526 * 527 * @return string 528 */ 529 public function topicalign($astext = true) 530 { 531 $ret = 'left'; 532 if ($astext) { 533 if ($this->topicalign === 'R') { 534 $ret = 'right'; 535 } 536 537 return $ret; 538 } 539 540 return $this->topicalign; 541 } 542 543 public function comments() 544 { 545 return $this->comments; 546 } 547} 548