Completed
Push — master ( 59d8d3...c14d6b )
by Michael
14:50
created

XoopsComments::showThreadPost()   F

Complexity

Conditions 23
Paths > 20000

Size

Total Lines 90
Code Lines 69

Duplication

Lines 15
Ratio 16.67 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 15
loc 90
rs 2
cc 23
eloc 69
nc 98400
nop 4

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
0 ignored issues
show
Coding Style Compatibility introduced by
For compatibility and reusability of your code, PSR1 recommends that a file should introduce either new symbols (like classes, functions, etc.) or have side-effects (like outputting something, or including other files), but not both at the same time. The first symbol is defined on line 37 and the first side effect is on line 19.

The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.

The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.

To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.

Loading history...
2
/**
3
 * XOOPS comments
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
 */
18
19
defined('XOOPS_ROOT_PATH') || exit('Restricted access');
20
21
include_once XOOPS_ROOT_PATH . '/class/xoopstree.php';
22
require_once XOOPS_ROOT_PATH . '/kernel/object.php';
23
include_once XOOPS_ROOT_PATH . '/language/' . $GLOBALS['xoopsConfig']['language'] . '/comment.php';
24
25
$GLOBALS['xoopsLogger']->addDeprecated("'/class/xoopscommments.php' is deprecated since XOOPS 2.5.4, please use 'kernel/comment.php' instead.");
26
27
/**
28
 * Xoops Comments Object Class
29
 *
30
 * @author              Kazumi Ono <[email protected]>
31
 * @author              John Neill <[email protected]>
32
 * @copyright       (c) 2000-2016 XOOPS Project (www.xoops.org)
33
 * @package             kernel
34
 * @subpackage          comments
35
 * @access              public
36
 */
37
class XoopsComments extends XoopsObject
38
{
39
    public $ctable;
40
    public $db;
41
42
    /**
43
     * @param      $ctable
44
     * @param null $id
45
     */
46
    public function __construct($ctable, $id = null)
47
    {
48
        $this->ctable = $ctable;
49
        $this->db     = XoopsDatabaseFactory::getDatabaseConnection();
50
        parent::__construct();
51
        $this->initVar('comment_id', XOBJ_DTYPE_INT, null, false);
52
        $this->initVar('item_id', XOBJ_DTYPE_INT, null, false);
53
        $this->initVar('order', XOBJ_DTYPE_INT, null, false);
54
        $this->initVar('mode', XOBJ_DTYPE_OTHER, null, false);
55
        $this->initVar('subject', XOBJ_DTYPE_TXTBOX, null, false, 255);
56
        $this->initVar('comment', XOBJ_DTYPE_TXTAREA, null, false, null);
57
        $this->initVar('ip', XOBJ_DTYPE_OTHER, null, false);
58
        $this->initVar('pid', XOBJ_DTYPE_INT, 0, false);
59
        $this->initVar('date', XOBJ_DTYPE_INT, null, false);
60
        $this->initVar('nohtml', XOBJ_DTYPE_INT, 1, false);
61
        $this->initVar('nosmiley', XOBJ_DTYPE_INT, 0, false);
62
        $this->initVar('noxcode', XOBJ_DTYPE_INT, 0, false);
63
        $this->initVar('user_id', XOBJ_DTYPE_INT, null, false);
64
        $this->initVar('icon', XOBJ_DTYPE_OTHER, null, false);
65
        $this->initVar('prefix', XOBJ_DTYPE_OTHER, null, false);
66 View Code Duplication
        if (!empty($id)) {
67
            if (is_array($id)) {
68
                $this->assignVars($id);
69
            } else {
70
                $this->load((int)$id);
71
            }
72
        }
73
    }
74
75
    /**
76
     * Load Comment by ID
77
     *
78
     * @param int $id
79
     */
80 View Code Duplication
    public function load($id)
81
    {
82
        $id  = (int)$id;
83
        $sql = 'SELECT * FROM ' . $this->ctable . ' WHERE comment_id=' . $id;
84
        $arr = $this->db->fetchArray($this->db->query($sql));
85
        $this->assignVars($arr);
86
    }
87
88
    /**
89
     * Save Comment
90
     *
91
     * @return int
92
     */
93
    public function store()
94
    {
95
        if (!$this->cleanVars()) {
96
            return false;
0 ignored issues
show
Bug Best Practice introduced by
The return type of return false; (false) is incompatible with the return type documented by XoopsComments::store of type integer.

If you return a value from a function or method, it should be a sub-type of the type that is given by the parent type f.e. an interface, or abstract method. This is more formally defined by the Lizkov substitution principle, and guarantees that classes that depend on the parent type can use any instance of a child type interchangably. This principle also belongs to the SOLID principles for object oriented design.

Let’s take a look at an example:

class Author {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

abstract class Post {
    public function getAuthor() {
        return 'Johannes';
    }
}

class BlogPost extends Post {
    public function getAuthor() {
        return new Author('Johannes');
    }
}

class ForumPost extends Post { /* ... */ }

function my_function(Post $post) {
    echo strtoupper($post->getAuthor());
}

Our function my_function expects a Post object, and outputs the author of the post. The base class Post returns a simple string and outputting a simple string will work just fine. However, the child class BlogPost which is a sub-type of Post instead decided to return an object, and is therefore violating the SOLID principles. If a BlogPost were passed to my_function, PHP would not complain, but ultimately fail when executing the strtoupper call in its body.

Loading history...
97
        }
98
        foreach ($this->cleanVars as $k => $v) {
99
            $$k = $v;
100
        }
101
        $isnew = false;
102
        if (empty($comment_id)) {
0 ignored issues
show
Bug introduced by
The variable $comment_id seems only to be defined at a later point. As such the call to empty() seems to always evaluate to true.

This check marks calls to isset(...) or empty(...) that are found before the variable itself is defined. These will always have the same result.

This is likely the result of code being shifted around. Consider removing these calls.

Loading history...
103
            $isnew      = true;
104
            $comment_id = $this->db->genId($this->ctable . '_comment_id_seq');
105
            $sql        = sprintf("INSERT INTO %s (comment_id, pid, item_id, date, user_id, ip, subject, comment, nohtml, nosmiley, noxcode, icon) VALUES (%u, %u, %u, %u, %u, '%s', '%s', '%s', %u, %u, %u, '%s')", $this->ctable, $comment_id, $pid, $item_id, time(), $user_id, $ip, $subject, $comment, $nohtml, $nosmiley, $noxcode, $icon);
0 ignored issues
show
Bug introduced by
The variable $pid does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
Bug introduced by
The variable $item_id does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
Bug introduced by
The variable $user_id does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
Bug introduced by
The variable $ip does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
Bug introduced by
The variable $subject does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
Bug introduced by
The variable $comment does not exist. Did you mean $comment_id?

This check looks for variables that are accessed but have not been defined. It raises an issue if it finds another variable that has a similar name.

The variable may have been renamed without also renaming all references.

Loading history...
Bug introduced by
The variable $nohtml does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
Bug introduced by
The variable $nosmiley does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
Bug introduced by
The variable $noxcode does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
Bug introduced by
The variable $icon does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
106
        } else {
107
            $sql = sprintf("UPDATE %s SET subject = '%s', comment = '%s', nohtml = %u, nosmiley = %u, noxcode = %u, icon = '%s'  WHERE comment_id = %u", $this->ctable, $subject, $comment, $nohtml, $nosmiley, $noxcode, $icon, $comment_id);
0 ignored issues
show
Bug introduced by
The variable $comment does not exist. Did you mean $comment_id?

This check looks for variables that are accessed but have not been defined. It raises an issue if it finds another variable that has a similar name.

The variable may have been renamed without also renaming all references.

Loading history...
108
        }
109
        if (!$result = $this->db->query($sql)) {
110
            //echo $sql;
111
            return false;
0 ignored issues
show
Bug Best Practice introduced by
The return type of return false; (false) is incompatible with the return type documented by XoopsComments::store of type integer.

If you return a value from a function or method, it should be a sub-type of the type that is given by the parent type f.e. an interface, or abstract method. This is more formally defined by the Lizkov substitution principle, and guarantees that classes that depend on the parent type can use any instance of a child type interchangably. This principle also belongs to the SOLID principles for object oriented design.

Let’s take a look at an example:

class Author {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

abstract class Post {
    public function getAuthor() {
        return 'Johannes';
    }
}

class BlogPost extends Post {
    public function getAuthor() {
        return new Author('Johannes');
    }
}

class ForumPost extends Post { /* ... */ }

function my_function(Post $post) {
    echo strtoupper($post->getAuthor());
}

Our function my_function expects a Post object, and outputs the author of the post. The base class Post returns a simple string and outputting a simple string will work just fine. However, the child class BlogPost which is a sub-type of Post instead decided to return an object, and is therefore violating the SOLID principles. If a BlogPost were passed to my_function, PHP would not complain, but ultimately fail when executing the strtoupper call in its body.

Loading history...
112
        }
113
        if (empty($comment_id)) {
114
            $comment_id = $this->db->getInsertId();
115
        }
116
        if ($isnew != false) {
0 ignored issues
show
Coding Style Best Practice introduced by
It seems like you are loosely comparing two booleans. Considering using the strict comparison !== instead.

When comparing two booleans, it is generally considered safer to use the strict comparison operator.

Loading history...
117
            $sql = sprintf('UPDATE %s SET posts = posts+1 WHERE uid = %u', $this->db->prefix('users'), $user_id);
118
            if (!$result = $this->db->query($sql)) {
119
                echo 'Could not update user posts.';
120
            }
121
        }
122
123
        return $comment_id;
124
    }
125
126
    /**
127
     * Enter description here...
128
     *
129
     * @return int
0 ignored issues
show
Documentation introduced by
Should the return type not be false|integer?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
130
     */
131
    public function delete()
132
    {
133
        $sql = sprintf('DELETE FROM %s WHERE comment_id = %u', $this->ctable, $this->getVar('comment_id'));
134
        if (!$result = $this->db->query($sql)) {
135
            return false;
136
        }
137
        $sql = sprintf('UPDATE %s SET posts = posts-1 WHERE uid = %u', $this->db->prefix('users'), $this->getVar('user_id'));
138
        if (!$result = $this->db->query($sql)) {
139
            echo 'Could not update user posts.';
140
        }
141
        $mytree = new XoopsTree($this->ctable, 'comment_id', 'pid');
142
        $arr    = $mytree->getAllChild($this->getVar('comment_id'), 'comment_id');
143
        $size   = count($arr);
144
        if ($size > 0) {
145
            for ($i = 0; $i < $size; ++$i) {
146
                $sql = sprintf('DELETE FROM %s WHERE comment_bid = %u', $this->ctable, $arr[$i]['comment_id']);
147
                if (!$result = $this->db->query($sql)) {
148
                    echo 'Could not delete comment.';
149
                }
150
                $sql = sprintf('UPDATE %s SET posts = posts-1 WHERE uid = %u', $this->db->prefix('users'), $arr[$i]['user_id']);
151
                if (!$result = $this->db->query($sql)) {
152
                    echo 'Could not update user posts.';
153
                }
154
            }
155
        }
156
157
        return ($size + 1);
158
    }
159
160
    /**
161
     * Get Comments Tree
162
     *
163
     * @return unknown
0 ignored issues
show
Documentation introduced by
Should the return type not be array?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
164
     */
165
    public function getCommentTree()
166
    {
167
        $mytree = new XoopsTree($this->ctable, 'comment_id', 'pid');
168
        $ret    = array();
169
        $tarray = $mytree->getChildTreeArray($this->getVar('comment_id'), 'comment_id');
170
        foreach ($tarray as $ele) {
171
            $ret[] = new XoopsComments($this->ctable, $ele);
172
        }
173
174
        return $ret;
175
    }
176
177
    /**
178
     * Get All Comments using criteria match
179
     *
180
     * @param  array  $criteria
181
     * @param  bool   $asobject
182
     * @param  string $orderby
183
     * @param  int    $limit
184
     * @param  int    $start
185
     * @return array
186
     */
187
    public function getAllComments($criteria = array(), $asobject = true, $orderby = 'comment_id ASC', $limit = 0, $start = 0)
188
    {
189
        $ret         = array();
190
        $where_query = '';
191
        if (is_array($criteria) && count($criteria) > 0) {
192
            $where_query = ' WHERE';
193
            foreach ($criteria as $c) {
194
                $where_query .= " $c AND";
195
            }
196
            $where_query = substr($where_query, 0, -4);
197
        }
198
        if (!$asobject) {
199
            $sql    = 'SELECT comment_id FROM ' . $this->ctable . "$where_query ORDER BY $orderby";
200
            $result = $this->db->query($sql, $limit, $start);
201
            while ($myrow = $this->db->fetchArray($result)) {
202
                $ret[] = $myrow['comment_id'];
203
            }
204
        } else {
205
            $sql    = 'SELECT * FROM ' . $this->ctable . '' . $where_query . " ORDER BY $orderby";
206
            $result = $this->db->query($sql, $limit, $start);
207
            while ($myrow = $this->db->fetchArray($result)) {
208
                $ret[] = new XoopsComments($this->ctable, $myrow);
209
            }
210
        }
211
212
        //echo $sql;
213
        return $ret;
214
    }
215
216
    /**
217
     * Enter printNavBar
218
     *
219
     * @param int    $item_id
220
     * @param string $mode
221
     * @param int    $order
222
     */
223
    public function printNavBar($item_id, $mode = 'flat', $order = 1)
224
    {
225
        global $xoopsConfig, $xoopsUser;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
226
        echo "<form method='get' action='" . $_SERVER['PHP_SELF'] . "'><table width='100%' border='0' cellspacing='1' cellpadding='2'><tr><td class='bg1' align='center'><select name='mode'><option value='nocomments'";
227
        if ($mode === 'nocomments') {
228
            echo " selected='selected'";
229
        }
230
        echo '>' . _NOCOMMENTS . "</option><option value='flat'";
231
        if ($mode === 'flat') {
232
            echo " selected='selected'";
233
        }
234
        echo '>' . _FLAT . "</option><option value='thread'";
235
        if ($mode === 'thread' || $mode == '') {
236
            echo " selected='selected'";
237
        }
238
        echo '>' . _THREADED . "</option></select><select name='order'><option value='0'";
239
        if ($order != 1) {
240
            echo " selected='selected'";
241
        }
242
        echo '>' . _OLDESTFIRST . "</option><option value='1'";
243
        if ($order == 1) {
244
            echo " selected='selected'";
245
        }
246
        echo '>' . _NEWESTFIRST . "</option></select><input type='hidden' name='item_id' value='" . (int)$item_id . "' /><input type='submit' value='" . _CM_REFRESH . "' />";
247
        if ($xoopsConfig['anonpost'] == 1 || $xoopsUser) {
248
            if ($mode !== 'flat' || $mode !== 'nocomments' || $mode !== 'thread') {
249
                $mode = 'flat';
250
            }
251
            echo "&nbsp;<input type='button' onclick='location=\"newcomment.php?item_id=" . (int)$item_id . '&amp;order=' . (int)$order . '&amp;mode=' . $mode . "\"' value='" . _CM_POSTCOMMENT . "' />";
252
        }
253
        echo '</td></tr></table></form>';
254
    }
255
256
    /**
257
     * Show Thread
258
     *
259
     */
260
    public function showThreadHead()
261
    {
262
        openThread();
263
    }
264
265
    /**
266
     * Enter description here...
267
     *
268
     * @param string $order
269
     * @param string $mode
270
     * @param int    $adminview
271
     * @param int    $color_num
272
     */
273
    public function showThreadPost($order, $mode, $adminview = 0, $color_num = 1)
274
    {
275
        global $xoopsConfig, $xoopsUser;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
276
        $edit_image   = '';
277
        $reply_image  = '';
278
        $delete_image = '';
279
        $post_date    = formatTimestamp($this->getVar('date'), 'm');
280
        if ($this->getVar('user_id') != 0) {
281
            $poster = new XoopsUser($this->getVar('user_id'));
282
            if (!$poster->isActive()) {
283
                $poster = 0;
284
            }
285
        } else {
286
            $poster = 0;
287
        }
288
        if ($this->getVar('icon') != null && $this->getVar('icon') != '') {
289
            $subject_image = "<a name='" . $this->getVar('comment_id') . "' id='" . $this->getVar('comment_id') . "'></a><img src='" . XOOPS_URL . '/images/subject/' . $this->getVar('icon') . "' alt='' />";
290
        } else {
291
            $subject_image = "<a name='" . $this->getVar('comment_id') . "' id='" . $this->getVar('comment_id') . "'></a><img src='" . XOOPS_URL . "/images/icons/no_posticon.gif' alt='' />";
292
        }
293
        if ($adminview) {
294
            $ip_image = "<img src='" . XOOPS_URL . "/images/icons/ip.gif' alt='" . $this->getVar('ip') . "' />";
295
        } else {
296
            $ip_image = "<img src='" . XOOPS_URL . "/images/icons/ip.gif' alt='' />";
297
        }
298
        if ($adminview || ($xoopsUser && $this->getVar('user_id') == $xoopsUser->getVar('uid'))) {
299
            $edit_image = "<a href='editcomment.php?comment_id=" . $this->getVar('comment_id') . '&amp;mode=' . $mode . '&amp;order=' . (int)$order . "'><img src='" . XOOPS_URL . "/images/icons/edit.gif' alt='" . _EDIT . "' /></a>";
300
        }
301
        if ($xoopsConfig['anonpost'] || $xoopsUser) {
302
            $reply_image = "<a href='replycomment.php?comment_id=" . $this->getVar('comment_id') . '&amp;mode=' . $mode . '&amp;order=' . (int)$order . "'><img src='" . XOOPS_URL . "/images/icons/reply.gif' alt='" . _REPLY . "' /></a>";
303
        }
304
        if ($adminview) {
305
            $delete_image = "<a href='deletecomment.php?comment_id=" . $this->getVar('comment_id') . '&amp;mode=' . $mode . '&amp;order=' . (int)$order . "'><img src='" . XOOPS_URL . "/images/icons/delete.gif' alt='" . _DELETE . "' /></a>";
306
        }
307
308
        if ($poster) {
309
            $text = $this->getVar('comment');
310
            if ($poster->getVar('attachsig')) {
311
                $text .= '<p><br />_________________<br />' . $poster->user_sig() . '</p>';
312
            }
313
            $reg_date = _CM_JOINED;
314
            $reg_date .= formatTimestamp($poster->getVar('user_regdate'), 's');
315
            $posts = _CM_POSTS;
316
            $posts .= $poster->getVar('posts');
317
            $user_from = _CM_FROM;
318
            $user_from .= $poster->getVar('user_from');
319
            $rank = $poster->rank();
320
            if ($rank['image'] != '') {
321
                $rank['image'] = "<img src='" . XOOPS_UPLOAD_URL . '/' . $rank['image'] . "' alt='' />";
322
            }
323
            $avatar_image = "<img src='" . XOOPS_UPLOAD_URL . '/' . $poster->getVar('user_avatar') . "' alt='' />";
324
            $online_image = '';
325
            if ($poster->isOnline()) {
326
                $online_image = "<span style='color:#ee0000;font-weight:bold;'>" . _ONLINE . '</span>';
327
            }
328
            $profile_image = "<a href='" . XOOPS_URL . '/userinfo.php?uid=' . $poster->getVar('uid') . "'><img src='" . XOOPS_URL . "/images/icons/profile.gif' alt='" . _PROFILE . "' /></a>";
329
            $pm_image      = '';
330 View Code Duplication
            if ($xoopsUser) {
331
                $pm_image = "<a href='javascript:openWithSelfMain(\"" . XOOPS_URL . '/pmlite.php?send2=1&amp;to_userid=' . $poster->getVar('uid') . "\",\"pmlite\",450,370);'><img src='" . XOOPS_URL . "/images/icons/pm.gif' alt='" . sprintf(_SENDPMTO, $poster->getVar('uname', 'E')) . "' /></a>";
332
            }
333
            $email_image = '';
334 View Code Duplication
            if ($poster->getVar('user_viewemail')) {
335
                $email_image = "<a href='mailto:" . $poster->getVar('email', 'E') . "'><img src='" . XOOPS_URL . "/images/icons/email.gif' alt='" . sprintf(_SENDEMAILTO, $poster->getVar('uname', 'E')) . "' /></a>";
336
            }
337
            $posterurl = $poster->getVar('url');
338
            $www_image = '';
339
            if ($posterurl != '') {
340
                $www_image = "<a href='$posterurl' rel='external'><img src='" . XOOPS_URL . "/images/icons/www.gif' alt='" . _VISITWEBSITE . "' /></a>";
341
            }
342
            $icq_image = '';
343 View Code Duplication
            if ($poster->getVar('user_icq') != '') {
344
                $icq_image = "<a href='http://wwp.icq.com/scripts/search.dll?to=" . $poster->getVar('user_icq', 'E') . "'><img src='" . XOOPS_URL . "/images/icons/icq_add.gif' alt='" . _ADD . "' /></a>";
345
            }
346
            $aim_image = '';
347 View Code Duplication
            if ($poster->getVar('user_aim') != '') {
348
                $aim_image = "<a href='aim:goim?screenname=" . $poster->getVar('user_aim', 'E') . '&message=Hi+' . $poster->getVar('user_aim') . "+Are+you+there?'><img src='" . XOOPS_URL . "/images/icons/aim.gif' alt='aim' /></a>";
349
            }
350
            $yim_image = '';
351 View Code Duplication
            if ($poster->getVar('user_yim') != '') {
352
                $yim_image = "<a href='http://edit.yahoo.com/config/send_webmesg?.target=" . $poster->getVar('user_yim', 'E') . "&.src=pg'><img src='" . XOOPS_URL . "/images/icons/yim.gif' alt='yim' /></a>";
353
            }
354
            $msnm_image = '';
355
            if ($poster->getVar('user_msnm') != '') {
356
                $msnm_image = "<a href='" . XOOPS_URL . '/userinfo.php?uid=' . $poster->getVar('uid') . "'><img src='" . XOOPS_URL . "/images/icons/msnm.gif' alt='msnm' /></a>";
357
            }
358
            showThread($color_num, $subject_image, $this->getVar('subject'), $text, $post_date, $ip_image, $reply_image, $edit_image, $delete_image, $poster->getVar('uname'), $rank['title'], $rank['image'], $avatar_image, $reg_date, $posts, $user_from, $online_image, $profile_image, $pm_image, $email_image, $www_image, $icq_image, $aim_image, $yim_image, $msnm_image);
359
        } else {
360
            showThread($color_num, $subject_image, $this->getVar('subject'), $this->getVar('comment'), $post_date, $ip_image, $reply_image, $edit_image, $delete_image, $xoopsConfig['anonymous']);
361
        }
362
    }
363
364
    /**
365
     * Show Thread Footer
366
     *
367
     */
368
    public function showThreadFoot()
369
    {
370
        closeThread();
371
    }
372
373
    /**
374
     * Show Thread Head
375
     *
376
     * @param int|string $width
377
     */
378
    public function showTreeHead($width = '100%')
379
    {
380
        echo "<table border='0' class='outer' cellpadding='0' cellspacing='0' align='center' width='$width'><tr class='bg3' align='center'><td colspan='3'>" . _CM_REPLIES . "</td></tr><tr class='bg3' align='left'><td width='60%' class='fg2'>" . _CM_TITLE . "</td><td width='20%' class='fg2'>" . _CM_POSTER . "</td><td class='fg2'>" . _CM_POSTED . '</td></tr>';
381
    }
382
383
    /**
384
     * Show Tree Items
385
     *
386
     * @param string $order
387
     * @param string $mode
388
     * @param int    $color_num
389
     */
390
    public function showTreeItem($order, $mode, $color_num)
391
    {
392
        $bg = 'odd';
393
        if ($color_num == 1) {
394
            $bg = 'even';
395
        }
396
        $prefix = str_replace('.', '&nbsp;&nbsp;&nbsp;&nbsp;', $this->getVar('prefix'));
397
        $date   = formatTimestamp($this->getVar('date'), 'm');
398
        $icon   = 'icons/no_posticon.gif';
399
        if ($this->getVar('icon') != '') {
400
            $icon = 'subject/' . $this->getVar('icon', 'E');
401
        }
402
        echo "<tr class='$bg' align='left'><td>" . $prefix . "<img src='" . XOOPS_URL . '/images/' . $icon . "'>&nbsp;<a href='" . $_SERVER['PHP_SELF'] . '?item_id=' . $this->getVar('item_id') . '&amp;comment_id=' . $this->getVar('comment_id') . '&amp;mode=' . $mode . '&amp;order=' . $order . '#' . $this->getVar('comment_id') . "'>" . $this->getVar('subject') . "</a></td><td><a href='" . XOOPS_URL . '/userinfo.php?uid=' . $this->getVar('user_id') . "'>" . XoopsUser::getUnameFromId($this->getVar('user_id')) . '</a></td><td>' . $date . '</td></tr>';
403
    }
404
405
    /**
406
     * Show Thread Foot
407
     *
408
     */
409
    public function showTreeFoot()
410
    {
411
        echo '</table><br />';
412
    }
413
}
414