XoopsStory   F
last analyzed

Complexity

Total Complexity 86

Size/Duplication

Total Lines 523
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 185
dl 0
loc 523
rs 2
c 0
b 0
f 0
wmc 86

46 Methods

Rating   Name   Duplication   Size   Complexity  
A setBodytext() 0 3 1
A setComments() 0 3 1
A setTopicdisplay() 0 3 1
A setNosmiley() 0 3 1
A setHometext() 0 3 1
A setTopicId() 0 3 1
A setPublished() 0 3 1
A setApproved() 0 3 1
A setUid() 0 3 1
A setExpired() 0 3 1
A setIhome() 0 3 1
A setTitle() 0 3 1
A setNohtml() 0 3 1
A setNotifyPub() 0 3 1
A setType() 0 3 1
A setTopicalign() 0 3 1
A setHostname() 0 3 1
A setStoryId() 0 3 1
A Story() 0 9 3
F store() 0 47 15
A updateComments() 0 8 2
A storyid() 0 3 1
A topicdisplay() 0 3 1
A notifypub() 0 3 1
A expired() 0 3 1
A updateCounter() 0 8 2
A uname() 0 3 1
A counter() 0 3 1
A topic() 0 3 1
B hometext() 0 28 7
A makeStory() 0 4 2
A topicalign() 0 12 3
A type() 0 3 1
A delete() 0 8 2
A published() 0 3 1
A uid() 0 3 1
A nosmiley() 0 3 1
A comments() 0 3 1
A topicid() 0 3 1
A ihome() 0 3 1
A title() 0 19 6
A hostname() 0 3 1
A getStory() 0 12 2
A created() 0 3 1
A nohtml() 0 3 1
B bodytext() 0 28 7

How to fix   Complexity   

Complex Class

Complex classes like XoopsStory often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use XoopsStory, and based on these observations, apply Extract Interface, too.

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)
0 ignored issues
show
Unused Code introduced by
The parameter $approved is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

219
    public function store(/** @scrutinizer ignore-unused */ $approved = false)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
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)) {
0 ignored issues
show
Unused Code introduced by
The assignment to $result is dead and can be removed.
Loading history...
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)) {
0 ignored issues
show
Unused Code introduced by
The assignment to $result is dead and can be removed.
Loading history...
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)) {
0 ignored issues
show
Unused Code introduced by
The assignment to $result is dead and can be removed.
Loading history...
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)) {
0 ignored issues
show
Unused Code introduced by
The assignment to $result is dead and can be removed.
Loading history...
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;
0 ignored issues
show
Unused Code introduced by
The assignment to $smiley is dead and can be removed.
Loading history...
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));
0 ignored issues
show
Deprecated Code introduced by
The function MyTextSanitizer::stripSlashesGPC() has been deprecated: as of XOOPS 2.5.11 and will be removed in next XOOPS version ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

381
                $title = $myts->htmlSpecialChars(/** @scrutinizer ignore-deprecated */ $myts->stripSlashesGPC($this->title));

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
382
                break;
383
        }
384
385
        return $title;
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $title does not seem to be defined for all execution paths leading up to this point.
Loading history...
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 | ENT_HTML5);
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 | ENT_HTML5);
0 ignored issues
show
Deprecated Code introduced by
The function MyTextSanitizer::stripSlashesGPC() has been deprecated: as of XOOPS 2.5.11 and will be removed in next XOOPS version ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

416
                $hometext = htmlspecialchars(/** @scrutinizer ignore-deprecated */ $myts->stripSlashesGPC($this->hometext), ENT_QUOTES | ENT_HTML5);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
417
                break;
418
        }
419
420
        return $hometext;
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $hometext does not seem to be defined for all execution paths leading up to this point.
Loading history...
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 | ENT_HTML5);
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 | ENT_HTML5);
0 ignored issues
show
Deprecated Code introduced by
The function MyTextSanitizer::stripSlashesGPC() has been deprecated: as of XOOPS 2.5.11 and will be removed in next XOOPS version ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

451
                $bodytext = htmlspecialchars(/** @scrutinizer ignore-deprecated */ $myts->stripSlashesGPC($this->bodytext), ENT_QUOTES | ENT_HTML5);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
452
                break;
453
        }
454
455
        return $bodytext;
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $bodytext does not seem to be defined for all execution paths leading up to this point.
Loading history...
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