@@ -67,7 +67,7 @@ discard block |
||
67 | 67 | global $myts; |
68 | 68 | |
69 | 69 | $clean = stripslashes($text); |
70 | - $clean =& $myts->displayTarea($clean, 1, 0, 1); |
|
70 | + $clean = & $myts->displayTarea($clean, 1, 0, 1); |
|
71 | 71 | $clean = strip_tags($clean); |
72 | 72 | $clean = htmlspecialchars($clean, ENT_QUOTES); |
73 | 73 | |
@@ -87,16 +87,16 @@ discard block |
||
87 | 87 | $linebreak = $isHtml ? '<br>' : "\n"; |
88 | 88 | for ($i = 0; $i < $digest_count; ++$i) { |
89 | 89 | if ($isHtml) { |
90 | - $content .= ($i + 1) . '. <a href=' . $this->items[$i]['link'] . '>' . $this->items[$i]['title'] . '</a>'; |
|
90 | + $content .= ($i + 1).'. <a href='.$this->items[$i]['link'].'>'.$this->items[$i]['title'].'</a>'; |
|
91 | 91 | } else { |
92 | - $content .= ($i + 1) . '. ' . $this->items[$i]['title'] . $linebreak . $this->items[$i]['link']; |
|
92 | + $content .= ($i + 1).'. '.$this->items[$i]['title'].$linebreak.$this->items[$i]['link']; |
|
93 | 93 | } |
94 | 94 | |
95 | - $content .= $linebreak . $this->items[$i]['author']; |
|
95 | + $content .= $linebreak.$this->items[$i]['author']; |
|
96 | 96 | if ($isSummary) { |
97 | - $content .= $linebreak . $this->items[$i]['summary']; |
|
97 | + $content .= $linebreak.$this->items[$i]['summary']; |
|
98 | 98 | } |
99 | - $content .= $linebreak . $linebreak; |
|
99 | + $content .= $linebreak.$linebreak; |
|
100 | 100 | } |
101 | 101 | } |
102 | 102 | $this->setVar('digest_content', $content); |
@@ -12,96 +12,96 @@ |
||
12 | 12 | |
13 | 13 | class Digest extends \XoopsObject |
14 | 14 | { |
15 | - public $digest_id; |
|
16 | - public $digest_time; |
|
17 | - public $digest_content; |
|
15 | + public $digest_id; |
|
16 | + public $digest_time; |
|
17 | + public $digest_content; |
|
18 | 18 | |
19 | - public $items; |
|
20 | - public $isHtml = false; |
|
21 | - public $isSummary = true; |
|
19 | + public $items; |
|
20 | + public $isHtml = false; |
|
21 | + public $isSummary = true; |
|
22 | 22 | |
23 | - /** |
|
24 | - * |
|
25 | - */ |
|
26 | - public function __construct() |
|
27 | - { |
|
28 | - parent::__construct(); |
|
29 | - $this->initVar('digest_id', XOBJ_DTYPE_INT); |
|
30 | - $this->initVar('digest_time', XOBJ_DTYPE_INT); |
|
31 | - $this->initVar('digest_content', XOBJ_DTYPE_TXTAREA); |
|
32 | - $this->items = []; |
|
33 | - } |
|
23 | + /** |
|
24 | + * |
|
25 | + */ |
|
26 | + public function __construct() |
|
27 | + { |
|
28 | + parent::__construct(); |
|
29 | + $this->initVar('digest_id', XOBJ_DTYPE_INT); |
|
30 | + $this->initVar('digest_time', XOBJ_DTYPE_INT); |
|
31 | + $this->initVar('digest_content', XOBJ_DTYPE_TXTAREA); |
|
32 | + $this->items = []; |
|
33 | + } |
|
34 | 34 | |
35 | - public function setHtml() |
|
36 | - { |
|
37 | - $this->isHtml = true; |
|
38 | - } |
|
35 | + public function setHtml() |
|
36 | + { |
|
37 | + $this->isHtml = true; |
|
38 | + } |
|
39 | 39 | |
40 | - public function setSummary() |
|
41 | - { |
|
42 | - $this->isSummary = true; |
|
43 | - } |
|
40 | + public function setSummary() |
|
41 | + { |
|
42 | + $this->isSummary = true; |
|
43 | + } |
|
44 | 44 | |
45 | - /** |
|
46 | - * @param $title |
|
47 | - * @param $link |
|
48 | - * @param $author |
|
49 | - * @param string $summary |
|
50 | - */ |
|
51 | - public function addItem($title, $link, $author, $summary = '') |
|
52 | - { |
|
53 | - $title = $this->cleanup($title); |
|
54 | - $author = $this->cleanup($author); |
|
55 | - if (!empty($summary)) { |
|
56 | - $summary = $this->cleanup($summary); |
|
57 | - } |
|
58 | - $this->items[] = ['title' => $title, 'link' => $link, 'author' => $author, 'summary' => $summary]; |
|
59 | - } |
|
45 | + /** |
|
46 | + * @param $title |
|
47 | + * @param $link |
|
48 | + * @param $author |
|
49 | + * @param string $summary |
|
50 | + */ |
|
51 | + public function addItem($title, $link, $author, $summary = '') |
|
52 | + { |
|
53 | + $title = $this->cleanup($title); |
|
54 | + $author = $this->cleanup($author); |
|
55 | + if (!empty($summary)) { |
|
56 | + $summary = $this->cleanup($summary); |
|
57 | + } |
|
58 | + $this->items[] = ['title' => $title, 'link' => $link, 'author' => $author, 'summary' => $summary]; |
|
59 | + } |
|
60 | 60 | |
61 | - /** |
|
62 | - * @param $text |
|
63 | - * @return mixed|string |
|
64 | - */ |
|
65 | - public function cleanup($text) |
|
66 | - { |
|
67 | - global $myts; |
|
61 | + /** |
|
62 | + * @param $text |
|
63 | + * @return mixed|string |
|
64 | + */ |
|
65 | + public function cleanup($text) |
|
66 | + { |
|
67 | + global $myts; |
|
68 | 68 | |
69 | - $clean = stripslashes($text); |
|
70 | - $clean =& $myts->displayTarea($clean, 1, 0, 1); |
|
71 | - $clean = strip_tags($clean); |
|
72 | - $clean = htmlspecialchars($clean, ENT_QUOTES); |
|
69 | + $clean = stripslashes($text); |
|
70 | + $clean =& $myts->displayTarea($clean, 1, 0, 1); |
|
71 | + $clean = strip_tags($clean); |
|
72 | + $clean = htmlspecialchars($clean, ENT_QUOTES); |
|
73 | 73 | |
74 | 74 | |
75 | - return $clean; |
|
76 | - } |
|
75 | + return $clean; |
|
76 | + } |
|
77 | 77 | |
78 | - /** |
|
79 | - * @param bool $isSummary |
|
80 | - * @param bool $isHtml |
|
81 | - * @return bool |
|
82 | - */ |
|
83 | - public function buildContent($isSummary = true, $isHtml = false) |
|
84 | - { |
|
85 | - $digest_count = count($this->items); |
|
86 | - $content = ''; |
|
87 | - if ($digest_count > 0) { |
|
88 | - $linebreak = $isHtml ? '<br>' : "\n"; |
|
89 | - for ($i = 0; $i < $digest_count; ++$i) { |
|
90 | - if ($isHtml) { |
|
91 | - $content .= ($i + 1) . '. <a href=' . $this->items[$i]['link'] . '>' . $this->items[$i]['title'] . '</a>'; |
|
92 | - } else { |
|
93 | - $content .= ($i + 1) . '. ' . $this->items[$i]['title'] . $linebreak . $this->items[$i]['link']; |
|
94 | - } |
|
78 | + /** |
|
79 | + * @param bool $isSummary |
|
80 | + * @param bool $isHtml |
|
81 | + * @return bool |
|
82 | + */ |
|
83 | + public function buildContent($isSummary = true, $isHtml = false) |
|
84 | + { |
|
85 | + $digest_count = count($this->items); |
|
86 | + $content = ''; |
|
87 | + if ($digest_count > 0) { |
|
88 | + $linebreak = $isHtml ? '<br>' : "\n"; |
|
89 | + for ($i = 0; $i < $digest_count; ++$i) { |
|
90 | + if ($isHtml) { |
|
91 | + $content .= ($i + 1) . '. <a href=' . $this->items[$i]['link'] . '>' . $this->items[$i]['title'] . '</a>'; |
|
92 | + } else { |
|
93 | + $content .= ($i + 1) . '. ' . $this->items[$i]['title'] . $linebreak . $this->items[$i]['link']; |
|
94 | + } |
|
95 | 95 | |
96 | - $content .= $linebreak . $this->items[$i]['author']; |
|
97 | - if ($isSummary) { |
|
98 | - $content .= $linebreak . $this->items[$i]['summary']; |
|
99 | - } |
|
100 | - $content .= $linebreak . $linebreak; |
|
101 | - } |
|
102 | - } |
|
103 | - $this->setVar('digest_content', $content); |
|
96 | + $content .= $linebreak . $this->items[$i]['author']; |
|
97 | + if ($isSummary) { |
|
98 | + $content .= $linebreak . $this->items[$i]['summary']; |
|
99 | + } |
|
100 | + $content .= $linebreak . $linebreak; |
|
101 | + } |
|
102 | + } |
|
103 | + $this->setVar('digest_content', $content); |
|
104 | 104 | |
105 | - return true; |
|
106 | - } |
|
105 | + return true; |
|
106 | + } |
|
107 | 107 | } |
@@ -65,7 +65,7 @@ discard block |
||
65 | 65 | public function addField($field, $table) |
66 | 66 | { |
67 | 67 | global $xoopsDB; |
68 | - $result = $xoopsDB->queryF('ALTER TABLE ' . $table . " ADD $field"); |
|
68 | + $result = $xoopsDB->queryF('ALTER TABLE '.$table." ADD $field"); |
|
69 | 69 | |
70 | 70 | return $result; |
71 | 71 | } |
@@ -83,7 +83,7 @@ discard block |
||
83 | 83 | if (!@mkdir($folder) && !is_dir($folder)) { |
84 | 84 | throw new \RuntimeException(sprintf('Unable to create the %s directory', $folder)); |
85 | 85 | } else { |
86 | - file_put_contents($folder . '/index.html', '<script>history.go(-1);</script>'); |
|
86 | + file_put_contents($folder.'/index.html', '<script>history.go(-1);</script>'); |
|
87 | 87 | } |
88 | 88 | } catch (\Exception $e) { |
89 | 89 | echo 'Caught exception: ', $e->getMessage(), "\n", '<br>'; |
@@ -98,7 +98,7 @@ discard block |
||
98 | 98 | return; |
99 | 99 | } |
100 | 100 | // for 2.5 systems, clear everything |
101 | - require_once XOOPS_ROOT_PATH . '/modules/system/class/maintenance.php'; |
|
101 | + require_once XOOPS_ROOT_PATH.'/modules/system/class/maintenance.php'; |
|
102 | 102 | $maintenance = new \SystemMaintenance(); |
103 | 103 | $cacheList = [ |
104 | 104 | 3, // xoops_cache |
@@ -8,127 +8,127 @@ |
||
8 | 8 | */ |
9 | 9 | class Utility |
10 | 10 | { |
11 | - use Common\VersionChecks; //checkVerXoops, checkVerPhp Traits |
|
12 | - |
|
13 | - use Common\ServerStats; // getServerStats Trait |
|
14 | - |
|
15 | - use Common\FilesManagement; // Files Management Trait |
|
16 | - |
|
17 | - //--------------- Custom module methods ----------------------------- |
|
18 | - |
|
19 | - /** |
|
20 | - * Verify that a mysql table exists |
|
21 | - * |
|
22 | - * @package News |
|
23 | - * @author Hervé Thouzard (http://www.herve-thouzard.com) |
|
24 | - * @copyright (c) Hervé Thouzard |
|
25 | - * @param $tablename |
|
26 | - * @return bool |
|
27 | - */ |
|
28 | - public function tableExists($tablename) |
|
29 | - { |
|
30 | - global $xoopsDB; |
|
31 | - /** @var \XoopsMySQLDatabase $xoopsDB */ |
|
32 | - $result = $xoopsDB->queryF("SHOW TABLES LIKE '$tablename'"); |
|
33 | - |
|
34 | - return ($xoopsDB->getRowsNum($result) > 0); |
|
35 | - } |
|
36 | - |
|
37 | - /** |
|
38 | - * Verify that a field exists inside a mysql table |
|
39 | - * |
|
40 | - * @package News |
|
41 | - * @author Hervé Thouzard (http://www.herve-thouzard.com) |
|
42 | - * @copyright (c) Hervé Thouzard |
|
43 | - * @param $fieldname |
|
44 | - * @param $table |
|
45 | - * @return bool |
|
46 | - */ |
|
47 | - public function fieldExists($fieldname, $table) |
|
48 | - { |
|
49 | - global $xoopsDB; |
|
50 | - $result = $xoopsDB->queryF("SHOW COLUMNS FROM $table LIKE '$fieldname'"); |
|
51 | - |
|
52 | - return ($xoopsDB->getRowsNum($result) > 0); |
|
53 | - } |
|
54 | - |
|
55 | - /** |
|
56 | - * Add a field to a mysql table |
|
57 | - * |
|
58 | - * @package News |
|
59 | - * @author Hervé Thouzard (http://www.herve-thouzard.com) |
|
60 | - * @copyright (c) Hervé Thouzard |
|
61 | - * @param $field |
|
62 | - * @param $table |
|
63 | - * @return bool|\mysqli_result |
|
64 | - */ |
|
65 | - public function addField($field, $table) |
|
66 | - { |
|
67 | - global $xoopsDB; |
|
68 | - $result = $xoopsDB->queryF('ALTER TABLE ' . $table . " ADD $field"); |
|
69 | - |
|
70 | - return $result; |
|
71 | - } |
|
72 | - |
|
73 | - /** |
|
74 | - * Function responsible for checking if a directory exists, we can also write in and create an index.html file |
|
75 | - * |
|
76 | - * @param string $folder Le chemin complet du répertoire à vérifier |
|
77 | - * |
|
78 | - * @return void |
|
79 | - */ |
|
80 | - public static function prepareFolder($folder) |
|
81 | - { |
|
82 | - try { |
|
83 | - if (!@mkdir($folder) && !is_dir($folder)) { |
|
84 | - throw new \RuntimeException(sprintf('Unable to create the %s directory', $folder)); |
|
85 | - } else { |
|
86 | - file_put_contents($folder . '/index.html', '<script>history.go(-1);</script>'); |
|
87 | - } |
|
88 | - } catch (\Exception $e) { |
|
89 | - echo 'Caught exception: ', $e->getMessage(), "\n", '<br>'; |
|
90 | - } |
|
91 | - } |
|
92 | - |
|
93 | - public static function cleanCache() |
|
94 | - { |
|
95 | - $cacheHelper = new \Xmf\Module\Helper\Cache('newbb'); |
|
96 | - if (method_exists($cacheHelper, 'clear')) { |
|
97 | - $cacheHelper->clear(); |
|
98 | - return; |
|
99 | - } |
|
100 | - // for 2.5 systems, clear everything |
|
101 | - require_once XOOPS_ROOT_PATH . '/modules/system/class/maintenance.php'; |
|
102 | - $maintenance = new \SystemMaintenance(); |
|
103 | - $cacheList = [ |
|
104 | - 3, // xoops_cache |
|
105 | - ]; |
|
106 | - $maintenance->CleanCache($cacheList); |
|
107 | - xoops_setActiveModules(); |
|
108 | - } |
|
109 | - |
|
110 | - /** |
|
111 | - * Checks if a user is admin of NewBB |
|
112 | - * |
|
113 | - * @return boolean |
|
114 | - */ |
|
115 | - public static function userIsAdmin() |
|
116 | - { |
|
117 | - /** @var Newbb\Helper $helper */ |
|
118 | - $helper = Newbb\Helper::getInstance(); |
|
119 | - |
|
120 | - static $newbbIsAdmin; |
|
121 | - |
|
122 | - if (isset($newbbIsAdmin)) { |
|
123 | - return $newbbIsAdmin; |
|
124 | - } |
|
125 | - |
|
126 | - if (!$GLOBALS['xoopsUser']) { |
|
127 | - $newbbIsAdmin = false; |
|
128 | - } else { |
|
129 | - $newbbIsAdmin = $GLOBALS['xoopsUser']->isAdmin($helper->getModule()->getVar('mid')); |
|
130 | - } |
|
131 | - |
|
132 | - return $newbbIsAdmin; |
|
133 | - } |
|
11 | + use Common\VersionChecks; //checkVerXoops, checkVerPhp Traits |
|
12 | + |
|
13 | + use Common\ServerStats; // getServerStats Trait |
|
14 | + |
|
15 | + use Common\FilesManagement; // Files Management Trait |
|
16 | + |
|
17 | + //--------------- Custom module methods ----------------------------- |
|
18 | + |
|
19 | + /** |
|
20 | + * Verify that a mysql table exists |
|
21 | + * |
|
22 | + * @package News |
|
23 | + * @author Hervé Thouzard (http://www.herve-thouzard.com) |
|
24 | + * @copyright (c) Hervé Thouzard |
|
25 | + * @param $tablename |
|
26 | + * @return bool |
|
27 | + */ |
|
28 | + public function tableExists($tablename) |
|
29 | + { |
|
30 | + global $xoopsDB; |
|
31 | + /** @var \XoopsMySQLDatabase $xoopsDB */ |
|
32 | + $result = $xoopsDB->queryF("SHOW TABLES LIKE '$tablename'"); |
|
33 | + |
|
34 | + return ($xoopsDB->getRowsNum($result) > 0); |
|
35 | + } |
|
36 | + |
|
37 | + /** |
|
38 | + * Verify that a field exists inside a mysql table |
|
39 | + * |
|
40 | + * @package News |
|
41 | + * @author Hervé Thouzard (http://www.herve-thouzard.com) |
|
42 | + * @copyright (c) Hervé Thouzard |
|
43 | + * @param $fieldname |
|
44 | + * @param $table |
|
45 | + * @return bool |
|
46 | + */ |
|
47 | + public function fieldExists($fieldname, $table) |
|
48 | + { |
|
49 | + global $xoopsDB; |
|
50 | + $result = $xoopsDB->queryF("SHOW COLUMNS FROM $table LIKE '$fieldname'"); |
|
51 | + |
|
52 | + return ($xoopsDB->getRowsNum($result) > 0); |
|
53 | + } |
|
54 | + |
|
55 | + /** |
|
56 | + * Add a field to a mysql table |
|
57 | + * |
|
58 | + * @package News |
|
59 | + * @author Hervé Thouzard (http://www.herve-thouzard.com) |
|
60 | + * @copyright (c) Hervé Thouzard |
|
61 | + * @param $field |
|
62 | + * @param $table |
|
63 | + * @return bool|\mysqli_result |
|
64 | + */ |
|
65 | + public function addField($field, $table) |
|
66 | + { |
|
67 | + global $xoopsDB; |
|
68 | + $result = $xoopsDB->queryF('ALTER TABLE ' . $table . " ADD $field"); |
|
69 | + |
|
70 | + return $result; |
|
71 | + } |
|
72 | + |
|
73 | + /** |
|
74 | + * Function responsible for checking if a directory exists, we can also write in and create an index.html file |
|
75 | + * |
|
76 | + * @param string $folder Le chemin complet du répertoire à vérifier |
|
77 | + * |
|
78 | + * @return void |
|
79 | + */ |
|
80 | + public static function prepareFolder($folder) |
|
81 | + { |
|
82 | + try { |
|
83 | + if (!@mkdir($folder) && !is_dir($folder)) { |
|
84 | + throw new \RuntimeException(sprintf('Unable to create the %s directory', $folder)); |
|
85 | + } else { |
|
86 | + file_put_contents($folder . '/index.html', '<script>history.go(-1);</script>'); |
|
87 | + } |
|
88 | + } catch (\Exception $e) { |
|
89 | + echo 'Caught exception: ', $e->getMessage(), "\n", '<br>'; |
|
90 | + } |
|
91 | + } |
|
92 | + |
|
93 | + public static function cleanCache() |
|
94 | + { |
|
95 | + $cacheHelper = new \Xmf\Module\Helper\Cache('newbb'); |
|
96 | + if (method_exists($cacheHelper, 'clear')) { |
|
97 | + $cacheHelper->clear(); |
|
98 | + return; |
|
99 | + } |
|
100 | + // for 2.5 systems, clear everything |
|
101 | + require_once XOOPS_ROOT_PATH . '/modules/system/class/maintenance.php'; |
|
102 | + $maintenance = new \SystemMaintenance(); |
|
103 | + $cacheList = [ |
|
104 | + 3, // xoops_cache |
|
105 | + ]; |
|
106 | + $maintenance->CleanCache($cacheList); |
|
107 | + xoops_setActiveModules(); |
|
108 | + } |
|
109 | + |
|
110 | + /** |
|
111 | + * Checks if a user is admin of NewBB |
|
112 | + * |
|
113 | + * @return boolean |
|
114 | + */ |
|
115 | + public static function userIsAdmin() |
|
116 | + { |
|
117 | + /** @var Newbb\Helper $helper */ |
|
118 | + $helper = Newbb\Helper::getInstance(); |
|
119 | + |
|
120 | + static $newbbIsAdmin; |
|
121 | + |
|
122 | + if (isset($newbbIsAdmin)) { |
|
123 | + return $newbbIsAdmin; |
|
124 | + } |
|
125 | + |
|
126 | + if (!$GLOBALS['xoopsUser']) { |
|
127 | + $newbbIsAdmin = false; |
|
128 | + } else { |
|
129 | + $newbbIsAdmin = $GLOBALS['xoopsUser']->isAdmin($helper->getModule()->getVar('mid')); |
|
130 | + } |
|
131 | + |
|
132 | + return $newbbIsAdmin; |
|
133 | + } |
|
134 | 134 | } |
@@ -92,7 +92,7 @@ discard block |
||
92 | 92 | public function __construct(\XoopsDatabase $db, $type) |
93 | 93 | { |
94 | 94 | $type = ('forum' === $type) ? 'forum' : 'topic'; |
95 | - parent::__construct($db, 'newbb_reads_' . $type, Read::class . $type, 'read_id', 'post_id'); |
|
95 | + parent::__construct($db, 'newbb_reads_'.$type, Read::class.$type, 'read_id', 'post_id'); |
|
96 | 96 | $this->type = $type; |
97 | 97 | $newbbConfig = newbbLoadConfig(); |
98 | 98 | // irmtfan if read_expire = 0 dont clean |
@@ -113,7 +113,7 @@ discard block |
||
113 | 113 | return false; |
114 | 114 | } |
115 | 115 | |
116 | - $sql = 'DELETE bb FROM ' . $this->table . ' AS bb' . ' LEFT JOIN ' . $this->table . ' AS aa ON bb.read_item = aa.read_item ' . ' WHERE aa.post_id > bb.post_id'; |
|
116 | + $sql = 'DELETE bb FROM '.$this->table.' AS bb'.' LEFT JOIN '.$this->table.' AS aa ON bb.read_item = aa.read_item '.' WHERE aa.post_id > bb.post_id'; |
|
117 | 117 | if (!$result = $this->db->queryF($sql)) { |
118 | 118 | //xoops_error($this->db->error()); |
119 | 119 | return false; |
@@ -124,7 +124,7 @@ discard block |
||
124 | 124 | } |
125 | 125 | // irmtfan move here and rephrase |
126 | 126 | $expire = time() - (int)$this->lifetime; |
127 | - $sql = 'DELETE FROM ' . $this->table . ' WHERE read_time < ' . $expire; |
|
127 | + $sql = 'DELETE FROM '.$this->table.' WHERE read_time < '.$expire; |
|
128 | 128 | if (!$result = $this->db->queryF($sql)) { |
129 | 129 | //xoops_error($this->db->error()); |
130 | 130 | return false; |
@@ -180,7 +180,7 @@ discard block |
||
180 | 180 | return false; |
181 | 181 | } |
182 | 182 | } |
183 | - $sql = 'SELECT post_id ' . ' FROM ' . $this->table . ' WHERE read_item = ' . (int)$read_item . ' AND uid = ' . (int)$uid; |
|
183 | + $sql = 'SELECT post_id '.' FROM '.$this->table.' WHERE read_item = '.(int)$read_item.' AND uid = '.(int)$uid; |
|
184 | 184 | if (!$result = $this->db->queryF($sql, 1)) { |
185 | 185 | return null; |
186 | 186 | } |
@@ -235,7 +235,7 @@ discard block |
||
235 | 235 | } |
236 | 236 | } |
237 | 237 | |
238 | - $sql = 'UPDATE ' . $this->table . ' SET post_id = ' . (int)$post_id . ',' . ' read_time =' . time() . ' WHERE read_item = ' . (int)$read_item . ' AND uid = ' . (int)$uid; |
|
238 | + $sql = 'UPDATE '.$this->table.' SET post_id = '.(int)$post_id.','.' read_time ='.time().' WHERE read_item = '.(int)$read_item.' AND uid = '.(int)$uid; |
|
239 | 239 | if ($this->db->queryF($sql) && $this->db->getAffectedRows()) { |
240 | 240 | return true; |
241 | 241 | } |
@@ -307,7 +307,7 @@ discard block |
||
307 | 307 | } |
308 | 308 | |
309 | 309 | $criteria = new \CriteriaCompo(new \Criteria('uid', $uid)); |
310 | - $criteria->add(new \Criteria('read_item', '(' . implode(', ', array_map('intval', array_keys($items))) . ')', 'IN')); |
|
310 | + $criteria->add(new \Criteria('read_item', '('.implode(', ', array_map('intval', array_keys($items))).')', 'IN')); |
|
311 | 311 | $itemsObject = $this->getAll($criteria, ['read_item', 'post_id']); |
312 | 312 | |
313 | 313 | $items_list = []; |
@@ -339,43 +339,43 @@ discard block |
||
339 | 339 | $sql = "SET sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''))"; |
340 | 340 | $this->db->queryF($sql); |
341 | 341 | |
342 | - $sql = 'CREATE TABLE ' . $this->table . '_duplicate LIKE ' . $this->table . '; '; |
|
342 | + $sql = 'CREATE TABLE '.$this->table.'_duplicate LIKE '.$this->table.'; '; |
|
343 | 343 | if (!$result = $this->db->queryF($sql)) { |
344 | - xoops_error($this->db->error() . '<br>' . $sql); |
|
344 | + xoops_error($this->db->error().'<br>'.$sql); |
|
345 | 345 | |
346 | 346 | return false; |
347 | 347 | } |
348 | - $sql = 'INSERT ' . $this->table . '_duplicate SELECT * FROM ' . $this->table . ' GROUP BY read_item, uid; '; |
|
348 | + $sql = 'INSERT '.$this->table.'_duplicate SELECT * FROM '.$this->table.' GROUP BY read_item, uid; '; |
|
349 | 349 | if (!$result = $this->db->queryF($sql)) { |
350 | - xoops_error($this->db->error() . '<br>' . $sql); |
|
350 | + xoops_error($this->db->error().'<br>'.$sql); |
|
351 | 351 | |
352 | 352 | return false; |
353 | 353 | } |
354 | - $sql = 'RENAME TABLE ' . $this->table . ' TO ' . $this->table . '_with_duplicate; '; |
|
354 | + $sql = 'RENAME TABLE '.$this->table.' TO '.$this->table.'_with_duplicate; '; |
|
355 | 355 | if (!$result = $this->db->queryF($sql)) { |
356 | - xoops_error($this->db->error() . '<br>' . $sql); |
|
356 | + xoops_error($this->db->error().'<br>'.$sql); |
|
357 | 357 | |
358 | 358 | return false; |
359 | 359 | } |
360 | - $sql = 'RENAME TABLE ' . $this->table . '_duplicate TO ' . $this->table . '; '; |
|
360 | + $sql = 'RENAME TABLE '.$this->table.'_duplicate TO '.$this->table.'; '; |
|
361 | 361 | if (!$result = $this->db->queryF($sql)) { |
362 | - xoops_error($this->db->error() . '<br>' . $sql); |
|
362 | + xoops_error($this->db->error().'<br>'.$sql); |
|
363 | 363 | |
364 | 364 | return false; |
365 | 365 | } |
366 | - $sql = 'SHOW INDEX FROM ' . $this->table . " WHERE KEY_NAME = 'read_item_uid'"; |
|
366 | + $sql = 'SHOW INDEX FROM '.$this->table." WHERE KEY_NAME = 'read_item_uid'"; |
|
367 | 367 | $result = $this->db->queryF($sql); |
368 | 368 | if (empty($result)) { |
369 | - $sql .= 'ALTER TABLE ' . $this->table . ' ADD INDEX read_item_uid ( read_item, uid ); '; |
|
369 | + $sql .= 'ALTER TABLE '.$this->table.' ADD INDEX read_item_uid ( read_item, uid ); '; |
|
370 | 370 | if (!$result = $this->db->queryF($sql)) { |
371 | - xoops_error($this->db->error() . '<br>' . $sql); |
|
371 | + xoops_error($this->db->error().'<br>'.$sql); |
|
372 | 372 | |
373 | 373 | return false; |
374 | 374 | } |
375 | 375 | } |
376 | - $sql = 'DROP TABLE ' . $this->table . '_with_duplicate; '; |
|
376 | + $sql = 'DROP TABLE '.$this->table.'_with_duplicate; '; |
|
377 | 377 | if (!$result = $this->db->queryF($sql)) { |
378 | - xoops_error($this->db->error() . '<br>' . $sql); |
|
378 | + xoops_error($this->db->error().'<br>'.$sql); |
|
379 | 379 | |
380 | 380 | return false; |
381 | 381 | } |
@@ -48,340 +48,340 @@ |
||
48 | 48 | */ |
49 | 49 | class ReadHandler extends \XoopsPersistableObjectHandler |
50 | 50 | { |
51 | - /** |
|
52 | - * Object type. |
|
53 | - * <ul> |
|
54 | - * <li>forum</li> |
|
55 | - * <li>topic</li> |
|
56 | - * </ul> |
|
57 | - * |
|
58 | - * @var string |
|
59 | - */ |
|
60 | - public $type; |
|
61 | - |
|
62 | - /** |
|
63 | - * seconds records will persist. |
|
64 | - * assigned from $GLOBALS['xoopsModuleConfig']["read_expire"] |
|
65 | - * <ul> |
|
66 | - * <li>positive days = delete all read records exist in the tables before expire time // irmtfan add comment</li> |
|
67 | - * <li>0 = never expires // irmtfan change comment</li> |
|
68 | - * <li>-1 or any negative days = never records // irmtfan change comment</li> |
|
69 | - * </ul> |
|
70 | - * |
|
71 | - * @var integer |
|
72 | - */ |
|
73 | - public $lifetime; |
|
74 | - |
|
75 | - /** |
|
76 | - * storage mode for records. |
|
77 | - * assigned from $GLOBALS['xoopsModuleConfig']["read_mode"] |
|
78 | - * <ul> |
|
79 | - * <li>0 = never records</li> |
|
80 | - * <li>1 = uses cookie</li> |
|
81 | - * <li>2 = stores in database</li> |
|
82 | - * </ul> |
|
83 | - * |
|
84 | - * @var integer |
|
85 | - */ |
|
86 | - public $mode; |
|
87 | - |
|
88 | - /** |
|
89 | - * @param \XoopsDatabase $db |
|
90 | - * @param $type |
|
91 | - */ |
|
92 | - public function __construct(\XoopsDatabase $db, $type) |
|
93 | - { |
|
94 | - $type = ('forum' === $type) ? 'forum' : 'topic'; |
|
95 | - parent::__construct($db, 'newbb_reads_' . $type, Read::class . $type, 'read_id', 'post_id'); |
|
96 | - $this->type = $type; |
|
97 | - $newbbConfig = newbbLoadConfig(); |
|
98 | - // irmtfan if read_expire = 0 dont clean |
|
99 | - $this->lifetime = isset($newbbConfig['read_expire']) ? (int)$newbbConfig['read_expire'] * 24 * 3600 : 30 * 24 * 3600; |
|
100 | - $this->mode = isset($newbbConfig['read_mode']) ? $newbbConfig['read_mode'] : 2; |
|
101 | - } |
|
102 | - |
|
103 | - /** |
|
104 | - * Clear garbage |
|
105 | - * |
|
106 | - * Delete all expired and duplicated records |
|
107 | - */ |
|
108 | - // START irmtfan rephrase function to 1- add clearDuplicate and 2- dont clean when read_expire = 0 |
|
109 | - public function clearGarbage() |
|
110 | - { |
|
111 | - // irmtfan clear duplicaed rows |
|
112 | - if (!$result = $this->clearDuplicate()) { |
|
113 | - return false; |
|
114 | - } |
|
115 | - |
|
116 | - $sql = 'DELETE bb FROM ' . $this->table . ' AS bb' . ' LEFT JOIN ' . $this->table . ' AS aa ON bb.read_item = aa.read_item ' . ' WHERE aa.post_id > bb.post_id'; |
|
117 | - if (!$result = $this->db->queryF($sql)) { |
|
118 | - //xoops_error($this->db->error()); |
|
119 | - return false; |
|
120 | - } |
|
121 | - // irmtfan if read_expire = 0 dont clean |
|
122 | - if (empty($this->lifetime)) { |
|
123 | - return true; |
|
124 | - } |
|
125 | - // irmtfan move here and rephrase |
|
126 | - $expire = time() - (int)$this->lifetime; |
|
127 | - $sql = 'DELETE FROM ' . $this->table . ' WHERE read_time < ' . $expire; |
|
128 | - if (!$result = $this->db->queryF($sql)) { |
|
129 | - //xoops_error($this->db->error()); |
|
130 | - return false; |
|
131 | - } |
|
132 | - |
|
133 | - return true; |
|
134 | - } |
|
135 | - |
|
136 | - // END irmtfan rephrase function to 1- add clearDuplicate and 2- dont clean when read_expire = 0 |
|
137 | - |
|
138 | - /** |
|
139 | - * @param $read_item |
|
140 | - * @param null $uid |
|
141 | - * @return bool|mixed|null |
|
142 | - */ |
|
143 | - public function getRead($read_item, $uid = null) |
|
144 | - { |
|
145 | - if (empty($this->mode)) { |
|
146 | - return null; |
|
147 | - } |
|
148 | - if (1 == $this->mode) { |
|
149 | - return $this->getReadCookie($read_item); |
|
150 | - } |
|
151 | - |
|
152 | - return $this->getReadDb($read_item, $uid); |
|
153 | - } |
|
154 | - |
|
155 | - /** |
|
156 | - * @param $item_id |
|
157 | - * @return mixed |
|
158 | - */ |
|
159 | - public function getReadCookie($item_id) |
|
160 | - { |
|
161 | - $cookie_name = ('forum' === $this->type) ? 'LF' : 'LT'; |
|
162 | - $cookie_var = $item_id; |
|
163 | - // irmtfan set true to return array |
|
164 | - $lastview = newbbGetCookie($cookie_name, true); |
|
165 | - |
|
166 | - return @$lastview[$cookie_var]; |
|
167 | - } |
|
168 | - |
|
169 | - /** |
|
170 | - * @param $read_item |
|
171 | - * @param $uid |
|
172 | - * @return bool|null |
|
173 | - */ |
|
174 | - public function getReadDb($read_item, $uid) |
|
175 | - { |
|
176 | - if (empty($uid)) { |
|
177 | - if (is_object($GLOBALS['xoopsUser'])) { |
|
178 | - $uid = $GLOBALS['xoopsUser']->getVar('uid'); |
|
179 | - } else { |
|
180 | - return false; |
|
181 | - } |
|
182 | - } |
|
183 | - $sql = 'SELECT post_id ' . ' FROM ' . $this->table . ' WHERE read_item = ' . (int)$read_item . ' AND uid = ' . (int)$uid; |
|
184 | - if (!$result = $this->db->queryF($sql, 1)) { |
|
185 | - return null; |
|
186 | - } |
|
187 | - list($post_id) = $this->db->fetchRow($result); |
|
188 | - |
|
189 | - return $post_id; |
|
190 | - } |
|
191 | - |
|
192 | - /** |
|
193 | - * @param $read_item |
|
194 | - * @param $post_id |
|
195 | - * @param null $uid |
|
196 | - * @return bool|mixed|void |
|
197 | - */ |
|
198 | - public function setRead($read_item, $post_id, $uid = null) |
|
199 | - { |
|
200 | - if (empty($this->mode)) { |
|
201 | - return true; |
|
202 | - } |
|
203 | - |
|
204 | - if (1 == $this->mode) { |
|
205 | - return $this->setReadCookie($read_item, $post_id); |
|
206 | - } |
|
207 | - |
|
208 | - return $this->setReadDb($read_item, $post_id, $uid); |
|
209 | - } |
|
210 | - |
|
211 | - /** |
|
212 | - * @param $read_item |
|
213 | - * @param $post_id |
|
214 | - */ |
|
215 | - public function setReadCookie($read_item, $post_id) |
|
216 | - { |
|
217 | - $cookie_name = ('forum' === $this->type) ? 'LF' : 'LT'; |
|
218 | - $lastview = newbbGetCookie($cookie_name, true); |
|
219 | - $lastview[$read_item] = time(); |
|
220 | - newbbSetCookie($cookie_name, $lastview); |
|
221 | - } |
|
222 | - |
|
223 | - /** |
|
224 | - * @param $read_item |
|
225 | - * @param $post_id |
|
226 | - * @param $uid |
|
227 | - * @return bool|mixed |
|
228 | - */ |
|
229 | - public function setReadDb($read_item, $post_id, $uid) |
|
230 | - { |
|
231 | - if (empty($uid)) { |
|
232 | - if (is_object($GLOBALS['xoopsUser'])) { |
|
233 | - $uid = $GLOBALS['xoopsUser']->getVar('uid'); |
|
234 | - } else { |
|
235 | - return false; |
|
236 | - } |
|
237 | - } |
|
238 | - |
|
239 | - $sql = 'UPDATE ' . $this->table . ' SET post_id = ' . (int)$post_id . ',' . ' read_time =' . time() . ' WHERE read_item = ' . (int)$read_item . ' AND uid = ' . (int)$uid; |
|
240 | - if ($this->db->queryF($sql) && $this->db->getAffectedRows()) { |
|
241 | - return true; |
|
242 | - } |
|
243 | - $object = $this->create(); |
|
244 | - $object->setVar('read_item', $read_item); |
|
245 | - $object->setVar('post_id', $post_id); |
|
246 | - $object->setVar('uid', $uid); |
|
247 | - $object->setVar('read_time', time()); |
|
248 | - |
|
249 | - return parent::insert($object); |
|
250 | - } |
|
251 | - |
|
252 | - /** |
|
253 | - * @param $items |
|
254 | - * @param null $uid |
|
255 | - * @return array|null |
|
256 | - */ |
|
257 | - public function isReadItems(&$items, $uid = null) |
|
258 | - { |
|
259 | - $ret = null; |
|
260 | - if (empty($this->mode)) { |
|
261 | - return $ret; |
|
262 | - } |
|
263 | - |
|
264 | - if (1 == $this->mode) { |
|
265 | - $ret = $this->isReadItemsCookie($items); |
|
266 | - } else { |
|
267 | - $ret = $this->isReadItemsDb($items, $uid); |
|
268 | - } |
|
269 | - |
|
270 | - return $ret; |
|
271 | - } |
|
272 | - |
|
273 | - /** |
|
274 | - * @param $items |
|
275 | - * @return array |
|
276 | - */ |
|
277 | - public function isReadItemsCookie(&$items) |
|
278 | - { |
|
279 | - $cookie_name = ('forum' === $this->type) ? 'LF' : 'LT'; |
|
280 | - $cookie_vars = newbbGetCookie($cookie_name, true); |
|
281 | - |
|
282 | - $ret = []; |
|
283 | - foreach ($items as $key => $last_update) { |
|
284 | - $ret[$key] = (max(@$GLOBALS['last_visit'], @$cookie_vars[$key]) >= $last_update); |
|
285 | - } |
|
286 | - |
|
287 | - return $ret; |
|
288 | - } |
|
289 | - |
|
290 | - /** |
|
291 | - * @param $items |
|
292 | - * @param $uid |
|
293 | - * @return array |
|
294 | - */ |
|
295 | - public function isReadItemsDb(&$items, $uid) |
|
296 | - { |
|
297 | - $ret = []; |
|
298 | - if (empty($items)) { |
|
299 | - return $ret; |
|
300 | - } |
|
301 | - |
|
302 | - if (empty($uid)) { |
|
303 | - if (is_object($GLOBALS['xoopsUser'])) { |
|
304 | - $uid = $GLOBALS['xoopsUser']->getVar('uid'); |
|
305 | - } else { |
|
306 | - return $ret; |
|
307 | - } |
|
308 | - } |
|
309 | - |
|
310 | - $criteria = new \CriteriaCompo(new \Criteria('uid', $uid)); |
|
311 | - $criteria->add(new \Criteria('read_item', '(' . implode(', ', array_map('intval', array_keys($items))) . ')', 'IN')); |
|
312 | - $itemsObject = $this->getAll($criteria, ['read_item', 'post_id']); |
|
313 | - |
|
314 | - $items_list = []; |
|
315 | - foreach (array_keys($itemsObject) as $key) { |
|
316 | - $items_list[$itemsObject[$key]->getVar('read_item')] = $itemsObject[$key]->getVar('post_id'); |
|
317 | - } |
|
318 | - unset($itemsObject); |
|
319 | - |
|
320 | - foreach ($items as $key => $last_update) { |
|
321 | - $ret[$key] = (@$items_list[$key] >= $last_update); |
|
322 | - } |
|
323 | - |
|
324 | - return $ret; |
|
325 | - } |
|
326 | - |
|
327 | - // START irmtfan add clear duplicated rows function |
|
328 | - |
|
329 | - /** |
|
330 | - * @return bool |
|
331 | - */ |
|
332 | - public function clearDuplicate() |
|
333 | - { |
|
334 | - /** |
|
335 | - * This is needed for the following query GROUP BY clauses to work in MySQL 5.7. |
|
336 | - * This is a TEMPORARY fix. Needing this function is bad in the first place, but |
|
337 | - * needing sloppy SQL to make it work is worse. |
|
338 | - * @todo The schema itself should preclude the duplicates |
|
339 | - */ |
|
340 | - $sql = "SET sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''))"; |
|
341 | - $this->db->queryF($sql); |
|
342 | - |
|
343 | - $sql = 'CREATE TABLE ' . $this->table . '_duplicate LIKE ' . $this->table . '; '; |
|
344 | - if (!$result = $this->db->queryF($sql)) { |
|
345 | - xoops_error($this->db->error() . '<br>' . $sql); |
|
346 | - |
|
347 | - return false; |
|
348 | - } |
|
349 | - $sql = 'INSERT ' . $this->table . '_duplicate SELECT * FROM ' . $this->table . ' GROUP BY read_item, uid; '; |
|
350 | - if (!$result = $this->db->queryF($sql)) { |
|
351 | - xoops_error($this->db->error() . '<br>' . $sql); |
|
352 | - |
|
353 | - return false; |
|
354 | - } |
|
355 | - $sql = 'RENAME TABLE ' . $this->table . ' TO ' . $this->table . '_with_duplicate; '; |
|
356 | - if (!$result = $this->db->queryF($sql)) { |
|
357 | - xoops_error($this->db->error() . '<br>' . $sql); |
|
358 | - |
|
359 | - return false; |
|
360 | - } |
|
361 | - $sql = 'RENAME TABLE ' . $this->table . '_duplicate TO ' . $this->table . '; '; |
|
362 | - if (!$result = $this->db->queryF($sql)) { |
|
363 | - xoops_error($this->db->error() . '<br>' . $sql); |
|
364 | - |
|
365 | - return false; |
|
366 | - } |
|
367 | - $sql = 'SHOW INDEX FROM ' . $this->table . " WHERE KEY_NAME = 'read_item_uid'"; |
|
368 | - $result = $this->db->queryF($sql); |
|
369 | - if (empty($result)) { |
|
370 | - $sql .= 'ALTER TABLE ' . $this->table . ' ADD INDEX read_item_uid ( read_item, uid ); '; |
|
371 | - if (!$result = $this->db->queryF($sql)) { |
|
372 | - xoops_error($this->db->error() . '<br>' . $sql); |
|
373 | - |
|
374 | - return false; |
|
375 | - } |
|
376 | - } |
|
377 | - $sql = 'DROP TABLE ' . $this->table . '_with_duplicate; '; |
|
378 | - if (!$result = $this->db->queryF($sql)) { |
|
379 | - xoops_error($this->db->error() . '<br>' . $sql); |
|
380 | - |
|
381 | - return false; |
|
382 | - } |
|
383 | - |
|
384 | - return true; |
|
385 | - } |
|
386 | - // END irmtfan add clear duplicated rows function |
|
51 | + /** |
|
52 | + * Object type. |
|
53 | + * <ul> |
|
54 | + * <li>forum</li> |
|
55 | + * <li>topic</li> |
|
56 | + * </ul> |
|
57 | + * |
|
58 | + * @var string |
|
59 | + */ |
|
60 | + public $type; |
|
61 | + |
|
62 | + /** |
|
63 | + * seconds records will persist. |
|
64 | + * assigned from $GLOBALS['xoopsModuleConfig']["read_expire"] |
|
65 | + * <ul> |
|
66 | + * <li>positive days = delete all read records exist in the tables before expire time // irmtfan add comment</li> |
|
67 | + * <li>0 = never expires // irmtfan change comment</li> |
|
68 | + * <li>-1 or any negative days = never records // irmtfan change comment</li> |
|
69 | + * </ul> |
|
70 | + * |
|
71 | + * @var integer |
|
72 | + */ |
|
73 | + public $lifetime; |
|
74 | + |
|
75 | + /** |
|
76 | + * storage mode for records. |
|
77 | + * assigned from $GLOBALS['xoopsModuleConfig']["read_mode"] |
|
78 | + * <ul> |
|
79 | + * <li>0 = never records</li> |
|
80 | + * <li>1 = uses cookie</li> |
|
81 | + * <li>2 = stores in database</li> |
|
82 | + * </ul> |
|
83 | + * |
|
84 | + * @var integer |
|
85 | + */ |
|
86 | + public $mode; |
|
87 | + |
|
88 | + /** |
|
89 | + * @param \XoopsDatabase $db |
|
90 | + * @param $type |
|
91 | + */ |
|
92 | + public function __construct(\XoopsDatabase $db, $type) |
|
93 | + { |
|
94 | + $type = ('forum' === $type) ? 'forum' : 'topic'; |
|
95 | + parent::__construct($db, 'newbb_reads_' . $type, Read::class . $type, 'read_id', 'post_id'); |
|
96 | + $this->type = $type; |
|
97 | + $newbbConfig = newbbLoadConfig(); |
|
98 | + // irmtfan if read_expire = 0 dont clean |
|
99 | + $this->lifetime = isset($newbbConfig['read_expire']) ? (int)$newbbConfig['read_expire'] * 24 * 3600 : 30 * 24 * 3600; |
|
100 | + $this->mode = isset($newbbConfig['read_mode']) ? $newbbConfig['read_mode'] : 2; |
|
101 | + } |
|
102 | + |
|
103 | + /** |
|
104 | + * Clear garbage |
|
105 | + * |
|
106 | + * Delete all expired and duplicated records |
|
107 | + */ |
|
108 | + // START irmtfan rephrase function to 1- add clearDuplicate and 2- dont clean when read_expire = 0 |
|
109 | + public function clearGarbage() |
|
110 | + { |
|
111 | + // irmtfan clear duplicaed rows |
|
112 | + if (!$result = $this->clearDuplicate()) { |
|
113 | + return false; |
|
114 | + } |
|
115 | + |
|
116 | + $sql = 'DELETE bb FROM ' . $this->table . ' AS bb' . ' LEFT JOIN ' . $this->table . ' AS aa ON bb.read_item = aa.read_item ' . ' WHERE aa.post_id > bb.post_id'; |
|
117 | + if (!$result = $this->db->queryF($sql)) { |
|
118 | + //xoops_error($this->db->error()); |
|
119 | + return false; |
|
120 | + } |
|
121 | + // irmtfan if read_expire = 0 dont clean |
|
122 | + if (empty($this->lifetime)) { |
|
123 | + return true; |
|
124 | + } |
|
125 | + // irmtfan move here and rephrase |
|
126 | + $expire = time() - (int)$this->lifetime; |
|
127 | + $sql = 'DELETE FROM ' . $this->table . ' WHERE read_time < ' . $expire; |
|
128 | + if (!$result = $this->db->queryF($sql)) { |
|
129 | + //xoops_error($this->db->error()); |
|
130 | + return false; |
|
131 | + } |
|
132 | + |
|
133 | + return true; |
|
134 | + } |
|
135 | + |
|
136 | + // END irmtfan rephrase function to 1- add clearDuplicate and 2- dont clean when read_expire = 0 |
|
137 | + |
|
138 | + /** |
|
139 | + * @param $read_item |
|
140 | + * @param null $uid |
|
141 | + * @return bool|mixed|null |
|
142 | + */ |
|
143 | + public function getRead($read_item, $uid = null) |
|
144 | + { |
|
145 | + if (empty($this->mode)) { |
|
146 | + return null; |
|
147 | + } |
|
148 | + if (1 == $this->mode) { |
|
149 | + return $this->getReadCookie($read_item); |
|
150 | + } |
|
151 | + |
|
152 | + return $this->getReadDb($read_item, $uid); |
|
153 | + } |
|
154 | + |
|
155 | + /** |
|
156 | + * @param $item_id |
|
157 | + * @return mixed |
|
158 | + */ |
|
159 | + public function getReadCookie($item_id) |
|
160 | + { |
|
161 | + $cookie_name = ('forum' === $this->type) ? 'LF' : 'LT'; |
|
162 | + $cookie_var = $item_id; |
|
163 | + // irmtfan set true to return array |
|
164 | + $lastview = newbbGetCookie($cookie_name, true); |
|
165 | + |
|
166 | + return @$lastview[$cookie_var]; |
|
167 | + } |
|
168 | + |
|
169 | + /** |
|
170 | + * @param $read_item |
|
171 | + * @param $uid |
|
172 | + * @return bool|null |
|
173 | + */ |
|
174 | + public function getReadDb($read_item, $uid) |
|
175 | + { |
|
176 | + if (empty($uid)) { |
|
177 | + if (is_object($GLOBALS['xoopsUser'])) { |
|
178 | + $uid = $GLOBALS['xoopsUser']->getVar('uid'); |
|
179 | + } else { |
|
180 | + return false; |
|
181 | + } |
|
182 | + } |
|
183 | + $sql = 'SELECT post_id ' . ' FROM ' . $this->table . ' WHERE read_item = ' . (int)$read_item . ' AND uid = ' . (int)$uid; |
|
184 | + if (!$result = $this->db->queryF($sql, 1)) { |
|
185 | + return null; |
|
186 | + } |
|
187 | + list($post_id) = $this->db->fetchRow($result); |
|
188 | + |
|
189 | + return $post_id; |
|
190 | + } |
|
191 | + |
|
192 | + /** |
|
193 | + * @param $read_item |
|
194 | + * @param $post_id |
|
195 | + * @param null $uid |
|
196 | + * @return bool|mixed|void |
|
197 | + */ |
|
198 | + public function setRead($read_item, $post_id, $uid = null) |
|
199 | + { |
|
200 | + if (empty($this->mode)) { |
|
201 | + return true; |
|
202 | + } |
|
203 | + |
|
204 | + if (1 == $this->mode) { |
|
205 | + return $this->setReadCookie($read_item, $post_id); |
|
206 | + } |
|
207 | + |
|
208 | + return $this->setReadDb($read_item, $post_id, $uid); |
|
209 | + } |
|
210 | + |
|
211 | + /** |
|
212 | + * @param $read_item |
|
213 | + * @param $post_id |
|
214 | + */ |
|
215 | + public function setReadCookie($read_item, $post_id) |
|
216 | + { |
|
217 | + $cookie_name = ('forum' === $this->type) ? 'LF' : 'LT'; |
|
218 | + $lastview = newbbGetCookie($cookie_name, true); |
|
219 | + $lastview[$read_item] = time(); |
|
220 | + newbbSetCookie($cookie_name, $lastview); |
|
221 | + } |
|
222 | + |
|
223 | + /** |
|
224 | + * @param $read_item |
|
225 | + * @param $post_id |
|
226 | + * @param $uid |
|
227 | + * @return bool|mixed |
|
228 | + */ |
|
229 | + public function setReadDb($read_item, $post_id, $uid) |
|
230 | + { |
|
231 | + if (empty($uid)) { |
|
232 | + if (is_object($GLOBALS['xoopsUser'])) { |
|
233 | + $uid = $GLOBALS['xoopsUser']->getVar('uid'); |
|
234 | + } else { |
|
235 | + return false; |
|
236 | + } |
|
237 | + } |
|
238 | + |
|
239 | + $sql = 'UPDATE ' . $this->table . ' SET post_id = ' . (int)$post_id . ',' . ' read_time =' . time() . ' WHERE read_item = ' . (int)$read_item . ' AND uid = ' . (int)$uid; |
|
240 | + if ($this->db->queryF($sql) && $this->db->getAffectedRows()) { |
|
241 | + return true; |
|
242 | + } |
|
243 | + $object = $this->create(); |
|
244 | + $object->setVar('read_item', $read_item); |
|
245 | + $object->setVar('post_id', $post_id); |
|
246 | + $object->setVar('uid', $uid); |
|
247 | + $object->setVar('read_time', time()); |
|
248 | + |
|
249 | + return parent::insert($object); |
|
250 | + } |
|
251 | + |
|
252 | + /** |
|
253 | + * @param $items |
|
254 | + * @param null $uid |
|
255 | + * @return array|null |
|
256 | + */ |
|
257 | + public function isReadItems(&$items, $uid = null) |
|
258 | + { |
|
259 | + $ret = null; |
|
260 | + if (empty($this->mode)) { |
|
261 | + return $ret; |
|
262 | + } |
|
263 | + |
|
264 | + if (1 == $this->mode) { |
|
265 | + $ret = $this->isReadItemsCookie($items); |
|
266 | + } else { |
|
267 | + $ret = $this->isReadItemsDb($items, $uid); |
|
268 | + } |
|
269 | + |
|
270 | + return $ret; |
|
271 | + } |
|
272 | + |
|
273 | + /** |
|
274 | + * @param $items |
|
275 | + * @return array |
|
276 | + */ |
|
277 | + public function isReadItemsCookie(&$items) |
|
278 | + { |
|
279 | + $cookie_name = ('forum' === $this->type) ? 'LF' : 'LT'; |
|
280 | + $cookie_vars = newbbGetCookie($cookie_name, true); |
|
281 | + |
|
282 | + $ret = []; |
|
283 | + foreach ($items as $key => $last_update) { |
|
284 | + $ret[$key] = (max(@$GLOBALS['last_visit'], @$cookie_vars[$key]) >= $last_update); |
|
285 | + } |
|
286 | + |
|
287 | + return $ret; |
|
288 | + } |
|
289 | + |
|
290 | + /** |
|
291 | + * @param $items |
|
292 | + * @param $uid |
|
293 | + * @return array |
|
294 | + */ |
|
295 | + public function isReadItemsDb(&$items, $uid) |
|
296 | + { |
|
297 | + $ret = []; |
|
298 | + if (empty($items)) { |
|
299 | + return $ret; |
|
300 | + } |
|
301 | + |
|
302 | + if (empty($uid)) { |
|
303 | + if (is_object($GLOBALS['xoopsUser'])) { |
|
304 | + $uid = $GLOBALS['xoopsUser']->getVar('uid'); |
|
305 | + } else { |
|
306 | + return $ret; |
|
307 | + } |
|
308 | + } |
|
309 | + |
|
310 | + $criteria = new \CriteriaCompo(new \Criteria('uid', $uid)); |
|
311 | + $criteria->add(new \Criteria('read_item', '(' . implode(', ', array_map('intval', array_keys($items))) . ')', 'IN')); |
|
312 | + $itemsObject = $this->getAll($criteria, ['read_item', 'post_id']); |
|
313 | + |
|
314 | + $items_list = []; |
|
315 | + foreach (array_keys($itemsObject) as $key) { |
|
316 | + $items_list[$itemsObject[$key]->getVar('read_item')] = $itemsObject[$key]->getVar('post_id'); |
|
317 | + } |
|
318 | + unset($itemsObject); |
|
319 | + |
|
320 | + foreach ($items as $key => $last_update) { |
|
321 | + $ret[$key] = (@$items_list[$key] >= $last_update); |
|
322 | + } |
|
323 | + |
|
324 | + return $ret; |
|
325 | + } |
|
326 | + |
|
327 | + // START irmtfan add clear duplicated rows function |
|
328 | + |
|
329 | + /** |
|
330 | + * @return bool |
|
331 | + */ |
|
332 | + public function clearDuplicate() |
|
333 | + { |
|
334 | + /** |
|
335 | + * This is needed for the following query GROUP BY clauses to work in MySQL 5.7. |
|
336 | + * This is a TEMPORARY fix. Needing this function is bad in the first place, but |
|
337 | + * needing sloppy SQL to make it work is worse. |
|
338 | + * @todo The schema itself should preclude the duplicates |
|
339 | + */ |
|
340 | + $sql = "SET sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''))"; |
|
341 | + $this->db->queryF($sql); |
|
342 | + |
|
343 | + $sql = 'CREATE TABLE ' . $this->table . '_duplicate LIKE ' . $this->table . '; '; |
|
344 | + if (!$result = $this->db->queryF($sql)) { |
|
345 | + xoops_error($this->db->error() . '<br>' . $sql); |
|
346 | + |
|
347 | + return false; |
|
348 | + } |
|
349 | + $sql = 'INSERT ' . $this->table . '_duplicate SELECT * FROM ' . $this->table . ' GROUP BY read_item, uid; '; |
|
350 | + if (!$result = $this->db->queryF($sql)) { |
|
351 | + xoops_error($this->db->error() . '<br>' . $sql); |
|
352 | + |
|
353 | + return false; |
|
354 | + } |
|
355 | + $sql = 'RENAME TABLE ' . $this->table . ' TO ' . $this->table . '_with_duplicate; '; |
|
356 | + if (!$result = $this->db->queryF($sql)) { |
|
357 | + xoops_error($this->db->error() . '<br>' . $sql); |
|
358 | + |
|
359 | + return false; |
|
360 | + } |
|
361 | + $sql = 'RENAME TABLE ' . $this->table . '_duplicate TO ' . $this->table . '; '; |
|
362 | + if (!$result = $this->db->queryF($sql)) { |
|
363 | + xoops_error($this->db->error() . '<br>' . $sql); |
|
364 | + |
|
365 | + return false; |
|
366 | + } |
|
367 | + $sql = 'SHOW INDEX FROM ' . $this->table . " WHERE KEY_NAME = 'read_item_uid'"; |
|
368 | + $result = $this->db->queryF($sql); |
|
369 | + if (empty($result)) { |
|
370 | + $sql .= 'ALTER TABLE ' . $this->table . ' ADD INDEX read_item_uid ( read_item, uid ); '; |
|
371 | + if (!$result = $this->db->queryF($sql)) { |
|
372 | + xoops_error($this->db->error() . '<br>' . $sql); |
|
373 | + |
|
374 | + return false; |
|
375 | + } |
|
376 | + } |
|
377 | + $sql = 'DROP TABLE ' . $this->table . '_with_duplicate; '; |
|
378 | + if (!$result = $this->db->queryF($sql)) { |
|
379 | + xoops_error($this->db->error() . '<br>' . $sql); |
|
380 | + |
|
381 | + return false; |
|
382 | + } |
|
383 | + |
|
384 | + return true; |
|
385 | + } |
|
386 | + // END irmtfan add clear duplicated rows function |
|
387 | 387 | } |
@@ -85,7 +85,7 @@ discard block |
||
85 | 85 | { |
86 | 86 | if (count($this->items) < $this->max_items) { |
87 | 87 | if (!empty($label)) { |
88 | - $label = '[' . $this->cleanup($label) . ']'; |
|
88 | + $label = '['.$this->cleanup($label).']'; |
|
89 | 89 | } |
90 | 90 | if (!empty($description)) { |
91 | 91 | $description = $this->cleanup($description, $this->max_item_description); |
@@ -94,7 +94,7 @@ discard block |
||
94 | 94 | //$description = $label; |
95 | 95 | } |
96 | 96 | |
97 | - $title = $this->cleanup($title) . ' ' . $label; |
|
97 | + $title = $this->cleanup($title).' '.$label; |
|
98 | 98 | $pubdate = $this->cleanup($pubdate); |
99 | 99 | $this->items[] = [ |
100 | 100 | 'title' => $title, |
@@ -24,105 +24,105 @@ |
||
24 | 24 | */ |
25 | 25 | class Xmlrss |
26 | 26 | { |
27 | - public $xml_version; |
|
28 | - public $rss_version; |
|
29 | - public $xml_encoding; |
|
27 | + public $xml_version; |
|
28 | + public $rss_version; |
|
29 | + public $xml_encoding; |
|
30 | 30 | |
31 | - public $channel_title; |
|
32 | - public $channel_link; |
|
33 | - public $channel_desc; |
|
34 | - public $channel_lastbuild; |
|
35 | - public $channel_webmaster; |
|
36 | - public $channel_editor; |
|
37 | - public $channel_category; |
|
38 | - public $channel_generator; |
|
39 | - public $channel_language; |
|
31 | + public $channel_title; |
|
32 | + public $channel_link; |
|
33 | + public $channel_desc; |
|
34 | + public $channel_lastbuild; |
|
35 | + public $channel_webmaster; |
|
36 | + public $channel_editor; |
|
37 | + public $channel_category; |
|
38 | + public $channel_generator; |
|
39 | + public $channel_language; |
|
40 | 40 | |
41 | - public $image_title; |
|
42 | - public $image_url; |
|
43 | - public $image_link; |
|
44 | - public $image_description; |
|
45 | - public $image_height; |
|
46 | - public $image_width; |
|
41 | + public $image_title; |
|
42 | + public $image_url; |
|
43 | + public $image_link; |
|
44 | + public $image_description; |
|
45 | + public $image_height; |
|
46 | + public $image_width; |
|
47 | 47 | |
48 | - public $max_items; |
|
49 | - public $max_item_description; |
|
50 | - public $items = []; |
|
48 | + public $max_items; |
|
49 | + public $max_item_description; |
|
50 | + public $items = []; |
|
51 | 51 | |
52 | - /** |
|
53 | - * |
|
54 | - */ |
|
55 | - public function __construct() |
|
56 | - { |
|
57 | - $this->xml_version = '1.0'; |
|
58 | - $this->xml_encoding = empty($GLOBALS['xoopsModuleConfig']['rss_utf8']) ? _CHARSET : 'UTF-8'; |
|
59 | - $this->rss_version = '2.0'; |
|
60 | - $this->image_height = 31; |
|
61 | - $this->image_width = 88; |
|
62 | - $this->max_items = 10; |
|
63 | - $this->max_item_description = 0; |
|
64 | - $this->items = []; |
|
65 | - } |
|
52 | + /** |
|
53 | + * |
|
54 | + */ |
|
55 | + public function __construct() |
|
56 | + { |
|
57 | + $this->xml_version = '1.0'; |
|
58 | + $this->xml_encoding = empty($GLOBALS['xoopsModuleConfig']['rss_utf8']) ? _CHARSET : 'UTF-8'; |
|
59 | + $this->rss_version = '2.0'; |
|
60 | + $this->image_height = 31; |
|
61 | + $this->image_width = 88; |
|
62 | + $this->max_items = 10; |
|
63 | + $this->max_item_description = 0; |
|
64 | + $this->items = []; |
|
65 | + } |
|
66 | 66 | |
67 | - /** |
|
68 | - * @param $var |
|
69 | - * @param $val |
|
70 | - */ |
|
71 | - public function setVarRss($var, $val) |
|
72 | - { |
|
73 | - $this->$var = $this->cleanup($val); |
|
74 | - } |
|
67 | + /** |
|
68 | + * @param $var |
|
69 | + * @param $val |
|
70 | + */ |
|
71 | + public function setVarRss($var, $val) |
|
72 | + { |
|
73 | + $this->$var = $this->cleanup($val); |
|
74 | + } |
|
75 | 75 | |
76 | - /** |
|
77 | - * @param $title |
|
78 | - * @param $link |
|
79 | - * @param string $description |
|
80 | - * @param string $label |
|
81 | - * @param int|string $pubdate |
|
82 | - * @return bool |
|
83 | - */ |
|
84 | - public function addItem($title, $link, $description = '', $label = '', $pubdate = 0) |
|
85 | - { |
|
86 | - if (count($this->items) < $this->max_items) { |
|
87 | - if (!empty($label)) { |
|
88 | - $label = '[' . $this->cleanup($label) . ']'; |
|
89 | - } |
|
90 | - if (!empty($description)) { |
|
91 | - $description = $this->cleanup($description, $this->max_item_description); |
|
92 | - //$description .= ' ' . $label; |
|
93 | - } else { |
|
94 | - //$description = $label; |
|
95 | - } |
|
76 | + /** |
|
77 | + * @param $title |
|
78 | + * @param $link |
|
79 | + * @param string $description |
|
80 | + * @param string $label |
|
81 | + * @param int|string $pubdate |
|
82 | + * @return bool |
|
83 | + */ |
|
84 | + public function addItem($title, $link, $description = '', $label = '', $pubdate = 0) |
|
85 | + { |
|
86 | + if (count($this->items) < $this->max_items) { |
|
87 | + if (!empty($label)) { |
|
88 | + $label = '[' . $this->cleanup($label) . ']'; |
|
89 | + } |
|
90 | + if (!empty($description)) { |
|
91 | + $description = $this->cleanup($description, $this->max_item_description); |
|
92 | + //$description .= ' ' . $label; |
|
93 | + } else { |
|
94 | + //$description = $label; |
|
95 | + } |
|
96 | 96 | |
97 | - $title = $this->cleanup($title) . ' ' . $label; |
|
98 | - $pubdate = $this->cleanup($pubdate); |
|
99 | - $this->items[] = [ |
|
100 | - 'title' => $title, |
|
101 | - 'link' => $link, |
|
102 | - 'guid' => $link, |
|
103 | - 'description' => $description, |
|
104 | - 'pubdate' => $pubdate |
|
105 | - ]; |
|
106 | - } |
|
97 | + $title = $this->cleanup($title) . ' ' . $label; |
|
98 | + $pubdate = $this->cleanup($pubdate); |
|
99 | + $this->items[] = [ |
|
100 | + 'title' => $title, |
|
101 | + 'link' => $link, |
|
102 | + 'guid' => $link, |
|
103 | + 'description' => $description, |
|
104 | + 'pubdate' => $pubdate |
|
105 | + ]; |
|
106 | + } |
|
107 | 107 | |
108 | - return true; |
|
109 | - } |
|
108 | + return true; |
|
109 | + } |
|
110 | 110 | |
111 | - /** |
|
112 | - * @param $text |
|
113 | - * @param int $trim |
|
114 | - * @return mixed|string |
|
115 | - */ |
|
116 | - public function cleanup($text, $trim = 0) |
|
117 | - { |
|
118 | - if ('utf-8' === strtolower($this->xml_encoding) && strncasecmp(_CHARSET, $this->xml_encoding, 5)) { |
|
119 | - $text = \XoopsLocal::convert_encoding($text, 'utf-8'); |
|
120 | - } |
|
121 | - if (!empty($trim)) { |
|
122 | - $text = xoops_substr($text, 0, (int)$trim); |
|
123 | - } |
|
124 | - $text = htmlspecialchars($text, ENT_QUOTES); |
|
111 | + /** |
|
112 | + * @param $text |
|
113 | + * @param int $trim |
|
114 | + * @return mixed|string |
|
115 | + */ |
|
116 | + public function cleanup($text, $trim = 0) |
|
117 | + { |
|
118 | + if ('utf-8' === strtolower($this->xml_encoding) && strncasecmp(_CHARSET, $this->xml_encoding, 5)) { |
|
119 | + $text = \XoopsLocal::convert_encoding($text, 'utf-8'); |
|
120 | + } |
|
121 | + if (!empty($trim)) { |
|
122 | + $text = xoops_substr($text, 0, (int)$trim); |
|
123 | + } |
|
124 | + $text = htmlspecialchars($text, ENT_QUOTES); |
|
125 | 125 | |
126 | - return $text; |
|
127 | - } |
|
126 | + return $text; |
|
127 | + } |
|
128 | 128 | } |
@@ -93,7 +93,7 @@ |
||
93 | 93 | } |
94 | 94 | |
95 | 95 | $newPostArray = []; |
96 | - $prefix .= $this->increment; |
|
96 | + $prefix .= $this->increment; |
|
97 | 97 | foreach ($this->postArray as $post) { |
98 | 98 | if ($post->getVar('pid') == $pid) { |
99 | 99 | $postTree_array[] = [ |
@@ -38,87 +38,87 @@ |
||
38 | 38 | */ |
39 | 39 | class Tree extends \XoopsTree |
40 | 40 | { |
41 | - /** @var string */ |
|
42 | - private $prefix = ' '; |
|
41 | + /** @var string */ |
|
42 | + private $prefix = ' '; |
|
43 | 43 | |
44 | - /** @var string */ |
|
45 | - private $increment = ' '; |
|
44 | + /** @var string */ |
|
45 | + private $increment = ' '; |
|
46 | 46 | |
47 | - /** @var array */ |
|
48 | - private $postArray = []; |
|
47 | + /** @var array */ |
|
48 | + private $postArray = []; |
|
49 | 49 | |
50 | - /** |
|
51 | - * @param string $table_name |
|
52 | - * @param string $id_name |
|
53 | - * @param string $pid_name |
|
54 | - */ |
|
55 | - public function __construct($table_name, $id_name = 'post_id', $pid_name = 'pid') |
|
56 | - { |
|
57 | - parent::__construct($table_name, $id_name, $pid_name); |
|
58 | - } |
|
50 | + /** |
|
51 | + * @param string $table_name |
|
52 | + * @param string $id_name |
|
53 | + * @param string $pid_name |
|
54 | + */ |
|
55 | + public function __construct($table_name, $id_name = 'post_id', $pid_name = 'pid') |
|
56 | + { |
|
57 | + parent::__construct($table_name, $id_name, $pid_name); |
|
58 | + } |
|
59 | 59 | |
60 | - /** |
|
61 | - * @param string $val |
|
62 | - */ |
|
63 | - public function setPrefix($val = '') |
|
64 | - { |
|
65 | - $this->prefix = $val; |
|
66 | - $this->increment = $val; |
|
67 | - } |
|
60 | + /** |
|
61 | + * @param string $val |
|
62 | + */ |
|
63 | + public function setPrefix($val = '') |
|
64 | + { |
|
65 | + $this->prefix = $val; |
|
66 | + $this->increment = $val; |
|
67 | + } |
|
68 | 68 | |
69 | - /** |
|
70 | - * @param $sel_id |
|
71 | - * @param string $order |
|
72 | - */ |
|
73 | - public function getAllPostArray($sel_id, $order = '') |
|
74 | - { |
|
75 | - $this->postArray = $this->getAllChild($sel_id, $order); |
|
76 | - } |
|
69 | + /** |
|
70 | + * @param $sel_id |
|
71 | + * @param string $order |
|
72 | + */ |
|
73 | + public function getAllPostArray($sel_id, $order = '') |
|
74 | + { |
|
75 | + $this->postArray = $this->getAllChild($sel_id, $order); |
|
76 | + } |
|
77 | 77 | |
78 | - /** |
|
79 | - * @param $postArray |
|
80 | - */ |
|
81 | - public function setPostArray($postArray) |
|
82 | - { |
|
83 | - $this->postArray = $postArray; |
|
84 | - } |
|
78 | + /** |
|
79 | + * @param $postArray |
|
80 | + */ |
|
81 | + public function setPostArray($postArray) |
|
82 | + { |
|
83 | + $this->postArray = $postArray; |
|
84 | + } |
|
85 | 85 | |
86 | - // returns an array of first child objects for a given id($sel_id) |
|
86 | + // returns an array of first child objects for a given id($sel_id) |
|
87 | 87 | |
88 | - /** |
|
89 | - * @param $postTree_array |
|
90 | - * @param int $pid |
|
91 | - * @param string $prefix |
|
92 | - * @return bool |
|
93 | - */ |
|
94 | - public function getPostTree(&$postTree_array, $pid = 0, $prefix = ' ') |
|
95 | - { |
|
96 | - if (!is_array($postTree_array)) { |
|
97 | - $postTree_array = []; |
|
98 | - } |
|
88 | + /** |
|
89 | + * @param $postTree_array |
|
90 | + * @param int $pid |
|
91 | + * @param string $prefix |
|
92 | + * @return bool |
|
93 | + */ |
|
94 | + public function getPostTree(&$postTree_array, $pid = 0, $prefix = ' ') |
|
95 | + { |
|
96 | + if (!is_array($postTree_array)) { |
|
97 | + $postTree_array = []; |
|
98 | + } |
|
99 | 99 | |
100 | - $newPostArray = []; |
|
101 | - $prefix .= $this->increment; |
|
102 | - foreach ($this->postArray as $post) { |
|
103 | - if ($post->getVar('pid') == $pid) { |
|
104 | - $postTree_array[] = [ |
|
105 | - 'prefix' => $prefix, |
|
106 | - 'icon' => $post->getVar('icon'), |
|
107 | - 'post_time' => $post->getVar('post_time'), |
|
108 | - 'post_id' => $post->getVar('post_id'), |
|
109 | - 'forum_id' => $post->getVar('forum_id'), |
|
110 | - 'subject' => $post->getVar('subject'), |
|
111 | - 'poster_name' => $post->getVar('poster_name'), |
|
112 | - 'uid' => $post->getVar('uid') |
|
113 | - ]; |
|
114 | - $this->getPostTree($postTree_array, $post->getVar('post_id'), $prefix); |
|
115 | - } else { |
|
116 | - $newPostArray[] = $post; |
|
117 | - } |
|
118 | - } |
|
119 | - $this->postArray = $newPostArray; |
|
120 | - unset($newPostArray); |
|
100 | + $newPostArray = []; |
|
101 | + $prefix .= $this->increment; |
|
102 | + foreach ($this->postArray as $post) { |
|
103 | + if ($post->getVar('pid') == $pid) { |
|
104 | + $postTree_array[] = [ |
|
105 | + 'prefix' => $prefix, |
|
106 | + 'icon' => $post->getVar('icon'), |
|
107 | + 'post_time' => $post->getVar('post_time'), |
|
108 | + 'post_id' => $post->getVar('post_id'), |
|
109 | + 'forum_id' => $post->getVar('forum_id'), |
|
110 | + 'subject' => $post->getVar('subject'), |
|
111 | + 'poster_name' => $post->getVar('poster_name'), |
|
112 | + 'uid' => $post->getVar('uid') |
|
113 | + ]; |
|
114 | + $this->getPostTree($postTree_array, $post->getVar('post_id'), $prefix); |
|
115 | + } else { |
|
116 | + $newPostArray[] = $post; |
|
117 | + } |
|
118 | + } |
|
119 | + $this->postArray = $newPostArray; |
|
120 | + unset($newPostArray); |
|
121 | 121 | |
122 | - return true; |
|
123 | - } |
|
122 | + return true; |
|
123 | + } |
|
124 | 124 | } |
@@ -112,16 +112,16 @@ discard block |
||
112 | 112 | { |
113 | 113 | $ips = []; |
114 | 114 | if ($isUid) { |
115 | - $criteria = 'uid =' . (int)$item; |
|
115 | + $criteria = 'uid ='.(int)$item; |
|
116 | 116 | } else { |
117 | 117 | $ip_segs = explode('.', $item); |
118 | 118 | $segs = min(count($ip_segs), 4); |
119 | 119 | for ($i = 1; $i <= $segs; ++$i) { |
120 | 120 | $ips[] = $this->db->quoteString(implode('.', array_slice($ip_segs, 0, $i))); |
121 | 121 | } |
122 | - $criteria = 'ip IN(' . implode(',', $ips) . ')'; |
|
122 | + $criteria = 'ip IN('.implode(',', $ips).')'; |
|
123 | 123 | } |
124 | - $sql = 'SELECT MAX(mod_end) AS expire FROM ' . $this->db->prefix('newbb_moderates') . ' WHERE ' . $criteria; |
|
124 | + $sql = 'SELECT MAX(mod_end) AS expire FROM '.$this->db->prefix('newbb_moderates').' WHERE '.$criteria; |
|
125 | 125 | if (!$result = $this->db->query($sql)) { |
126 | 126 | return -1; |
127 | 127 | } |
@@ -140,7 +140,7 @@ discard block |
||
140 | 140 | */ |
141 | 141 | public function cleanOrphan($table_link = '', $field_link = '', $field_object = '') //cleanOrphan() |
142 | 142 | { |
143 | - $sql = 'DELETE FROM ' . $this->table . ' WHERE (forum_id >0 AND forum_id NOT IN ( SELECT DISTINCT forum_id FROM ' . $this->db->prefix('newbb_forums') . ') )'; |
|
143 | + $sql = 'DELETE FROM '.$this->table.' WHERE (forum_id >0 AND forum_id NOT IN ( SELECT DISTINCT forum_id FROM '.$this->db->prefix('newbb_forums').') )'; |
|
144 | 144 | if (!$result = $this->db->queryF($sql)) { |
145 | 145 | //xoops_error($this->db->error()); |
146 | 146 | return false; |
@@ -19,133 +19,133 @@ |
||
19 | 19 | */ |
20 | 20 | class ModerateHandler extends \XoopsPersistableObjectHandler |
21 | 21 | { |
22 | - /** |
|
23 | - * @param null|\XoopsDatabase $db |
|
24 | - */ |
|
25 | - public function __construct(\XoopsDatabase $db = null) |
|
26 | - { |
|
27 | - parent::__construct($db, 'newbb_moderates', Moderate::class, 'mod_id', 'uid'); |
|
28 | - } |
|
29 | - |
|
30 | - /** |
|
31 | - * Clear garbage |
|
32 | - * |
|
33 | - * Delete all moderation information that has expired |
|
34 | - * |
|
35 | - * @param int $expire Expiration time in UNIX, 0 for time() |
|
36 | - */ |
|
37 | - public function clearGarbage($expire = 0) |
|
38 | - { |
|
39 | - $expire = time() - (int)$expire; |
|
40 | - $sql = sprintf('DELETE FROM `%s` WHERE mod_end < %u', $this->db->prefix('newbb_moderates'), $expire); |
|
41 | - $this->db->queryF($sql); |
|
42 | - } |
|
43 | - |
|
44 | - /** |
|
45 | - * Check if a user is moderated, according to his uid and ip |
|
46 | - * |
|
47 | - * |
|
48 | - * @param int $uid user id |
|
49 | - * @param string|bool $ip user ip |
|
50 | - * @param int $forum |
|
51 | - * @return bool true if IP is banned |
|
52 | - */ |
|
53 | - public function verifyUser($uid = -1, $ip = '', $forum = 0) |
|
54 | - { |
|
55 | - error_reporting(E_ALL); |
|
56 | - // if user is admin do not suspend |
|
57 | - if (newbbIsAdmin($forum)) { |
|
58 | - return true; |
|
59 | - } |
|
60 | - |
|
61 | - $uid = ($uid < 0) ? (is_object($GLOBALS['xoopsUser']) ? $GLOBALS['xoopsUser']->getVar('uid') : 0) : (int)$uid; |
|
62 | - |
|
63 | - $criteria = new \CriteriaCompo(new \Criteria('uid', (int)$uid)); |
|
64 | - $forumCriteria = new \CriteriaCompo(new \Criteria('forum_id', 0), 'OR'); |
|
65 | - if (!empty($forum)) { |
|
66 | - $forumCriteria->add(new \Criteria('forum_id', (int)$forum), 'OR'); |
|
67 | - } |
|
68 | - $criteria->add($forumCriteria); |
|
69 | - $criteria->add(new \Criteria('mod_end', time(), '>')); |
|
70 | - |
|
71 | - $matches = $this->getAll($criteria); |
|
72 | - |
|
73 | - if (0 === count($matches)) { |
|
74 | - return true; // no matches |
|
75 | - } |
|
76 | - |
|
77 | - if (count($matches) > 0 && $uid > 0) { |
|
78 | - return false; // user is banned |
|
79 | - } |
|
80 | - // verify possible matches against IP address |
|
81 | - $ip = empty($ip) ? IPAddress::fromRequest()->asReadable() : $ip; |
|
82 | - |
|
83 | - foreach ($matches as $modMatch) { |
|
84 | - $rawModIp = trim($modMatch->getVar('ip', 'n')); |
|
85 | - if (empty($rawModIp)) { |
|
86 | - return false; // banned without IP |
|
87 | - } |
|
88 | - $parts = explode('/', $rawModIp); |
|
89 | - $modIp = $parts[0]; |
|
90 | - $checkIp = new IPAddress($modIp); |
|
91 | - if (false !== $checkIp->asReadable()) { |
|
92 | - $defaultMask = (6 === $checkIp->ipVersion()) ? 128 : 32; |
|
93 | - $netMask = isset($parts[1]) ? (int)$parts[1] : $defaultMask; |
|
94 | - if ($checkIp->sameSubnet($ip, $netMask, $netMask)) { |
|
95 | - return false; // IP is banned |
|
96 | - } |
|
97 | - } |
|
98 | - } |
|
99 | - |
|
100 | - return true; |
|
101 | - } |
|
102 | - |
|
103 | - /** |
|
104 | - * Get latest expiration for a user moderation |
|
105 | - * |
|
106 | - * |
|
107 | - * @param mixed $item user id or ip |
|
108 | - * @param bool $isUid |
|
109 | - * @return int |
|
110 | - */ |
|
111 | - public function getLatest($item, $isUid = true) |
|
112 | - { |
|
113 | - $ips = []; |
|
114 | - if ($isUid) { |
|
115 | - $criteria = 'uid =' . (int)$item; |
|
116 | - } else { |
|
117 | - $ip_segs = explode('.', $item); |
|
118 | - $segs = min(count($ip_segs), 4); |
|
119 | - for ($i = 1; $i <= $segs; ++$i) { |
|
120 | - $ips[] = $this->db->quoteString(implode('.', array_slice($ip_segs, 0, $i))); |
|
121 | - } |
|
122 | - $criteria = 'ip IN(' . implode(',', $ips) . ')'; |
|
123 | - } |
|
124 | - $sql = 'SELECT MAX(mod_end) AS expire FROM ' . $this->db->prefix('newbb_moderates') . ' WHERE ' . $criteria; |
|
125 | - if (!$result = $this->db->query($sql)) { |
|
126 | - return -1; |
|
127 | - } |
|
128 | - $row = $this->db->fetchArray($result); |
|
129 | - |
|
130 | - return $row['expire']; |
|
131 | - } |
|
132 | - |
|
133 | - /** |
|
134 | - * clean orphan items from database |
|
135 | - * |
|
136 | - * @param string $table_link |
|
137 | - * @param string $field_link |
|
138 | - * @param string $field_object |
|
139 | - * @return bool true on success |
|
140 | - */ |
|
141 | - public function cleanOrphan($table_link = '', $field_link = '', $field_object = '') //cleanOrphan() |
|
142 | - { |
|
143 | - $sql = 'DELETE FROM ' . $this->table . ' WHERE (forum_id >0 AND forum_id NOT IN ( SELECT DISTINCT forum_id FROM ' . $this->db->prefix('newbb_forums') . ') )'; |
|
144 | - if (!$result = $this->db->queryF($sql)) { |
|
145 | - //xoops_error($this->db->error()); |
|
146 | - return false; |
|
147 | - } |
|
148 | - |
|
149 | - return true; |
|
150 | - } |
|
22 | + /** |
|
23 | + * @param null|\XoopsDatabase $db |
|
24 | + */ |
|
25 | + public function __construct(\XoopsDatabase $db = null) |
|
26 | + { |
|
27 | + parent::__construct($db, 'newbb_moderates', Moderate::class, 'mod_id', 'uid'); |
|
28 | + } |
|
29 | + |
|
30 | + /** |
|
31 | + * Clear garbage |
|
32 | + * |
|
33 | + * Delete all moderation information that has expired |
|
34 | + * |
|
35 | + * @param int $expire Expiration time in UNIX, 0 for time() |
|
36 | + */ |
|
37 | + public function clearGarbage($expire = 0) |
|
38 | + { |
|
39 | + $expire = time() - (int)$expire; |
|
40 | + $sql = sprintf('DELETE FROM `%s` WHERE mod_end < %u', $this->db->prefix('newbb_moderates'), $expire); |
|
41 | + $this->db->queryF($sql); |
|
42 | + } |
|
43 | + |
|
44 | + /** |
|
45 | + * Check if a user is moderated, according to his uid and ip |
|
46 | + * |
|
47 | + * |
|
48 | + * @param int $uid user id |
|
49 | + * @param string|bool $ip user ip |
|
50 | + * @param int $forum |
|
51 | + * @return bool true if IP is banned |
|
52 | + */ |
|
53 | + public function verifyUser($uid = -1, $ip = '', $forum = 0) |
|
54 | + { |
|
55 | + error_reporting(E_ALL); |
|
56 | + // if user is admin do not suspend |
|
57 | + if (newbbIsAdmin($forum)) { |
|
58 | + return true; |
|
59 | + } |
|
60 | + |
|
61 | + $uid = ($uid < 0) ? (is_object($GLOBALS['xoopsUser']) ? $GLOBALS['xoopsUser']->getVar('uid') : 0) : (int)$uid; |
|
62 | + |
|
63 | + $criteria = new \CriteriaCompo(new \Criteria('uid', (int)$uid)); |
|
64 | + $forumCriteria = new \CriteriaCompo(new \Criteria('forum_id', 0), 'OR'); |
|
65 | + if (!empty($forum)) { |
|
66 | + $forumCriteria->add(new \Criteria('forum_id', (int)$forum), 'OR'); |
|
67 | + } |
|
68 | + $criteria->add($forumCriteria); |
|
69 | + $criteria->add(new \Criteria('mod_end', time(), '>')); |
|
70 | + |
|
71 | + $matches = $this->getAll($criteria); |
|
72 | + |
|
73 | + if (0 === count($matches)) { |
|
74 | + return true; // no matches |
|
75 | + } |
|
76 | + |
|
77 | + if (count($matches) > 0 && $uid > 0) { |
|
78 | + return false; // user is banned |
|
79 | + } |
|
80 | + // verify possible matches against IP address |
|
81 | + $ip = empty($ip) ? IPAddress::fromRequest()->asReadable() : $ip; |
|
82 | + |
|
83 | + foreach ($matches as $modMatch) { |
|
84 | + $rawModIp = trim($modMatch->getVar('ip', 'n')); |
|
85 | + if (empty($rawModIp)) { |
|
86 | + return false; // banned without IP |
|
87 | + } |
|
88 | + $parts = explode('/', $rawModIp); |
|
89 | + $modIp = $parts[0]; |
|
90 | + $checkIp = new IPAddress($modIp); |
|
91 | + if (false !== $checkIp->asReadable()) { |
|
92 | + $defaultMask = (6 === $checkIp->ipVersion()) ? 128 : 32; |
|
93 | + $netMask = isset($parts[1]) ? (int)$parts[1] : $defaultMask; |
|
94 | + if ($checkIp->sameSubnet($ip, $netMask, $netMask)) { |
|
95 | + return false; // IP is banned |
|
96 | + } |
|
97 | + } |
|
98 | + } |
|
99 | + |
|
100 | + return true; |
|
101 | + } |
|
102 | + |
|
103 | + /** |
|
104 | + * Get latest expiration for a user moderation |
|
105 | + * |
|
106 | + * |
|
107 | + * @param mixed $item user id or ip |
|
108 | + * @param bool $isUid |
|
109 | + * @return int |
|
110 | + */ |
|
111 | + public function getLatest($item, $isUid = true) |
|
112 | + { |
|
113 | + $ips = []; |
|
114 | + if ($isUid) { |
|
115 | + $criteria = 'uid =' . (int)$item; |
|
116 | + } else { |
|
117 | + $ip_segs = explode('.', $item); |
|
118 | + $segs = min(count($ip_segs), 4); |
|
119 | + for ($i = 1; $i <= $segs; ++$i) { |
|
120 | + $ips[] = $this->db->quoteString(implode('.', array_slice($ip_segs, 0, $i))); |
|
121 | + } |
|
122 | + $criteria = 'ip IN(' . implode(',', $ips) . ')'; |
|
123 | + } |
|
124 | + $sql = 'SELECT MAX(mod_end) AS expire FROM ' . $this->db->prefix('newbb_moderates') . ' WHERE ' . $criteria; |
|
125 | + if (!$result = $this->db->query($sql)) { |
|
126 | + return -1; |
|
127 | + } |
|
128 | + $row = $this->db->fetchArray($result); |
|
129 | + |
|
130 | + return $row['expire']; |
|
131 | + } |
|
132 | + |
|
133 | + /** |
|
134 | + * clean orphan items from database |
|
135 | + * |
|
136 | + * @param string $table_link |
|
137 | + * @param string $field_link |
|
138 | + * @param string $field_object |
|
139 | + * @return bool true on success |
|
140 | + */ |
|
141 | + public function cleanOrphan($table_link = '', $field_link = '', $field_object = '') //cleanOrphan() |
|
142 | + { |
|
143 | + $sql = 'DELETE FROM ' . $this->table . ' WHERE (forum_id >0 AND forum_id NOT IN ( SELECT DISTINCT forum_id FROM ' . $this->db->prefix('newbb_forums') . ') )'; |
|
144 | + if (!$result = $this->db->queryF($sql)) { |
|
145 | + //xoops_error($this->db->error()); |
|
146 | + return false; |
|
147 | + } |
|
148 | + |
|
149 | + return true; |
|
150 | + } |
|
151 | 151 | } |
@@ -68,7 +68,7 @@ discard block |
||
68 | 68 | $ret[$key]['forum_name'] = $this->tree[$key]['obj']->getVar('forum_name'); |
69 | 69 | } |
70 | 70 | $ret[$key]['prefix'] = $prefix_curr; |
71 | - $prefix_curr .= $prefix_orig; |
|
71 | + $prefix_curr .= $prefix_orig; |
|
72 | 72 | } |
73 | 73 | if (isset($this->tree[$key]['child']) && !empty($this->tree[$key]['child'])) { |
74 | 74 | foreach ($this->tree[$key]['child'] as $childkey) { |
@@ -126,9 +126,9 @@ discard block |
||
126 | 126 | $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1); |
127 | 127 | trigger_error("makeSelBox() is deprecated since 2.5.9, please use makeSelectElement(), accessed from {$trace[0]['file']} line {$trace[0]['line']},"); |
128 | 128 | |
129 | - $ret = '<select name=' . $name . '>'; |
|
129 | + $ret = '<select name='.$name.'>'; |
|
130 | 130 | if (!empty($addEmptyOption)) { |
131 | - $ret .= '<option value="0">' . (is_string($EmptyOption) ? $EmptyOption : '') . '</option>'; |
|
131 | + $ret .= '<option value="0">'.(is_string($EmptyOption) ? $EmptyOption : '').'</option>'; |
|
132 | 132 | } |
133 | 133 | $this->_makeSelBoxOptions('forum_name', $selected, $key, $ret, $prefix); |
134 | 134 | $ret .= '</select>'; |
@@ -30,208 +30,208 @@ discard block |
||
30 | 30 | require_once $GLOBALS['xoops']->path('class/tree.php'); |
31 | 31 | |
32 | 32 | if (!class_exists('ObjectTree')) { |
33 | - /** |
|
34 | - * Class ObjectTree |
|
35 | - */ |
|
36 | - class ObjectTree extends \XoopsObjectTree |
|
37 | - { |
|
38 | - /** |
|
39 | - * @param $objectArr |
|
40 | - * @param null $rootId |
|
41 | - */ |
|
42 | - public function __construct(&$objectArr, $rootId = null) |
|
43 | - { |
|
44 | - parent::__construct($objectArr, 'forum_id', 'parent_forum', $rootId); |
|
45 | - } |
|
33 | + /** |
|
34 | + * Class ObjectTree |
|
35 | + */ |
|
36 | + class ObjectTree extends \XoopsObjectTree |
|
37 | + { |
|
38 | + /** |
|
39 | + * @param $objectArr |
|
40 | + * @param null $rootId |
|
41 | + */ |
|
42 | + public function __construct(&$objectArr, $rootId = null) |
|
43 | + { |
|
44 | + parent::__construct($objectArr, 'forum_id', 'parent_forum', $rootId); |
|
45 | + } |
|
46 | 46 | |
47 | - /** |
|
48 | - * Make options for a select box from |
|
49 | - * |
|
50 | - * @param int $key ID of the object to display as the root of select options |
|
51 | - * @param string $ret (reference to a string when called from outside) Result from previous recursions |
|
52 | - * @param string $prefix_orig String to indent items at deeper levels |
|
53 | - * @param string $prefix_curr String to indent the current item |
|
54 | - * @param null|array $tags |
|
55 | - * @internal param string $fieldName Name of the member variable from the |
|
56 | - * node objects that should be used as the title for the options. |
|
57 | - * @internal param string $selected Value to display as selected |
|
58 | - * @access private |
|
59 | - */ |
|
60 | - protected function makeTreeItems($key, &$ret, $prefix_orig, $prefix_curr = '', $tags = null) |
|
61 | - { |
|
62 | - if ($key > 0) { |
|
63 | - if (count($tags) > 0) { |
|
64 | - foreach ($tags as $tag) { |
|
65 | - $ret[$key][$tag] = $this->tree[$key]['obj']->getVar($tag); |
|
66 | - } |
|
67 | - } else { |
|
68 | - $ret[$key]['forum_name'] = $this->tree[$key]['obj']->getVar('forum_name'); |
|
69 | - } |
|
70 | - $ret[$key]['prefix'] = $prefix_curr; |
|
71 | - $prefix_curr .= $prefix_orig; |
|
72 | - } |
|
73 | - if (isset($this->tree[$key]['child']) && !empty($this->tree[$key]['child'])) { |
|
74 | - foreach ($this->tree[$key]['child'] as $childkey) { |
|
75 | - $this->makeTreeItems($childkey, $ret, $prefix_orig, $prefix_curr, $tags); |
|
76 | - } |
|
77 | - } |
|
78 | - } |
|
47 | + /** |
|
48 | + * Make options for a select box from |
|
49 | + * |
|
50 | + * @param int $key ID of the object to display as the root of select options |
|
51 | + * @param string $ret (reference to a string when called from outside) Result from previous recursions |
|
52 | + * @param string $prefix_orig String to indent items at deeper levels |
|
53 | + * @param string $prefix_curr String to indent the current item |
|
54 | + * @param null|array $tags |
|
55 | + * @internal param string $fieldName Name of the member variable from the |
|
56 | + * node objects that should be used as the title for the options. |
|
57 | + * @internal param string $selected Value to display as selected |
|
58 | + * @access private |
|
59 | + */ |
|
60 | + protected function makeTreeItems($key, &$ret, $prefix_orig, $prefix_curr = '', $tags = null) |
|
61 | + { |
|
62 | + if ($key > 0) { |
|
63 | + if (count($tags) > 0) { |
|
64 | + foreach ($tags as $tag) { |
|
65 | + $ret[$key][$tag] = $this->tree[$key]['obj']->getVar($tag); |
|
66 | + } |
|
67 | + } else { |
|
68 | + $ret[$key]['forum_name'] = $this->tree[$key]['obj']->getVar('forum_name'); |
|
69 | + } |
|
70 | + $ret[$key]['prefix'] = $prefix_curr; |
|
71 | + $prefix_curr .= $prefix_orig; |
|
72 | + } |
|
73 | + if (isset($this->tree[$key]['child']) && !empty($this->tree[$key]['child'])) { |
|
74 | + foreach ($this->tree[$key]['child'] as $childkey) { |
|
75 | + $this->makeTreeItems($childkey, $ret, $prefix_orig, $prefix_curr, $tags); |
|
76 | + } |
|
77 | + } |
|
78 | + } |
|
79 | 79 | |
80 | - /** |
|
81 | - * Make a select box with options from the tree |
|
82 | - * |
|
83 | - * @param string $prefix String to indent deeper levels |
|
84 | - * @param integer $key ID of the object to display as the root of select options |
|
85 | - * @param null $tags |
|
86 | - * @return array|string HTML select box |
|
87 | - * @internal param string $name Name of the select box |
|
88 | - * @internal param string $fieldName Name of the member variable from the |
|
89 | - * node objects that should be used as the title for the options. |
|
90 | - * @internal param string $selected Value to display as selected |
|
91 | - * @internal param bool $addEmptyOption Set TRUE to add an empty option with value "0" at the top of the hierarchy |
|
92 | - */ |
|
93 | - public function &makeTree($prefix = '-', $key = 0, $tags = null) |
|
94 | - { |
|
95 | - $ret = []; |
|
96 | - $this->makeTreeItems($key, $ret, $prefix, '', $tags); |
|
80 | + /** |
|
81 | + * Make a select box with options from the tree |
|
82 | + * |
|
83 | + * @param string $prefix String to indent deeper levels |
|
84 | + * @param integer $key ID of the object to display as the root of select options |
|
85 | + * @param null $tags |
|
86 | + * @return array|string HTML select box |
|
87 | + * @internal param string $name Name of the select box |
|
88 | + * @internal param string $fieldName Name of the member variable from the |
|
89 | + * node objects that should be used as the title for the options. |
|
90 | + * @internal param string $selected Value to display as selected |
|
91 | + * @internal param bool $addEmptyOption Set TRUE to add an empty option with value "0" at the top of the hierarchy |
|
92 | + */ |
|
93 | + public function &makeTree($prefix = '-', $key = 0, $tags = null) |
|
94 | + { |
|
95 | + $ret = []; |
|
96 | + $this->makeTreeItems($key, $ret, $prefix, '', $tags); |
|
97 | 97 | |
98 | - return $ret; |
|
99 | - } |
|
98 | + return $ret; |
|
99 | + } |
|
100 | 100 | |
101 | - /** |
|
102 | - * Make a select box with options from the tree |
|
103 | - * |
|
104 | - * @param string $name Name of the select box |
|
105 | - * @param string $fieldName Name of the member variable from the |
|
106 | - * node objects that should be used as the title for the options. |
|
107 | - * @param string $prefix String to indent deeper levels |
|
108 | - * @param string $selected Value to display as selected |
|
109 | - * @param bool $addEmptyOption Set TRUE to add an empty option with value "0" at the top of the hierarchy |
|
110 | - * @param integer $key ID of the object to display as the root of select options |
|
111 | - * @param string $extra |
|
112 | - * @return string HTML select box |
|
113 | - * |
|
114 | - * @deprecated since 2.5.9, please use makeSelectElement() |
|
115 | - */ |
|
116 | - public function makeSelBox( |
|
117 | - $name, |
|
118 | - $fieldName, |
|
119 | - $prefix = '-', |
|
120 | - $selected = '', |
|
121 | - $addEmptyOption = false, |
|
122 | - $key = 0, |
|
123 | - $extra = '' |
|
124 | - ) //makeSelBox($name, $prefix = '-', $selected = '', $EmptyOption = false, $key = 0) |
|
125 | - { |
|
126 | - $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1); |
|
127 | - trigger_error("makeSelBox() is deprecated since 2.5.9, please use makeSelectElement(), accessed from {$trace[0]['file']} line {$trace[0]['line']},"); |
|
101 | + /** |
|
102 | + * Make a select box with options from the tree |
|
103 | + * |
|
104 | + * @param string $name Name of the select box |
|
105 | + * @param string $fieldName Name of the member variable from the |
|
106 | + * node objects that should be used as the title for the options. |
|
107 | + * @param string $prefix String to indent deeper levels |
|
108 | + * @param string $selected Value to display as selected |
|
109 | + * @param bool $addEmptyOption Set TRUE to add an empty option with value "0" at the top of the hierarchy |
|
110 | + * @param integer $key ID of the object to display as the root of select options |
|
111 | + * @param string $extra |
|
112 | + * @return string HTML select box |
|
113 | + * |
|
114 | + * @deprecated since 2.5.9, please use makeSelectElement() |
|
115 | + */ |
|
116 | + public function makeSelBox( |
|
117 | + $name, |
|
118 | + $fieldName, |
|
119 | + $prefix = '-', |
|
120 | + $selected = '', |
|
121 | + $addEmptyOption = false, |
|
122 | + $key = 0, |
|
123 | + $extra = '' |
|
124 | + ) //makeSelBox($name, $prefix = '-', $selected = '', $EmptyOption = false, $key = 0) |
|
125 | + { |
|
126 | + $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1); |
|
127 | + trigger_error("makeSelBox() is deprecated since 2.5.9, please use makeSelectElement(), accessed from {$trace[0]['file']} line {$trace[0]['line']},"); |
|
128 | 128 | |
129 | - $ret = '<select name=' . $name . '>'; |
|
130 | - if (!empty($addEmptyOption)) { |
|
131 | - $ret .= '<option value="0">' . (is_string($EmptyOption) ? $EmptyOption : '') . '</option>'; |
|
132 | - } |
|
133 | - $this->_makeSelBoxOptions('forum_name', $selected, $key, $ret, $prefix); |
|
134 | - $ret .= '</select>'; |
|
129 | + $ret = '<select name=' . $name . '>'; |
|
130 | + if (!empty($addEmptyOption)) { |
|
131 | + $ret .= '<option value="0">' . (is_string($EmptyOption) ? $EmptyOption : '') . '</option>'; |
|
132 | + } |
|
133 | + $this->_makeSelBoxOptions('forum_name', $selected, $key, $ret, $prefix); |
|
134 | + $ret .= '</select>'; |
|
135 | 135 | |
136 | - return $ret; |
|
137 | - } |
|
136 | + return $ret; |
|
137 | + } |
|
138 | 138 | |
139 | - /** |
|
140 | - * Make a tree for the array of a given category |
|
141 | - * |
|
142 | - * @param string $key top key of the tree |
|
143 | - * @param array $ret the tree |
|
144 | - * @param integer $depth level of subcategories |
|
145 | - * @return void |
|
146 | - * @internal param array $tags fields to be used |
|
147 | - */ |
|
148 | - public function getAllChildObject($key, &$ret, $depth = 0) |
|
149 | - { |
|
150 | - if (0 == --$depth) { |
|
151 | - return; |
|
152 | - } |
|
139 | + /** |
|
140 | + * Make a tree for the array of a given category |
|
141 | + * |
|
142 | + * @param string $key top key of the tree |
|
143 | + * @param array $ret the tree |
|
144 | + * @param integer $depth level of subcategories |
|
145 | + * @return void |
|
146 | + * @internal param array $tags fields to be used |
|
147 | + */ |
|
148 | + public function getAllChildObject($key, &$ret, $depth = 0) |
|
149 | + { |
|
150 | + if (0 == --$depth) { |
|
151 | + return; |
|
152 | + } |
|
153 | 153 | |
154 | - if (isset($this->tree[$key]['child'])) { |
|
155 | - foreach ($this->tree[$key]['child'] as $childkey) { |
|
156 | - if (isset($this->tree[$childkey]['obj'])) { |
|
157 | - $ret['child'][$childkey] = $this->tree[$childkey]['obj']; |
|
158 | - } |
|
159 | - $this->getAllChild_object($childkey, $ret['child'][$childkey], $depth); |
|
160 | - } |
|
161 | - } |
|
162 | - } |
|
154 | + if (isset($this->tree[$key]['child'])) { |
|
155 | + foreach ($this->tree[$key]['child'] as $childkey) { |
|
156 | + if (isset($this->tree[$childkey]['obj'])) { |
|
157 | + $ret['child'][$childkey] = $this->tree[$childkey]['obj']; |
|
158 | + } |
|
159 | + $this->getAllChild_object($childkey, $ret['child'][$childkey], $depth); |
|
160 | + } |
|
161 | + } |
|
162 | + } |
|
163 | 163 | |
164 | - /** |
|
165 | - * Make a tree for the array |
|
166 | - * |
|
167 | - * @param int|string $key top key of the tree |
|
168 | - * @param integer $depth level of subcategories |
|
169 | - * @return array |
|
170 | - * @internal param array $tags fields to be used |
|
171 | - */ |
|
172 | - public function &makeObjectTree($key = 0, $depth = 0) |
|
173 | - { |
|
174 | - $ret = []; |
|
175 | - if ($depth > 0) { |
|
176 | - ++$depth; |
|
177 | - } |
|
178 | - $this->getAllChild_object($key, $ret, $depth); |
|
164 | + /** |
|
165 | + * Make a tree for the array |
|
166 | + * |
|
167 | + * @param int|string $key top key of the tree |
|
168 | + * @param integer $depth level of subcategories |
|
169 | + * @return array |
|
170 | + * @internal param array $tags fields to be used |
|
171 | + */ |
|
172 | + public function &makeObjectTree($key = 0, $depth = 0) |
|
173 | + { |
|
174 | + $ret = []; |
|
175 | + if ($depth > 0) { |
|
176 | + ++$depth; |
|
177 | + } |
|
178 | + $this->getAllChild_object($key, $ret, $depth); |
|
179 | 179 | |
180 | - return $ret; |
|
181 | - } |
|
180 | + return $ret; |
|
181 | + } |
|
182 | 182 | |
183 | - /** |
|
184 | - * Make a tree for the array of a given category |
|
185 | - * |
|
186 | - * @param string $key top key of the tree |
|
187 | - * @param array $ret the tree |
|
188 | - * @param array $tags fields to be used |
|
189 | - * @param integer $depth level of subcategories |
|
190 | - * @return void |
|
191 | - */ |
|
192 | - public function getAllChildArray($key, &$ret, array $tags = [], $depth = 0) |
|
193 | - { |
|
194 | - if (0 == --$depth) { |
|
195 | - return; |
|
196 | - } |
|
183 | + /** |
|
184 | + * Make a tree for the array of a given category |
|
185 | + * |
|
186 | + * @param string $key top key of the tree |
|
187 | + * @param array $ret the tree |
|
188 | + * @param array $tags fields to be used |
|
189 | + * @param integer $depth level of subcategories |
|
190 | + * @return void |
|
191 | + */ |
|
192 | + public function getAllChildArray($key, &$ret, array $tags = [], $depth = 0) |
|
193 | + { |
|
194 | + if (0 == --$depth) { |
|
195 | + return; |
|
196 | + } |
|
197 | 197 | |
198 | - if (isset($this->tree[$key]['child'])) { |
|
199 | - foreach ($this->tree[$key]['child'] as $childkey) { |
|
200 | - if (isset($this->tree[$childkey]['obj'])) { |
|
201 | - if (count($tags) > 0) { |
|
202 | - foreach ($tags as $tag) { |
|
203 | - $ret['child'][$childkey][$tag] = $this->tree[$childkey]['obj']->getVar($tag); |
|
204 | - } |
|
205 | - } else { |
|
206 | - $ret['child'][$childkey]['forum_name'] = $this->tree[$childkey]['obj']->getVar('forum_name'); |
|
207 | - } |
|
208 | - } |
|
198 | + if (isset($this->tree[$key]['child'])) { |
|
199 | + foreach ($this->tree[$key]['child'] as $childkey) { |
|
200 | + if (isset($this->tree[$childkey]['obj'])) { |
|
201 | + if (count($tags) > 0) { |
|
202 | + foreach ($tags as $tag) { |
|
203 | + $ret['child'][$childkey][$tag] = $this->tree[$childkey]['obj']->getVar($tag); |
|
204 | + } |
|
205 | + } else { |
|
206 | + $ret['child'][$childkey]['forum_name'] = $this->tree[$childkey]['obj']->getVar('forum_name'); |
|
207 | + } |
|
208 | + } |
|
209 | 209 | |
210 | - $this->getAllChildArray($childkey, $ret['child'][$childkey], $tags, $depth); |
|
211 | - } |
|
212 | - } |
|
213 | - } |
|
210 | + $this->getAllChildArray($childkey, $ret['child'][$childkey], $tags, $depth); |
|
211 | + } |
|
212 | + } |
|
213 | + } |
|
214 | 214 | |
215 | - /** |
|
216 | - * Make a tree for the array |
|
217 | - * |
|
218 | - * @param int|string $key top key of the tree |
|
219 | - * @param array $tags fields to be used |
|
220 | - * @param integer $depth level of subcategories |
|
221 | - * @return array |
|
222 | - */ |
|
223 | - public function &makeArrayTree($key = 0, $tags = null, $depth = 0) |
|
224 | - { |
|
225 | - $ret = []; |
|
226 | - if ($depth > 0) { |
|
227 | - ++$depth; |
|
228 | - } |
|
229 | - $this->getAllChildArray($key, $ret, $tags, $depth); |
|
215 | + /** |
|
216 | + * Make a tree for the array |
|
217 | + * |
|
218 | + * @param int|string $key top key of the tree |
|
219 | + * @param array $tags fields to be used |
|
220 | + * @param integer $depth level of subcategories |
|
221 | + * @return array |
|
222 | + */ |
|
223 | + public function &makeArrayTree($key = 0, $tags = null, $depth = 0) |
|
224 | + { |
|
225 | + $ret = []; |
|
226 | + if ($depth > 0) { |
|
227 | + ++$depth; |
|
228 | + } |
|
229 | + $this->getAllChildArray($key, $ret, $tags, $depth); |
|
230 | 230 | |
231 | - return $ret; |
|
232 | - } |
|
231 | + return $ret; |
|
232 | + } |
|
233 | 233 | |
234 | - /**#@+ |
|
234 | + /**#@+ |
|
235 | 235 | * get all parent forums |
236 | 236 | * |
237 | 237 | * @param string $key ID of the child object |
@@ -239,49 +239,49 @@ discard block |
||
239 | 239 | * @param int $uplevel (empty when called from outside) level of recursion |
240 | 240 | * @return array Array of parent nodes. |
241 | 241 | */ |
242 | - public function &myGetParentForums($key, array $ret = [], $uplevel = 0) |
|
243 | - { |
|
244 | - if (isset($this->tree[$key]['parent']) && isset($this->tree[$this->tree[$key]['parent']]['obj'])) { |
|
245 | - $ret[$uplevel] = $this->tree[$this->tree[$key]['parent']]['obj']; |
|
246 | - if ($this->tree[$key]['parent'] !== $key) { |
|
247 | - //$parents = $this->getParentForums($this->tree[$key]['parent'], $ret, $uplevel+1); |
|
248 | - $parents = $this->getParentForums($this->tree[$key]['parent']); |
|
249 | - foreach (array_keys($parents) as $newkey) { |
|
250 | - $ret[$newkey] = $parents[$newkey]; |
|
251 | - } |
|
252 | - } |
|
253 | - } |
|
242 | + public function &myGetParentForums($key, array $ret = [], $uplevel = 0) |
|
243 | + { |
|
244 | + if (isset($this->tree[$key]['parent']) && isset($this->tree[$this->tree[$key]['parent']]['obj'])) { |
|
245 | + $ret[$uplevel] = $this->tree[$this->tree[$key]['parent']]['obj']; |
|
246 | + if ($this->tree[$key]['parent'] !== $key) { |
|
247 | + //$parents = $this->getParentForums($this->tree[$key]['parent'], $ret, $uplevel+1); |
|
248 | + $parents = $this->getParentForums($this->tree[$key]['parent']); |
|
249 | + foreach (array_keys($parents) as $newkey) { |
|
250 | + $ret[$newkey] = $parents[$newkey]; |
|
251 | + } |
|
252 | + } |
|
253 | + } |
|
254 | 254 | |
255 | - return $ret; |
|
256 | - } |
|
255 | + return $ret; |
|
256 | + } |
|
257 | 257 | |
258 | - /** |
|
259 | - * @param $key |
|
260 | - * @param bool $reverse |
|
261 | - * @return array |
|
262 | - */ |
|
263 | - public function &getParentForums($key, $reverse = true) |
|
264 | - { |
|
265 | - $ret = []; |
|
266 | - $pids = []; |
|
267 | - if (isset($this->tree[$key]['parent']) && isset($this->tree[$this->tree[$key]['parent']]['obj'])) { |
|
268 | - $pids[] = $this->tree[$this->tree[$key]['parent']]['obj']->getVar($this->myId); |
|
269 | - $parents = $this->myGetParentForums($this->tree[$key]['parent'], $ret); |
|
270 | - foreach (array_keys($parents) as $newkey) { |
|
271 | - if (!is_object($newkey)) { |
|
272 | - continue; |
|
273 | - } |
|
274 | - $ret[] = $parents[$newkey]->getVar($this->myId); |
|
275 | - } |
|
276 | - } |
|
277 | - if ($reverse) { |
|
278 | - $pids = array_reverse($ret) + $pids; |
|
279 | - } else { |
|
280 | - $pids += $ret; |
|
281 | - } |
|
258 | + /** |
|
259 | + * @param $key |
|
260 | + * @param bool $reverse |
|
261 | + * @return array |
|
262 | + */ |
|
263 | + public function &getParentForums($key, $reverse = true) |
|
264 | + { |
|
265 | + $ret = []; |
|
266 | + $pids = []; |
|
267 | + if (isset($this->tree[$key]['parent']) && isset($this->tree[$this->tree[$key]['parent']]['obj'])) { |
|
268 | + $pids[] = $this->tree[$this->tree[$key]['parent']]['obj']->getVar($this->myId); |
|
269 | + $parents = $this->myGetParentForums($this->tree[$key]['parent'], $ret); |
|
270 | + foreach (array_keys($parents) as $newkey) { |
|
271 | + if (!is_object($newkey)) { |
|
272 | + continue; |
|
273 | + } |
|
274 | + $ret[] = $parents[$newkey]->getVar($this->myId); |
|
275 | + } |
|
276 | + } |
|
277 | + if ($reverse) { |
|
278 | + $pids = array_reverse($ret) + $pids; |
|
279 | + } else { |
|
280 | + $pids += $ret; |
|
281 | + } |
|
282 | 282 | |
283 | - return $pids; |
|
284 | - } |
|
285 | - /**#@-*/ |
|
286 | - } |
|
283 | + return $pids; |
|
284 | + } |
|
285 | + /**#@-*/ |
|
286 | + } |
|
287 | 287 | } |
@@ -66,7 +66,7 @@ |
||
66 | 66 | case 'viewtopic.php': |
67 | 67 | /** @var Newbb\TopicHandler $topicHandler */ |
68 | 68 | $topicHandler = Newbb\Helper::getInstance()->getHandler('Topic'); |
69 | - $post_id = Request::getInt('post_id', 0);// !empty($_REQUEST["post_id"]) ? (int)($_REQUEST["post_id"]) : 0; |
|
69 | + $post_id = Request::getInt('post_id', 0); // !empty($_REQUEST["post_id"]) ? (int)($_REQUEST["post_id"]) : 0; |
|
70 | 70 | $move = strtolower(Request::getString('move', '', 'GET')); // isset($_GET['move'])? strtolower($_GET['move']) : ''; |
71 | 71 | $topic_id = Request::getInt('topic_id', 0); // !empty($_REQUEST["topic_id"]) ? (int)($_REQUEST["topic_id"]) : 0; |
72 | 72 | if (!empty($post_id)) { |
@@ -28,65 +28,65 @@ |
||
28 | 28 | |
29 | 29 | class Plugin extends Userlog\Plugin\PluginAbstract implements Userlog\Plugin\PluginInterface |
30 | 30 | { |
31 | - /** |
|
32 | - * @param string $subscribe_from Name of the script |
|
33 | - * |
|
34 | - * 'name' => 'thread'; |
|
35 | - * 'title' => _MI_NEWBB_THREAD_NOTIFY; |
|
36 | - * 'description' => _MI_NEWBB_THREAD_NOTIFYDSC; |
|
37 | - * 'subscribe_from' => 'viewtopic.php'; |
|
38 | - * 'item_name' => 'topic_id'; |
|
39 | - * 'allow_bookmark' => 1; |
|
40 | - * |
|
41 | - * publisher: |
|
42 | - * 'name' = 'category_item'; |
|
43 | - * 'title' = _MI_PUBLISHER_CATEGORY_ITEM_NOTIFY; |
|
44 | - * 'description' = _MI_PUBLISHER_CATEGORY_ITEM_NOTIFY_DSC; |
|
45 | - * 'subscribe_from' = array('index.php', 'category.php', 'item.php'); |
|
46 | - * 'item_name' = 'categoryid'; |
|
47 | - * 'allow_bookmark' = 1; |
|
48 | - * |
|
49 | - * empty($subscribe_from): |
|
50 | - * @return bool|array $script_arr["item_name"] name of the item = array("subscribe_from1", "subscribe_from2") Name of the script |
|
51 | - * |
|
52 | - * !empty($subscribe_from): |
|
53 | - * @return bool|array $item["item_name"] name of the item, $item["item_id"] id of the item |
|
54 | - */ |
|
55 | - public function item($subscribe_from) |
|
56 | - { |
|
57 | - if (empty($subscribe_from)) { |
|
58 | - $script_arr = []; |
|
59 | - $script_arr['topic_id'] = ['viewtopic.php']; |
|
60 | - $script_arr['forum'] = ['viewforum.php']; |
|
31 | + /** |
|
32 | + * @param string $subscribe_from Name of the script |
|
33 | + * |
|
34 | + * 'name' => 'thread'; |
|
35 | + * 'title' => _MI_NEWBB_THREAD_NOTIFY; |
|
36 | + * 'description' => _MI_NEWBB_THREAD_NOTIFYDSC; |
|
37 | + * 'subscribe_from' => 'viewtopic.php'; |
|
38 | + * 'item_name' => 'topic_id'; |
|
39 | + * 'allow_bookmark' => 1; |
|
40 | + * |
|
41 | + * publisher: |
|
42 | + * 'name' = 'category_item'; |
|
43 | + * 'title' = _MI_PUBLISHER_CATEGORY_ITEM_NOTIFY; |
|
44 | + * 'description' = _MI_PUBLISHER_CATEGORY_ITEM_NOTIFY_DSC; |
|
45 | + * 'subscribe_from' = array('index.php', 'category.php', 'item.php'); |
|
46 | + * 'item_name' = 'categoryid'; |
|
47 | + * 'allow_bookmark' = 1; |
|
48 | + * |
|
49 | + * empty($subscribe_from): |
|
50 | + * @return bool|array $script_arr["item_name"] name of the item = array("subscribe_from1", "subscribe_from2") Name of the script |
|
51 | + * |
|
52 | + * !empty($subscribe_from): |
|
53 | + * @return bool|array $item["item_name"] name of the item, $item["item_id"] id of the item |
|
54 | + */ |
|
55 | + public function item($subscribe_from) |
|
56 | + { |
|
57 | + if (empty($subscribe_from)) { |
|
58 | + $script_arr = []; |
|
59 | + $script_arr['topic_id'] = ['viewtopic.php']; |
|
60 | + $script_arr['forum'] = ['viewforum.php']; |
|
61 | 61 | |
62 | - return $script_arr; |
|
63 | - } |
|
62 | + return $script_arr; |
|
63 | + } |
|
64 | 64 | |
65 | - switch ($subscribe_from) { |
|
66 | - case 'viewtopic.php': |
|
67 | - /** @var Newbb\TopicHandler $topicHandler */ |
|
68 | - $topicHandler = Newbb\Helper::getInstance()->getHandler('Topic'); |
|
69 | - $post_id = Request::getInt('post_id', 0);// !empty($_REQUEST["post_id"]) ? (int)($_REQUEST["post_id"]) : 0; |
|
70 | - $move = strtolower(Request::getString('move', '', 'GET')); // isset($_GET['move'])? strtolower($_GET['move']) : ''; |
|
71 | - $topic_id = Request::getInt('topic_id', 0); // !empty($_REQUEST["topic_id"]) ? (int)($_REQUEST["topic_id"]) : 0; |
|
72 | - if (!empty($post_id)) { |
|
73 | - $topicObject = $topicHandler->getByPost($post_id); |
|
74 | - $topic_id = $topicObject->getVar('topic_id'); |
|
75 | - } elseif (!empty($move)) { |
|
76 | - $forum_id = Request::getInt('forum_id', 0); //!empty($_REQUEST["forum_id"]) ? (int)($_REQUEST["forum_id"]) : 0; |
|
77 | - $topicObject = $topicHandler->getByMove($topic_id, ('prev' === $move) ? -1 : 1, $forum_id); |
|
78 | - $topic_id = $topicObject->getVar('topic_id'); |
|
79 | - } |
|
65 | + switch ($subscribe_from) { |
|
66 | + case 'viewtopic.php': |
|
67 | + /** @var Newbb\TopicHandler $topicHandler */ |
|
68 | + $topicHandler = Newbb\Helper::getInstance()->getHandler('Topic'); |
|
69 | + $post_id = Request::getInt('post_id', 0);// !empty($_REQUEST["post_id"]) ? (int)($_REQUEST["post_id"]) : 0; |
|
70 | + $move = strtolower(Request::getString('move', '', 'GET')); // isset($_GET['move'])? strtolower($_GET['move']) : ''; |
|
71 | + $topic_id = Request::getInt('topic_id', 0); // !empty($_REQUEST["topic_id"]) ? (int)($_REQUEST["topic_id"]) : 0; |
|
72 | + if (!empty($post_id)) { |
|
73 | + $topicObject = $topicHandler->getByPost($post_id); |
|
74 | + $topic_id = $topicObject->getVar('topic_id'); |
|
75 | + } elseif (!empty($move)) { |
|
76 | + $forum_id = Request::getInt('forum_id', 0); //!empty($_REQUEST["forum_id"]) ? (int)($_REQUEST["forum_id"]) : 0; |
|
77 | + $topicObject = $topicHandler->getByMove($topic_id, ('prev' === $move) ? -1 : 1, $forum_id); |
|
78 | + $topic_id = $topicObject->getVar('topic_id'); |
|
79 | + } |
|
80 | 80 | |
81 | - return ['item_name' => 'topic_id', 'item_id' => $topic_id]; |
|
82 | - break; |
|
83 | - case 'viewforum.php': |
|
84 | - $forum_id = Request::getInt('forum', 0); // !empty($_REQUEST["forum"]) ? (int)($_REQUEST["forum"]) : 0; |
|
81 | + return ['item_name' => 'topic_id', 'item_id' => $topic_id]; |
|
82 | + break; |
|
83 | + case 'viewforum.php': |
|
84 | + $forum_id = Request::getInt('forum', 0); // !empty($_REQUEST["forum"]) ? (int)($_REQUEST["forum"]) : 0; |
|
85 | 85 | |
86 | - return ['item_name' => 'forum', 'item_id' => $forum_id]; |
|
87 | - break; |
|
88 | - } |
|
86 | + return ['item_name' => 'forum', 'item_id' => $forum_id]; |
|
87 | + break; |
|
88 | + } |
|
89 | 89 | |
90 | - return false; |
|
91 | - } |
|
90 | + return false; |
|
91 | + } |
|
92 | 92 | } |
@@ -48,7 +48,7 @@ |
||
48 | 48 | /** @var TopicHandler $itemHandler */ |
49 | 49 | $itemHandler = Newbb\Helper::getInstance()->getHandler('Topic'); |
50 | 50 | /** @var \XoopsObject $itemsObject */ |
51 | - $itemsObject = $itemHandler->getObjects(new \Criteria('topic_id', '(' . implode(', ', $items_id) . ')', 'IN'), true); |
|
51 | + $itemsObject = $itemHandler->getObjects(new \Criteria('topic_id', '('.implode(', ', $items_id).')', 'IN'), true); |
|
52 | 52 | |
53 | 53 | foreach (array_keys($items) as $cat_id) { |
54 | 54 | foreach (array_keys($items[$cat_id]) as $item_id) { |
@@ -32,43 +32,43 @@ discard block |
||
32 | 32 | */ |
33 | 33 | function newbb_tag_iteminfo(&$items) |
34 | 34 | { |
35 | - if (0 === count($items) || !is_array($items)) { |
|
36 | - return false; |
|
37 | - } |
|
35 | + if (0 === count($items) || !is_array($items)) { |
|
36 | + return false; |
|
37 | + } |
|
38 | 38 | |
39 | - $items_id = []; |
|
40 | - foreach (array_keys($items) as $cat_id) { |
|
41 | - // Some handling here to build the link upon catid |
|
42 | - // catid is not used in newbb, so just skip it |
|
43 | - foreach (array_keys($items[$cat_id]) as $item_id) { |
|
44 | - // In newbb, the item_id is "topic_id" |
|
45 | - $items_id[] = (int)$item_id; |
|
46 | - } |
|
47 | - } |
|
48 | - /** @var TopicHandler $itemHandler */ |
|
49 | - $itemHandler = Newbb\Helper::getInstance()->getHandler('Topic'); |
|
50 | - /** @var \XoopsObject $itemsObject */ |
|
51 | - $itemsObject = $itemHandler->getObjects(new \Criteria('topic_id', '(' . implode(', ', $items_id) . ')', 'IN'), true); |
|
39 | + $items_id = []; |
|
40 | + foreach (array_keys($items) as $cat_id) { |
|
41 | + // Some handling here to build the link upon catid |
|
42 | + // catid is not used in newbb, so just skip it |
|
43 | + foreach (array_keys($items[$cat_id]) as $item_id) { |
|
44 | + // In newbb, the item_id is "topic_id" |
|
45 | + $items_id[] = (int)$item_id; |
|
46 | + } |
|
47 | + } |
|
48 | + /** @var TopicHandler $itemHandler */ |
|
49 | + $itemHandler = Newbb\Helper::getInstance()->getHandler('Topic'); |
|
50 | + /** @var \XoopsObject $itemsObject */ |
|
51 | + $itemsObject = $itemHandler->getObjects(new \Criteria('topic_id', '(' . implode(', ', $items_id) . ')', 'IN'), true); |
|
52 | 52 | |
53 | - foreach (array_keys($items) as $cat_id) { |
|
54 | - foreach (array_keys($items[$cat_id]) as $item_id) { |
|
55 | - /** @var \XoopsObject $itemObject */ |
|
56 | - if (!$itemObject = $itemsObject[$item_id]) { |
|
57 | - continue; |
|
58 | - } |
|
59 | - $items[$cat_id][$item_id] = [ |
|
60 | - 'title' => $itemObject->getVar('topic_title'), |
|
61 | - 'uid' => $itemObject->getVar('topic_poster'), |
|
62 | - 'link' => "viewtopic.php?topic_id={$item_id}", |
|
63 | - 'time' => $itemObject->getVar('topic_time'), |
|
64 | - 'tags' => tag_parse_tag($itemObject->getVar('topic_tags', 'n')), |
|
65 | - 'content' => '' |
|
66 | - ]; |
|
67 | - } |
|
68 | - } |
|
69 | - unset($itemsObject); |
|
53 | + foreach (array_keys($items) as $cat_id) { |
|
54 | + foreach (array_keys($items[$cat_id]) as $item_id) { |
|
55 | + /** @var \XoopsObject $itemObject */ |
|
56 | + if (!$itemObject = $itemsObject[$item_id]) { |
|
57 | + continue; |
|
58 | + } |
|
59 | + $items[$cat_id][$item_id] = [ |
|
60 | + 'title' => $itemObject->getVar('topic_title'), |
|
61 | + 'uid' => $itemObject->getVar('topic_poster'), |
|
62 | + 'link' => "viewtopic.php?topic_id={$item_id}", |
|
63 | + 'time' => $itemObject->getVar('topic_time'), |
|
64 | + 'tags' => tag_parse_tag($itemObject->getVar('topic_tags', 'n')), |
|
65 | + 'content' => '' |
|
66 | + ]; |
|
67 | + } |
|
68 | + } |
|
69 | + unset($itemsObject); |
|
70 | 70 | |
71 | - return true; |
|
71 | + return true; |
|
72 | 72 | } |
73 | 73 | |
74 | 74 | /** |
@@ -78,21 +78,21 @@ discard block |
||
78 | 78 | */ |
79 | 79 | function newbb_tag_synchronization($mid) |
80 | 80 | { |
81 | - /** @var TopicHandler $itemHandler */ |
|
82 | - $itemHandler = Newbb\Helper::getInstance()->getHandler('Topic'); |
|
83 | - /** @var \XoopsPersistableObjectHandler $linkHandler */ |
|
84 | - $linkHandler = Tag\Helper::getInstance()->getHandler('Link'); |
|
81 | + /** @var TopicHandler $itemHandler */ |
|
82 | + $itemHandler = Newbb\Helper::getInstance()->getHandler('Topic'); |
|
83 | + /** @var \XoopsPersistableObjectHandler $linkHandler */ |
|
84 | + $linkHandler = Tag\Helper::getInstance()->getHandler('Link'); |
|
85 | 85 | |
86 | - /* clear tag-item links */ |
|
87 | - $sql = " DELETE FROM {$linkHandler->table}" |
|
88 | - . ' WHERE ' |
|
89 | - . " tag_modid = {$mid}" |
|
90 | - . ' AND ' |
|
91 | - . ' ( tag_itemid NOT IN ' |
|
92 | - . " ( SELECT DISTINCT {$itemHandler->keyName} " |
|
93 | - . " FROM {$itemHandler->table} " |
|
94 | - . " WHERE {$itemHandler->table}.approved > 0" |
|
95 | - . ' ) ' |
|
96 | - . ' )'; |
|
97 | - $linkHandler->db->queryF($sql); |
|
86 | + /* clear tag-item links */ |
|
87 | + $sql = " DELETE FROM {$linkHandler->table}" |
|
88 | + . ' WHERE ' |
|
89 | + . " tag_modid = {$mid}" |
|
90 | + . ' AND ' |
|
91 | + . ' ( tag_itemid NOT IN ' |
|
92 | + . " ( SELECT DISTINCT {$itemHandler->keyName} " |
|
93 | + . " FROM {$itemHandler->table} " |
|
94 | + . " WHERE {$itemHandler->table}.approved > 0" |
|
95 | + . ' ) ' |
|
96 | + . ' )'; |
|
97 | + $linkHandler->db->queryF($sql); |
|
98 | 98 | } |