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: $array = $this->db->fetchArray($this->db->query($sql));
276: $this->makeStory($array);
277: }
278:
279: 280: 281:
282: public function makeStory($array)
283: {
284: foreach ($array as $key => $value) {
285: $this->$key = $value;
286: }
287: }
288:
289: 290: 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: 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: 317: 318: 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: 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: 350:
351: public function uname()
352: {
353: return XoopsUser::getUnameFromId($this->uid);
354: }
355:
356: 357: 358: 359: 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: 384: 385: 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: 419: 420: 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: 484:
485: public function nohtml()
486: {
487: return $this->nohtml;
488: }
489:
490: 491: 492:
493: public function nosmiley()
494: {
495: return $this->nosmiley;
496: }
497:
498: 499: 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: 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: 526: 527: 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: