| 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: | |