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 (https://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:
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: * Class XoopsStory
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: * @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: $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: * @param $array
287: */
288: public function makeStory($array)
289: {
290: foreach ($array as $key => $value) {
291: $this->$key = $value;
292: }
293: }
294:
295: /**
296: * @return bool
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: * @return bool
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: * @param $total
323: *
324: * @return bool
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: * @return XoopsTopic
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: * @return string
356: */
357: public function uname()
358: {
359: return XoopsUser::getUnameFromId($this->uid);
360: }
361:
362: /**
363: * @param string $format
364: *
365: * @return mixed
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: * @param string $format
390: *
391: * @return string
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: * @param string $format
425: *
426: * @return string
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: * @return int
490: */
491: public function nohtml()
492: {
493: return $this->nohtml;
494: }
495:
496: /**
497: * @return int
498: */
499: public function nosmiley()
500: {
501: return $this->nosmiley;
502: }
503:
504: /**
505: * @return int
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: * @return int
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: * @param bool $astext
532: *
533: * @return string
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: