This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
1 | <?php |
||||||
2 | |||||||
3 | namespace XoopsModules\Soapbox; |
||||||
4 | |||||||
5 | /* |
||||||
6 | * You may not change or alter any portion of this comment or credits |
||||||
7 | * of supporting developers from this source code or any supporting source code |
||||||
8 | * which is considered copyrighted (c) material of the original comment or credit authors. |
||||||
9 | * |
||||||
10 | * This program is distributed in the hope that it will be useful, |
||||||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
||||||
13 | */ |
||||||
14 | |||||||
15 | /** |
||||||
16 | * @copyright XOOPS Project https://xoops.org/ |
||||||
17 | * @license GNU GPL 2 or later (http://www.gnu.org/licenses/gpl-2.0.html) |
||||||
18 | * @package |
||||||
19 | * @since |
||||||
20 | * @author XOOPS Development Team, Kazumi Ono (AKA onokazu) |
||||||
21 | */ |
||||||
22 | |||||||
23 | use XoopsModules\Soapbox; |
||||||
24 | |||||||
25 | // defined('XOOPS_ROOT_PATH') || die('Restricted access'); |
||||||
26 | $moduleDirName = basename(dirname(__DIR__)); |
||||||
27 | if ('soapbox' !== $moduleDirName && '' !== $moduleDirName && !preg_match('/^(\D+)(\d*)$/', $moduleDirName)) { |
||||||
28 | echo('invalid dirname: ' . htmlspecialchars($moduleDirName, ENT_QUOTES | ENT_HTML5)); |
||||||
29 | } |
||||||
30 | |||||||
31 | /** |
||||||
32 | * Soapbox entrydata handler class. |
||||||
33 | * This class provides simple interface (a facade class) for handling sbarticles/sbcolumns/sbvotedata |
||||||
34 | * entrydata. |
||||||
35 | * |
||||||
36 | * |
||||||
37 | * @author domifara |
||||||
38 | * @package modules |
||||||
39 | */ |
||||||
40 | class EntrygetHandler extends \XoopsPersistableObjectHandler |
||||||
41 | { |
||||||
42 | /**#@+ |
||||||
43 | * holds reference to entry handler(DAO) class |
||||||
44 | * @access private |
||||||
45 | */ |
||||||
46 | protected $sbArticleHandler; |
||||||
47 | |||||||
48 | /** |
||||||
49 | * holds reference to user handler(DAO) class |
||||||
50 | */ |
||||||
51 | protected $sbColumnHandler; |
||||||
52 | |||||||
53 | /** |
||||||
54 | * holds reference to membership handler(DAO) class |
||||||
55 | */ |
||||||
56 | protected $sbVoteHandler; |
||||||
57 | |||||||
58 | /** |
||||||
59 | * holds temporary module_id |
||||||
60 | */ |
||||||
61 | protected $moduleId; |
||||||
62 | protected $moduleDirName; |
||||||
63 | /**#@-*/ |
||||||
64 | |||||||
65 | public $total_getArticlesAllPermcheck; |
||||||
66 | public $total_getColumnsAllPermcheck; |
||||||
67 | |||||||
68 | public $total_getArticlesByColumnID; |
||||||
69 | public $total_getVotedatasByArticleID; |
||||||
70 | public $total_getColumnsByAuthor; |
||||||
71 | |||||||
72 | /** |
||||||
73 | * constructor |
||||||
74 | * @param \XoopsDatabase|null $db |
||||||
75 | */ |
||||||
76 | public function __construct(\XoopsDatabase $db = null) |
||||||
77 | { |
||||||
78 | parent::__construct($db); |
||||||
79 | $moduleDirName = basename(dirname(__DIR__)); |
||||||
80 | if ('soapbox' !== $moduleDirName && '' !== $moduleDirName && !preg_match('/^(\D+)(\d*)$/', $moduleDirName)) { |
||||||
81 | echo('invalid dirname: ' . htmlspecialchars($moduleDirName, ENT_QUOTES | ENT_HTML5)); |
||||||
82 | } |
||||||
83 | $this->sbArticleHandler = new Soapbox\ArticlesHandler($db); |
||||||
84 | $this->sbColumnHandler = new Soapbox\ColumnsHandler($db); |
||||||
85 | $this->sbVoteHandler = new Soapbox\VotedataHandler($db); |
||||||
86 | $_mymoduleHandler = xoops_getHandler('module'); |
||||||
87 | $_mymodule = $_mymoduleHandler->getByDirname($moduleDirName); |
||||||
0 ignored issues
–
show
Bug
introduced
by
![]() |
|||||||
88 | if (!is_object($_mymodule)) { |
||||||
89 | exit('not found dirname'); |
||||||
0 ignored issues
–
show
|
|||||||
90 | } |
||||||
91 | $this->moduleDirName = $moduleDirName; |
||||||
92 | $this->moduleId = $_mymodule->getVar('mid'); |
||||||
93 | } |
||||||
94 | |||||||
95 | /** |
||||||
96 | * retrieve a Article |
||||||
97 | * |
||||||
98 | * @param int $id ID for the Article |
||||||
99 | * @return Articles Articles reference to the Article |
||||||
100 | */ |
||||||
101 | public function getArticle($id) |
||||||
102 | { |
||||||
103 | $ret = $this->sbArticleHandler->get($id); |
||||||
104 | |||||||
105 | return $ret; |
||||||
0 ignored issues
–
show
The expression
return $ret could also return false which is incompatible with the documented return type XoopsModules\Soapbox\Articles . Did you maybe forget to handle an error condition?
If the returned type also contains false, it is an indicator that maybe an error condition leading to the specific return statement remains unhandled. ![]() |
|||||||
106 | } |
||||||
107 | |||||||
108 | /** |
||||||
109 | * retrieve a Column |
||||||
110 | * |
||||||
111 | * @param int $id ID for the Article |
||||||
112 | * @return Articles Articles reference to the Column |
||||||
113 | */ |
||||||
114 | public function getColumn($id) |
||||||
115 | { |
||||||
116 | $ret = $this->sbColumnHandler->get($id); |
||||||
117 | |||||||
118 | return $ret; |
||||||
0 ignored issues
–
show
|
|||||||
119 | } |
||||||
120 | |||||||
121 | /** |
||||||
122 | * retrieve a Votedata |
||||||
123 | * |
||||||
124 | * @param int $id ID for the Article |
||||||
125 | * @return Votedata Votedata reference to the Votedata |
||||||
126 | */ |
||||||
127 | public function getVotedata($id) |
||||||
128 | { |
||||||
129 | $ret = $this->sbVoteHandler->get($id); |
||||||
130 | |||||||
131 | return $ret; |
||||||
0 ignored issues
–
show
The expression
return $ret could also return false which is incompatible with the documented return type XoopsModules\Soapbox\Votedata . Did you maybe forget to handle an error condition?
If the returned type also contains false, it is an indicator that maybe an error condition leading to the specific return statement remains unhandled. ![]() |
|||||||
132 | } |
||||||
133 | |||||||
134 | /** |
||||||
135 | * retrieve Articles from the database |
||||||
136 | * |
||||||
137 | * @param \CriteriaElement $criteria {@link CriteriaElement} |
||||||
138 | * @param bool $id_as_key use the Article's ID as key for the array? |
||||||
139 | * @return array array of {@link Articles} objects |
||||||
140 | */ |
||||||
141 | public function getArticles(\CriteriaElement $criteria = null, $id_as_key = false) |
||||||
142 | { |
||||||
143 | $ret = $this->sbArticleHandler->getObjects($criteria, $id_as_key); |
||||||
144 | |||||||
145 | return $ret; |
||||||
146 | } |
||||||
147 | |||||||
148 | /** |
||||||
149 | * retrieve Columns from the database |
||||||
150 | * |
||||||
151 | * @param \CriteriaElement $criteria {@link \CriteriaElement} |
||||||
152 | * @param bool $id_as_key use the Column's ID as key for the array? |
||||||
153 | * @return array array of {@link Columns} objects |
||||||
154 | */ |
||||||
155 | public function getColumns(\CriteriaElement $criteria = null, $id_as_key = false) |
||||||
156 | { |
||||||
157 | $ret = $this->sbColumnHandler->getObjects($criteria, $id_as_key); |
||||||
158 | |||||||
159 | return $ret; |
||||||
160 | } |
||||||
161 | |||||||
162 | /** |
||||||
163 | * retrieve Votedatas from the database |
||||||
164 | * |
||||||
165 | * @param \CriteriaElement $criteria {@link \CriteriaElement} |
||||||
166 | * @param bool $id_as_key use the Votedata's ID as key for the array? |
||||||
167 | * @return array array of {@link Votedata} objects |
||||||
168 | */ |
||||||
169 | public function getVotedatas(\CriteriaElement $criteria = null, $id_as_key = false) |
||||||
170 | { |
||||||
171 | $ret = $this->sbVoteHandler->getObjects($criteria, $id_as_key); |
||||||
172 | |||||||
173 | return $ret; |
||||||
174 | } |
||||||
175 | |||||||
176 | /** |
||||||
177 | * count Article matching certain conditions |
||||||
178 | * |
||||||
179 | * @param \CriteriaElement $criteria {@link \CriteriaElement} object |
||||||
180 | * @return int |
||||||
181 | */ |
||||||
182 | public function getArticleCount(\CriteriaElement $criteria = null) |
||||||
183 | { |
||||||
184 | return $this->sbArticleHandler->getCount($criteria); |
||||||
185 | } |
||||||
186 | |||||||
187 | /** |
||||||
188 | * count Column matching certain conditions |
||||||
189 | * |
||||||
190 | * @param \CriteriaElement $criteria {@link \CriteriaElement} object |
||||||
191 | * @return int |
||||||
192 | */ |
||||||
193 | public function getColumnCount(\CriteriaElement $criteria = null) |
||||||
194 | { |
||||||
195 | return $this->sbColumnHandler->getCount($criteria); |
||||||
196 | } |
||||||
197 | |||||||
198 | /** |
||||||
199 | * count Votedata matching certain conditions |
||||||
200 | * |
||||||
201 | * @param \CriteriaElement $criteria {@link CriteriaElement} object |
||||||
202 | * @return int |
||||||
203 | */ |
||||||
204 | public function getVotedataCount(\CriteriaElement $criteria = null) |
||||||
205 | { |
||||||
206 | return $this->sbVoteHandler->getCount($criteria); |
||||||
207 | } |
||||||
208 | |||||||
209 | /** |
||||||
210 | * array return . from int or objects |
||||||
211 | * |
||||||
212 | * @param int|array|Columns $sbcolumns |
||||||
213 | * @return array ( int columnID's) |
||||||
214 | */ |
||||||
215 | public function getColumnsItemIDs($sbcolumns) |
||||||
216 | { |
||||||
217 | $ret = []; |
||||||
218 | $columnIDs = []; |
||||||
219 | if (!isset($sbcolumns) || empty($sbcolumns)) { |
||||||
220 | return $ret; |
||||||
221 | } |
||||||
222 | if (is_object($sbcolumns)) { |
||||||
223 | if (mb_strtolower(get_class($sbcolumns)) === mb_strtolower(Columns::class)) { |
||||||
224 | $columnIDs[] = $sbcolumns->getVar('columnID'); |
||||||
225 | } |
||||||
226 | } else { |
||||||
227 | if (is_array($sbcolumns)) { |
||||||
228 | if (0 === count($sbcolumns)) { |
||||||
229 | return $ret; |
||||||
230 | } |
||||||
231 | $sbcolumns = array_unique($sbcolumns); |
||||||
232 | foreach ($sbcolumns as $k => $v) { |
||||||
233 | if (is_object($v)) { |
||||||
234 | if (mb_strtolower(get_class($v)) === mb_strtolower(Columns::class)) { |
||||||
235 | $columnIDs[] = $v->getVar('columnID'); |
||||||
236 | } |
||||||
237 | } else { |
||||||
238 | $columnIDs[] = (int)$v; |
||||||
239 | } |
||||||
240 | } |
||||||
241 | } else { |
||||||
242 | $columnIDs[] = (int)$sbcolumns; |
||||||
243 | } |
||||||
244 | } |
||||||
245 | $ret = array_unique($columnIDs); |
||||||
246 | |||||||
247 | return $ret; |
||||||
248 | } |
||||||
249 | |||||||
250 | /** |
||||||
251 | * array return . from int or objects |
||||||
252 | * |
||||||
253 | * @param int|array|Articles $sbarticles |
||||||
254 | * @return array ( int articleID's) |
||||||
255 | */ |
||||||
256 | public function getArticlesItemIDs($sbarticles) |
||||||
257 | { |
||||||
258 | $ret = []; |
||||||
259 | $articleIDs = []; |
||||||
260 | if (!isset($sbarticles) || empty($sbarticles)) { |
||||||
261 | return $ret; |
||||||
262 | } |
||||||
263 | if (is_object($sbarticles)) { |
||||||
264 | if (mb_strtolower(get_class($sbarticles)) === mb_strtolower(Articles::class)) { |
||||||
265 | $articleIDs[] = $sbarticles->getVar('articleID'); |
||||||
266 | } |
||||||
267 | } else { |
||||||
268 | if (is_array($sbarticles)) { |
||||||
269 | if (0 === count($sbarticles)) { |
||||||
270 | return $ret; |
||||||
271 | } |
||||||
272 | $sbarticles = array_unique($sbarticles); |
||||||
273 | foreach ($sbarticles as $k => $v) { |
||||||
274 | if (is_object($v)) { |
||||||
275 | if (mb_strtolower(get_class($v)) === mb_strtolower(Articles::class)) { |
||||||
276 | $articleIDs[] = $v->getVar('articleID'); |
||||||
277 | } |
||||||
278 | } else { |
||||||
279 | $articleIDs[] = (int)$v; |
||||||
280 | } |
||||||
281 | } |
||||||
282 | } else { |
||||||
283 | $articleIDs[] = (int)$sbarticles; |
||||||
284 | } |
||||||
285 | } |
||||||
286 | $ret = array_unique($articleIDs); |
||||||
287 | |||||||
288 | return $ret; |
||||||
289 | } |
||||||
290 | |||||||
291 | /** |
||||||
292 | * get sbcolumns objects with pemission check , sort |
||||||
293 | * |
||||||
294 | * @param int $limit number of records to return |
||||||
295 | * @param int $start offset of first record to return |
||||||
296 | * @param bool $checkRight true is with pemission check |
||||||
297 | * @param string $sortname sort oder by filed name |
||||||
298 | * @param string $sortorder sort oder by option (one filed name) |
||||||
299 | * @param int|array $sbcolumns is select int columnID or array columnIDs ,object or objects |
||||||
300 | * @param int|array $NOTsbcolumns is no select columnID or array columnIDs ,object or objects |
||||||
301 | * @param bool $id_as_key use the Column's ID as key for the array? |
||||||
302 | * @set int total count of entrys to total_getColumnsAllPermcheck |
||||||
303 | * @return array array of {@link Columns} objects |
||||||
304 | */ |
||||||
305 | public function getColumnsAllPermcheck( |
||||||
306 | $limit = 0, |
||||||
307 | $start = 0, |
||||||
308 | $checkRight = true, |
||||||
309 | $sortname = 'weight', |
||||||
310 | $sortorder = 'ASC', |
||||||
311 | $sbcolumns = null, |
||||||
312 | $NOTsbcolumns = null, |
||||||
313 | $id_as_key = false) |
||||||
314 | { |
||||||
315 | global $xoopsUser; |
||||||
316 | $ret = []; |
||||||
317 | $this->total_getColumnsAllPermcheck = 0; |
||||||
318 | $groups = is_object($xoopsUser) ? $xoopsUser->getGroups() : XOOPS_GROUP_ANONYMOUS; |
||||||
319 | $columnIDs = []; |
||||||
320 | $notcolumnIDs = []; |
||||||
321 | $can_read_columnIDs = []; |
||||||
322 | //if obect -- change --> array |
||||||
323 | if (isset($sbcolumns)) { |
||||||
324 | $columnIDs = $this->getColumnsItemIDs($sbcolumns); |
||||||
325 | } |
||||||
326 | //if obect -- change --> array |
||||||
327 | if (isset($NOTsbcolumns)) { |
||||||
328 | $notcolumnIDs = $this->getColumnsItemIDs($NOTsbcolumns); |
||||||
329 | } |
||||||
330 | if ($checkRight) { |
||||||
331 | $gperm_name = 'Column Permissions'; |
||||||
332 | $grouppermHandler = xoops_getHandler('groupperm'); |
||||||
333 | $can_read_columnIDs = $grouppermHandler->getItemIds($gperm_name, $groups, $this->moduleId); |
||||||
0 ignored issues
–
show
The method
getItemIds() does not exist on XoopsObjectHandler . It seems like you code against a sub-type of XoopsObjectHandler such as XoopsGroupPermHandler or XoopsPersistableObjectHandler .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
334 | } |
||||||
335 | //-------------------------- |
||||||
336 | $criteria = new \CriteriaCompo(); |
||||||
337 | $criteria_used = false; |
||||||
338 | if (!empty($columnIDs) && count($columnIDs) > 0) { |
||||||
339 | $criteria->add(new \Criteria('columnID', '(' . implode(',', array_unique($columnIDs)) . ')', 'IN')); |
||||||
340 | $criteria_used = true; |
||||||
341 | } |
||||||
342 | if (!empty($notcolumnIDs) && count($notcolumnIDs) > 0) { |
||||||
343 | $criteria->add(new \Criteria('columnID', '(' . implode(',', array_unique($notcolumnIDs)) . ')', 'NOT IN')); |
||||||
344 | $criteria_used = true; |
||||||
345 | } |
||||||
346 | if (!empty($can_read_columnIDs) && count($can_read_columnIDs) > 0) { |
||||||
347 | $criteria->add(new \Criteria('columnID', '(' . implode(',', array_unique($can_read_columnIDs)) . ')', 'IN')); |
||||||
348 | $criteria_used = true; |
||||||
349 | } |
||||||
350 | //------ hold all count |
||||||
351 | if ($criteria_used) { |
||||||
352 | $this->total_getColumnsAllPermcheck = $this->getColumnCount($criteria); |
||||||
353 | } else { |
||||||
354 | $this->total_getColumnsAllPermcheck = $this->getColumnCount(); |
||||||
355 | } |
||||||
356 | if (empty($this->total_getColumnsAllPermcheck)) { |
||||||
357 | return $ret; |
||||||
358 | } |
||||||
359 | if (isset($sortname) && '' !== trim($sortname)) { |
||||||
360 | $criteria->setSort($sortname); |
||||||
361 | } |
||||||
362 | if (isset($sortorder) && '' !== trim($sortorder)) { |
||||||
363 | $criteria->setOrder($sortorder); |
||||||
364 | } |
||||||
365 | $criteria->setLimit((int)$limit); |
||||||
366 | $criteria->setStart((int)$start); |
||||||
367 | $ret = $this->getColumns($criteria, $id_as_key); |
||||||
368 | |||||||
369 | unset($criteria); |
||||||
370 | |||||||
371 | return $ret; |
||||||
372 | //------------------------------------- |
||||||
373 | } |
||||||
374 | |||||||
375 | /** |
||||||
376 | * get sbcolumns objects with permission check , sort |
||||||
377 | * |
||||||
378 | * @param int $limit number of records to return |
||||||
379 | * @param int $start offset of first record to return |
||||||
380 | * @param bool $checkRight true is with pemission check |
||||||
381 | * @param bool $published true is with datesub check |
||||||
382 | * @param int $submit for submit check where submit = $submit |
||||||
383 | * @param int $offline for offline check where offline = $offline |
||||||
384 | * @param int $block for block check where block = $block |
||||||
385 | * @param string $sortname sort oder by filed name |
||||||
386 | * @param string $sortorder sort oder by option (one filed name) |
||||||
387 | * @param int|array|Columns $select_sbcolumns |
||||||
388 | * @param int|array|Articles $NOTsbarticles is no select articleID or array articleIDs ,object or objects |
||||||
389 | * @param bool $approve_submit with author articles of column non check else offline |
||||||
390 | * @param bool $id_as_key use the articleID's ID as key for the array? |
||||||
391 | * |
||||||
392 | * @set int total count of entrys to total_getArticlesAllPermcheck |
||||||
393 | * @return array array of {@link Articles} objects |
||||||
394 | */ |
||||||
395 | public function getArticlesAllPermcheck( |
||||||
396 | $limit = 0, |
||||||
397 | $start = 0, |
||||||
398 | $checkRight = true, |
||||||
399 | $published = true, |
||||||
400 | $submit = 0, |
||||||
401 | $offline = 0, |
||||||
402 | $block = null, |
||||||
403 | $sortname = 'datesub', |
||||||
404 | $sortorder = 'DESC', |
||||||
405 | $select_sbcolumns = null, |
||||||
406 | $NOTsbarticles = null, |
||||||
407 | $approve_submit = false, |
||||||
408 | $id_as_key = false) |
||||||
409 | { |
||||||
410 | global $xoopsUser; |
||||||
411 | $ret = []; |
||||||
412 | $this->total_getArticlesAllPermcheck = 0; |
||||||
413 | //get Columns |
||||||
414 | $can_read_columnIDs = []; |
||||||
415 | $can_read_column_authors = []; |
||||||
416 | $NOTarticleIDs = []; |
||||||
417 | if ($checkRight || isset($select_sbcolumns) || $approve_submit) { |
||||||
418 | //get category object |
||||||
419 | $_sbcolumns_arr = $this->getColumnsAllPermcheck(0, 0, $checkRight, null, null, $select_sbcolumns, null, true); |
||||||
420 | if (empty($_sbcolumns_arr) || 0 === count($_sbcolumns_arr)) { |
||||||
421 | return $ret; |
||||||
422 | } |
||||||
423 | foreach ($_sbcolumns_arr as $key => $_sbcolumn) { |
||||||
424 | $can_read_columnIDs[] = $_sbcolumn->getVar('columnID'); |
||||||
425 | if (is_object($xoopsUser)) { |
||||||
426 | if ($xoopsUser->isAdmin($this->moduleId) |
||||||
427 | || $xoopsUser->getVar('uid') === $_sbcolumn->getVar('author')) { |
||||||
428 | $can_read_column_authors[] = $_sbcolumn->getVar('columnID'); |
||||||
429 | } |
||||||
430 | } |
||||||
431 | } |
||||||
432 | if (empty($can_read_columnIDs)) { |
||||||
433 | return $ret; |
||||||
434 | } |
||||||
435 | } else { |
||||||
436 | //get category object all |
||||||
437 | $_sbcolumns_arr = $this->getColumns(null, true); |
||||||
438 | } |
||||||
439 | //getArticles |
||||||
440 | $criteria = new \CriteriaCompo(); |
||||||
441 | $criteria_used = false; |
||||||
442 | $criteria_public = new \CriteriaCompo(); |
||||||
443 | $criteria_public_used = false; |
||||||
444 | if (count($can_read_columnIDs) > 0) { |
||||||
445 | $criteria_public->add(new \Criteria('columnID', '(' . implode(',', array_unique($can_read_columnIDs)) . ')', 'IN')); |
||||||
446 | $criteria_public_used = true; |
||||||
447 | } |
||||||
448 | if ($checkRight) { |
||||||
449 | if ($published) { |
||||||
450 | $criteria_public->add(new \Criteria('datesub', time(), '<')); |
||||||
451 | $criteria_public->add(new \Criteria('datesub', 0, '>')); |
||||||
452 | $criteria_public_used = true; |
||||||
453 | } |
||||||
454 | } |
||||||
455 | //------ |
||||||
456 | if (isset($submit)) { |
||||||
457 | $criteria_public->add(new \Criteria('submit', (int)$submit)); |
||||||
458 | $criteria_public_used = true; |
||||||
459 | } |
||||||
460 | if (isset($offline)) { |
||||||
461 | $criteria_public->add(new \Criteria('offline', (int)$offline)); |
||||||
462 | $criteria_public_used = true; |
||||||
463 | } |
||||||
464 | if (isset($block)) { |
||||||
465 | $criteria_public->add(new \Criteria('block', (int)$block)); |
||||||
466 | $criteria_public_used = true; |
||||||
467 | } |
||||||
468 | if (isset($NOTsbarticles)) { |
||||||
469 | $notarticleIDs = $this->getColumnsItemIDs($NOTsbarticles); |
||||||
470 | $criteria_public->add(new \Criteria('articleID', '(' . implode(',', array_unique($notarticleIDs)) . ')', 'NOT IN')); |
||||||
471 | $criteria_public_used = true; |
||||||
472 | } |
||||||
473 | |||||||
474 | if ($criteria_public_used) { |
||||||
475 | $criteria = new \CriteriaCompo($criteria_public); |
||||||
476 | $criteria_used = true; |
||||||
477 | } |
||||||
478 | unset($criteria_public); |
||||||
479 | |||||||
480 | // approve submit for column_authors |
||||||
481 | if ($approve_submit && count($can_read_column_authors) > 0) { |
||||||
482 | $crit_approve_submit = new \CriteriaCompo(); |
||||||
483 | $crit_approve_submit->add(new \Criteria('columnID', '(' . implode(',', array_unique($can_read_column_authors)) . ')', 'IN')); |
||||||
484 | if (isset($NOTsbarticles)) { |
||||||
485 | $notarticleIDs = $this->getColumnsItemIDs($NOTsbarticles); |
||||||
486 | if (count($notarticleIDs) > 0) { |
||||||
487 | $crit_approve_submit->add(new \Criteria('articleID', '(' . implode(',', array_unique($notarticleIDs)) . ')', 'NOT IN')); |
||||||
488 | } |
||||||
489 | } |
||||||
490 | // $crit_approve_submit->add(new \Criteria( 'submit', 1 )); |
||||||
491 | $crit_approve_submit->add(new \Criteria('offline', 0)); |
||||||
492 | $criteria->add($crit_approve_submit, 'OR'); |
||||||
493 | $criteria_used = true; |
||||||
494 | unset($crit_approve_submit); |
||||||
495 | } |
||||||
496 | //------ |
||||||
497 | if ($criteria_public_used) { |
||||||
498 | $this->total_getArticlesAllPermcheck = $this->getArticleCount($criteria); |
||||||
499 | } else { |
||||||
500 | $this->total_getArticlesAllPermcheck = $this->getArticleCount(); |
||||||
501 | } |
||||||
502 | if (empty($this->total_getArticlesAllPermcheck)) { |
||||||
503 | return $ret; |
||||||
504 | } |
||||||
505 | if (isset($sortname) && '' !== trim($sortname)) { |
||||||
506 | $criteria->setSort($sortname); |
||||||
507 | } |
||||||
508 | if (isset($sortorder) && '' !== trim($sortorder)) { |
||||||
509 | $criteria->setOrder($sortorder); |
||||||
510 | } |
||||||
511 | $criteria->setLimit((int)$limit); |
||||||
512 | $criteria->setStart((int)$start); |
||||||
513 | $sbarticle_arr = $this->getArticles($criteria, $id_as_key); |
||||||
514 | foreach ($sbarticle_arr as $k => $sbarticle) { |
||||||
515 | $sbarticle_arr[$k]->_sbcolumns = $_sbcolumns_arr[$sbarticle->getVar('columnID')]; |
||||||
516 | } |
||||||
517 | |||||||
518 | unset($criteria); |
||||||
519 | |||||||
520 | return $sbarticle_arr; |
||||||
521 | //------------------------------------- |
||||||
522 | } |
||||||
523 | |||||||
524 | /** |
||||||
525 | * get object with check Perm a entry |
||||||
526 | * |
||||||
527 | * @param $id |
||||||
528 | * @param bool $checkRight |
||||||
529 | * @param bool $approve_submit |
||||||
530 | * @return mixed reference to the {@link Articles} object, FALSE if failed |
||||||
531 | * object, FALSE if failed |
||||||
532 | * @internal param int $articleID articleID of the entry |
||||||
533 | * @internal param bool $force |
||||||
534 | */ |
||||||
535 | public function getArticleOnePermcheck($id, $checkRight = true, $approve_submit = false) |
||||||
536 | { |
||||||
537 | global $xoopsUser; |
||||||
538 | $ret = false; |
||||||
539 | $sbarticle = $this->getArticle($id); |
||||||
540 | if (!is_object($sbarticle)) { |
||||||
541 | return $ret; |
||||||
542 | } |
||||||
543 | // $gperm_name = 'Column Permissions'; |
||||||
544 | // $groups = ( is_object($xoopsUser) ) ? $xoopsUser -> getGroups() : XOOPS_GROUP_ANONYMOUS; |
||||||
545 | // $grouppermHandler = xoops_getHandler( 'groupperm' ); |
||||||
546 | // if ( !$grouppermHandler -> checkRight( $gperm_name,$sbarticle->getVar('columnID'), $groups, $this->moduleId ) ) { |
||||||
547 | // return $ret; |
||||||
548 | // } |
||||||
549 | //get category object |
||||||
550 | $_sbcolumns_arr = $this->getColumnsAllPermcheck(1, 0, $checkRight, null, null, $sbarticle->getVar('columnID'), null, true); |
||||||
551 | if ($checkRight) { |
||||||
552 | if (empty($_sbcolumns_arr) || 0 === count($_sbcolumns_arr)) { |
||||||
553 | return $ret; |
||||||
554 | } |
||||||
555 | $sbarticle->_sbcolumns = $_sbcolumns_arr[$sbarticle->getVar('columnID')]; |
||||||
556 | if (0 !== $sbarticle->getVar('offline')) { |
||||||
557 | return $ret; |
||||||
558 | } |
||||||
559 | if (is_object($xoopsUser)) { |
||||||
560 | if ($approve_submit) { |
||||||
561 | if ($xoopsUser->isAdmin($this->moduleId) |
||||||
562 | || $xoopsUser->getVar('uid') === $sbarticle->_sbcolumns->getVar('author')) { |
||||||
563 | //true |
||||||
564 | $ret = $sbarticle; |
||||||
565 | |||||||
566 | return $ret; |
||||||
567 | } |
||||||
568 | } |
||||||
569 | } |
||||||
570 | if (0 === $sbarticle->getVar('datesub')) { |
||||||
571 | return $ret; |
||||||
572 | } |
||||||
573 | if ($sbarticle->getVar('datesub') > time()) { |
||||||
574 | return $ret; |
||||||
575 | } |
||||||
576 | if (0 !== $sbarticle->getVar('submit')) { |
||||||
577 | return $ret; |
||||||
578 | } |
||||||
579 | } |
||||||
580 | //true |
||||||
581 | $ret = $sbarticle; |
||||||
582 | |||||||
583 | return $ret; |
||||||
584 | } |
||||||
585 | |||||||
586 | //---------------------------------------------------------------------- |
||||||
587 | |||||||
588 | /** |
||||||
589 | * get a list of Articles belonging to a column |
||||||
590 | * |
||||||
591 | * @param int $columnID ID of the Column |
||||||
592 | * @param bool $asobject return the users as objects? |
||||||
593 | * @param int $limit number of users to return |
||||||
594 | * @param int $start index of the first user to return |
||||||
595 | * @param null $sortname |
||||||
596 | * @param null $sortorder |
||||||
597 | * @return array Array of {@link Articles} objects (if $asobject is TRUE) |
||||||
598 | * objects (if $asobject is TRUE) |
||||||
599 | */ |
||||||
600 | public function getArticlesByColumnID( |
||||||
601 | $columnID, |
||||||
602 | $asobject = false, |
||||||
603 | $limit = 0, |
||||||
604 | $start = 0, |
||||||
605 | $sortname = null, |
||||||
606 | $sortorder = null) |
||||||
607 | { |
||||||
608 | $ret = []; |
||||||
609 | $this->total_getArticlesByColumnID = 0; |
||||||
610 | |||||||
611 | $criteria = new \CriteriaCompo(); |
||||||
612 | $criteria->add(new \Criteria('columnID', $columnID)); |
||||||
613 | $this->total_getArticlesByColumnID = $this->getArticleCount($criteria); |
||||||
614 | if (empty($this->total_getArticlesByColumnID) || 0 === $this->total_getArticlesByColumnID) { |
||||||
615 | return $ret; |
||||||
616 | } |
||||||
617 | if (isset($sortname) && '' !== trim($sortname)) { |
||||||
618 | $criteria->setSort($sortname); |
||||||
619 | } |
||||||
620 | if (isset($sortorder) && '' !== trim($sortorder)) { |
||||||
621 | $criteria->setOrder($sortorder); |
||||||
622 | } |
||||||
623 | $criteria->setLimit((int)$limit); |
||||||
624 | $criteria->setStart((int)$start); |
||||||
625 | $sbarticle_arr = $this->getArticles($criteria, true); |
||||||
626 | unset($criteria); |
||||||
627 | if (empty($sbarticle_arr) || 0 === count($sbarticle_arr)) { |
||||||
628 | return $ret; |
||||||
629 | } |
||||||
630 | if ($asobject) { |
||||||
631 | $ret = $sbarticle_arr; |
||||||
632 | } else { |
||||||
633 | foreach ($sbarticle_arr as $key => $sbarticle) { |
||||||
634 | $ret[] = $key; |
||||||
635 | } |
||||||
636 | } |
||||||
637 | |||||||
638 | return $ret; |
||||||
639 | } |
||||||
640 | |||||||
641 | /** |
||||||
642 | * get a list of Votedatas belonging to a Article |
||||||
643 | * |
||||||
644 | * @param int $articleID ID of the Article |
||||||
645 | * @param bool $asobject return the users as objects? |
||||||
646 | * @param int $limit number of users to return |
||||||
647 | * @param int $start index of the first user to return |
||||||
648 | * @param null $sortname |
||||||
649 | * @param null $sortorder |
||||||
650 | * @return array Array of {@link Votedata} objects (if $asobject is TRUE) |
||||||
651 | * objects (if $asobject is TRUE) |
||||||
652 | */ |
||||||
653 | public function getVotedatasByArticleID( |
||||||
654 | $articleID, |
||||||
655 | $asobject = false, |
||||||
656 | $limit = 0, |
||||||
657 | $start = 0, |
||||||
658 | $sortname = null, |
||||||
659 | $sortorder = null) |
||||||
660 | { |
||||||
661 | $ret = []; |
||||||
662 | $this->total_getVotedatasByArticleID = 0; |
||||||
663 | $criteria = new \CriteriaCompo(); |
||||||
664 | $criteria->add(new \Criteria('lid', $articleID)); |
||||||
665 | $this->total_getVotedatasByArticleID = $this->getVotedataCount($criteria); |
||||||
666 | if (empty($this->total_getVotedatasByArticleID) || 0 === $this->total_getVotedatasByArticleID) { |
||||||
667 | return $ret; |
||||||
668 | } |
||||||
669 | if (isset($sortname) && '' !== trim($sortname)) { |
||||||
670 | $criteria->setSort($sortname); |
||||||
671 | } |
||||||
672 | if (isset($sortorder) && '' !== trim($sortorder)) { |
||||||
673 | $criteria->setOrder($sortorder); |
||||||
674 | } |
||||||
675 | $criteria->setLimit((int)$limit); |
||||||
676 | $criteria->setStart((int)$start); |
||||||
677 | $sbvotedata_arr = $this->getVotedatas($criteria, true); |
||||||
678 | unset($criteria); |
||||||
679 | if (empty($sbvotedata_arr) || 0 === count($sbvotedata_arr)) { |
||||||
680 | return $ret; |
||||||
681 | } |
||||||
682 | if ($asobject) { |
||||||
683 | $ret = $sbvotedata_arr; |
||||||
684 | } else { |
||||||
685 | foreach ($sbvotedata_arr as $key => $sbvotedata) { |
||||||
686 | $ret[] = $key; |
||||||
687 | } |
||||||
688 | } |
||||||
689 | |||||||
690 | return $ret; |
||||||
691 | } |
||||||
692 | |||||||
693 | /** |
||||||
694 | * get a list of columns that a user is author of |
||||||
695 | * |
||||||
696 | * @param int $user_id ID of the user |
||||||
697 | * @param bool $asobject return groups as {@link Columns} objects or arrays? |
||||||
698 | * @param int $limit |
||||||
699 | * @param int $start |
||||||
700 | * @param null $sortname |
||||||
701 | * @param null $sortorder |
||||||
702 | * @return array array of objects or arrays |
||||||
703 | */ |
||||||
704 | public function getColumnsByAuthor( |
||||||
705 | $user_id, |
||||||
706 | $asobject = false, |
||||||
707 | $limit = 0, |
||||||
708 | $start = 0, |
||||||
709 | $sortname = null, |
||||||
710 | $sortorder = null) |
||||||
711 | { |
||||||
712 | $ret = []; |
||||||
713 | $this->total_getColumnsByAuthor = 0; |
||||||
714 | $criteria = new \CriteriaCompo(); |
||||||
715 | $criteria->add(new \Criteria('author', $user_id)); |
||||||
716 | $this->total_getColumnsByAuthor = $this->getColumnCount($criteria); |
||||||
717 | if (empty($this->total_getColumnsByAuthor) || 0 === $this->total_getColumnsByAuthor) { |
||||||
718 | return $ret; |
||||||
719 | } |
||||||
720 | if (isset($sortname) && '' !== trim($sortname)) { |
||||||
721 | $criteria->setSort($sortname); |
||||||
722 | } |
||||||
723 | if (isset($sortorder) && '' !== trim($sortorder)) { |
||||||
724 | $criteria->setOrder($sortorder); |
||||||
725 | } |
||||||
726 | $criteria->setLimit((int)$limit); |
||||||
727 | $criteria->setStart((int)$start); |
||||||
728 | $sbcolumns_arr = $this->getColumns($criteria, true); |
||||||
729 | unset($criteria); |
||||||
730 | if (empty($sbcolumns_arr) || 0 === count($sbcolumns_arr)) { |
||||||
731 | return $ret; |
||||||
732 | } |
||||||
733 | if ($asobject) { |
||||||
734 | $ret = $sbcolumns_arr; |
||||||
735 | } else { |
||||||
736 | foreach ($sbcolumns_arr as $key => $sbcolumns) { |
||||||
737 | $ret[] = $key; |
||||||
738 | } |
||||||
739 | } |
||||||
740 | |||||||
741 | return $ret; |
||||||
742 | } |
||||||
743 | |||||||
744 | /** |
||||||
745 | * get a list of columns that article objects |
||||||
746 | * |
||||||
747 | * @param $_sbarticle_arr |
||||||
748 | * @param bool $asobject |
||||||
749 | * @param int $limit |
||||||
750 | * @param int $start |
||||||
751 | * @param null $sortname |
||||||
752 | * @param null $sortorder |
||||||
753 | * @return array array of {@link Columns} objects |
||||||
754 | * objects |
||||||
755 | * @internal param object $sbarticle reference to the {@link Articles} object object |
||||||
756 | * @internal param bool $id_as_key use the columnID as key for the array? |
||||||
757 | */ |
||||||
758 | public function getColumnsByArticles( |
||||||
759 | $_sbarticle_arr, |
||||||
760 | $asobject = false, |
||||||
761 | $limit = 0, |
||||||
762 | $start = 0, |
||||||
763 | $sortname = null, |
||||||
764 | $sortorder = null) |
||||||
765 | { |
||||||
766 | $ret = []; |
||||||
767 | $columnIDs = []; |
||||||
768 | if (is_array($_sbarticle_arr)) { |
||||||
769 | foreach ($_sbarticle_arr as $sbarticle) { |
||||||
770 | if (mb_strtolower(get_class($sbarticle)) !== mb_strtolower(Articles::class)) { |
||||||
771 | $columnIDs[] = $sbarticle->getVar('columnID'); |
||||||
772 | } |
||||||
773 | } |
||||||
774 | } else { |
||||||
775 | if (mb_strtolower(get_class($sbarticle)) !== mb_strtolower(Articles::class)) { |
||||||
776 | $columnIDs[] = $_sbarticle_arr->getVar('columnID'); |
||||||
777 | } |
||||||
778 | } |
||||||
779 | if (!empty($columnIDs) && count($columnIDs) > 0) { |
||||||
780 | return $ret; |
||||||
781 | } |
||||||
782 | $columnIDs = array_unique($columnIDs); |
||||||
783 | |||||||
784 | $criteria = new \CriteriaCompo(); |
||||||
785 | $criteria->add(new \Criteria('columnID', '(' . implode(',', array_unique($columnIDs)) . ')', 'IN')); |
||||||
786 | if (isset($sortname) && '' !== trim($sortname)) { |
||||||
787 | $criteria->setSort($sortname); |
||||||
788 | } |
||||||
789 | if (isset($sortorder) && '' !== trim($sortorder)) { |
||||||
790 | $criteria->setOrder($sortorder); |
||||||
791 | } |
||||||
792 | $criteria->setLimit((int)$limit); |
||||||
793 | $criteria->setStart((int)$start); |
||||||
794 | $sbcolumns_arr = $this->getColumns($criteria, true); |
||||||
795 | unset($criteria); |
||||||
796 | if (empty($sbcolumns_arr) || 0 === count($sbcolumns_arr)) { |
||||||
797 | return $ret; |
||||||
798 | } |
||||||
799 | if ($asobject) { |
||||||
800 | $ret = $sbcolumns_arr; |
||||||
801 | } else { |
||||||
802 | foreach ($sbcolumns_arr as $key => $sbcolumns) { |
||||||
803 | $ret[] = $key; |
||||||
804 | } |
||||||
805 | } |
||||||
806 | |||||||
807 | return $ret; |
||||||
808 | } |
||||||
809 | |||||||
810 | /** |
||||||
811 | * count Votedata belonging to a articleID |
||||||
812 | * |
||||||
813 | * @param int $articleID ID of the group |
||||||
814 | * @return int |
||||||
815 | */ |
||||||
816 | public function getVotedataCountByArticleID($articleID) |
||||||
817 | { |
||||||
818 | $criteria = new \CriteriaCompo(); |
||||||
819 | $criteria->add(new \Criteria('lid', $articleID)); |
||||||
820 | |||||||
821 | return $this->getVotedataCount($criteria); |
||||||
822 | } |
||||||
823 | |||||||
824 | /** |
||||||
825 | * count Article belonging to a columnID |
||||||
826 | * |
||||||
827 | * @param $columnID |
||||||
828 | * @return int |
||||||
829 | * @internal param int $articleID ID of the group |
||||||
830 | */ |
||||||
831 | public function getArticleCountByColumnID($columnID) |
||||||
832 | { |
||||||
833 | $criteria = new \CriteriaCompo(); |
||||||
834 | $criteria->add(new \Criteria('columnID', $columnID)); |
||||||
835 | |||||||
836 | return $this->getArticleCount($criteria); |
||||||
837 | } |
||||||
838 | |||||||
839 | /** |
||||||
840 | * update count up hit's counter of sbarticles obects ,with author user check |
||||||
841 | * |
||||||
842 | * @param Articles $sbarticle reference to the {@link Articles} object |
||||||
843 | * @param bool $force |
||||||
844 | * @return bool FALSE if failed, TRUE |
||||||
845 | */ |
||||||
846 | public function getUpArticlecount(Articles $sbarticle, $force = false) |
||||||
847 | { |
||||||
848 | global $xoopsUser; |
||||||
849 | /** @var Soapbox\Helper $helper */ |
||||||
850 | $helper = Soapbox\Helper::getInstance(); |
||||||
851 | |||||||
852 | if (mb_strtolower(get_class($sbarticle)) !== mb_strtolower(Articles::class)) { |
||||||
853 | return false; |
||||||
854 | } |
||||||
855 | $groups = is_object($xoopsUser) ? $xoopsUser->getGroups() : XOOPS_GROUP_ANONYMOUS; |
||||||
856 | //update count |
||||||
857 | $hitcount_update = false; |
||||||
858 | if (XOOPS_GROUP_ANONYMOUS === $groups) { |
||||||
859 | $hitcount_update = true; |
||||||
860 | } else { |
||||||
861 | if (1 === $helper->getConfig('adminhits')) { |
||||||
862 | $hitcount_update = true; |
||||||
863 | } else { |
||||||
864 | if ($xoopsUser->isAdmin($this->moduleId)) { |
||||||
865 | $hitcount_update = false; |
||||||
866 | } else { |
||||||
867 | $hitcount_update = false; |
||||||
868 | if ($sbarticle->getVar('uid') !== $xoopsUser->uid()) { |
||||||
869 | $hitcount_update = true; |
||||||
870 | } |
||||||
871 | } |
||||||
872 | } |
||||||
873 | } |
||||||
874 | if ($hitcount_update) { |
||||||
875 | $hitcount = $sbarticle->getVar('counter') + 1; |
||||||
876 | |||||||
877 | return $this->sbArticleHandler->updateByField($sbarticle, 'counter', $hitcount, $force); |
||||||
878 | } |
||||||
879 | |||||||
880 | return false; |
||||||
881 | } |
||||||
882 | |||||||
883 | /** |
||||||
884 | * get edit icon display html layout for admin or author |
||||||
885 | * |
||||||
886 | * @param Articles $sbarticle reference to the {@link Articles} object |
||||||
887 | * @param $sbcolumns |
||||||
888 | * @return string (html tags) |
||||||
889 | */ |
||||||
890 | public function getadminlinks(Articles $sbarticle, &$sbcolumns) |
||||||
891 | { |
||||||
892 | global $xoopsUser, $xoopsModule; |
||||||
893 | $pathIcon16 = \Xmf\Module\Admin::iconUrl('', 16); |
||||||
894 | $myts = \MyTextSanitizer:: getInstance(); |
||||||
895 | // Functional links |
||||||
896 | $ret = ''; |
||||||
897 | if (is_object($xoopsUser)) { |
||||||
898 | if ($xoopsUser->isAdmin($this->moduleId)) { |
||||||
899 | if (0 !== $sbarticle->getVar('submit')) { |
||||||
900 | $ret = '<a href="' |
||||||
901 | . XOOPS_URL |
||||||
902 | . '/modules/' |
||||||
903 | . $this->moduleDirName |
||||||
904 | . '/admin/submissions.php?op=mod&articleID=' |
||||||
905 | . $sbarticle->getVar('articleID') |
||||||
906 | . '" target="_blank">' |
||||||
907 | . "<img src='" |
||||||
908 | . $pathIcon16 |
||||||
909 | . "/edit.png' border=\"0\" alt=\"" |
||||||
910 | . _MD_SOAPBOX_EDITART |
||||||
911 | . '" width="16" height="16">' |
||||||
912 | . '</a> '; |
||||||
913 | } else { |
||||||
914 | $ret = '<a href="' |
||||||
915 | . XOOPS_URL |
||||||
916 | . '/modules/' |
||||||
917 | . $this->moduleDirName |
||||||
918 | . '/admin/article.php?op=mod&articleID=' |
||||||
919 | . $sbarticle->getVar('articleID') |
||||||
920 | . '" target="_blank">' |
||||||
921 | . "<img src='" |
||||||
922 | . $pathIcon16 |
||||||
923 | . "/edit.png' border=\"0\" alt=\"" |
||||||
924 | . _MD_SOAPBOX_EDITART |
||||||
925 | . '" width="16" height="16">' |
||||||
926 | . '</a> '; |
||||||
927 | } |
||||||
928 | $ret .= '<a href="' |
||||||
929 | . XOOPS_URL |
||||||
930 | . '/modules/' |
||||||
931 | . $this->moduleDirName |
||||||
932 | . '/admin/article.php?op=del&articleID=' |
||||||
933 | . $sbarticle->getVar('articleID') |
||||||
934 | . '" target="_blank">' |
||||||
935 | . "<img src='" |
||||||
936 | . $pathIcon16 |
||||||
937 | . "/delete.png' border=\"0\" alt=\"" |
||||||
938 | . _MD_SOAPBOX_DELART |
||||||
939 | . '" width="16" height="16">' |
||||||
940 | . '</a> '; |
||||||
941 | } elseif ($xoopsUser->uid() === $sbcolumns->getVar('author')) { |
||||||
942 | $ret = '<a href="' |
||||||
943 | . XOOPS_URL |
||||||
944 | . '/modules/' |
||||||
945 | . $this->moduleDirName |
||||||
946 | . '/submit.php?op=edit&articleID=' |
||||||
947 | . $sbarticle->getVar('articleID') |
||||||
948 | . '" target="_blank">' |
||||||
949 | . "<img src='" |
||||||
950 | . $pathIcon16 |
||||||
951 | . "/edit.png' border=\"0\" alt=\"" |
||||||
952 | . _MD_SOAPBOX_EDITART |
||||||
953 | . '" width="16" height="16">' |
||||||
954 | . '</a> '; |
||||||
955 | } else { |
||||||
956 | $ret = ''; |
||||||
957 | } |
||||||
958 | } |
||||||
959 | |||||||
960 | return $ret; |
||||||
961 | } |
||||||
962 | |||||||
963 | /** |
||||||
964 | * get print ,mail icon html layout for guest or nomal user |
||||||
965 | * |
||||||
966 | * @param Articles $sbarticle reference to the {@link Articles} object |
||||||
967 | * @return string (html tags) |
||||||
968 | */ |
||||||
969 | public function getuserlinks(Articles $sbarticle) |
||||||
970 | { |
||||||
971 | global $xoopsConfig, $xoopsModule; |
||||||
972 | $pathIcon16 = \Xmf\Module\Admin::iconUrl('', 16); |
||||||
973 | |||||||
974 | $myts = \MyTextSanitizer:: getInstance(); |
||||||
975 | // Functional links |
||||||
976 | $ret = ''; |
||||||
977 | $mbmail_subject = sprintf(_MD_SOAPBOX_INTART, $xoopsConfig['sitename']); |
||||||
978 | $mbmail_body = sprintf(_MD_SOAPBOX_INTARTFOUND, $xoopsConfig['sitename']); |
||||||
979 | $al = Soapbox\Utility::getAcceptLang(); |
||||||
980 | if ('ja' === $al) { |
||||||
981 | if (function_exists('mb_convert_encoding') && function_exists('mb_encode_mimeheader') |
||||||
982 | && @mb_internal_encoding(_CHARSET)) { |
||||||
983 | $mbmail_subject = mb_convert_encoding($mbmail_subject, 'SJIS', _CHARSET); |
||||||
984 | $mbmail_body = mb_convert_encoding($mbmail_body, 'SJIS', _CHARSET); |
||||||
985 | } |
||||||
986 | } |
||||||
987 | $mbmail_subject = rawurlencode($mbmail_subject); |
||||||
988 | $mbmail_body = rawurlencode($mbmail_body); |
||||||
989 | $ret = '<a href="' |
||||||
990 | . XOOPS_URL |
||||||
991 | . '/modules/' |
||||||
992 | . $this->moduleDirName |
||||||
993 | . '/print.php?articleID=' |
||||||
994 | . $sbarticle->getVar('articleID') |
||||||
995 | . '" target="_blank">' |
||||||
996 | . "<img src='" |
||||||
997 | . $pathIcon16 |
||||||
998 | . "/printer.png' border=\"0\" alt=\"" |
||||||
999 | . _MD_SOAPBOX_PRINTART |
||||||
1000 | . '" width="16" height="16">' |
||||||
1001 | . '</a> ' |
||||||
1002 | . '<a href="mailto:?subject=' |
||||||
1003 | . $myts->htmlSpecialChars($mbmail_subject) |
||||||
1004 | . '&body=' |
||||||
1005 | . $myts->htmlSpecialChars($mbmail_body) |
||||||
1006 | . ': ' |
||||||
1007 | . XOOPS_URL |
||||||
1008 | . '/modules/' |
||||||
1009 | . $this->moduleDirName |
||||||
1010 | . '/article.php?articleID=' |
||||||
1011 | . $sbarticle->getVar('articleID') |
||||||
1012 | . ' " target="_blank">' |
||||||
1013 | . "<img src='" |
||||||
1014 | . $pathIcon16 |
||||||
1015 | . "/mail_forward.png' border=\"0\" alt=\"" |
||||||
1016 | . _MD_SOAPBOX_SENDTOFRIEND |
||||||
1017 | . '" width="16" height="16">' |
||||||
1018 | . '</a> '; |
||||||
1019 | |||||||
1020 | return $ret; |
||||||
1021 | } |
||||||
1022 | } |
||||||
1023 |