| 1: | <?php | 
| 2: |  | 
| 3: |  | 
| 4: |  | 
| 5: |  | 
| 6: |  | 
| 7: |  | 
| 8: |  | 
| 9: |  | 
| 10: |  | 
| 11: |  | 
| 12: |  | 
| 13: |  | 
| 14: |  | 
| 15: |  | 
| 16: |  | 
| 17: |  | 
| 18: |  | 
| 19: |  | 
| 20: | defined('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."); | 
| 23: | include_once XOOPS_ROOT_PATH . '/class/xoopstopic.php'; | 
| 24: | include_once XOOPS_ROOT_PATH . '/kernel/user.php'; | 
| 25: |  | 
| 26: |  | 
| 27: |  | 
| 28: |  | 
| 29: | class 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: |  | 
| 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: |  | 
| 72: |  | 
| 73: | public function setStoryId($value) | 
| 74: | { | 
| 75: | $this->storyid = (int)$value; | 
| 76: | } | 
| 77: |  | 
| 78: |  | 
| 79: |  | 
| 80: |  | 
| 81: | public function setTopicId($value) | 
| 82: | { | 
| 83: | $this->topicid = (int)$value; | 
| 84: | } | 
| 85: |  | 
| 86: |  | 
| 87: |  | 
| 88: |  | 
| 89: | public function setUid($value) | 
| 90: | { | 
| 91: | $this->uid = (int)$value; | 
| 92: | } | 
| 93: |  | 
| 94: |  | 
| 95: |  | 
| 96: |  | 
| 97: | public function setTitle($value) | 
| 98: | { | 
| 99: | $this->title = $value; | 
| 100: | } | 
| 101: |  | 
| 102: |  | 
| 103: |  | 
| 104: |  | 
| 105: | public function setHometext($value) | 
| 106: | { | 
| 107: | $this->hometext = $value; | 
| 108: | } | 
| 109: |  | 
| 110: |  | 
| 111: |  | 
| 112: |  | 
| 113: | public function setBodytext($value) | 
| 114: | { | 
| 115: | $this->bodytext = $value; | 
| 116: | } | 
| 117: |  | 
| 118: |  | 
| 119: |  | 
| 120: |  | 
| 121: | public function setPublished($value) | 
| 122: | { | 
| 123: | $this->published = (int)$value; | 
| 124: | } | 
| 125: |  | 
| 126: |  | 
| 127: |  | 
| 128: |  | 
| 129: | public function setExpired($value) | 
| 130: | { | 
| 131: | $this->expired = (int)$value; | 
| 132: | } | 
| 133: |  | 
| 134: |  | 
| 135: |  | 
| 136: |  | 
| 137: | public function setHostname($value) | 
| 138: | { | 
| 139: | $this->hostname = $value; | 
| 140: | } | 
| 141: |  | 
| 142: |  | 
| 143: |  | 
| 144: |  | 
| 145: | public function setNohtml($value = 0) | 
| 146: | { | 
| 147: | $this->nohtml = $value; | 
| 148: | } | 
| 149: |  | 
| 150: |  | 
| 151: |  | 
| 152: |  | 
| 153: | public function setNosmiley($value = 0) | 
| 154: | { | 
| 155: | $this->nosmiley = $value; | 
| 156: | } | 
| 157: |  | 
| 158: |  | 
| 159: |  | 
| 160: |  | 
| 161: | public function setIhome($value) | 
| 162: | { | 
| 163: | $this->ihome = $value; | 
| 164: | } | 
| 165: |  | 
| 166: |  | 
| 167: |  | 
| 168: |  | 
| 169: | public function setNotifyPub($value) | 
| 170: | { | 
| 171: | $this->notifypub = $value; | 
| 172: | } | 
| 173: |  | 
| 174: |  | 
| 175: |  | 
| 176: |  | 
| 177: | public function setType($value) | 
| 178: | { | 
| 179: | $this->type = $value; | 
| 180: | } | 
| 181: |  | 
| 182: |  | 
| 183: |  | 
| 184: |  | 
| 185: | public function setApproved($value) | 
| 186: | { | 
| 187: | $this->approved = (int)$value; | 
| 188: | } | 
| 189: |  | 
| 190: |  | 
| 191: |  | 
| 192: |  | 
| 193: | public function setTopicdisplay($value) | 
| 194: | { | 
| 195: | $this->topicdisplay = $value; | 
| 196: | } | 
| 197: |  | 
| 198: |  | 
| 199: |  | 
| 200: |  | 
| 201: | public function setTopicalign($value) | 
| 202: | { | 
| 203: | $this->topicalign = $value; | 
| 204: | } | 
| 205: |  | 
| 206: |  | 
| 207: |  | 
| 208: |  | 
| 209: | public function setComments($value) | 
| 210: | { | 
| 211: | $this->comments = (int)$value; | 
| 212: | } | 
| 213: |  | 
| 214: |  | 
| 215: |  | 
| 216: |  | 
| 217: |  | 
| 218: |  | 
| 219: | public function store($approved = false) | 
| 220: | { | 
| 221: |  | 
| 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: |  | 
| 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: |  | 
| 270: |  | 
| 271: | public function getStory($storyid) | 
| 272: | { | 
| 273: | $storyid = (int)$storyid; | 
| 274: | $sql     = 'SELECT * FROM ' . $this->table . ' WHERE storyid=' . $storyid . ''; | 
| 275: | $result = $this->db->query($sql); | 
| 276: | if (!$this->db->isResultSet($result)) { | 
| 277: | throw new \RuntimeException( | 
| 278: | \sprintf(_DB_QUERY_ERROR, $sql) . $this->db->error(), E_USER_ERROR | 
| 279: | ); | 
| 280: | } | 
| 281: | $array   = $this->db->fetchArray($result); | 
| 282: | $this->makeStory($array); | 
| 283: | } | 
| 284: |  | 
| 285: |  | 
| 286: |  | 
| 287: |  | 
| 288: | public function makeStory($array) | 
| 289: | { | 
| 290: | foreach ($array as $key => $value) { | 
| 291: | $this->$key = $value; | 
| 292: | } | 
| 293: | } | 
| 294: |  | 
| 295: |  | 
| 296: |  | 
| 297: |  | 
| 298: | public function delete() | 
| 299: | { | 
| 300: | $sql = sprintf('DELETE FROM %s WHERE storyid = %u', $this->table, $this->storyid); | 
| 301: | if (!$result = $this->db->query($sql)) { | 
| 302: | return false; | 
| 303: | } | 
| 304: |  | 
| 305: | return true; | 
| 306: | } | 
| 307: |  | 
| 308: |  | 
| 309: |  | 
| 310: |  | 
| 311: | public function updateCounter() | 
| 312: | { | 
| 313: | $sql = sprintf('UPDATE %s SET counter = counter+1 WHERE storyid = %u', $this->table, $this->storyid); | 
| 314: | if (!$result = $this->db->queryF($sql)) { | 
| 315: | return false; | 
| 316: | } | 
| 317: |  | 
| 318: | return true; | 
| 319: | } | 
| 320: |  | 
| 321: |  | 
| 322: |  | 
| 323: |  | 
| 324: |  | 
| 325: |  | 
| 326: | public function updateComments($total) | 
| 327: | { | 
| 328: | $sql = sprintf('UPDATE %s SET comments = %u WHERE storyid = %u', $this->table, $total, $this->storyid); | 
| 329: | if (!$result = $this->db->queryF($sql)) { | 
| 330: | return false; | 
| 331: | } | 
| 332: |  | 
| 333: | return true; | 
| 334: | } | 
| 335: |  | 
| 336: | public function topicid() | 
| 337: | { | 
| 338: | return $this->topicid; | 
| 339: | } | 
| 340: |  | 
| 341: |  | 
| 342: |  | 
| 343: |  | 
| 344: | public function topic() | 
| 345: | { | 
| 346: | return new XoopsTopic($this->topicstable, $this->topicid); | 
| 347: | } | 
| 348: |  | 
| 349: | public function uid() | 
| 350: | { | 
| 351: | return $this->uid; | 
| 352: | } | 
| 353: |  | 
| 354: |  | 
| 355: |  | 
| 356: |  | 
| 357: | public function uname() | 
| 358: | { | 
| 359: | return XoopsUser::getUnameFromId($this->uid); | 
| 360: | } | 
| 361: |  | 
| 362: |  | 
| 363: |  | 
| 364: |  | 
| 365: |  | 
| 366: |  | 
| 367: | public function title($format = 'Show') | 
| 368: | { | 
| 369: | $myts   = \MyTextSanitizer::getInstance(); | 
| 370: | $smiley = 1; | 
| 371: | if ($this->nosmiley()) { | 
| 372: | $smiley = 0; | 
| 373: | } | 
| 374: | switch ($format) { | 
| 375: | case 'Show': | 
| 376: | case 'Edit': | 
| 377: | $title = $myts->htmlSpecialChars($this->title); | 
| 378: | break; | 
| 379: | case 'Preview': | 
| 380: | case 'InForm': | 
| 381: | $title = $myts->htmlSpecialChars($myts->stripSlashesGPC($this->title)); | 
| 382: | break; | 
| 383: | } | 
| 384: |  | 
| 385: | return $title; | 
| 386: | } | 
| 387: |  | 
| 388: |  | 
| 389: |  | 
| 390: |  | 
| 391: |  | 
| 392: |  | 
| 393: | public function hometext($format = 'Show') | 
| 394: | { | 
| 395: | $myts   = \MyTextSanitizer::getInstance(); | 
| 396: | $html   = 1; | 
| 397: | $smiley = 1; | 
| 398: | $xcodes = 1; | 
| 399: | if ($this->nohtml()) { | 
| 400: | $html = 0; | 
| 401: | } | 
| 402: | if ($this->nosmiley()) { | 
| 403: | $smiley = 0; | 
| 404: | } | 
| 405: | switch ($format) { | 
| 406: | case 'Show': | 
| 407: | $hometext = $myts->displayTarea($this->hometext, $html, $smiley, $xcodes); | 
| 408: | break; | 
| 409: | case 'Edit': | 
| 410: | $hometext = htmlspecialchars($this->hometext, ENT_QUOTES); | 
| 411: | break; | 
| 412: | case 'Preview': | 
| 413: | $hometext = $myts->previewTarea($this->hometext, $html, $smiley, $xcodes); | 
| 414: | break; | 
| 415: | case 'InForm': | 
| 416: | $hometext = htmlspecialchars($myts->stripSlashesGPC($this->hometext), ENT_QUOTES); | 
| 417: | break; | 
| 418: | } | 
| 419: |  | 
| 420: | return $hometext; | 
| 421: | } | 
| 422: |  | 
| 423: |  | 
| 424: |  | 
| 425: |  | 
| 426: |  | 
| 427: |  | 
| 428: | public function bodytext($format = 'Show') | 
| 429: | { | 
| 430: | $myts   = \MyTextSanitizer::getInstance(); | 
| 431: | $html   = 1; | 
| 432: | $smiley = 1; | 
| 433: | $xcodes = 1; | 
| 434: | if ($this->nohtml()) { | 
| 435: | $html = 0; | 
| 436: | } | 
| 437: | if ($this->nosmiley()) { | 
| 438: | $smiley = 0; | 
| 439: | } | 
| 440: | switch ($format) { | 
| 441: | case 'Show': | 
| 442: | $bodytext = $myts->displayTarea($this->bodytext, $html, $smiley, $xcodes); | 
| 443: | break; | 
| 444: | case 'Edit': | 
| 445: | $bodytext = htmlspecialchars($this->bodytext, ENT_QUOTES); | 
| 446: | break; | 
| 447: | case 'Preview': | 
| 448: | $bodytext = $myts->previewTarea($this->bodytext, $html, $smiley, $xcodes); | 
| 449: | break; | 
| 450: | case 'InForm': | 
| 451: | $bodytext = htmlspecialchars($myts->stripSlashesGPC($this->bodytext), ENT_QUOTES); | 
| 452: | break; | 
| 453: | } | 
| 454: |  | 
| 455: | return $bodytext; | 
| 456: | } | 
| 457: |  | 
| 458: | public function counter() | 
| 459: | { | 
| 460: | return $this->counter; | 
| 461: | } | 
| 462: |  | 
| 463: | public function created() | 
| 464: | { | 
| 465: | return $this->created; | 
| 466: | } | 
| 467: |  | 
| 468: | public function published() | 
| 469: | { | 
| 470: | return $this->published; | 
| 471: | } | 
| 472: |  | 
| 473: | public function expired() | 
| 474: | { | 
| 475: | return $this->expired; | 
| 476: | } | 
| 477: |  | 
| 478: | public function hostname() | 
| 479: | { | 
| 480: | return $this->hostname; | 
| 481: | } | 
| 482: |  | 
| 483: | public function storyid() | 
| 484: | { | 
| 485: | return $this->storyid; | 
| 486: | } | 
| 487: |  | 
| 488: |  | 
| 489: |  | 
| 490: |  | 
| 491: | public function nohtml() | 
| 492: | { | 
| 493: | return $this->nohtml; | 
| 494: | } | 
| 495: |  | 
| 496: |  | 
| 497: |  | 
| 498: |  | 
| 499: | public function nosmiley() | 
| 500: | { | 
| 501: | return $this->nosmiley; | 
| 502: | } | 
| 503: |  | 
| 504: |  | 
| 505: |  | 
| 506: |  | 
| 507: | public function notifypub() | 
| 508: | { | 
| 509: | return $this->notifypub; | 
| 510: | } | 
| 511: |  | 
| 512: | public function type() | 
| 513: | { | 
| 514: | return $this->type; | 
| 515: | } | 
| 516: |  | 
| 517: |  | 
| 518: |  | 
| 519: |  | 
| 520: | public function ihome() | 
| 521: | { | 
| 522: | return $this->ihome; | 
| 523: | } | 
| 524: |  | 
| 525: | public function topicdisplay() | 
| 526: | { | 
| 527: | return $this->topicdisplay; | 
| 528: | } | 
| 529: |  | 
| 530: |  | 
| 531: |  | 
| 532: |  | 
| 533: |  | 
| 534: |  | 
| 535: | public function topicalign($astext = true) | 
| 536: | { | 
| 537: | $ret = 'left'; | 
| 538: | if ($astext) { | 
| 539: | if ($this->topicalign === 'R') { | 
| 540: | $ret = 'right'; | 
| 541: | } | 
| 542: |  | 
| 543: | return $ret; | 
| 544: | } | 
| 545: |  | 
| 546: | return $this->topicalign; | 
| 547: | } | 
| 548: |  | 
| 549: | public function comments() | 
| 550: | { | 
| 551: | return $this->comments; | 
| 552: | } | 
| 553: | } | 
| 554: |  |