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 (http://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
20defined('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.");
23include_once XOOPS_ROOT_PATH . '/class/xoopstopic.php';
24include_once XOOPS_ROOT_PATH . '/kernel/user.php';
25
26/**
27 * Class XoopsStory
28 */
29class 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        $array   = $this->db->fetchArray($this->db->query($sql));
276        $this->makeStory($array);
277    }
278
279    /**
280     * @param $array
281     */
282    public function makeStory($array)
283    {
284        foreach ($array as $key => $value) {
285            $this->$key = $value;
286        }
287    }
288
289    /**
290     * @return bool
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     * @return bool
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     * @param $total
317     *
318     * @return bool
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     * @return XoopsTopic
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     * @return string
350     */
351    public function uname()
352    {
353        return XoopsUser::getUnameFromId($this->uid);
354    }
355
356    /**
357     * @param string $format
358     *
359     * @return mixed
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     * @param string $format
384     *
385     * @return string
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     * @param string $format
419     *
420     * @return string
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     * @return int
484     */
485    public function nohtml()
486    {
487        return $this->nohtml;
488    }
489
490    /**
491     * @return int
492     */
493    public function nosmiley()
494    {
495        return $this->nosmiley;
496    }
497
498    /**
499     * @return int
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     * @return int
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     * @param bool $astext
526     *
527     * @return string
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