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