OSDN Git Service

skinnableADMINクラスから全メソッドの移植を終えた
[nucleus-jp/nucleus-next.git] / nucleus / libs / ACTIONS.php
1 <?php\r
2 /**\r
3  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
4  * Copyright (C) 2002-2012 The Nucleus Group\r
5  *\r
6  * This program is free software; you can redistribute it and/or\r
7  * modify it under the terms of the GNU General Public License\r
8  * as published by the Free Software Foundation; either version 2\r
9  * of the License, or (at your option) any later version.\r
10  * (see nucleus/documentation/index.html#license for more info)\r
11  */\r
12 /**\r
13  * This class contains the functions that get called by using\r
14  * the special tags in the skins\r
15  *\r
16  * The allowed tags for a type of skinpart are defined by the\r
17  * Skin::getAllowedActionsForType($type) method\r
18  *\r
19  * @license http://nucleuscms.org/license.txt GNU General Public License\r
20  * @copyright Copyright (C) 2002-2012 The Nucleus Group\r
21  * @version $Id: ACTIONS.php 1721 2012-03-31 10:18:25Z sakamocchi $\r
22  */\r
23 \r
24 class Actions extends BaseActions\r
25 {\r
26         // part of the skin currently being parsed ('index', 'item', 'archive',\r
27         // 'archivelist', 'member', 'search', 'error', 'imagepopup')\r
28         var $skintype;\r
29         \r
30         // contains an assoc array with parameters that need to be included when\r
31         // generating links to items/archives/... (e.g. catid)\r
32         var $linkparams;\r
33         \r
34         // reference to the skin object for which a part is being parsed\r
35         var $skin;\r
36         \r
37         // used when including templated forms from the include/ dir. The $formdata var\r
38         // contains the values to fill out in there (assoc array name -> value)\r
39         var $formdata;\r
40         \r
41         // filled out with the number of displayed items after calling one of the\r
42         // (other)blog/(other)searchresults skinvars.\r
43         var $amountfound;\r
44         \r
45         /**\r
46          * Actions::__construct()\r
47          * Constructor for a new Actions object\r
48          * \r
49          * @param       string  $type\r
50          * @return      void\r
51          */\r
52         public function __construct($type)\r
53         {\r
54                 global $catid;\r
55                 \r
56                 // call constructor of superclass first\r
57                 $this->BaseActions();\r
58                 $this->skintype = $type;\r
59                 \r
60                 if ( $catid )\r
61                 {\r
62                         $this->linkparams = array('catid' => $catid);\r
63                 }\r
64                 return;\r
65         }\r
66         \r
67         /**\r
68          * Actions::setSkin()\r
69          * Set the skin\r
70          * @param       object  $skin   an instance of Skin class\r
71          * @return      void\r
72          */\r
73         public function setSkin(&$skin)\r
74         {\r
75                 $this->skin =& $skin;\r
76                 return;\r
77         }\r
78         \r
79         /**\r
80          * Actions::setParser()\r
81          * Set the parser\r
82          * \r
83          * @param       object  $parser an instance of Parser class\r
84          * @return      void\r
85          */\r
86         public function setParser(&$parser)\r
87         {\r
88                 $this->parser =& $parser;\r
89                 return;\r
90         }\r
91         \r
92         /**\r
93          * Actions::doForm()\r
94          * Forms get parsedincluded now, using an extra <formdata> skinvar\r
95          *\r
96          * @param       string  $filename\r
97          * @return      void\r
98          */\r
99         public function doForm($filename)\r
100         {\r
101                 global $DIR_NUCLEUS;\r
102                 array_push($this->parser->actions,'formdata','text','callback','errordiv','ticket');\r
103                 \r
104                 $oldIncludeMode = Parser::getProperty('IncludeMode');\r
105                 $oldIncludePrefix = Parser::getProperty('IncludePrefix');\r
106                 Parser::setProperty('IncludeMode','normal');\r
107                 Parser::setProperty('IncludePrefix','');\r
108                 \r
109                 $this->parse_parsedinclude($DIR_NUCLEUS . 'forms/' . $filename . '.template');\r
110                 Parser::setProperty('IncludeMode',$oldIncludeMode);\r
111                 Parser::setProperty('IncludePrefix',$oldIncludePrefix);\r
112                 \r
113                 array_pop($this->parser->actions);      // errordiv\r
114                 array_pop($this->parser->actions);      // callback\r
115                 array_pop($this->parser->actions);      // text\r
116                 array_pop($this->parser->actions);      // formdata\r
117                 array_pop($this->parser->actions);      // ticket\r
118                 return;\r
119         }\r
120 \r
121         /**\r
122          * Actions::checkCondition()\r
123          * Checks conditions for if statements\r
124          *\r
125          * @param       string  $field  type of <%if%>\r
126          * @param       string  $name   property of field\r
127          * @param       string  $value  value of property\r
128          * @return      boolean condition\r
129          */\r
130         public function checkCondition($field, $name='', $value = '')\r
131         {\r
132                 global $catid, $blog, $member, $itemidnext, $itemidprev, $manager, $archiveprevexists, $archivenextexists;\r
133                 \r
134                 $condition = 0;\r
135                 switch ( $field )\r
136                 {\r
137                         case 'category':\r
138                                 $condition = ($blog && $this->ifCategory($name,$value));\r
139                                 break;\r
140                         case 'blogsetting':\r
141                                 $condition = ($blog && ($blog->getSetting($name) == $value));\r
142                                 break;\r
143                         case 'loggedin':\r
144                                 $condition = $member->isLoggedIn();\r
145                                 break;\r
146                         case 'onteam':\r
147                                 $condition = $member->isLoggedIn() && $this->ifOnTeam($name);\r
148                                 break;\r
149                         case 'admin':\r
150                                 $condition = $member->isLoggedIn() && $this->ifAdmin($name);\r
151                                 break;\r
152                         case 'superadmin':\r
153                                 $condition = $member->isLoggedIn() && $member->isAdmin();\r
154                                 break;\r
155                         case 'allowloginedit':\r
156                                 $condition = $member->isLoggedIn() && ($CONF['AllowLoginEdit'] || $member->isAdmin());\r
157                                 break;\r
158                         case 'nextitem':\r
159                                 $condition = ($itemidnext != '');\r
160                                 break;\r
161                         case 'previtem':\r
162                                 $condition = ($itemidprev != '');\r
163                                 break;\r
164                         case 'archiveprevexists':\r
165                                 $condition = ($archiveprevexists == true);\r
166                                 break;\r
167                         case 'archivenextexists':\r
168                                 $condition = ($archivenextexists == true);\r
169                                 break;\r
170                         case 'skintype':\r
171                                 $condition = (($name == $this->skintype) || ($name == requestVar('action')));\r
172                                 break;\r
173                         case 'hasplugin':\r
174                                 $condition = $this->ifHasPlugin($name, $value);\r
175                                 break;\r
176                         case 'adminaction':\r
177                                 $condition = ($this->objAdmin->action == $name);\r
178                                 break;\r
179                         case 'adminoldaction':\r
180                                 $condition = ($this->objAdmin->action == $name);\r
181                                 break;\r
182                         case 'addresschange':\r
183                                 $condition = ($this->_ifAddresscange());\r
184                                 break;\r
185                         case 'bechangepass':\r
186                                 $condition = ($this->_beChangePassword());\r
187                                 break;\r
188                         case 'skincandidates':\r
189                                 $condition = ($this->_ifSkincandidates());\r
190                                 break;\r
191                         case 'nameclashes':\r
192                                 $condition = requestVar('nameclashes');\r
193                                 break;\r
194                         case 'existsnewplugin':\r
195                                 $condition = ($this->_existsNewPlugin());\r
196                                 break;\r
197                         default:\r
198                                 $condition = $manager->pluginInstalled("NP_{$field}") && $this->ifPlugin($field, $name, $value);\r
199                                 break;\r
200                 }\r
201                 return $condition;\r
202         }\r
203         \r
204         /**\r
205          * Actions::_ifHasPlugin()\r
206          *      hasplugin,PlugName\r
207          *         -> checks if plugin exists\r
208          *      hasplugin,PlugName,OptionName\r
209          *         -> checks if the option OptionName from plugin PlugName is not set to 'no'\r
210          *      hasplugin,PlugName,OptionName=value\r
211          *         -> checks if the option OptionName from plugin PlugName is set to value\r
212          *\r
213          * @param       string  $name   name of plugin\r
214          * @param       string  $value  \r
215          * @return      \r
216          */\r
217         private function ifHasPlugin($name, $value)\r
218         {\r
219                 global $manager;\r
220                 $condition = false;\r
221                 // (pluginInstalled method won't write a message in the actionlog on failure)\r
222                 if ( $manager->pluginInstalled("NP_{$name}") )\r
223                 {\r
224                         $plugin =& $manager->getPlugin("NP_{$name}");\r
225                         if ( $plugin != NULL )\r
226                         {\r
227                                 if ( $value == "" )\r
228                                 {\r
229                                         $condition = true;\r
230                                 }\r
231                                 else\r
232                                 {\r
233                                         list($name2, $value2) = preg_split('#=#', $value, 2);\r
234                                         if ( $value2 == "" && $plugin->getOption($name2) != 'no' )\r
235                                         {\r
236                                                 $condition = true;\r
237                                         }\r
238                                         else if ( $plugin->getOption($name2) == $value2 )\r
239                                         {\r
240                                                 $condition = true;\r
241                                         }\r
242                                 }\r
243                         }\r
244                 }\r
245                 return $condition;\r
246         }\r
247         \r
248         /**\r
249          * Actions::beChangePassword()\r
250          * \r
251          * @param       void\r
252          * @return      void\r
253          */\r
254         function beChangePassword()\r
255         {\r
256                 return intRequestVar('bNeedsPasswordChange');\r
257         }\r
258         \r
259         /**\r
260          * Actions::ifSkincandidates()\r
261          * Checks if a plugin exists and call its doIf function\r
262          * \r
263          * @param       void\r
264          * @return      void\r
265          */\r
266         private function ifSkincandidates()\r
267         {\r
268                 global $DIR_SKINS;\r
269                 $candidates = SKINIMPORT::searchForCandidates($DIR_SKINS);\r
270                 return (count($candidates) > 0);\r
271         }\r
272         \r
273         /**\r
274          * Actions::ifPlugin()\r
275          * Checks if a plugin exists and call its doIf function\r
276          * \r
277          * @param       string  $name   name of plugin\r
278          * @param       string  $key    name of plugin option\r
279          * @param       string  $value  value of plugin option\r
280          * @return      void\r
281          */\r
282         private function ifPlugin($name, $key = '', $value = '')\r
283         {\r
284                 global $manager;\r
285                 \r
286                 $plugin =& $manager->getPlugin("NP_{$name}");\r
287                 if ( !$plugin )\r
288                 {\r
289                         return;\r
290                 }\r
291                 \r
292                 $params = func_get_args();\r
293                 array_shift($params);\r
294                 \r
295                 return call_user_func_array(array(&$plugin, 'doIf'), $params);\r
296         }\r
297         \r
298         /**\r
299          * Actions::ifCategory()\r
300          * Different checks for a category\r
301          * \r
302          * @param       string  $name   \r
303          * @param       string  $value  \r
304          * @return      boolean \r
305          */\r
306         private function ifCategory($name = '', $value='')\r
307         {\r
308                 global $blog, $catid;\r
309                 \r
310                 // when no parameter is defined, just check if a category is selected\r
311                 if ( ($name != 'catname' && $name != 'catid') || ($value == '') )\r
312                 {\r
313                         return $blog->isValidCategory($catid);\r
314                 }\r
315                 \r
316                 // check category name\r
317                 if ( $name == 'catname' )\r
318                 {\r
319                         $value = $blog->getCategoryIdFromName($value);\r
320                         if ( $value == $catid )\r
321                         {\r
322                                 return $blog->isValidCategory($catid);\r
323                         }\r
324                 }\r
325                 \r
326                 // check category id\r
327                 if ( ($name == 'catid') && ($value == $catid) )\r
328                 {\r
329                         return $blog->isValidCategory($catid);\r
330                 }\r
331                 return FALSE;\r
332         }\r
333         \r
334         /**\r
335          * Actions::ifOnTeam()\r
336          * Checks if a member is on the team of a blog and return his rights\r
337          * \r
338          * @param       string  $blogName       name of weblog\r
339          * @return      mixed\r
340          */\r
341         private function ifOnTeam($blogName = '')\r
342         {\r
343                 global $blog, $member, $manager;\r
344                 \r
345                 // when no blog found\r
346                 if ( ($blogName == '') && !is_object($blog) )\r
347                 {\r
348                         return 0;\r
349                 }\r
350                 \r
351                 // explicit blog selection\r
352                 if ( $blogName != '' )\r
353                 {\r
354                         $blogid = getBlogIDFromName($blogName);\r
355                 }\r
356                 \r
357                 if ( ($blogName == '') || !$manager->existsBlogID($blogid) )\r
358                 {\r
359                         // use current blog\r
360                         $blogid = $blog->getID();\r
361                 }\r
362                 \r
363                 return $member->teamRights($blogid);\r
364         }\r
365 \r
366         /**\r
367          * Actions::ifAdmin()\r
368          * Checks if a member is admin of a blog\r
369          * \r
370          * @param       string  $blogName       name of weblog\r
371          * @return      mixed\r
372          */\r
373         private function ifAdmin($blogName = '')\r
374         {\r
375                 global $blog, $member, $manager;\r
376                 \r
377                 // when no blog found\r
378                 if ( ($blogName == '') && (!is_object($blog)) )\r
379                 {\r
380                         return 0;\r
381                 }\r
382                 \r
383                 // explicit blog selection\r
384                 if ( $blogName != '' )\r
385                 {\r
386                         $blogid = getBlogIDFromName($blogName);\r
387                 }\r
388                 \r
389                 if ( ($blogName == '') || !$manager->existsBlogID($blogid) )\r
390                 {\r
391                         // use current blog\r
392                         $blogid = $blog->getID();\r
393                 }\r
394                 \r
395                 return $member->isBlogAdmin($blogid);\r
396         }\r
397         \r
398         /**\r
399          * Actions::ifAddresscange()\r
400          * Check e-Mail address is changed\r
401          * \r
402          * @param       void\r
403          * @return      boolean\r
404          */\r
405         private function ifAddresscange()\r
406         {\r
407                 $key = $this->objAdmin->sessionVar("{$CONF['CookiePrefix']}ackey");\r
408                 if ( !$key )\r
409                 {\r
410                         return FALSE;\r
411                 }\r
412                 $info = MEMBER::getActivationInfo($key);\r
413                 if ( !$info )\r
414                 {\r
415                         return FALSE;\r
416                 }\r
417                 $mem  = MEMBER::createFromId($info->vmember);\r
418                 if ( !$mem )\r
419                 {\r
420                         return FALSE;\r
421                 }\r
422                 if ( $info->vtype == 'addresschange' )\r
423                 {\r
424                         return TRUE;\r
425                 }\r
426                 return FALSE;\r
427         }\r
428         \r
429         /**\r
430          * Actions::link()\r
431          * returns either\r
432          *      - a raw link (html/xml encoded) when no linktext is provided\r
433          *      - a (x)html <a href... link when a text is present (text htmlencoded)\r
434          * \r
435          * @param       string  $url            URL for href attribute of anchor element\r
436          * @param       string  $linktext       content of anchor element\r
437          * @return      \r
438          */\r
439         private function link($url, $linktext = '')\r
440         {\r
441                 $u = Entity::hsc($url);\r
442                 // fix URLs that already had encoded ampersands\r
443                 $u = preg_replace("#&amp;amp;#", '&amp;', $u);\r
444                 if ( $linktext != '' )\r
445                 {\r
446                         $l = '<a href="' . $u .'">' . Entity::hsc($linktext) . '</a>';\r
447                 }\r
448                 else\r
449                 {\r
450                         $l = $u;\r
451                 }\r
452                 return $l;\r
453         }\r
454         \r
455         /**\r
456          * Actions::searchlink()\r
457          * Outputs a next/prev link\r
458          *\r
459          * @param $maxresults\r
460          *              The maximum amount of items shown per page (e.g. 10)\r
461          * @param $startpos\r
462          *              Current start position (requestVar('startpos'))\r
463          * @param $direction\r
464          *              either 'prev' or 'next'\r
465          * @param $linktext\r
466          *              When present, the output will be a full <a href...> link. When empty,\r
467          *              only a raw link will be outputted\r
468          */\r
469         private function searchlink($maxresults, $startpos, $direction, $linktext = '', $recount = '')\r
470         {\r
471                 global $CONF, $blog, $query, $amount;\r
472                 // TODO: Move request uri to linkparams. this is ugly. sorry for that.\r
473                 $startpos       = (integer) $startpos;\r
474                 $parsed         = parse_url(serverVar('REQUEST_URI'));\r
475                 $path           = $parsed['path'];\r
476                 $parsed         = $parsed['query'];\r
477                 $url            = '';\r
478                 \r
479                 if ( $direction == 'prev' )\r
480                 {\r
481                         if ( intval($startpos) - intval($maxresults) >= 0 )\r
482                         {\r
483                                 $startpos       = intval($startpos) - intval($maxresults);\r
484                                 \r
485                                 if ( $this->skintype == 'index' )\r
486                                 {\r
487                                         $url = $path;\r
488                                 }\r
489                                 else if ( $this->skintype == 'search' )\r
490                                 {\r
491                                         $url = $CONF['SearchURL'];\r
492                                 }\r
493                                 $url .= '?' . alterQueryStr($parsed,'startpos',$startpos);\r
494                         }\r
495                 }\r
496                 else if ( $direction == 'next' )\r
497                 {\r
498                         global $navigationItems;\r
499                         if ( !isset($navigationItems) )\r
500                         {\r
501                                 $navigationItems = 0;\r
502                         }\r
503                         \r
504                         if ( $recount )\r
505                         {\r
506                                 $iAmountOnPage = 0;\r
507                         }\r
508                         else \r
509                         {\r
510                                 $iAmountOnPage = $this->amountfound;\r
511                         }\r
512                         \r
513                         if ( intval($navigationItems) > 0 )\r
514                         {\r
515                                 $iAmountOnPage = intval($navigationItems) - intval($startpos);\r
516                         }\r
517                         elseif ( $iAmountOnPage == 0 )\r
518                         {\r
519                                 /*\r
520                                  * [%nextlink%] or [%prevlink%] probably called before [%blog%] or [%searchresults%]\r
521                                  * try a count query\r
522                                  */\r
523                                 if ( $this->skintype == 'index' )\r
524                                 {\r
525                                         $sqlquery = $blog->getSqlBlog('', 'count');\r
526                                         $url = $path;\r
527                                 }\r
528                                 else if ( $this->skintype == 'search' )\r
529                                 {\r
530                                         $unused_highlight = '';\r
531                                         $sqlquery = $blog->getSqlSearch($query, $amount, $unused_highlight, 'count');\r
532                                         $url = $CONF['SearchURL'];\r
533                                 }\r
534                                 if ( $sqlquery )\r
535                                 {\r
536                                         $iAmountOnPage = intval(quickQuery($sqlquery)) - intval($startpos);\r
537                                 }\r
538                         }\r
539                         \r
540                         $url = '';\r
541                         if ( intval($iAmountOnPage) >= intval($maxresults) )\r
542                         {\r
543                                 $startpos        = intval($startpos) + intval($maxresults);\r
544                                 $url            .= '?' . alterQueryStr($parsed, 'startpos', $startpos);\r
545                         }\r
546                 }\r
547                 \r
548                 if ( $url != '' )\r
549                 {\r
550                         echo $this->link($url, $linktext);\r
551                 }\r
552                 return;\r
553         }\r
554         \r
555         /**\r
556          * Actions::itemlink()\r
557          * Creates an item link and if no id is given a todaylink \r
558          * \r
559          * @param       integer $id     id for link\r
560          * @param       string  $linktext       text for link\r
561          * @return      void\r
562          */\r
563         public function itemlink($id, $linktext = '')\r
564         {\r
565                 global $CONF;\r
566                 if ( $id != 0 )\r
567                 {\r
568                         echo $this->link(Link::createitemlink($id, $this->linkparams), $linktext);\r
569                 }\r
570                 else\r
571                 {\r
572                         $this->parse_todaylink($linktext);\r
573                 }\r
574                 return;\r
575         }\r
576         \r
577         /**\r
578          * Actions:setBlogCategory()\r
579          * Helper function that sets the category that a blog will need to use\r
580          *\r
581          * @param       string  $blog           An object of the blog class, passed by reference (we want to make changes to it)\r
582          * @param       string  $catname        The name of the category to use\r
583          * @return      void\r
584          */\r
585         private function setBlogCategory(&$blog, $catname)\r
586         {\r
587                 global $catid;\r
588                 if ( $catname != '' )\r
589                 {\r
590                         $blog->setSelectedCategoryByName($catname);\r
591                 }\r
592                 else\r
593                 {\r
594                         $blog->setSelectedCategory($catid);\r
595                 }\r
596                 return;\r
597         }\r
598 \r
599         /**\r
600          * Actions::archivelink)\r
601          * Creates an archive link and if no id is given a todaylink \r
602          * \r
603          * @param       integer $id     id for link\r
604          * @param       string  $linktext       text for link\r
605          * @return      void\r
606          */\r
607         public function archivelink($id, $linktext = '')\r
608         {\r
609                 global $CONF, $blog;\r
610                 if ( $id != 0 )\r
611                 {\r
612                         echo $this->link(Link::createarchivelink($blog->getID(), $id, $this->linkparams), $linktext);\r
613                 }\r
614                 else\r
615                 {\r
616                         $this->parse_todaylink($linktext);\r
617                 }\r
618                 return;\r
619         }\r
620         \r
621         /**\r
622          * Actions::preBlogContent()\r
623          * Notifies the Manager that a PreBlogContent event occurs\r
624          * \r
625          * @param       string  $type   type of skin\r
626          * @param       object  $blog   an instance of Blog class\r
627          * @return      void\r
628          */\r
629         private function preBlogContent($type, &$blog)\r
630         {\r
631                 global $manager;\r
632                 $manager->notify('PreBlogContent',array('blog' => &$blog, 'type' => $type));\r
633                 return;\r
634         }\r
635 \r
636         /**\r
637          * Actions::postBlogContent()\r
638          * Notifies the Manager that a PostBlogContent event occurs\r
639          * \r
640          * @param       string  $type   type of skin\r
641          * @param       objecct $blog   an instance of Blog class\r
642          * @return      void\r
643          */\r
644         private function postBlogContent($type, &$blog)\r
645         {\r
646                 global $manager;\r
647                 $manager->notify('PostBlogContent', array('blog' => &$blog, 'type' => $type));\r
648                 return;\r
649         }\r
650         \r
651         /**\r
652          * Actions::parse_additemform()\r
653          * Parse skinvar additemform\r
654          * \r
655          * @param       void\r
656          * @return      void\r
657          */\r
658         public function parse_additemform()\r
659         {\r
660                 global $blog, $CONF;\r
661                 $this->formdata = array(\r
662                         'adminurl'      => Entity::hsc($CONF['AdminURL']),\r
663                         'catid'         => $blog->getDefaultCategory()\r
664                 );\r
665                 $blog->InsertJavaScriptInfo();\r
666                 $this->doForm('additemform');\r
667                 return;\r
668         }\r
669         \r
670         /**\r
671          * Actions::parse_addlink()\r
672          * Parse skinvar addlink\r
673          * A Link that allows to open a bookmarklet to add an item\r
674          */\r
675         public function parse_addlink()\r
676         {\r
677                 global $CONF, $member, $blog;\r
678                 if ( $member->isLoggedIn() && $member->isTeamMember($blog->blogid) )\r
679                 {\r
680                         echo $CONF['AdminURL'].'bookmarklet.php?blogid='.$blog->blogid;\r
681                 }\r
682                 return;\r
683         }\r
684         \r
685         /**\r
686          * Actions::parse_addpopupcode()\r
687          * Parse skinvar addpopupcode\r
688          * Code that opens a bookmarklet in an popup window\r
689          * \r
690          * @param       void\r
691          * @return      void\r
692          */\r
693         public function parse_addpopupcode()\r
694         {\r
695                 echo "if (event &amp;&amp; event.preventDefault) event.preventDefault();winbm=window.open(this.href,'nucleusbm','scrollbars=yes,width=600,height=500,left=10,top=10,status=yes,resizable=yes');winbm.focus();return false;";\r
696                 return;\r
697         }\r
698         \r
699         /**\r
700          * Parse skinvar adminurl\r
701          * (shortcut for admin url)\r
702          * \r
703          * @param       void\r
704          * @return      void\r
705          */\r
706         public function parse_adminurl()\r
707         {\r
708                 $this->parse_sitevar('adminurl');\r
709                 return;\r
710         }\r
711         \r
712         /**\r
713          * Actions::parse_archive()\r
714          * Parse skinvar archive\r
715          * \r
716          * @param       string  $template       name of template\r
717          * @param       string  $category       name of category\r
718          * @return      \r
719          */\r
720         public function parse_archive($template, $category = '')\r
721         {\r
722                 global $blog, $archive;\r
723                 // can be used with either yyyy-mm or yyyy-mm-dd\r
724                 sscanf($archive,'%d-%d-%d', $y, $m, $d);\r
725                 $this->setBlogCategory($blog, $category);\r
726                 $this->preBlogContent('achive',$blog);\r
727                 $blog->showArchive($template, $y, $m, $d);\r
728                 $this->postBlogContent('achive',$blog);\r
729                 return;\r
730         }\r
731         \r
732         /**\r
733          * Actions::parse_archivedate()\r
734          * %archivedate(locale,date format)%\r
735          * \r
736          * @param       string  $locale\r
737          * @return      void\r
738          */\r
739         public function parse_archivedate($locale = '-def-')\r
740         {\r
741                 global $archive;\r
742                 \r
743                 /* \r
744                  * TODO: these lines are no meaning because there is no $template.\r
745                  */\r
746                 if ( $locale == '-def-' )\r
747                 {\r
748                         setlocale(LC_TIME, $template['LOCALE']);\r
749                 }\r
750                 else\r
751                 {\r
752                         setlocale(LC_TIME, $locale);\r
753                 }\r
754                 \r
755                 // get archive date\r
756                 sscanf($archive,'%d-%d-%d',$y,$m,$d);\r
757                 \r
758                 // get format\r
759                 $args = func_get_args();\r
760                 // format can be spread over multiple parameters\r
761                 if ( sizeof($args) > 1 )\r
762                 {\r
763                         // take away locale\r
764                         array_shift($args);\r
765                         // implode\r
766                         $format=implode(',',$args);\r
767                 }\r
768                 elseif ( $d == 0 && $m !=0 )\r
769                 {\r
770                         $format = '%B %Y';\r
771                 }\r
772                 elseif ( $m == 0 )\r
773                 {\r
774                         $format = '%Y';\r
775                 }\r
776                 else\r
777                 {\r
778                         $format = '%d %B %Y';\r
779                 }\r
780                 echo i18n::formatted_timedate($format, mktime(0,0,0,$m?$m:1,$d?$d:1,$y));\r
781                 return;\r
782         }\r
783         \r
784         /**\r
785          * Actions::parse_archivedaylist()\r
786          * Parse skinvar archivedaylist\r
787          * \r
788          * @param       string  $template       name of template\r
789          * @param       string  $category       name of category\r
790          * @param       integer $limit          the number of items in a display\r
791          * @return      void\r
792          */\r
793         public function parse_archivedaylist($template, $category = 'all', $limit = 0)\r
794         {\r
795                 global $blog;\r
796                 if ( $category == 'all' )\r
797                 {\r
798                         $category = '';\r
799                 }\r
800                 $this->preBlogContent('archivelist',$blog);\r
801                 $this->setBlogCategory($blog, $category);\r
802                 $blog->showArchiveList($template, 'day', $limit);\r
803                 $this->postBlogContent('archivelist',$blog);\r
804                 return;\r
805         }\r
806         \r
807         /**\r
808          * Actions::parsearchivelink()\r
809          * A link to the archives for the current blog (or for default blog)\r
810          * \r
811          * @param       string  $linktext       text for link\r
812          * @return      void\r
813          */\r
814         public function parsearchivelink($linktext = '')\r
815         {\r
816                 global $blog, $CONF;\r
817                 if ( $blog )\r
818                 {\r
819                         echo $this->link(Link::create_archivelistlink($blog->getID(),$this->linkparams), $linktext);\r
820                 }\r
821                 else\r
822                 {\r
823                         echo $this->link(Link::create_archivelistlink(), $linktext);\r
824                 }\r
825                 return;\r
826         }\r
827         \r
828         /**\r
829          * Actions::parse_archivelist()\r
830          * \r
831          * @param       string  $template       name of template\r
832          * @param       string  $category       name of category\r
833          * @param       integer $limit          the number of items in a display\r
834          * @return      void\r
835          */\r
836         public function parse_archivelist($template, $category = 'all', $limit = 0)\r
837         {\r
838                 global $blog;\r
839                 if ( $category == 'all' )\r
840                 {\r
841                         $category = '';\r
842                 }\r
843                 $this->preBlogContent('archivelist',$blog);\r
844                 $this->setBlogCategory($blog, $category);\r
845                 $blog->showArchiveList($template, 'month', $limit);\r
846                 $this->postBlogContent('archivelist',$blog);\r
847                 return;\r
848         }\r
849         \r
850         /**\r
851          * Actions::parse_archiveyearlist()\r
852          * \r
853          * @param       string  $template       name of template\r
854          * @param       string  $category       name of category\r
855          * @param       integer $limit          the number of items in a display\r
856          */\r
857         public function parse_archiveyearlist($template, $category = 'all', $limit = 0)\r
858         {\r
859                 global $blog;\r
860                 if ( $category == 'all' )\r
861                 {\r
862                         $category = '';\r
863                 }\r
864                 $this->preBlogContent('archivelist',$blog);\r
865                 $this->setBlogCategory($blog, $category);\r
866                 $blog->showArchiveList($template, 'year', $limit);\r
867                 $this->postBlogContent('archivelist',$blog);\r
868                 return;\r
869         }\r
870         \r
871         /**\r
872          * Actions::parse_archivetype()\r
873          * Parse skinvar archivetype\r
874          * \r
875          * @param       void\r
876          * @return      void\r
877          */\r
878         public function parse_archivetype()\r
879         {\r
880                 global $archivetype;\r
881                 echo $archivetype;\r
882                 return;\r
883         }\r
884         \r
885         /**\r
886          * Actions::parse_blog()\r
887          * Parse skinvar blog\r
888          * \r
889          * @param       string  $template       name of template\r
890          * @param       mixed   $amount         the number of items in a display, in case it includes the beginning\r
891          * @param       string  $category       name of category\r
892          * @return      void\r
893          */\r
894         public function parse_blog($template, $amount = 10, $category = '')\r
895         {\r
896                 global $blog, $startpos;\r
897                 \r
898                 list($limit, $offset) = sscanf($amount, '%d(%d)');\r
899                 $this->setBlogCategory($blog, $category);\r
900                 $this->preBlogContent('blog',$blog);\r
901                 $this->amountfound = $blog->readLog($template, $limit, $offset, $startpos);\r
902                 $this->postBlogContent('blog',$blog);\r
903                 return;\r
904         }\r
905         \r
906         /**\r
907          * Actions::parse_bloglist()\r
908          * Parse skinvar bloglist\r
909          * Shows a list of all blogs\r
910          * \r
911          * @param       string  $template       name of template\r
912          * @param       string  $bnametype      whether 'name' or 'shortname' is used for the link text\r
913          * @param       string  $orderby        order criteria\r
914          * @param       string  $direction      order ascending or descending             \r
915          * @return      void\r
916          */\r
917         public function parse_bloglist($template, $bnametype = '', $orderby='number', $direction='asc')\r
918         {\r
919                 Blog::showBlogList($template, $bnametype, $orderby, $direction);\r
920                 return;\r
921         }\r
922         \r
923         /**\r
924          * Actions::parse_blogsetting()\r
925          * Parse skinvar blogsetting\r
926          * \r
927          * @param       string  $which  key of weblog settings\r
928          * @return      void\r
929          */\r
930         public function parse_blogsetting($which)\r
931         {\r
932                 global $blog;\r
933                 switch( $which )\r
934                 {\r
935                         case 'id':\r
936                                 echo Entity::hsc($blog->getID());\r
937                                 break;\r
938                         case 'url':\r
939                                 echo Entity::hsc($blog->getURL());\r
940                                 break;\r
941                         case 'name':\r
942                                 echo Entity::hsc($blog->getName());\r
943                                 break;\r
944                         case 'desc':\r
945                                 echo Entity::hsc($blog->getDescription());\r
946                                 break;\r
947                         case 'short':\r
948                                 echo Entity::hsc($blog->getShortName());\r
949                                 break;\r
950                 }\r
951                 return;\r
952         }\r
953         \r
954         /**\r
955          * Actions::parse_getblogsetting()\r
956          * Parse skinvar getblogsetting\r
957          */\r
958         function parse_getblogsetting($which)\r
959         {\r
960                 global $blog;\r
961                 if ( $blog )\r
962                 {\r
963                         $b =& $blog;\r
964                 }\r
965                 elseif ( $bid = intRequestVar('blogid') )\r
966                 {\r
967                         global $manager;\r
968                         $b = $manager->getBlog($bid);\r
969                 }\r
970                 else\r
971                 {\r
972                         return;\r
973                 }\r
974                 \r
975                 switch ( $which )\r
976                 {\r
977                         case 'id':\r
978                                 return Entity::hsc($b->getID());\r
979                                 break;\r
980                         case 'url':\r
981                                 return Entity::hsc($b->getURL());\r
982                                 break;\r
983                         case 'name':\r
984                                 return Entity::hsc($b->getName());\r
985                                 break;\r
986                         case 'desc':\r
987                                 return Entity::hsc($b->getDescription());\r
988                                 break;\r
989                         case 'short':\r
990                                 return Entity::hsc($b->getShortName());\r
991                                 break;\r
992                         case 'notifyaddress':\r
993                                 return Entity::hsc($b->getNotifyAddress());\r
994                                 break;\r
995                         case 'maxcomments':\r
996                                 return Entity::hsc($b->getMaxComments());\r
997                                 break;\r
998                         case 'updatefile':\r
999                                 return Entity::hsc($b->getUpdateFile());\r
1000                                 break;\r
1001                         case 'timeoffset':\r
1002                                 return Entity::hsc($b->getTimeOffset());\r
1003                                 break;\r
1004                 }\r
1005                 return;\r
1006         }\r
1007         \r
1008         /**\r
1009          * Actions::parse_callback()\r
1010          * Parse callback\r
1011          * \r
1012          * @param       string  $eventName      name of event\r
1013          * @param       string  $type   type of skin\r
1014          * @return      void\r
1015          */\r
1016         public function parse_callback($eventName, $type)\r
1017         {\r
1018                 global $manager;\r
1019                 $manager->notify($eventName, array('type' => $type));\r
1020                 return;\r
1021         }\r
1022         \r
1023         /**\r
1024          * Actions::parse_category()\r
1025          * Parse skinvar category\r
1026          * \r
1027          * @param       string  $type   key of category settings\r
1028          * @return      void\r
1029          */\r
1030         public function parse_category($type = 'name')\r
1031         {\r
1032                 global $catid, $blog;\r
1033                 if ( !$blog->isValidCategory($catid) )\r
1034                 {\r
1035                         return;\r
1036                 }\r
1037                 \r
1038                 switch ( $type )\r
1039                 {\r
1040                         case 'name':\r
1041                                 echo $blog->getCategoryName($catid);\r
1042                                 break;\r
1043                         case 'desc':\r
1044                                 echo $blog->getCategoryDesc($catid);\r
1045                                 break;\r
1046                         case 'id':\r
1047                                 echo $catid;\r
1048                                 break;\r
1049                 }\r
1050                 return;\r
1051         }\r
1052         \r
1053         /**\r
1054          * Actions::parse_categorylist()\r
1055          * Parse categorylist\r
1056          * \r
1057          * @param       string  $template       name of template\r
1058          * @param       string  $blogname       name of weblog\r
1059          * @return      void\r
1060          */\r
1061         public function parse_categorylist($template, $blogname = '')\r
1062         {\r
1063                 global $blog, $manager;\r
1064                 \r
1065                 // when no blog found\r
1066                 if ( ($blogname == '') && (!is_object($blog)) )\r
1067                 {\r
1068                         return 0;\r
1069                 }\r
1070                         \r
1071                 if ( $blogname == '' )\r
1072                 {\r
1073                         $this->preBlogContent('categorylist',$blog);\r
1074                         $blog->showCategoryList($template);\r
1075                         $this->postBlogContent('categorylist',$blog);\r
1076                 }\r
1077                 else\r
1078                 {\r
1079                         $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
1080                         $this->preBlogContent('categorylist',$b);\r
1081                         $b->showCategoryList($template);\r
1082                         $this->postBlogContent('categorylist',$b);\r
1083                 }\r
1084                 return;\r
1085         }\r
1086         \r
1087         /**\r
1088          * Actions::parse_charset()\r
1089          * Parse skinvar charset\r
1090          * \r
1091          * @param       void\r
1092          * @return      void\r
1093          */\r
1094         public function parse_charset()\r
1095         {\r
1096                 echo i18n::get_current_charset();\r
1097                 return;\r
1098         }\r
1099         \r
1100         /**\r
1101          * Actions::parse_commentform()\r
1102          * Parse skinvar commentform\r
1103          * \r
1104          * @param       string  $destinationurl URI for redirection\r
1105          * @return      void\r
1106          */\r
1107         public function parse_commentform($destinationurl = '')\r
1108         {\r
1109                 global $blog, $itemid, $member, $CONF, $manager, $DIR_LIBS, $errormessage;\r
1110                 \r
1111                 // warn when trying to provide a actionurl (used to be a parameter in Nucleus <2.0)\r
1112                 if ( stristr($destinationurl, 'action.php') )\r
1113                 {\r
1114                         $args = func_get_args();\r
1115                         $destinationurl = $args[1];\r
1116                         ActionLog::add(WARNING,_ACTIONURL_NOTLONGER_PARAMATER);\r
1117                 }\r
1118                 \r
1119                 $actionurl = $CONF['ActionURL'];\r
1120                 \r
1121                 // if item is closed, show message and do nothing\r
1122                 $item =& $manager->getItem($itemid,0,0);\r
1123                 if ( $item['closed'] || !$blog->commentsEnabled() )\r
1124                 {\r
1125                         $this->doForm('commentform-closed');\r
1126                         return;\r
1127                 }\r
1128                 \r
1129                 if ( !$blog->isPublic() && !$member->isLoggedIn() )\r
1130                 {\r
1131                         $this->doForm('commentform-closedtopublic');\r
1132                         return;\r
1133                 }\r
1134                 \r
1135                 if ( !$destinationurl )\r
1136                 {\r
1137                         // note: createLink returns an HTML encoded URL\r
1138                         $destinationurl = Link::createlink(\r
1139                                 'item',\r
1140                                 array(\r
1141                                         'itemid' => $itemid,\r
1142                                         'title' => $item['title'],\r
1143                                         'timestamp' => $item['timestamp'],\r
1144                                         'extra' => $this->linkparams\r
1145                                 )\r
1146                         );\r
1147                 }\r
1148                 else\r
1149                 {\r
1150                         // HTML encode URL\r
1151                         $destinationurl = Entity::hsc($destinationurl);\r
1152                 }\r
1153                 \r
1154                 // values to prefill\r
1155                 $user = cookieVar($CONF['CookiePrefix'] .'comment_user');\r
1156                 if ( !$user )\r
1157                 {\r
1158                         $user = postVar('user');\r
1159                 }\r
1160                 \r
1161                 $userid = cookieVar($CONF['CookiePrefix'] .'comment_userid');\r
1162                 if ( !$userid )\r
1163                 {\r
1164                         $userid = postVar('userid');\r
1165                 }\r
1166                 \r
1167                 $email = cookieVar($CONF['CookiePrefix'] .'comment_email');\r
1168                 if (!$email)\r
1169                 {\r
1170                         $email = postVar('email');\r
1171                 }\r
1172                 \r
1173                 $body = postVar('body');\r
1174                 \r
1175                 $this->formdata = array(\r
1176                         'destinationurl' => $destinationurl,    // url is already HTML encoded\r
1177                         'actionurl' => Entity::hsc($actionurl),\r
1178                         'itemid' => $itemid,\r
1179                         'user' => Entity::hsc($user),\r
1180                         'userid' => Entity::hsc($userid),\r
1181                         'email' => Entity::hsc($email),\r
1182                         'body' => Entity::hsc($body),\r
1183                         'membername' => $member->getDisplayName(),\r
1184                         'rememberchecked' => cookieVar($CONF['CookiePrefix'] .'comment_user')?'checked="checked"':''\r
1185                 );\r
1186                 \r
1187                 if ( !$member->isLoggedIn() )\r
1188                 {\r
1189                         $this->doForm('commentform-notloggedin');\r
1190                 }\r
1191                 else\r
1192                 {\r
1193                         $this->doForm('commentform-loggedin');\r
1194                 }\r
1195                 return;\r
1196         }\r
1197         \r
1198         /**\r
1199          * Actions::parse_comments()\r
1200          * Parse skinvar comments\r
1201          * include comments for one item\r
1202          * \r
1203          * @param       string  $template       name of template\r
1204          * @return      void\r
1205          */\r
1206         public function parse_comments($template)\r
1207         {\r
1208                 global $itemid, $manager, $blog, $highlight;\r
1209                 $template =& $manager->getTemplate($template);\r
1210                 \r
1211                 // create parser object & action handler\r
1212                 $actions = new ItemActions($blog);\r
1213                 $parser = new Parser($actions->getDefinedActions(),$actions);\r
1214                 $actions->setTemplate($template);\r
1215                 $actions->setParser($parser);\r
1216                 $item = Item::getitem($itemid, 0, 0);\r
1217                 $actions->setCurrentItem($item);\r
1218                 \r
1219                 $comments = new Comments($itemid);\r
1220                 $comments->setItemActions($actions);\r
1221                 // shows ALL comments\r
1222                 $comments->showComments($template, -1, 1, $highlight);\r
1223                 return;\r
1224         }\r
1225         \r
1226         /**\r
1227          * Actions::parse_errordiv()\r
1228          * Parse errordiv\r
1229          * \r
1230          * @param       void\r
1231          * @return      void\r
1232          */\r
1233         public function parse_errordiv()\r
1234         {\r
1235                 global $errormessage;\r
1236                 if ( $errormessage )\r
1237                 {\r
1238                         echo '<div class="error">' . Entity::hsc($errormessage) . "</div>\n";\r
1239                 }\r
1240                 return;\r
1241         }\r
1242         \r
1243         /**\r
1244          * Actions::parse_errormessage()\r
1245          * Parse skinvar errormessage\r
1246          * \r
1247          * @param       void\r
1248          * @return      void\r
1249          */\r
1250         public function parse_errormessage()\r
1251         {\r
1252                 global $errormessage;\r
1253                 echo $errormessage;\r
1254                 return;\r
1255         }\r
1256         \r
1257         /**\r
1258          * Actions::parse_formdata()\r
1259          * Parse formdata\r
1260          * \r
1261          * @param       string  $what   key of format data\r
1262          * @return      void\r
1263          */\r
1264         public function parse_formdata($what)\r
1265         {\r
1266                 echo $this->formdata[$what];\r
1267                 return;\r
1268         }\r
1269         \r
1270         /**\r
1271          * Actions::parse_ifcat()\r
1272          * Parse ifcat\r
1273          * \r
1274          * @param       string  $text\r
1275          * @return      void\r
1276          */\r
1277         public function parse_ifcat($text = '')\r
1278         {\r
1279                 if ( $text == '' )\r
1280                 {\r
1281                         // new behaviour\r
1282                         $this->parse_if('category');\r
1283                 }\r
1284                 else\r
1285                 {\r
1286                         // old behaviour\r
1287                         global $catid, $blog;\r
1288                         if ( $blog->isValidCategory($catid) )\r
1289                         {\r
1290                                 echo $text;\r
1291                         }\r
1292                 }\r
1293                 return;\r
1294         }\r
1295         \r
1296         /**\r
1297          * Actions::parse_image()\r
1298          * Parse skinvar image\r
1299          * \r
1300          * @param       string  $what   name of tag\r
1301          * @return      void\r
1302          */\r
1303         public function parse_image($what = 'imgtag')\r
1304         {\r
1305                 global $CONF;\r
1306                 \r
1307                 $imagetext      = Entity::hsc(requestVar('imagetext'));\r
1308                 $imagepopup = requestVar('imagepopup');\r
1309                 $width          = intRequestVar('width');\r
1310                 $height         = intRequestVar('height');\r
1311                 $fullurl        = Entity::hsc($CONF['MediaURL'] . $imagepopup);\r
1312                 \r
1313                 switch ( $what )\r
1314                 {\r
1315                         case 'url':\r
1316                                 echo $fullurl;\r
1317                                 break;\r
1318                         case 'width':\r
1319                                 echo $width;\r
1320                                 break;\r
1321                         case 'height':\r
1322                                 echo $height;\r
1323                                 break;\r
1324                         case 'caption':\r
1325                         case 'text':\r
1326                                 echo $imagetext;\r
1327                                 break;\r
1328                         case 'imgtag':\r
1329                         default:\r
1330                                 echo "<img src=\"$fullurl\" width=\"$width\" height=\"$height\" alt=\"$imagetext\" title=\"$imagetext\" />";\r
1331                                 break;\r
1332                 }\r
1333                 return;\r
1334         }\r
1335         \r
1336         /**\r
1337          * Actions::parse_imagetext()\r
1338          * Parse skinvar imagetext\r
1339          * \r
1340          * @param       void\r
1341          * @return      void\r
1342          */\r
1343         public function parse_imagetext()\r
1344         {\r
1345                 echo Entity::hsc(requestVar('imagetext'));\r
1346         }\r
1347         \r
1348         /**\r
1349          * Actions::parse_skinfile()\r
1350          * Inserts an url relative to the skindir (useful when doing import/export)\r
1351          * e.g. <skinfile(default/myfile.sth)>\r
1352          * \r
1353          * @param       string  $filename       name of file\r
1354          * @return      void\r
1355          */\r
1356         public function parse_skinfile($filename)\r
1357         {\r
1358                 $base = NP_SkinableAdmin::getAdminSkinURL();\r
1359                 $pref = PARSER::getProperty('IncludePrefix');\r
1360                 echo "{$base}{$pref}{$filename}";\r
1361                 return;\r
1362         }\r
1363         \r
1364         /**\r
1365          * Actions::parse_imagetext()\r
1366          * Parse skinvar imagetext\r
1367          * \r
1368          * @param       void\r
1369          * @return      void\r
1370          */\r
1371         public function parse_imagetext()\r
1372         {\r
1373                 $this->parse_image('imagetext');\r
1374                 return;\r
1375         }\r
1376 \r
1377         /**\r
1378          * Actions::parse_itemlink()\r
1379          * Parse skinvar itemlink\r
1380          * \r
1381          * @param       string  $linktext       text for content of anchor element\r
1382          * @return      void\r
1383          */\r
1384         function parse_itemlink($linktext = '')\r
1385         {\r
1386                 global $itemid;\r
1387                 $this->itemlink($itemid, $linktext);\r
1388                 return;\r
1389         }\r
1390         \r
1391         /**\r
1392          * Actions::parse_item()\r
1393          * Parse skinvar item\r
1394          * include one item (no comments)\r
1395          * \r
1396          * @param       void\r
1397          * @return      void\r
1398          */\r
1399         public function parse_item($template)\r
1400         {\r
1401                 global $blog, $itemid, $highlight;\r
1402                 \r
1403                 // need this to select default category\r
1404                 $this->setBlogCategory($blog, '');\r
1405                 $this->preBlogContent('item',$blog);\r
1406                 $r = $blog->showOneitem($itemid, $template, $highlight);\r
1407                 if ( $r == 0 )\r
1408                 {\r
1409                         echo _ERROR_NOSUCHITEM;\r
1410                 }\r
1411                 $this->postBlogContent('item',$blog);\r
1412                 return;\r
1413         }\r
1414 \r
1415         /**\r
1416          * Actions::parse_itemid()\r
1417          * Parse skinvar itemid\r
1418          * \r
1419          * @param       void\r
1420          * @return      void\r
1421          */\r
1422         public function parse_itemid()\r
1423         {\r
1424                 global $itemid;\r
1425                 echo $itemid;\r
1426                 return;\r
1427         }\r
1428         \r
1429         /**\r
1430          * Actions::parseitemlink()\r
1431          * Parse skinvar itemlink\r
1432          * \r
1433          * @param       void\r
1434          * @return      void\r
1435          */\r
1436         public function parseitemlink($linktext = '')\r
1437         {\r
1438                 global $itemid;\r
1439                 $this->itemlink($itemid, $linktext);\r
1440                 return;\r
1441         }\r
1442         \r
1443         /**\r
1444          * Actions::parse_itemtitle()\r
1445          * Parse itemtitle\r
1446          * \r
1447          * @param       void\r
1448          * @return      void\r
1449          */\r
1450         public function parse_itemtitle($format = '')\r
1451         {\r
1452                 global $manager, $itemid;\r
1453                 $item =& $manager->getItem($itemid,0,0);\r
1454                 \r
1455                 switch ( $format )\r
1456                 {\r
1457                         case 'xml':\r
1458                                 echo Entity::hen($item['title']);\r
1459                                 break;\r
1460                         case 'raw':\r
1461                                 echo $item['title'];\r
1462                                 break;\r
1463                         case 'attribute':\r
1464                         default:\r
1465                                 echo Entity::hsc(strip_tags($item['title']));\r
1466                                 break;\r
1467                 }\r
1468                 return;\r
1469         }\r
1470         \r
1471         /**\r
1472          * Actions::parse_loginform()\r
1473          * Parse skinvar loginform\r
1474          * \r
1475          * @param       void\r
1476          * @return      void\r
1477          */\r
1478         public function parse_loginform()\r
1479         {\r
1480                 global $member, $CONF;\r
1481                 if ( !$member->isLoggedIn() )\r
1482                 {\r
1483                         $filename = 'loginform-notloggedin';\r
1484                         $this->formdata = array();\r
1485                 }\r
1486                 else\r
1487                 {\r
1488                         $filename = 'loginform-loggedin';\r
1489                         $this->formdata = array(\r
1490                                 'membername' => $member->getDisplayName(),\r
1491                         );\r
1492                 }\r
1493                 $this->doForm($filename);\r
1494                 return;\r
1495         }\r
1496         \r
1497         /**\r
1498          * Actions::parse_member()\r
1499          * Parse skinvar member\r
1500          * (includes a member info thingie)\r
1501          * \r
1502          * @param       string  $what   which memberdata is needed\r
1503          * @return      void\r
1504          */\r
1505         public function parse_member($what)\r
1506         {\r
1507                 global $memberinfo, $member, $CONF;\r
1508                 \r
1509                 // 1. only allow the member-details-page specific variables on member pages\r
1510                 if ( $this->skintype == 'member' )\r
1511                 {\r
1512                         switch( $what )\r
1513                         {\r
1514                                 case 'name':\r
1515                                         echo Entity::hsc($memberinfo->getDisplayName());\r
1516                                         break;\r
1517                                 case 'realname':\r
1518                                         echo Entity::hsc($memberinfo->getRealName());\r
1519                                         break;\r
1520                                 case 'notes':\r
1521                                         echo Entity::hsc($memberinfo->getNotes());\r
1522                                         break;\r
1523                                 case 'url':\r
1524                                         echo Entity::hsc($memberinfo->getURL());\r
1525                                         break;\r
1526                                 case 'email':\r
1527                                         echo Entity::hsc($memberinfo->getEmail());\r
1528                                         break;\r
1529                                 case 'id':\r
1530                                         echo Entity::hsc($memberinfo->getID());\r
1531                                         break;\r
1532                         }\r
1533                 }\r
1534                 \r
1535                 // 2. the next bunch of options is available everywhere, as long as the user is logged in\r
1536                 if ( $member->isLoggedIn() )\r
1537                 {\r
1538                         switch( $what )\r
1539                         {\r
1540                                 case 'yourname':\r
1541                                         echo $member->getDisplayName();\r
1542                                         break;\r
1543                                 case 'yourrealname':\r
1544                                         echo $member->getRealName();\r
1545                                         break;\r
1546                                 case 'yournotes':\r
1547                                         echo $member->getNotes();\r
1548                                         break;\r
1549                                 case 'yoururl':\r
1550                                         echo $member->getURL();\r
1551                                         break;\r
1552                                 case 'youremail':\r
1553                                         echo $member->getEmail();\r
1554                                         break;\r
1555                                 case 'yourid':\r
1556                                         echo $member->getID();\r
1557                                         break;\r
1558                                 case 'yourprofileurl':\r
1559                                         if ($CONF['URLMode'] == 'pathinfo')\r
1560                                                 echo Link::create_memberlink($member->getID());\r
1561                                         else\r
1562                                                 echo $CONF['IndexURL'] . Link::create_memberlink($member->getID());\r
1563                                         break;\r
1564                         }\r
1565                 }\r
1566                 return;\r
1567         }\r
1568         \r
1569         /**\r
1570          * Link::parse_membermailform()\r
1571          * Parse skinvar membermailform\r
1572          * \r
1573          * @param       integer $rows   the height for textarea\r
1574          * @param       integer $cols   the width for textarea\r
1575          * @param       string  $desturl        URI to redirect\r
1576          * @return      void\r
1577          */\r
1578         public function parse_membermailform($rows = 10, $cols = 40, $desturl = '')\r
1579         {\r
1580                 global $member, $CONF, $memberid;\r
1581                 \r
1582                 if ( $desturl == '' )\r
1583                 {\r
1584                         if ( $CONF['URLMode'] == 'pathinfo' )\r
1585                         {\r
1586                                 $desturl = Link::create_memberlink($memberid);\r
1587                         }\r
1588                         else\r
1589                         {\r
1590                                 $desturl = $CONF['IndexURL'] . Link::create_memberlink($memberid);\r
1591                         }\r
1592                 }\r
1593                 \r
1594                 $message = postVar('message');\r
1595                 $frommail = postVar('frommail');\r
1596                 \r
1597                 $this->formdata = array(\r
1598                         'url' => Entity::hsc($desturl),\r
1599                         'actionurl' => Entity::hsc($CONF['ActionURL']),\r
1600                         'memberid' => $memberid,\r
1601                         'rows' => $rows,\r
1602                         'cols' => $cols,\r
1603                         'message' => Entity::hsc($message),\r
1604                         'frommail' => Entity::hsc($frommail)\r
1605                 );\r
1606                 \r
1607                 if ( $member->isLoggedIn() )\r
1608                 {\r
1609                         $this->doForm('membermailform-loggedin');\r
1610                 }\r
1611                 else if ( $CONF['NonmemberMail'] )\r
1612                 {\r
1613                         $this->doForm('membermailform-notloggedin');\r
1614                 }\r
1615                 else\r
1616                 {\r
1617                         $this->doForm('membermailform-disallowed');\r
1618                 }\r
1619                 return;\r
1620         }\r
1621         \r
1622         /**\r
1623          * Actions::parse_nextarchive()\r
1624          * Parse skinvar nextarchive\r
1625          * \r
1626          * @param       void\r
1627          * @return      void\r
1628          */\r
1629         public function parse_nextarchive()\r
1630         {\r
1631                 global $archivenext;\r
1632                 echo $archivenext;\r
1633                 return;\r
1634         }\r
1635         \r
1636         /**\r
1637          * Parse skinvar nextitem\r
1638          * (include itemid of next item)\r
1639          * \r
1640          * @param       void\r
1641          * @return      void\r
1642          */\r
1643         public function parse_nextitem()\r
1644         {\r
1645                 global $itemidnext;\r
1646                 if ( isset($itemidnext) )\r
1647                 {\r
1648                         echo (int)$itemidnext;\r
1649                 }\r
1650                 return;\r
1651         }\r
1652         \r
1653         /**\r
1654          * Actions::parse_nextitemtitle()\r
1655          * Parse skinvar nextitemtitle\r
1656          * (include itemtitle of next item)\r
1657          * \r
1658          * @param       string  $format format of text\r
1659          * @return      void\r
1660          */\r
1661         public function parse_nextitemtitle($format = '')\r
1662         {\r
1663                 global $itemtitlenext;\r
1664                 \r
1665                 switch ( $format )\r
1666                 {\r
1667                         case 'xml':\r
1668                                 echo Entity::hen($itemtitlenext);\r
1669                                 break;\r
1670                         case 'raw':\r
1671                                 echo $itemtitlenext;\r
1672                                 break;\r
1673                         case 'attribute':\r
1674                         default:\r
1675                                 echo Entity::hsc($itemtitlenext);\r
1676                                 break;\r
1677                 }\r
1678                 return;\r
1679         }\r
1680         \r
1681         /**\r
1682          * Actions::parse_nextlink()\r
1683          * Parse skinvar nextlink\r
1684          * \r
1685          * @param       string  $linktext       text for content of anchor element\r
1686          * @param       integer $amount         the amount of items in a display\r
1687          * @param       integer $recount        increment from this value\r
1688          * @return      void\r
1689          */\r
1690         public function parse_nextlink($linktext = '', $amount = 10, $recount = '')\r
1691         {\r
1692                 global $itemidnext, $archivenext, $startpos;\r
1693                 if ( $this->skintype == 'item' )\r
1694                 {\r
1695                         $this->itemlink($itemidnext, $linktext);\r
1696                 }\r
1697                 else if ( $this->skintype == 'search' || $this->skintype == 'index' )\r
1698                 {\r
1699                         $this->searchlink($amount, $startpos, 'next', $linktext, $recount);\r
1700                 }\r
1701                 else\r
1702                 {\r
1703                         $this->archivelink($archivenext, $linktext);\r
1704                 }\r
1705                 return;\r
1706         }\r
1707 \r
1708         /**\r
1709          * Actions::parse_nucleusbutton()\r
1710          * Parse skinvar nucleusbutton\r
1711          * \r
1712          * @param       string  $imgurl URL  for image\r
1713          * @param       integer $imgwidth       width of image\r
1714          * @param       integer $imgheidht      height of image\r
1715          */\r
1716         public function parse_nucleusbutton($imgurl = '', $imgwidth = '85', $imgheight = '31')\r
1717         {\r
1718                 global $CONF;\r
1719                 if ( $imgurl == '' )\r
1720                 {\r
1721                         $imgurl = $CONF['AdminURL'] . 'nucleus.gif';\r
1722                 }\r
1723                 else if ( Parser::getProperty('IncludeMode') == 'skindir' )\r
1724                 {\r
1725                         // when skindit IncludeMode is used: start from skindir\r
1726                         $imgurl = $CONF['SkinsURL'] . Parser::getProperty('IncludePrefix') . $imgurl;\r
1727                 }\r
1728                 \r
1729                 $this->formdata = array(\r
1730                         'imgurl' => $imgurl,\r
1731                         'imgwidth' => $imgwidth,\r
1732                         'imgheight' => $imgheight,\r
1733                 );\r
1734                 $this->doForm('nucleusbutton');\r
1735                 return;\r
1736         }\r
1737         \r
1738         /**\r
1739          * Actions::parse_otherarchive()\r
1740          * Parse skinvar otherarchive\r
1741          * \r
1742          * @param       string  $blogname       name of weblog\r
1743          * @param       string  $template       name of template\r
1744          * @param       string  $category       name of category\r
1745          * @return      void\r
1746          */     \r
1747         public function parse_otherarchive($blogname, $template, $category = '')\r
1748         {\r
1749                 global $archive, $manager;\r
1750                 sscanf($archive,'%d-%d-%d',$y,$m,$d);\r
1751                 $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
1752                 $this->setBlogCategory($b, $category);\r
1753                 $this->preBlogContent('otherachive',$b);\r
1754                 $b->showArchive($template, $y, $m, $d);\r
1755                 $this->postBlogContent('otherachive',$b);\r
1756                 return;\r
1757         }\r
1758         \r
1759         /**\r
1760          * Actions::parse_otherarchivedaylist()\r
1761          * Parse skinvar otherarchivedaylist\r
1762          * \r
1763          * @param       string  $blogname       name of weblog\r
1764          * @param       string  $template       name of template\r
1765          * @param       string  $category       name of category\r
1766          * @param       integer $limit          the amount of items in a display\r
1767          * @return      void\r
1768          */\r
1769         public function parse_otherarchivedaylist($blogname, $template, $category = 'all', $limit = 0)\r
1770         {\r
1771                 global $manager;\r
1772                 if ( $category == 'all')\r
1773                 {\r
1774                         $category = '';\r
1775                 }\r
1776                 $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
1777                 $this->setBlogCategory($b, $category);\r
1778                 $this->preBlogContent('otherarchivelist',$b);\r
1779                 $b->showArchiveList($template, 'day', $limit);\r
1780                 $this->postBlogContent('otherarchivelist',$b);\r
1781                 return;\r
1782         }\r
1783         \r
1784         /**\r
1785          * Actions::parse_otherarchivelist()\r
1786          * Parse skinvar otherarchivelist\r
1787          * \r
1788          * @param       string  $blogname       name of weblog\r
1789          * @param       string  $template       name of template\r
1790          * @param       string  $category       name of category\r
1791          * @param       integer $limit          the amount of items in a display\r
1792          * @return      void\r
1793          */\r
1794         public function parse_otherarchivelist($blogname, $template, $category = 'all', $limit = 0)\r
1795         {\r
1796                 global $manager;\r
1797                 if ( $category == 'all' )\r
1798                 {\r
1799                         $category = '';\r
1800                 }\r
1801                 $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
1802                 $this->setBlogCategory($b, $category);\r
1803                 $this->preBlogContent('otherarchivelist',$b);\r
1804                 $b->showArchiveList($template, 'month', $limit);\r
1805                 $this->postBlogContent('otherarchivelist',$b);\r
1806                 return;\r
1807         }\r
1808         \r
1809         /**\r
1810          * Actions::parse_otherarchiveyearlist()\r
1811          * Parse skinvar otherarchiveyearlist\r
1812          * \r
1813          * @param       string  $blogname       name of weblog\r
1814          * @param       string  $template       name of template\r
1815          * @param       string  $category       name of category\r
1816          * @limit       integer $limit          the amount of items in a display\r
1817          */\r
1818         public function parse_otherarchiveyearlist($blogname, $template, $category = 'all', $limit = 0)\r
1819         {\r
1820                 global $manager;\r
1821                 if ( $category == 'all' )\r
1822                 {\r
1823                         $category = '';\r
1824                 }\r
1825                 $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
1826                 $this->setBlogCategory($b, $category);\r
1827                 $this->preBlogContent('otherarchivelist',$b);\r
1828                 $b->showArchiveList($template, 'year', $limit);\r
1829                 $this->postBlogContent('otherarchivelist',$b);\r
1830                 return;\r
1831         }\r
1832         \r
1833         /**\r
1834          * Actions::parse_otherblog()\r
1835          * Parse skinvar otherblog\r
1836          * \r
1837          * @param       string  $blogname       name of weblog\r
1838          * @param       string  $template       name of template\r
1839          * @param       mixed   $amount         the amount of items, in case it includes the beginning\r
1840          * @param       string  $category       name of category\r
1841          * @return      void\r
1842          */\r
1843         public function parse_otherblog($blogname, $template, $amount = 10, $category = '')\r
1844         {\r
1845                 global $manager;\r
1846                 \r
1847                 list($limit, $offset) = sscanf($amount, '%d(%d)');\r
1848                 \r
1849                 $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
1850                 $this->setBlogCategory($b, $category);\r
1851                 $this->preBlogContent('otherblog',$b);\r
1852                 $this->amountfound = $b->readLog($template, $limit, $offset);\r
1853                 $this->postBlogContent('otherblog',$b);\r
1854                 return;\r
1855         }\r
1856         \r
1857         /**\r
1858          * Actions::parse_othersearchresults()\r
1859          * Parse skinvar othersearchresults\r
1860          * \r
1861          * @param       string  $blogname       name of weblog\r
1862          * @param       string  $template       name of template\r
1863          * @param       integer $maxresults     the amount of results\r
1864          * @return      void\r
1865          */\r
1866         public function parse_othersearchresults($blogname, $template, $maxresults = 50)\r
1867         {\r
1868                 global $query, $amount, $manager, $startpos;\r
1869                 $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
1870                 // need this to select default category\r
1871                 $this->setBlogCategory($b, '');\r
1872                 $this->preBlogContent('othersearchresults',$b);\r
1873                 $b->search($query, $template, $amount, $maxresults, $startpos);\r
1874                 $this->postBlogContent('othersearchresults',$b);\r
1875                 return;\r
1876         }\r
1877         \r
1878         /**\r
1879          * Actions::parse_plugin()\r
1880          * Executes a plugin skinvar\r
1881          * extra parameters can be added\r
1882          * \r
1883          * @param       string  $pluginName     name of plugin (without the NP_)\r
1884          * @return      void\r
1885          */\r
1886         public function parse_plugin($pluginName)\r
1887         {\r
1888                 global $manager;\r
1889                 \r
1890                 $plugin =& $manager->getPlugin('NP_' . $pluginName);\r
1891                 if ( !$plugin )\r
1892                 {\r
1893                         return;\r
1894                 }\r
1895                 \r
1896                 // get arguments\r
1897                 $params = func_get_args();\r
1898                 \r
1899                 // remove plugin name\r
1900                 array_shift($params);\r
1901                 \r
1902                 // add skin type on front\r
1903                 array_unshift($params, $this->skintype);\r
1904                 \r
1905                 call_user_func_array(array(&$plugin,'doSkinVar'), $params);\r
1906                 return;\r
1907         }\r
1908         \r
1909         /**\r
1910          * Actions::parse_prevarchive()\r
1911          * Parse skinvar prevarchive\r
1912          * \r
1913          * @param       void\r
1914          * @return      void\r
1915          */\r
1916         public function parse_prevarchive()\r
1917         {\r
1918                 global $archiveprev;\r
1919                 echo $archiveprev;\r
1920         }\r
1921         \r
1922         /**\r
1923          * Actions::parse_preview()\r
1924          * Parse skinvar preview\r
1925          * \r
1926          * @param       string  $template       name of tempalte\r
1927          * @return      void\r
1928          */\r
1929         public function parse_preview($template)\r
1930         {\r
1931                 global $blog, $CONF, $manager;\r
1932                 \r
1933                 $template =& $manager->getTemplate($template);\r
1934                 \r
1935                 $row['body'] = '<span id="prevbody"></span>';\r
1936                 $row['title'] = '<span id="prevtitle"></span>';\r
1937                 $row['more'] = '<span id="prevmore"></span>';\r
1938                 $row['itemlink'] = '';\r
1939                 $row['itemid'] = 0; $row['blogid'] = $blog->getID();\r
1940                 \r
1941                 echo Template::fill($template['ITEM_HEADER'],$row);\r
1942                 echo Template::fill($template['ITEM'],$row);\r
1943                 echo Template::fill($template['ITEM_FOOTER'],$row);\r
1944                 return;\r
1945         }\r
1946         \r
1947         /**\r
1948          * Actions::parse_previtem()\r
1949          * Parse skinvar previtem\r
1950          * (include itemid of prev item)\r
1951          * \r
1952          * @param       void\r
1953          * @return      void\r
1954          */\r
1955         public function parse_previtem()\r
1956         {\r
1957                 global $itemidprev;\r
1958                 if ( isset($itemidprev) )\r
1959                 {\r
1960                         echo (integer) $itemidprev;\r
1961                 }\r
1962                 return;\r
1963         }\r
1964         \r
1965         /**\r
1966          * Actions::parse_previtemtitle()\r
1967          * Parse skinvar previtemtitle\r
1968          * (include itemtitle of prev item)\r
1969          * \r
1970          * @param       String  $format string format\r
1971          * @return      String  formatted string\r
1972          */\r
1973         public function parse_previtemtitle($format = '')\r
1974         {\r
1975                 global $itemtitleprev;\r
1976                 \r
1977                 switch ( $format )\r
1978                 {\r
1979                         case 'xml':\r
1980                                 echo Entity::hen($itemtitleprev);\r
1981                                 break;\r
1982                         case 'raw':\r
1983                                 echo $itemtitleprev;\r
1984                                 break;\r
1985                         case 'attribute':\r
1986                         default:\r
1987                                 echo Entity::hsc($itemtitleprev);\r
1988                                 break;\r
1989                 }\r
1990                 return;\r
1991         }\r
1992         \r
1993         /**\r
1994          * Actions::parse_prevlink()\r
1995          * Parse skinvar prevlink\r
1996          * \r
1997          * @param       string  $linktext       text as a content of anchor element\r
1998          * @param       integer the amount of links\r
1999          * @return      void\r
2000          */\r
2001         public function parse_prevlink($linktext = '', $amount = 10)\r
2002         {\r
2003                 global $itemidprev, $archiveprev, $startpos;\r
2004                 \r
2005                 if ( $this->skintype == 'item' )\r
2006                 {\r
2007                         $this->itemlink($itemidprev, $linktext);\r
2008                 }\r
2009                 else if ( $this->skintype == 'search' || $this->skintype == 'index' )\r
2010                 {\r
2011                         $this->searchlink($amount, $startpos, 'prev', $linktext);\r
2012                 }\r
2013                 else\r
2014                 {\r
2015                         $this->archivelink($archiveprev, $linktext);\r
2016                 }\r
2017                 return;\r
2018         }\r
2019         \r
2020         /**\r
2021          * Actions::parse_query()\r
2022          * Parse skinvar query\r
2023          * (includes the search query)   \r
2024          * \r
2025          * @param       void\r
2026          * @return      void\r
2027          */\r
2028         public function parse_query()\r
2029         {\r
2030                 global $query;\r
2031                 echo Entity::hsc($query);\r
2032                 return;\r
2033         }\r
2034         \r
2035         /**\r
2036          * Actions::parse_referer()\r
2037          * Parse skinvar referer\r
2038          * \r
2039          * @param       void\r
2040          * @return      void\r
2041          */\r
2042         public function parse_referer()\r
2043         {\r
2044                 echo Entity::hsc(serverVar('HTTP_REFERER'));\r
2045                 return;\r
2046         }\r
2047         \r
2048         /**\r
2049          * Actions::parse_searchform()\r
2050          * Parse skinvar searchform\r
2051          * \r
2052          * @param       string  $blogname       name of weblog\r
2053          * @return      void\r
2054          */\r
2055         public function parse_searchform($blogname = '')\r
2056         {\r
2057                 global $CONF, $manager, $maxresults;\r
2058                 if ( $blogname )\r
2059                 {\r
2060                         $blog =& $manager->getBlog(getBlogIDFromName($blogname));\r
2061                 }\r
2062                 else\r
2063                 {\r
2064                         global $blog;\r
2065                 }\r
2066                 // use default blog when no blog is selected\r
2067                 $this->formdata = array(\r
2068                         'id'    => $blog?$blog->getID():$CONF['DefaultBlog'],\r
2069                         'query' => Entity::hsc(getVar('query')),\r
2070                 );\r
2071                 $this->doForm('searchform');\r
2072                 return;\r
2073         }\r
2074         \r
2075         /**\r
2076          * Actions::parse_searchresults()\r
2077          * Parse skinvar searchresults\r
2078          * \r
2079          * @param       string  $template       name of tempalte\r
2080          * @param       integer $maxresults     searched items in a display\r
2081          * @return      void;\r
2082          */\r
2083         public function parse_searchresults($template, $maxresults = 50 )\r
2084         {\r
2085                 global $blog, $query, $amount, $startpos;\r
2086                 \r
2087                 $this->setBlogCategory($blog, '');      // need this to select default category\r
2088                 $this->preBlogContent('searchresults',$blog);\r
2089                 $this->amountfound = $blog->search($query, $template, $amount, $maxresults, $startpos);\r
2090                 $this->postBlogContent('searchresults',$blog);\r
2091                 return;\r
2092         }\r
2093         \r
2094         /**\r
2095          * Actions::parse_self()\r
2096          * Parse skinvar self\r
2097          * \r
2098          * @param       void\r
2099          * @return      void\r
2100          */\r
2101         public function parse_self()\r
2102         {\r
2103                 global $CONF;\r
2104                 echo $CONF['Self'];\r
2105                 return;\r
2106         }\r
2107         \r
2108         /**\r
2109          * Actions::parse_sitevar()\r
2110          * Parse skinvar sitevar\r
2111          * (include a sitevar)\r
2112          * \r
2113          * @param       string  $which\r
2114          * @return      void\r
2115          */\r
2116         public function parse_sitevar($which)\r
2117         {\r
2118                 global $CONF;\r
2119                 switch ( $which )\r
2120                 {\r
2121                         case 'url':\r
2122                                 echo $CONF['IndexURL'];\r
2123                                 break;\r
2124                         case 'name':\r
2125                                 echo $CONF['SiteName'];\r
2126                                 break;\r
2127                         case 'admin':\r
2128                                 echo $CONF['AdminEmail'];\r
2129                                 break;\r
2130                         case 'adminurl':\r
2131                                 echo $CONF['AdminURL'];\r
2132                 }\r
2133                 return;\r
2134         }\r
2135         \r
2136         /**\r
2137          * Actions::parse_skinname()\r
2138          * Parse skinname\r
2139          * \r
2140          * @param       void\r
2141          * @return      void\r
2142          */\r
2143         public function parse_skinname()\r
2144         {\r
2145                 echo $this->skin->getName();\r
2146                 return;\r
2147         }\r
2148         \r
2149         /**\r
2150          * Actions::parse_skintype()\r
2151          * Parse skintype (experimental)\r
2152          * \r
2153          * @param       void\r
2154          * @return      void\r
2155          */\r
2156         public function parse_skintype()\r
2157         {\r
2158                 echo $this->skintype;\r
2159                 return;\r
2160         }\r
2161         \r
2162         /**\r
2163          * Actions::parse_text()\r
2164          * Parse text\r
2165          * \r
2166          * @param       void\r
2167          * @return      void\r
2168          */\r
2169         public function parse_text($which)\r
2170         {\r
2171                 // constant($which) only available from 4.0.4 :(\r
2172                 if ( defined($which) )\r
2173                 {\r
2174                         eval("echo $which;");\r
2175                 }\r
2176                 return;\r
2177         }\r
2178         \r
2179         /**\r
2180          * Actions::parse_ticket()\r
2181          * Parse ticket\r
2182          * \r
2183          * @param       void\r
2184          * @return      void\r
2185          */\r
2186         public function parse_ticket()\r
2187         {\r
2188                 global $manager;\r
2189                 $manager->addTicketHidden();\r
2190                 return;\r
2191         }\r
2192 \r
2193         /**\r
2194          * Actions::parse_todaylink()\r
2195          * Parse skinvar todaylink\r
2196          * A link to the today page (depending on selected blog, etc...)\r
2197          *\r
2198          * @param       string  $linktext       text for link\r
2199          * @return      void\r
2200          */\r
2201         public function parse_todaylink($linktext = '')\r
2202         {\r
2203                 global $blog, $CONF;\r
2204                 if ( $blog )\r
2205                 {\r
2206                         echo $this->link(Link::create_blogidlink($blog->getID(),$this->linkparams), $linktext);\r
2207                 }\r
2208                 else\r
2209                 {\r
2210                         echo $this->link($CONF['SiteUrl'], $linktext);\r
2211                 }\r
2212                 return;\r
2213         }\r
2214         \r
2215         /**\r
2216          * Parse vars\r
2217          * When commentform is not used, to include a hidden field with itemid   \r
2218          * \r
2219          * @param       void\r
2220          * @return      void\r
2221          */\r
2222         public function parse_vars()\r
2223         {\r
2224                 global $itemid;\r
2225                 echo '<input type="hidden" name="itemid" value="'.$itemid.'" />' . "\n";\r
2226                 return;\r
2227         }\r
2228 \r
2229         /**\r
2230          * Actions::parse_version()\r
2231          * Parse skinvar version\r
2232          * (include nucleus versionnumber)       \r
2233          * \r
2234          * @param       void\r
2235          * @return      void\r
2236          */\r
2237         public function parse_version()\r
2238         {\r
2239                 global $nucleus;\r
2240                 echo 'Nucleus CMS ' . $nucleus['version'];\r
2241                 return;\r
2242         }\r
2243         \r
2244         /**\r
2245          * Actions::parse_sticky()\r
2246          * Parse skinvar sticky\r
2247          * \r
2248          * @param       integer $itemnumber     id of item\r
2249          * @param       string  $template       name of template\r
2250          * @return      void\r
2251          */\r
2252         public function parse_sticky($itemnumber = 0, $template = '')\r
2253         {\r
2254                 global $manager;\r
2255                 \r
2256                 $itemnumber = intval($itemnumber);\r
2257                 $itemarray = array($itemnumber);\r
2258                 \r
2259                 $b =& $manager->getBlog(getBlogIDFromItemID($itemnumber));\r
2260                 $this->preBlogContent('sticky',$b);\r
2261                 $this->amountfound = $b->readLogFromList($itemarray, $template);\r
2262                 $this->postBlogContent('sticky',$b);\r
2263                 return;\r
2264         }\r
2265         \r
2266         /* TODO: checking these new added methods */\r
2267         \r
2268         /**\r
2269          * Actions::parse_adminbanlist()\r
2270          * Parse skinvar adminbanlist\r
2271          * \r
2272          * @param       string  $templateName   name of template to use\r
2273          * @return      void\r
2274          */\r
2275         public function parse_adminbanlist($templateName = '')\r
2276         {\r
2277                 $blogid = intRequestVar('blogid');\r
2278                 $query = "SELECT * FROM %s WHERE blogid=%d ORDER BY iprange;";\r
2279                 $query = sprintf($query, sql_table('ban'), (integer) $blogid);\r
2280                 $template['content'] = 'banlist';\r
2281                 $amount = skinableShowlist($query, 'table', $template, $templateName);\r
2282                 if ( $amount == 0 )\r
2283                 {\r
2284                         echo _BAN_NONE;\r
2285                 }\r
2286                 return;\r
2287         }\r
2288         \r
2289         /**\r
2290          * Actions::parse_adminbatchaction()\r
2291          * Parse skinvar adminbatchaction\r
2292          * \r
2293          * @param       void\r
2294          * @return      void\r
2295          */\r
2296         public function parse_adminbatchaction()\r
2297         {\r
2298                 echo Entity::hsc(requestVar('batchaction'));\r
2299                 return;\r
2300         }\r
2301         \r
2302         /**\r
2303          * Actions::parse_adminbatchlist()\r
2304          * Parse skinvar adminbatchlist\r
2305          * \r
2306          * @param       string  $templateName   name of template to use\r
2307          * @return      void\r
2308          */\r
2309         public function parse_adminbatchlist($templateName = '')\r
2310         {\r
2311                 global $manager;\r
2312                 $templates = array();\r
2313                 if ( !empty($templateName) )\r
2314                 {\r
2315                         $templates = skinableTEMPLATE::read($templateName);\r
2316                 }\r
2317                 if ( isset($templates['ADMIN_BATCHLIST']) || !empty($templates['ADMIN_BATCHLIST']) )\r
2318                 {\r
2319                         $template = $templates['ADMIN_BATCHLIST'];\r
2320                 }\r
2321                 else\r
2322                 {\r
2323                         $template = '<li><%text(_BATCH_EXECUTING)%><b><%adminbatchaction%></b>'\r
2324                                           . '<%batchlisttype%> <b><%batchid%></b>...'\r
2325                                           . '<b><%batchlistmsg%></b></li>' . "\n";\r
2326                 }\r
2327                 \r
2328                 $selected = requestIntArray('batch');\r
2329                 $action   = requestVar('batchaction');\r
2330                 \r
2331                 switch ( $this->skintype )\r
2332                 {\r
2333                         case 'batchitem':\r
2334                                 $batchlisttype = _BATCH_ONITEM;\r
2335                                 $deleteaction  = 'deleteOneItem';\r
2336                                 $moveaction     = 'moveOneItem';\r
2337                                 $destid         = intRequestVar('destcatid');\r
2338                                 break;\r
2339                         case 'batchcomment':\r
2340                                 $batchlisttype = _BATCH_ONCOMMENT;\r
2341                                 $deleteaction  = 'deleteOneComment';\r
2342                                 break;\r
2343                         case 'batchmember':\r
2344                                 $batchlisttype = _BATCH_ONMEMBER;\r
2345                                 $deleteaction  = 'deleteOneMember';\r
2346                                 $setadminsql   = sql_table('member') . ' SET madmin = 1 WHERE mnumber = ';\r
2347                                 $unsetchksql   = 'SELECT * FROM ' . sql_table('member') . ' WHERE madmin = 1 AND mcanlogin = 1';\r
2348                                 $unsetupsql     = sql_table('member') . ' SET madmin = 0 WHERE mnumber = ';\r
2349                                 $unseterrmsg   = _ERROR_ATLEASTONEADMIN;\r
2350                                 break;\r
2351                         case 'batchteam':\r
2352                                 $blogid         = intRequestVar('blogid');\r
2353                                 $batchlisttype = _BATCH_ONTEAM;\r
2354                                 $deleteaction  = 'deleteOneTeamMember';\r
2355                                 $setadminsql   = sql_table('team') . ' SET tadmin = 1 WHERE tblog = ' . $blogid . ' AND tmember = ';\r
2356                                 $unsetchksql   = 'SELECT * FROM ' . sql_table('team') . ' WHERE tadmin = 1 AND tblog = ' . $blogid;\r
2357                                 $unseterrmsg   = _ERROR_ATLEASTONEBLOGADMIN;\r
2358                                 $unsetupsql     = sql_table('team') . ' SET tadmin = 0 WHERE tblog = ' . $blogid . ' AND tmember = ';\r
2359                                 break;\r
2360                         case 'batchcategory':\r
2361                                 $batchlisttype = _BATCH_ONCATEGORY;\r
2362                                 $deleteaction  = 'deleteOneCategory';\r
2363                                 $moveaction     = 'moveOneCategory';\r
2364                                 $destid         = intRequestVar('destblogid');\r
2365                                 break;\r
2366                 }\r
2367                 \r
2368                 // walk over all selectedids and perform action\r
2369                 foreach ( $selected as $selectedid )\r
2370                 {\r
2371                         $error    = '';\r
2372                         $selectedid = intval($selectedid);\r
2373                         switch ( $action )\r
2374                         {\r
2375                                 case 'delete':\r
2376                                         if ( $this->skintype != 'batchteam' )\r
2377                                         {\r
2378                                                 $error = $this->objAdmin->$deleteaction($selectedid);\r
2379                                         }\r
2380                                         else\r
2381                                         {\r
2382                                                 $error  = $this->objAdmin->deleteOneTeamMember($blogid, $selectedid);\r
2383                                         }\r
2384                                         break;\r
2385                                 case 'move':\r
2386                                         $error = $this->objAdmin->$moveaction($selectedid, $destid);\r
2387                                         break;\r
2388                                 case 'setadmin':\r
2389                                         // always succeeds\r
2390                                         sql_query('UPDATE ' . $setadminsql . $selectedid);\r
2391                                         $error = '';\r
2392                                         break;\r
2393                                 case 'unsetadmin':\r
2394                                         // there should always remain at least one super-admin\r
2395                                         $r = sql_query($unsetchksql);\r
2396                                         if ( sql_num_rows($r) < 2 )\r
2397                                         {\r
2398                                                 $error = $unseterrmsg;\r
2399                                         }\r
2400                                         else\r
2401                                         {\r
2402                                                 sql_query('UPDATE ' . $unsetupsql . $selectedid);\r
2403                                         }\r
2404                                         break;\r
2405                                 default:\r
2406                                         $error = _BATCH_UNKNOWN . Entity::hsc($action);\r
2407                         }\r
2408                         $data = array(\r
2409                                 'batchid'                       => $selectedid,\r
2410                                 'batchlisttype'         => Entity::hsc($batchlisttype),\r
2411                                 'adminbatchaction'      => Entity::hsc($action),\r
2412                                 'batchlistmsg'          => $error ? $error : _BATCH_SUCCESS,\r
2413                         );\r
2414                         $handler = new skinableACTIONS('template', $template, new ADMIN);\r
2415                         $parser  = new skinablePARSER($handler);\r
2416                         \r
2417                         ob_start();\r
2418                         $parser->parse($template);\r
2419                         $template = ob_get_contents();\r
2420                         ob_end_clean();\r
2421                         \r
2422                         echo TEMPLATE::fill($template, $data);\r
2423                         return;\r
2424                 }\r
2425         }\r
2426         \r
2427         /**\r
2428          * Actions::parse_adminbloglink()\r
2429          * Parse skinvar adminbloglink\r
2430          * \r
2431          * @param       string  $templateName   name of template to use\r
2432          * @return      void\r
2433          */\r
2434         public function parse_adminbloglink($templateName = '')\r
2435         {\r
2436                 global $manager;\r
2437                 $blogid =  intRequestVar('blogid');\r
2438                 $blog   =& $manager->getBlog($blogid);\r
2439                 $templates = array();\r
2440                 \r
2441                 if ( !empty($templateName) )\r
2442                 {\r
2443                         $templates = skinableTEMPLATE::read($templateName);\r
2444                 }\r
2445                 \r
2446                 if ( isset($templates['ADMIN_BLOGLINK']) || !empty($templates['ADMIN_BLOGLINK']) )\r
2447                 {\r
2448                         $template = $templates['ADMIN_BLOGLINK'];\r
2449                 }\r
2450                 else\r
2451                 {\r
2452                         $template = '<a href="<%url%>" title="<%adminbloglinktitle%>"><%blogname%></a>';\r
2453                 }\r
2454                 \r
2455                 $data = array(\r
2456                         'url'                                   => Entity::hsc($blog->getURL()),\r
2457                         'adminbloglinktitle'    => _BLOGLIST_TT_VISIT,\r
2458                         'blogname'                              => Entity::hsc($blog->getName())\r
2459                 );\r
2460                 \r
2461                 echo TEMPLATE::fill($template, $data);\r
2462                 return;\r
2463         }\r
2464         \r
2465         /**\r
2466          * Actions::parse_adminerrormesg()\r
2467          * Parse skinvar adminerrormesg\r
2468          * \r
2469          * @param       void\r
2470          * @return      void\r
2471          */\r
2472         public function parse_adminerrormesg()\r
2473         {\r
2474                 global $CONF;\r
2475                 $message = '';\r
2476                 \r
2477                 if ( requestVar('errormessage') )\r
2478                 {\r
2479                         $message = requestVar('errormessage');\r
2480                 }\r
2481                 elseif ( cookieVar($CONF['CookiePrefix'] . 'errormessage') )\r
2482                 {\r
2483                         $message = cookieVar($CONF['CookiePrefix'] . 'errormessage');\r
2484                 }\r
2485                 elseif ( $this->objAdmin->sessionVar($CONF['CookiePrefix'] . 'errormessage') )\r
2486                 {\r
2487                         $message = $this->objAdmin->sessionVar($CONF['CookiePrefix'] . 'errormessage');\r
2488                 }\r
2489                 echo Entity::hsc($message);\r
2490                 return;\r
2491         }\r
2492         \r
2493         /**\r
2494          * Actions::parse_adminparsedinclude()\r
2495          * Parse skinvar adminparsedinclude\r
2496          * \r
2497          * @param       string  $filename       name of file\r
2498          * @return      void\r
2499          */\r
2500         public function parse_adminparsedinclude($filename)\r
2501         {\r
2502                 // check current level\r
2503                 if ( $this->level > 3)\r
2504                 {\r
2505                         // max. depth reached (avoid endless loop)\r
2506                         return;\r
2507                 }\r
2508                 \r
2509                 $skin = new skinableSKIN($this->skin->id);\r
2510                 $file = $this->getIncludeFileName($filename);\r
2511                 if ( !$skin->isValid && !file_exists($file) )\r
2512                 {\r
2513                         return;\r
2514                 }\r
2515                 $contents = $skin->getContent($filename);\r
2516                 if ( !$contents )\r
2517                 {\r
2518                         if ( !file_exists($file) )\r
2519                         {\r
2520                                 return;\r
2521                         }\r
2522                         $contents = file_get_contents($file);\r
2523                         if ( empty($contents) )\r
2524                         {\r
2525                                 return;\r
2526                         }\r
2527                 }\r
2528                 $this->level = $this->level + 1;\r
2529                 // parse file contents\r
2530                 $this->parser->parse($contents);\r
2531                 \r
2532                 $this->level = $this->level - 1;\r
2533                 return;\r
2534         }\r
2535         \r
2536         /**\r
2537          * Actions::parse_adminskineditallowedlist()\r
2538          * Parse skinvar adminskineditallowedlist\r
2539          * \r
2540          * @param       string  $type                   template/blog\r
2541          * @param       string  $templateName   name of template to use\r
2542          * @return      void\r
2543          */\r
2544         public function parse_adminskineditallowedlist($type = 'template', $templateName = '')\r
2545         {\r
2546                 switch ( $type )\r
2547                 {\r
2548                         /* TODO: blog seems not to be used */\r
2549                         case 'blog':\r
2550                                 $query = "SELECT bshortname, bname FROM %s";\r
2551                                 $query = sprintf($query, sql_table('blog'));\r
2552                                 $show  = array(\r
2553                                         'content' => 'shortblognames'\r
2554                                 );\r
2555                                 break;\r
2556                         case 'template':\r
2557                                 $query = "SELECT tdname as name, tddesc as description FROM %s;";\r
2558                                 $query = sprintf($query, sql_table('admintemplate_desc'));\r
2559                                 $show  = array(\r
2560                                         'content' => 'shortnames'\r
2561                                 );\r
2562                                 break;\r
2563                 }\r
2564                 skinableShowlist($query, 'table', $show, $templateName);\r
2565                 return;\r
2566         }\r
2567         \r
2568         /**\r
2569          * Actions::parse_adminskinielist()\r
2570          * Parse skinvar adminskinielist\r
2571          * \r
2572          * @param       string  $type                   skin/template\r
2573          * @param       string  $templateName   name of template to use\r
2574          * @return      void\r
2575          */\r
2576         public function parse_adminskinielist($type, $templateName = '')\r
2577         {\r
2578                 $templates = array();\r
2579                 if ( $templateName )\r
2580                 {\r
2581                         $templates = skinableTEMPLATE::read($templateName);\r
2582                 }\r
2583                 if ( isset($templates['SKINIE_EXPORT_LIST']) && !empty($templates['SKINIE_EXPORT_LIST']) )\r
2584                 {\r
2585                         $template = $templates['SKINIE_EXPORT_LIST'];\r
2586                 }\r
2587                 else\r
2588                 {\r
2589                         $template = '<td><input type="checkbox" name="<%typeid%>"  id="<%expid%>" /><label for="<%expid%>"><%expname%></label></td>' . "\n"\r
2590                                           . "<td><%expdesc%></td>\n"\r
2591                                           . "</tr><tr>\n";\r
2592                 }\r
2593                 switch ( $type )\r
2594                 {\r
2595                         case 'skin':\r
2596                                 $query = "SELECT * FROM %s;";\r
2597                                 $query = sprintf($query, sql_table('adminskin_desc'));\r
2598                                 $res = sql_query($query);\r
2599                                 \r
2600                                 while ( $skinObj = sql_fetch_object($res) )\r
2601                                 {\r
2602                                         $data = array(\r
2603                                                 'typeid'        => 'skin[' . $skinObj->sdnumber . ']',\r
2604                                                 'expid'         => 'skinexp' . $skinObj->sdnumber,\r
2605                                                 'expname'       => Entity::hsc($skinObj->sdname),\r
2606                                                 'expdesc'       => Entity::hsc($skinObj->sddesc),\r
2607                                         );\r
2608                                         echo TEMPLATE::fill($template, $data);\r
2609                                 }\r
2610                                 break;\r
2611                         case 'template':\r
2612                                 $query = "SELECT * FROM %s;";\r
2613                                 $query = sprintf($query, sql_table('admintemplate_desc'));\r
2614                                 $res = sql_query($query);\r
2615                                 while ( $templateObj = sql_fetch_object($res) )\r
2616                                 {\r
2617                                         $data = array(\r
2618                                                 'typeid'        => 'template[' . $templateObj->tdnumber . ']',\r
2619                                                 'expid'         => 'templateexp' . $templateObj->tdnumber,\r
2620                                                 'expname'       => Entity::hsc($templateObj->tdname),\r
2621                                                 'expdesc'       => Entity::hsc($templateObj->tddesc),\r
2622                                         );\r
2623                                         echo TEMPLATE::fill($template, $data);\r
2624                                 }\r
2625                                 break;\r
2626                 }\r
2627                 return;\r
2628         }\r
2629         \r
2630         /**\r
2631          * Actions::parse_adminskinoverview()\r
2632          * Parse skinvar adminskinoverview\r
2633          * \r
2634          * @param       string  $templateName   name of template to use\r
2635          * @return      void\r
2636          */\r
2637         public function parse_adminskinoverview($templateName = '')\r
2638         {\r
2639                 $query = "SELECT * FROM %s ORDER BY sdname;";\r
2640                 $query = sprintf($query, sql_table('adminskin_desc'));\r
2641                 \r
2642                 $template['content']    = 'adminskinlist';\r
2643                 $template['tabindex']   = 10;\r
2644                 skinableShowlist($query, 'table', $template, $templateName);\r
2645                 return;\r
2646         }\r
2647         \r
2648         /**\r
2649          * Actions::parse_adminskinselectoptions()\r
2650          * Parse skinvar adminskinselectoptions\r
2651          * \r
2652          * @param       void\r
2653          * @return      void\r
2654          */\r
2655         public function parse_adminskinselectoptions()\r
2656         {\r
2657                 global $CONF;\r
2658                 $query = "SELECT sdname as text, sdnumber as value FROM %s;";\r
2659                 $query = sprintf($query, sql_table('adminskin_desc'));\r
2660                 \r
2661                 $template['name']        = 'adminskin';\r
2662                 $template['selected'] = $CONF['DefaultAdminSkin'];\r
2663                 $template['tabindex'] = 110;\r
2664                 skinableShowlist($query, 'select', $template, '');\r
2665                 return;\r
2666         }\r
2667         \r
2668         /**\r
2669          * Actions::parse_adminspecialskinlist()\r
2670          * Parse skinvar adminspecialskinlist\r
2671          * \r
2672          * @param       string  $templateName   name of template to use\r
2673          */\r
2674         public function parse_adminspecialskinlist($templateName = '')\r
2675         {\r
2676                 $templates = array();\r
2677                 if ( $templateName )\r
2678                 {\r
2679                         $templates = skinableTEMPLATE::read($templateName);\r
2680                 }\r
2681                 \r
2682                 $nType  = skinableSKIN::getAdminskinDefaultTypes();\r
2683                 $skinid = intRequestVar('skinid');\r
2684                 \r
2685                 $query = "SELECT stype FROM  %s WHERE stype NOT IN (%s) AND sdesc=%d;";\r
2686                 $query = sprintf($query, sql_table('adminskin'), "'" . implode("', '", $nType) . "'", (integer) $skinid);\r
2687                 \r
2688                 $res    = sql_query($query);\r
2689                 if ( $res && sql_num_rows($res) > 0 )\r
2690                 {\r
2691                         $data = array();\r
2692                         if ( isset($templates['ADMIN_SPECIALSKINLIST_HEAD']) && !empty($templates['ADMIN_SPECIALSKINLIST_HEAD']) )\r
2693                         {\r
2694                                 $template['head'] = $templates['ADMIN_SPECIALSKINLIST_HEAD'];\r
2695                         }\r
2696                         else\r
2697                         {\r
2698                                 $template['head'] = "<ul>\n";\r
2699                         }\r
2700                         echo TEMPLATE::fill($template['head'], $data);\r
2701                         if ( isset($templates['ADMIN_SPECIALSKINLIST_BODY']) && !empty($templates['ADMIN_SPECIALSKINLIST_BODY']) )\r
2702                         {\r
2703                                 $template['body'] = $templates['ADMIN_SPECIALSKINLIST_BODY'];\r
2704                         }\r
2705                         else\r
2706                         {\r
2707                                 $template['body'] = '<li><a tabindex="<%tabindex%>" href="index.php?action=adminskinedittype&amp;skinid=<%skinid%>'\r
2708                                                                   . '&amp;type=<%skintype%>"><%skintype%></a> (<a tabindex="<%tabindex%>" href="index.php?'\r
2709                                                                   . 'action=adminskinremovetype&amp;skinid=<%skinid%>&amp;type=<%skintype%>">remove</a>)</li>';\r
2710                         }\r
2711                         $tabstart = 120;\r
2712                         while ( $row = sql_fetch_assoc($res) )\r
2713                         {\r
2714                                 $data = array(\r
2715                                         'tabindex'      => $tabstart++,\r
2716                                         'skinid'        => $skinid,\r
2717                                         'skintype'      => Entity::hsc(strtolower($row['stype']))\r
2718                                 );\r
2719                                 echo TEMPLATE::fill($template['body'], $data);\r
2720                         }\r
2721                         \r
2722                         $data = array();\r
2723                         if ( isset($templates['ADMIN_SPECIALSKINLIST_FOOT']) && !empty($templates['ADMIN_SPECIALSKINLIST_FOOT']) )\r
2724                         {\r
2725                                 $template['foot'] = $templates['ADMIN_SPECIALSKINLIST_FOOT'];\r
2726                         }\r
2727                         else\r
2728                         {\r
2729                                 $template['foot'] = "<ul>\n";\r
2730                         }\r
2731                         echo TEMPLATE::fill($template['foot'], $data);\r
2732                         return;\r
2733                 }\r
2734         }\r
2735         \r
2736         /**\r
2737          * Actions::parse_adminstyleseets()\r
2738          * Parse skinvar adminstyleseets\r
2739          * \r
2740          * @param       void\r
2741          * @return      void\r
2742          */\r
2743         public function parse_adminstyleseets()\r
2744         {\r
2745                 global $CONF;\r
2746                 $includePrefix = $this->skin->includePrefix;\r
2747                 \r
2748                 if ( strlen($includePrefix) > 0 )\r
2749                 {\r
2750                         $styleURL = Entity::hsc($CONF['AdminURL']) . 'adminskins/' . $includePrefix . 'admin_' . $CONF['AdminCSS'] . '.css';\r
2751                 }\r
2752                 else\r
2753                 {\r
2754                         $styleURL = Entity::hsc($CONF['AdminURL']) . 'styles/admin_' . $CONF['AdminCSS'] . '.css';\r
2755                 }\r
2756                 echo $styleURL;\r
2757                 return;\r
2758         }\r
2759         \r
2760         /**\r
2761          * Actions::parse_adminstyleselectoptions()\r
2762          * Parse skinvar adminstyleselectoptions\r
2763          * \r
2764          * @param       void\r
2765          * @return      void\r
2766          */\r
2767         public function parse_adminstyleselectoptions()\r
2768         {\r
2769                 global $CONF, $manager, $DIR_NUCLEUS;\r
2770                 if ( strlen($this->skin->includePrefix) > 0 )\r
2771                 {\r
2772                         $scndir = $DIR_NUCLEUS . 'adminskins/' . $this->skin->includePrefix;\r
2773                 }\r
2774                 else\r
2775                 {\r
2776                         $scndir = $DIR_NUCLEUS . 'styles/';\r
2777                 }\r
2778                 $files = scandir($scndir);\r
2779                 \r
2780                 foreach ( $files as $file )\r
2781                 {\r
2782                         if ( !preg_match("#^admin_(.*)\.css$#", $file, $matches) )\r
2783                         {\r
2784                                 continue;\r
2785                         }\r
2786                         \r
2787                         $name = $matches[1];\r
2788                         $opts = '<option value="' . $name . '"';\r
2789                         if ( $name != $CONF['AdminCSS'] )\r
2790                         {\r
2791                                 $opts .= "<option value=\"{$name}\">{$name}</option>\n";\r
2792                         }\r
2793                         else\r
2794                         {\r
2795                                 $opts .= "<option value=\"{$name}\" selected=\"selected\">{$name}</option>\n";\r
2796                         }\r
2797                         echo $opts;\r
2798                 }\r
2799                 return;\r
2800         }\r
2801         \r
2802         /**\r
2803          * Actions::parse_admintemplateoverview()\r
2804          * Parse skinvar admintemplateoverview\r
2805          * \r
2806          * @param       string  $templateName   name of template to use\r
2807          * @return      void\r
2808          */\r
2809         public function parse_admintemplateoverview($templateName = '')\r
2810         {\r
2811                 $query  = "SELECT * FROM %s ORDER BY tdname;";\r
2812                 $query = sprintf($query, sql_table('admintemplate_desc'));\r
2813                 \r
2814                 $template['content']  = 'admintemplatelist';\r
2815                 $template['tabindex'] = 10;\r
2816                 \r
2817                 skinableShowlist($query, 'table', $template, $templateName);\r
2818                 return;\r
2819         }\r
2820         \r
2821         /**\r
2822          * Actions::parse_allowedadminskinactions()\r
2823          * Parse skinvar allowedadminskinactions\r
2824          * \r
2825          * @param       void\r
2826          * @return      void\r
2827          */\r
2828         public function parse_allowedadminskinactions()\r
2829         {\r
2830                 global $DIR_ADMINSKINS;\r
2831                 $skinType = strtolower(trim(requestVar('type')));\r
2832                 $actions  = skinableSKIN::getAllowedActionsForType($skinType);\r
2833                 sort($actions);\r
2834                 \r
2835                 while ( $current = array_shift($actions) )\r
2836                 {\r
2837                         // skip deprecated vars\r
2838                         if ($current == 'ifcat' || $current == 'imagetext' || $current == 'vars')\r
2839                         {\r
2840                                 continue;\r
2841                         }\r
2842                         \r
2843                         echo "<a href=\"{$DIR_ADMINSKINS}documentation/help.html#{$current}\" onclick=\"if (event &amp;&amp; event.preventDefault) event.preventDefault(); return help(this.href);\">{$current}</a>\n";\r
2844                         \r
2845                         if ( count($actions) != 0 )\r
2846                         {\r
2847                                 echo ", ";\r
2848                         }\r
2849                 }\r
2850                 return;\r
2851         }\r
2852         \r
2853         /**\r
2854          * Actions::parse_allowedskinactions()\r
2855          * Parse skinvar allowedskinactions\r
2856          * \r
2857          * @param       void\r
2858          * @return      void\r
2859          */\r
2860         public function parse_allowedskinactions()\r
2861         {\r
2862                 $skinType = strtolower(trim(requestVar('type')));\r
2863                 $actions  = SKIN::getAllowedActionsForType($skinType);\r
2864                 sort($actions);\r
2865                 \r
2866                 while ( $current = array_shift($actions) )\r
2867                 {\r
2868                         // skip deprecated vars\r
2869                         if ( $current == 'ifcat' || $current == 'imagetext' || $current == 'vars' )\r
2870                         {\r
2871                                 continue;\r
2872                         }\r
2873                         \r
2874                         /* TODO: alternative function should be used or not?  */\r
2875                         echo helplink("skinvar-{$current}") . "$current</a>\n";\r
2876                         \r
2877                         if ( count($actions) != 0 )\r
2878                         {\r
2879                                 echo ", ";\r
2880                         }\r
2881                 }\r
2882                 return;\r
2883         }\r
2884         \r
2885         /**\r
2886          * Action::parse_banlistdeletedlist()\r
2887          * Parse skinvar banlistdeletedlist\r
2888          * \r
2889          * @param       string  $templateName   name of template to use\r
2890          * @return      void\r
2891          */\r
2892         public function parse_banlistdeletedlist($templateName = '')\r
2893         {\r
2894                 global $manager;\r
2895                 $templates = array();\r
2896                 \r
2897                 if ( $templateName )\r
2898                 {\r
2899                         $templates = skinableTEMPLATE::read($templateName);\r
2900                 }\r
2901                 if ( isset($templates['BANLIST_DELETED_LIST']) && !empty($templates['BANLIST_DELETED_LIST']) )\r
2902                 {\r
2903                         $template = $templates['BANLIST_DELETED_LIST'];\r
2904                 }\r
2905                 else\r
2906                 {\r
2907                         $template = "<li><%blogname%></li>\n";\r
2908                 }\r
2909                 $deleted = requestArray('delblogs');\r
2910                 foreach ( $deleted as $delblog )\r
2911                 {\r
2912                         $blog =& $manager->getBlog($delblog);\r
2913                         $data =  array(\r
2914                                 Entity::hsc($blog->getName())\r
2915                         );\r
2916                         TEMPLATE::fill($template, $data);\r
2917                 }\r
2918                 return;\r
2919         }\r
2920         \r
2921         /**\r
2922          * Actions::parse_batchdeletelist()\r
2923          * Parse skinvar batchdeletelist\r
2924          * \r
2925          * @param       void\r
2926          * @return      void\r
2927          */\r
2928         public function parse_batchdeletelist()\r
2929         {\r
2930                 $selected = requestIntArray('batch');\r
2931                 $index  = 0;\r
2932                 \r
2933                 foreach ( $selected as $select )\r
2934                 {\r
2935                         echo '<input type="hidden" name="batch[' . ($index++) . ']" value="' . intval($select) . "\" />\n";\r
2936                 }\r
2937                 // add hidden vars for team & comment\r
2938                 if ( requestVar('action') == 'batchteam' )\r
2939                 {\r
2940                         echo '<input type="hidden" name="blogid" value="' . intRequestVar('blogid') . "\" />\n";\r
2941                 }\r
2942                 if ( requestVar('action') == 'batchcomment' )\r
2943                 {\r
2944                         echo '<input type="hidden" name="itemid" value="' . intRequestVar('itemid') . "\" />\n";\r
2945                 }\r
2946                 return;\r
2947         }\r
2948         \r
2949         /**\r
2950          * Actions::parse_batchdeletetype()\r
2951          * Parse skinvar batchdeletetype\r
2952          * \r
2953          * @param       void\r
2954          * @return      void\r
2955          */\r
2956         function parse_batchdeletetype()\r
2957         {\r
2958                 echo Entity::hsc(requestVar('action'));\r
2959                 return;\r
2960         }\r
2961 \r
2962         /**\r
2963          * Actions::parse_batchmovebtn()\r
2964          * Parse skinvar batchmovebtn\r
2965          * \r
2966          * @param       void\r
2967          * @return      void\r
2968          */\r
2969         public function parse_batchmovebtn()\r
2970         {\r
2971                 $actionType = requestVar('action');\r
2972                 switch ( $actionType )\r
2973                 {\r
2974                         case 'batchitem':\r
2975                                 echo _MOVE_BTN;\r
2976                                 break;\r
2977                         case 'batchcategory':\r
2978                                 echo _MOVECAT_BTN;\r
2979                                 break;\r
2980                 }\r
2981                 return;\r
2982         }\r
2983         \r
2984         /**\r
2985          * Actions::parse_batchmovelist()\r
2986          * Parse skinvar batchmovelist\r
2987          * \r
2988          * @param       void\r
2989          * @param       void\r
2990          */\r
2991         public function parse_batchmovelist()\r
2992         {\r
2993                 $selected = requestIntArray('batch');\r
2994                 foreach ( $selected as $select )\r
2995                 {\r
2996                         echo '<input type="hidden" name="batch[' . ($select++) . ']" value="' . intval($select) . "\" />\n";\r
2997                 }\r
2998                 return;\r
2999         }\r
3000         \r
3001         /**\r
3002          * Actions::parse_batchmovetitle()\r
3003          * Parse skinvar batchmovetitle\r
3004          * \r
3005          * @param       void\r
3006          * @return      void\r
3007          */\r
3008         public function parse_batchmovetitle()\r
3009         {\r
3010                 $actionType = requestVar('action');\r
3011                 switch ( $actionType )\r
3012                 {\r
3013                         case 'batchitem':\r
3014                                 echo _MOVE_TITLE;\r
3015                                 break;\r
3016                         case 'batchcategory':\r
3017                                 echo _MOVECAT_TITLE;\r
3018                                 break;\r
3019                 }\r
3020                 return;\r
3021         }\r
3022         \r
3023         /**\r
3024          * Actions::parse_batchmovetype()\r
3025          * Parse skinvar batchmovetype\r
3026          * \r
3027          * @param       void\r
3028          * @return      void\r
3029          */\r
3030         public function parse_batchmovetype()\r
3031         {\r
3032                 echo Entity::hsc(requestVar('action'));\r
3033                 return;\r
3034         }\r
3035         \r
3036         /**\r
3037          * Actions::parse_blogcatlist()\r
3038          * Parse skinvar blogcatlist\r
3039          * \r
3040          * @param       void\r
3041          * @return      void\r
3042          */\r
3043         public function parse_blogcatlist()\r
3044         {\r
3045                 global $manager;\r
3046                 $blogid = intRequestVar('blogid');\r
3047                 $query  = "SELECT * FROM %s WHERE cblog = %d ORDER BY cname;";\r
3048                 $query = sprintf($query, sql_table('category'), (integer) $blogid);\r
3049                 \r
3050                 $template['content']  = 'categorylist';\r
3051                 $template['tabindex'] = 200;\r
3052                 \r
3053                 $batch = new skinableBATCH('member');\r
3054                 $batch->showlist($query, 'table', $template);\r
3055                 return;\r
3056         }\r
3057         \r
3058         /**\r
3059          * Actions::parse_blognotifysetting()\r
3060          * Parse skinvar blognotifysetting\r
3061          * \r
3062          * @param       void\r
3063          * @return      void\r
3064          */\r
3065         public function parse_blognotifysetting($type)\r
3066         {\r
3067                 global $manager;\r
3068                 $blogid = intRequestVar('blogid');\r
3069                 $blog   = $manager->getBlog($blogid);\r
3070                 \r
3071                 switch ( $type )\r
3072                 {\r
3073                         case 'comment':\r
3074                                 if ( !$blog->notifyOnComment() )\r
3075                                 {\r
3076                                         return;\r
3077                                 }\r
3078                                 break;\r
3079                         case 'vote':\r
3080                                 if ( !$blog->notifyOnVote() )\r
3081                                 {\r
3082                                         return;\r
3083                                 }\r
3084                                 break;\r
3085                         case 'newitem':\r
3086                                 if ( !$blog->notifyOnNewItem() )\r
3087                                 {\r
3088                                         return;\r
3089                                 }\r
3090                                 break;\r
3091                 }\r
3092                 echo ' checked="checked"';\r
3093                 return;\r
3094         }\r
3095         \r
3096         /**\r
3097          * Actions::parse_blogsetting()\r
3098          * Parse skinvar blogsetting\r
3099          * \r
3100          * @param       string  $which  name of weblog setting\r
3101          * @return      void\r
3102          */\r
3103         public function parse_blogsetting($which)\r
3104         {\r
3105                 echo $this->parse_getblogsetting($which);\r
3106                 return;\r
3107         }\r
3108         \r
3109         /**\r
3110          * Actions::parse_blogsettingyesno()\r
3111          * Parse skinvar blogsettingyesno\r
3112          * \r
3113          * @param       string  $type                   type of weblog setting\r
3114          * @param       string  $templateName   name of template to use\r
3115          * @return      void\r
3116          */\r
3117         public function parse_blogsettingyesno($type, $templateName = '')\r
3118         {\r
3119                 global $manager;\r
3120                 \r
3121                 $blogid = intRequestVar('blogid');\r
3122                 $blog   = $manager->getBlog($blogid);\r
3123                 \r
3124                 switch ( $type )\r
3125                 {\r
3126                         case 'convertbreaks':\r
3127                                 $checkedval = $blog->convertBreaks();\r
3128                                 $tabindex   = 55;\r
3129                                 break;\r
3130                         case 'allowpastposting':\r
3131                                 $checkedval = $blog->allowPastPosting();\r
3132                                 $tabindex   = 57;\r
3133                                 break;\r
3134                         case 'comments':\r
3135                                 $checkedval = $blog->commentsEnabled();\r
3136                                 $tabindex   = 60;\r
3137                                 break;\r
3138                         case 'public':\r
3139                                 $checkedval = $blog->isPublic();\r
3140                                 $tabindex   = 70;\r
3141                                 break;\r
3142                         case 'reqemail':\r
3143                                 $checkedval = $blog->emailRequired();\r
3144                                 $tabindex   = 72;\r
3145                                 break;\r
3146                         case 'searchable':\r
3147                                 $checkedval = $blog->getSearchable();\r
3148                                 $tabindex   = 122;\r
3149                                 break;\r
3150                 }\r
3151                 $this->parse_inputyesno($type, $checkedval, $tabindex, 1, 0, _YES, _NO, 0, $templateName);\r
3152                 return;\r
3153         }\r
3154         \r
3155         /**\r
3156          * Actions::parse_blogteamlist()\r
3157          * Parse skinvar blogteamlist\r
3158          * \r
3159          * @param       string  $templateName   name of template to use\r
3160          * @return      void\r
3161          */\r
3162         public function parse_blogteamlist($templateName = '')\r
3163         {\r
3164                 global $manager;\r
3165                 $blogid = intRequestVar('blogid');\r
3166                 $query  = "SELECT tblog, tmember, mname, mrealname, memail, tadmin "\r
3167                         . "FROM %s, %s "\r
3168                         . "WHERE tmember=mnumber AND tblog= %d";\r
3169                 $query = sprintf($query, sql_table('member'), sql_table('team'), (integer) $blogid);\r
3170                 \r
3171                 $template['content']  = 'teamlist';\r
3172                 $template['tabindex'] = 10;\r
3173 \r
3174                 $batch = new skinableBATCH('team');\r
3175                 $batch->showlist($query, 'table', $template, _LISTS_NOMORE, $templateName);\r
3176                 return;\r
3177         }\r
3178         \r
3179         /**\r
3180          * Actions::parse_blogteammembers()\r
3181          * Parse skinvar blogteammembers\r
3182          * \r
3183          * @param       void\r
3184          * @return      void\r
3185          */\r
3186         public function parse_blogteammembers()\r
3187         {\r
3188                 $blogid = intRequestVar('blogid');\r
3189                 $query  = "SELECT mname, mrealname "\r
3190                                 . "FROM %s, %s "\r
3191                                 . "WHERE mnumber=tmember AND tblog=%d;";\r
3192                 $query = sprintf($query, sql_table('member'), sql_table('team'), (integer) $blogid);\r
3193                 $res    = sql_query($query);\r
3194                 $memberNames = array();\r
3195                 while ($o = sql_fetch_object($res)) {\r
3196                         $memberNames[] = Entity::hsc($o->mname) . ' (' . Entity::hsc($o->mrealname). ')';\r
3197                 }\r
3198                 echo implode(',', $memberNames);\r
3199         }\r
3200         \r
3201         /**\r
3202          * Actions::parse_blogtime()\r
3203          * Parse skinvar blogtime\r
3204          * \r
3205          * @param       string  $type   type of time\r
3206          * @param       string  $format format for time expression\r
3207          * @param       integer $offset offset of time\r
3208          * @return      void\r
3209          */\r
3210         public function parse_blogtime($type, $format = '%H:%M', $offset = 0)\r
3211         {\r
3212                 global $manager;\r
3213                 \r
3214                 if ( $type != 'blogtime' )\r
3215                 {\r
3216                         /* return server time */\r
3217                         $timestamp = time() + $offset;\r
3218                 }\r
3219                 else\r
3220                 {\r
3221                         $bid            = intRequestVar('blogid');\r
3222                         $b                      = $manager->getBlog($bid);\r
3223                         $timestamp      = $b->getCorrectTime() + $offset;\r
3224                 }\r
3225                 \r
3226                 echo i18n::formatted_datetime($format, $timestamp);\r
3227                 return;\r
3228         }\r
3229         \r
3230         /**\r
3231          * Actions::parse_bookmarkletadmin()\r
3232          * Parse skinvar bookmarkletadmin\r
3233          * \r
3234          * @param       string  $type   type of anchor element for bookmarklet\r
3235          * @return      void\r
3236          */\r
3237         public function parse_bookmarkletadmin($type)\r
3238         {\r
3239                 global $manager;\r
3240                 \r
3241                 $blogid = intRequestVar('blogid');\r
3242                 \r
3243                 if ( $type != 'regfile' )\r
3244                 {\r
3245                         echo Entity::hsc(getBookmarklet($blogid));\r
3246                 }\r
3247                 else\r
3248                 {\r
3249                         $url = 'index.php?action=regfile&blogid=' . intval($blogid);\r
3250                         $url = $manager->addTicketToUrl($url);\r
3251                         /* TODO: Shift-JIS is not always correct, I think... */\r
3252                         echo Entity::hsc($url, 'SJIS');\r
3253                 }\r
3254                 return;\r
3255         }\r
3256         \r
3257         /**\r
3258          * Actions::parse_categorysetting()\r
3259          * Parse skinvar categorysetting\r
3260          * \r
3261          * @param       string  $type   type in category setting\r
3262          * @return      void\r
3263          */\r
3264         public function parse_categorysetting($type)\r
3265         {\r
3266                 $catid  = intRequestVar('catid');\r
3267                 if ( $type == 'id' )\r
3268                 {\r
3269                         echo $catid;\r
3270                         return;\r
3271                 }\r
3272                 $blogid = intRequestVar('blogid');\r
3273                 $query  = "SELECT * FROM %s WHERE cblog = %d AND catid = %d;";\r
3274                 $query  = sprintf($query, sql_table('category'), (integer) $blogid, (integer) $catid);\r
3275                 $res    = sql_query($query);\r
3276                 $obj    = sql_fetch_object($res);\r
3277                 \r
3278                 if ( $type != desc )\r
3279                 {\r
3280                         echo Entity::hsc($obj->cdesc);\r
3281                 }\r
3282                 else\r
3283                 {\r
3284                         echo Entity::hsc($obj->cname);\r
3285                 }\r
3286                 \r
3287                 return;\r
3288         }\r
3289         \r
3290         /**\r
3291          * Actions::parse_codename()\r
3292          * Parse templatevar codename\r
3293          * \r
3294          * @param       void\r
3295          * @return      void\r
3296          * \r
3297          * TODO: is this need???\r
3298          */\r
3299         public function parse_codename()\r
3300         {\r
3301                 global $nucleus;\r
3302                 echo $nucleus['codename'];\r
3303                 return;\r
3304         }\r
3305         \r
3306         /**\r
3307          * Actions::parse_commentnavlist()\r
3308          * Parse skinvar commentnavlist\r
3309          * \r
3310          * @param       void\r
3311          * @return      void\r
3312          */\r
3313         public function parse_commentnavlist()\r
3314         {\r
3315                 global $CONF, $manager, $member;\r
3316                 \r
3317                 // start index\r
3318                 if ( postVar('start') )\r
3319                 {\r
3320                         $start = intPostVar('start');\r
3321                 }\r
3322                 else\r
3323                 {\r
3324                         $start = 0;\r
3325                 }\r
3326                 \r
3327                 // amount of items to show\r
3328                 if ( postVar('amount') )\r
3329                 {\r
3330                         $amount = intPostVar('amount');\r
3331                 }\r
3332                 else\r
3333                 {\r
3334                         $amount = (integer) $CONF['DefaultListSize'];\r
3335                         if ( $amount < 1 )\r
3336                         {\r
3337                                 $amount = 10;\r
3338                         }\r
3339                 }\r
3340                 $query = 'SELECT cbody, cuser, cmail, cemail, mname, ctime, chost, cnumber, cip, citem '\r
3341                        . 'FROM %s '\r
3342                        . 'LEFT OUTER JOIN %s ON  mnumber=cmember '\r
3343                        . 'WHERE ';\r
3344                 $query = sprintf($query, sql_table('comment'), sql_table('member'));\r
3345                 \r
3346                 if ( $this->skintype == 'itemcommentlist' )\r
3347                 {\r
3348                         $itemid                                 = intRequestVar('itemid');\r
3349                         $query                                  .= " citem={$itemid}";\r
3350                         $template['canAddBan']  = $member->blogAdminRights(intRequestVar('blogid'));\r
3351                         $bid                                    = 0;\r
3352                         $nonComments                    = _NOCOMMENTS;\r
3353                 }\r
3354                 elseif ( $this->skintype == 'browseowncomments' )\r
3355                 {\r
3356                         $itemid                                 = 0;\r
3357                         $query                                  .= ' cmember=' . $member->getID();\r
3358                         $template['canAddBan']  = 0;\r
3359                         $bid                                    = 0;\r
3360                         $nonComments                    = _NOCOMMENTS_YOUR;\r
3361                 }\r
3362                 elseif ( $this->skintype == 'blogcommentlist' )\r
3363                 {\r
3364                         $itemid                                 = 0;\r
3365                         $query                                  .= ' cblog=' . intRequestVar('blogid');\r
3366                         $template['canAddBan']  = $member->blogAdminRights(intRequestVar('blogid'));\r
3367                         $bid                                    = intRequestVar('blogid');\r
3368                         $nonComments                    = _NOCOMMENTS_BLOG;\r
3369                 }\r
3370                 \r
3371                 $search = postVar('search');\r
3372                 if ( !empty($search) )\r
3373                 {\r
3374                         $query .= ' and cbody LIKE "%' . sql_real_escape_string($search) . '%"';\r
3375                 }\r
3376                 \r
3377                 $query .= " ORDER BY ctime ASC LIMIT {$start},{$amount}";\r
3378                 \r
3379                 $template['content'] = 'commentlist';\r
3380                 \r
3381                 $navList = new skinableNAVLIST($this->skintype, $start, $amount, 0, 1000, $bid, $search, $itemid);\r
3382                 $navList->showBatchList('comment', $query, 'table', $template, $nonComments);\r
3383                 return;\r
3384         }\r
3385         \r
3386         /**\r
3387          * Actions::parse_configsettingsedit()\r
3388          * Parse skinvar configsettingsedit\r
3389          * \r
3390          * @param       string  $type   type of global configuration\r
3391          * @return      void\r
3392          */\r
3393         public function parse_configsettingsedit($type)\r
3394         {\r
3395                 global $CONF;\r
3396                 switch ( $type )\r
3397                 {\r
3398                         case 'DefaultListSize':\r
3399                                 if ( !array_key_exists('DefaultListSize', $CONF) )\r
3400                                 {\r
3401                                         $query = "INSERT INTO %s VALUES (DefaultListSize, 10);";\r
3402                                         $query = sprintf($query, sql_table('config'));\r
3403                                         sql_query($query);\r
3404                                         $CONF['DefaultListSize'] = 10;\r
3405                                 }\r
3406                                 elseif ( intval($CONF['DefaultListSize']) < 1 )\r
3407                                 {\r
3408                                         $CONF['DefaultListSize'] = 10;\r
3409                                 }\r
3410                                 echo intval($CONF['DefaultListSize']);\r
3411                                 break;\r
3412                         case 'SessionCookie':\r
3413                                 $value = $CONF['SessionCookie'];\r
3414                                 $txt1  = _SETTINGS_COOKIESESSION;\r
3415                                 $txt2  = _SETTINGS_COOKIEMONTH;\r
3416                                 $this->parse_inputyesno('SessionCookie', $value, 10190, 1, 0, $txt1, $txt2);\r
3417                                 break;\r
3418                         case 'URLMode':\r
3419                                 $value = $CONF['URLMode'];\r
3420                                 $txt1  = _SETTINGS_URLMODE_NORMAL;\r
3421                                 $txt2  = _SETTINGS_URLMODE_PATHINFO;\r
3422                                 $this->parse_inputyesno('URLMode', $value, 10077, 'normal', 'pathinfo', $txt1, $txt2);\r
3423                                 break;\r
3424                         default:\r
3425                                 if ( array_key_exists($type, $CONF) && is_string($CONF[$type]) )\r
3426                                 {\r
3427                                         echo  Entity::hsc($CONF[$type]);\r
3428                                 }\r
3429                                 break;\r
3430                 }\r
3431                 return;\r
3432         }\r
3433         \r
3434         /**\r
3435          * Actions::parse_configsettingsyesno()\r
3436          * Parse skinvar configsettingsyesno\r
3437          * \r
3438          * @param       string  $type           type of global setting\r
3439          * @param       integer $tabindex       tabindex attribute of input element\r
3440          * @return      void\r
3441          */\r
3442         function parse_configsettingsyesno($type, $tabindex)\r
3443         {\r
3444                 global $CONF;\r
3445                 if ( array_key_exists($type, $CONF) )\r
3446                 {\r
3447                         $this->parse_inputyesno($type, $CONF[$type], $tabindex);\r
3448                 }\r
3449                 return;\r
3450         }\r
3451         \r
3452         /**\r
3453          * Actions::parse_customhelplink()\r
3454          * Parse skinvar customhelplink\r
3455          * \r
3456          * @param       string  $topic          name of topic\r
3457          * @param       string  $tplName        name of template\r
3458          * @param       string  $url            string as URI\r
3459          * @param       string  $iconURL        string as URI for icon\r
3460          * @param       string  $alt            alternative text for image element\r
3461          * @param       string  $title          title for anchor element\r
3462          * @return      void\r
3463          */\r
3464         public function parse_customhelplink($topic, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')\r
3465         {\r
3466                 $this->customHelp($topic, $url, $iconURL);\r
3467                 return;\r
3468         }\r
3469         \r
3470         /**\r
3471          * Actions::parse_date()\r
3472          * Parse skinvar date\r
3473          */\r
3474         public function parse_date($format = 'c')\r
3475         {\r
3476                 global $CONF, $manager;\r
3477                 echo i18n::formatted_datetime($format, time(), 'iso8601', $manager->getBlog((integer) $CONF['DefaultBlog']));\r
3478                 return;\r
3479         }\r
3480         \r
3481         /**\r
3482          * Actions::parse_defaultadminskintypes()\r
3483          * Parse skinvar defaultadminskintypes\r
3484          * \r
3485          * @param       string  $tabindex               index number for tabindex attribute of input element\r
3486          * @param       string  $templateName   name of template\r
3487          * @return      void\r
3488          */\r
3489         public function parse_defaultadminskintypes($tabindex, $templateName = '')\r
3490         {\r
3491                 $templates = array();\r
3492                 if ( $templateName )\r
3493                 {\r
3494                         $templates = skinableTEMPLATE::read($templateName);\r
3495                 }\r
3496                 \r
3497                 $types   = skinableSKIN::getAdminskinDefaultTypeFriendlyNames();\r
3498                 ksort($types);\r
3499                 \r
3500                 if ( array_key_exists('ADMINSKINTYPELIST_HEAD', $templates) && !empty($templates['ADMINSKINTYPELIST_HEAD']) )\r
3501                 {\r
3502                         $template['head'] = $templates['ADMINSKINTYPELIST_HEAD'];\r
3503                 }\r
3504                 else\r
3505                 {\r
3506                         $template['head'] = "<ul>\n";\r
3507                 }\r
3508                 \r
3509                 echo $template['head'];\r
3510                 \r
3511                 if ( array_key_exists('ADMINSKINTYPELIST_BODY', $templates) && !empty($templates['ADMINSKINTYPELIST_BODY']) )\r
3512                 {\r
3513                         $template['body'] = $templates['ADMINSKINTYPELIST_BODY'];\r
3514                 }\r
3515                 else\r
3516                 {\r
3517                         $template['body'] = '<li><a tabindex="<%tabindex%>" href="index.php?action=adminskinedittype&amp;skinid=<%skinid%>&amp;type=<%skintype%>">'\r
3518                                           . "<%name%></a> <%help%></li>\n";\r
3519                 }\r
3520                 $handler = new skinableACTIONS('template', $template, new ADMIN);\r
3521                 $parser  = new PARSER(skinableACTIONS::getDefinedActions(), $handler);\r
3522                 \r
3523                 foreach ( $types as $type => $fName )\r
3524                 {\r
3525                         $helplink = $this->customHelpHtml('skinpart' . $type, $templateName);\r
3526                         $data = array(\r
3527                                 'tabindex'      => $tabindex,\r
3528                                 'skintype'      => $type,\r
3529                                 'name'          => $fName,\r
3530                                 'help'          => $helplink,\r
3531                                 'skinid'        => intrequestVar('skinid'),\r
3532                         );\r
3533                         $templateBody = skinableTEMPLATE::fill($template['body'], $data);\r
3534                         $parser->parse($templateBody);\r
3535                         $tabindex++;\r
3536                 }\r
3537                 if ( array_key_exists('ADMINSKINTYPELIST_FOOT', $templates) && !empty($templates['ADMINSKINTYPELIST_FOOT']) )\r
3538                 {\r
3539                         $template['foot'] = $templates['ADMINSKINTYPELIST_FOOT'];\r
3540                 }\r
3541                 else\r
3542                 {\r
3543                         $template['foot'] = "           </ul>\n";\r
3544                 }\r
3545                 echo $template['foot'];\r
3546                 return;\r
3547         }\r
3548         \r
3549         /**\r
3550          * Actions::parse_defblogselect()\r
3551          * Parse skinvar defblogselect\r
3552          * \r
3553          * @param       string  $templateName   name of template\r
3554          * @return      void\r
3555          */\r
3556         public function parse_defblogselect($templateName = '')\r
3557         {\r
3558                 global $CONF;\r
3559                 $query  = "SELECT bname as text, bnumber as value FROM %s;";\r
3560                 $query = sprintf($query, sql_table('blog'));\r
3561                 $template['name']        = 'DefaultBlog';\r
3562                 $template['selected'] = $CONF['DefaultBlog'];\r
3563                 $template['tabindex'] = 10;\r
3564                 skinableShowlist($query, 'select', $template, $templateName);\r
3565                 return;\r
3566         }\r
3567         \r
3568         /**\r
3569          * Actions::parse_defcatselect()\r
3570          * Parse skinvar defcatselect\r
3571          * \r
3572          * @param       string  $templateName   name of template\r
3573          * @return      void\r
3574          */\r
3575         public function parse_defcatselect($templateName = '')\r
3576         {\r
3577                 global $manager;\r
3578                 $blogid = intRequestVar('blogid');\r
3579                 $blog   = $manager->getBlog($blogid);\r
3580                 $query  = "SELECT cname as text, catid as value FROM %s WHERE cblog=%d;";\r
3581                 $query = sprintf($query, sql_table('category'), (integer) $blog->getID());\r
3582                 $template['name']        = 'defcat';\r
3583                 $template['selected'] = $blog->getDefaultCategory();\r
3584                 $template['tabindex'] = 110;\r
3585                 skinableShowlist($query, 'select', $template, $templateName);\r
3586                 return;\r
3587         }\r
3588         \r
3589         /**\r
3590          * Actions::parse_defskinselect()\r
3591          * Parse skinvar defskinselect\r
3592          * \r
3593          * @param       string  $type                   type of skin\r
3594          * @param       string  $templateName   name of template\r
3595          * @return      void\r
3596          */\r
3597         public function parse_defskinselect($type = 'blog', $templateName = '')\r
3598         {\r
3599                 global $manager;\r
3600                 $query  = "SELECT sdname as text, sdnumber as value FROM %s;";\r
3601                 $query = sprintf($query, sql_table('skin_desc'));\r
3602                 \r
3603                 $blogid = intRequestVar('blogid');\r
3604                 \r
3605                 if ( !$blogid )\r
3606                 {\r
3607                         global $CONF;\r
3608                         $template['selected'] = $CONF['BaseSkin'];\r
3609                 }\r
3610                 else\r
3611                 {\r
3612                         $blog                            = $manager->getBlog($blogid);\r
3613                         $template['selected'] = $blog->getDefaultSkin();\r
3614                 }\r
3615                 \r
3616                 if ( $type != 'blog' )\r
3617                 {\r
3618                         $nname = 'BaseSkin';\r
3619                 }\r
3620                 else\r
3621                 {\r
3622                         $nname = 'defskin';\r
3623                 }\r
3624                 \r
3625                 $template['name']        = $nname;\r
3626                 $template['tabindex'] = 50;\r
3627                 skinableShowlist($query, 'select', $template, $templateName);\r
3628                 return;\r
3629         }\r
3630         \r
3631         /**\r
3632          * Actions::parse_deleteitembody()\r
3633          * Parse skinvar deleteitembody\r
3634          * \r
3635          * @param       void\r
3636          * @return      void\r
3637          */\r
3638         public function parse_deleteitembody()\r
3639         {\r
3640                 global $manager;\r
3641                 $itemid =  intRequestVar('itemid');\r
3642                 $item   =& $manager->getItem($itemid, 1, 1);\r
3643                 $body   =  strip_tags($item['body']);\r
3644                 echo Entity::hsc(shorten($body, 300, '...'));\r
3645                 return;\r
3646         }\r
3647         \r
3648         /**\r
3649          * Actions::parse_deleteitemid()\r
3650          * Parse skinvar deleteitemid\r
3651          * \r
3652          * @param       void\r
3653          * @return      void\r
3654          */\r
3655         public function parse_deleteitemid()\r
3656         {\r
3657                 echo (integer) intRequestVar('itemid');\r
3658                 return;\r
3659         }\r
3660         \r
3661         /**\r
3662          * Actions::parse_deleteitemtitle()\r
3663          * Parse skinvar deleteitemtitle\r
3664          * \r
3665          * @param       void\r
3666          * @return      void\r
3667          */\r
3668         public function parse_deleteitemtitle()\r
3669         {\r
3670                 global $manager;\r
3671                 $itemid = intRequestVar('itemid');\r
3672                 $item  =& $manager->getItem($itemid, 1, 1);\r
3673                 echo Entity::hsc(strip_tags($item['title']));\r
3674                 return;\r
3675         }\r
3676         \r
3677         /**\r
3678          * Actions::parse_editadminskin()\r
3679          * Parse skinvar editadminskin\r
3680          * \r
3681          * @param       string  $type   type of skin setting\r
3682          * @return      void\r
3683          */\r
3684         public function parse_editadminskin($type = 'id')\r
3685         {\r
3686                 $skinid = intRequestVar('skinid');\r
3687                 $skin   = new skinableSKIN($skinid);\r
3688                 switch ( $type )\r
3689                 {\r
3690                         case 'id':\r
3691                                 echo intRequestVar('skinid');\r
3692                                 break;\r
3693                         case 'name':\r
3694                                 echo Entity::hsc($skin->getName());\r
3695                                 break;\r
3696                         case 'desc':\r
3697                                 echo Entity::hsc($skin->getDescription());\r
3698                                 break;\r
3699                         case 'type':\r
3700                                 echo Entity::hsc($skin->getContentType());\r
3701                                 break;\r
3702                         case 'prefix':\r
3703                                 echo Entity::hsc($skin->getIncludePrefix());\r
3704                                 break;\r
3705                         case 'mode':\r
3706                                 $this->parse_inputyesno('inc_mode', $skin->getIncludeMode(), 120, 'skindir', 'normal', _PARSER_INCMODE_SKINDIR, _PARSER_INCMODE_NORMAL);\r
3707                         default:\r
3708                                 break;\r
3709                 }\r
3710                 return;\r
3711         }\r
3712         \r
3713         /**\r
3714          * Actions::parse_editadminskintype()\r
3715          * Parse skinvar editadminskintype\r
3716          * \r
3717          * @param       string  $type   name of skin type\r
3718          * @return      void\r
3719          */\r
3720         public function parse_editadminskintype($type = 'id')\r
3721         {\r
3722                 global $CONF, $manager, $member;\r
3723                 $skinid = intRequestVar('skinid');\r
3724                 $skin   = new skinableSKIN($skinid);\r
3725                 $fNames = skinableSKIN::getFriendlyNames();\r
3726                 $sType  = strtolower(trim(requestVar('type')));\r
3727                 \r
3728                 switch ( $type )\r
3729                 {\r
3730                         case 'id':\r
3731                                 echo intRequestVar('skinid');\r
3732                                 break;\r
3733                         case 'name':\r
3734                                 echo Entity::hsc($skin->getName());\r
3735                                 break;\r
3736                         case 'desc':\r
3737                                 echo Entity::hsc($skin->getDescription());\r
3738                                 break;\r
3739                         case 'type':\r
3740                                 echo Entity::hsc($skin->getContentType());\r
3741                                 break;\r
3742                         case 'content':\r
3743                                 echo Entity::hsc($skin->getContent($sType));\r
3744                                 break;\r
3745                         case 'skintype':\r
3746                                 $skinType = isset($fNames[$sType]) ? $fNames[$sType] : ucfirst($sType);\r
3747                                 echo Entity::hsc($skinType);\r
3748                                 break;\r
3749                         case 'skintyperaw':\r
3750                                 echo Entity::hsc($sType);\r
3751                                 break;\r
3752                         case 'prefix':\r
3753                                 echo Entity::hsc($skin->getIncludePrefix());\r
3754                                 break;\r
3755                         case 'mode':\r
3756                                 $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;\r
3757                                 echo Entity::hsc($incMode);\r
3758                                 break;\r
3759                         default:\r
3760                                 break;\r
3761                 }\r
3762                 return;\r
3763         }\r
3764         \r
3765         /**\r
3766          * Actions::parse_editadmintemplateinfo()\r
3767          * Parse skinvar editadmintemplateinfo\r
3768          * \r
3769          * @param       string  $type                   type of skin template\r
3770          * @param       string  $description    description of template\r
3771          * @param       string  $name                   name of stemplate\r
3772          * @param       string  $tabindex               index number for tabindex attribute of input element\r
3773          * @param       string  $big                    \r
3774          * @param       string  $tplt                   \r
3775          */\r
3776         function parse_editadmintemplateinfo($type, $description = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')\r
3777         {\r
3778                 global $manager;\r
3779                 $templateid                             =  intRequestVar('templateid');\r
3780                 $templatename                   =  skinableTEMPLATE::getNameFromId($templateid);\r
3781                 $templatedescription    =  skinableTEMPLATE::getDesc($templateid);\r
3782                 $template                               =& skinableTEMPLATE::read($templatename);\r
3783                 switch ( $type )\r
3784                 {\r
3785                         case 'id':\r
3786                                 echo intval($templateid);\r
3787                                 break;\r
3788                         case 'name':\r
3789                                 echo Entity::hsc($templatename);\r
3790                                 break;\r
3791                         case 'desc':\r
3792                                 echo Entity::hsc($templatedescription);\r
3793                                 break;\r
3794                         case 'extratemplate':\r
3795                                 $tabidx    = 600;\r
3796                                 $pluginfields = array();\r
3797                                 $manager->notify(\r
3798                                         'AdminTemplateExtraFields',\r
3799                                         array(\r
3800                                                 'fields' => &$pluginfields\r
3801                                         )\r
3802                                 );\r
3803                                 $tmplt = array();\r
3804                                 if ( $description )\r
3805                                 {\r
3806                                         $tmplt = skinableTEMPLATE::read($description);\r
3807                                 }\r
3808                                 if ( array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) && !empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )\r
3809                                 {\r
3810                                         $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];\r
3811                                 }\r
3812                                 else\r
3813                                 {\r
3814                                         $base = "</tr>\n"\r
3815                                               . "<tr>\n"\r
3816                                               . "\t" . '<th colspan="2"><%explugtplname%>' . "</th>\n";\r
3817                                 }\r
3818                                 foreach ( $pluginfields as $pfkey => $pfvalue )\r
3819                                 {\r
3820                                         $data = array(\r
3821                                                 'explugtplname' => Entity::hsc($pfkey)\r
3822                                         );\r
3823                                         echo TEMPLATE::fill($base, $data);\r
3824                                         foreach ( $pfvalue as $pffield => $pfdesc )\r
3825                                         {\r
3826                                                 $this->_templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);\r
3827                                         }\r
3828                                 }\r
3829                                 break;\r
3830                         default:\r
3831                                 $desc = defined($description) ? constant($description) : $description;\r
3832                                 $name = defined($name) ? constant($name) : $name;\r
3833                                 $this->_templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);\r
3834                                 break;\r
3835                 }\r
3836                 return;\r
3837         }\r
3838         \r
3839         /**\r
3840          * Actions::parse_editcomment()\r
3841          * Parse skinvar editcomment\r
3842          * \r
3843          * @param       string  $type   type of comment setting\r
3844          * @return      void\r
3845          */\r
3846         public function parse_editcomment($type = 'id')\r
3847         {\r
3848                 global $manager;\r
3849                 $commentid      = intRequestVar('commentid');\r
3850                 $comment        = COMMENT::getComment($commentid);\r
3851                 \r
3852                 $manager->notify('PrepareCommentForEdit', array('comment' => &$comment));\r
3853                 \r
3854                 switch ( $type )\r
3855                 {\r
3856                         case 'id':\r
3857                                 echo intRequestVar('commentid');\r
3858                                 break;\r
3859                         case 'user':\r
3860                                 if (array_key_exists('member', $comment) && !empty($comment['member']) )\r
3861                                 {\r
3862                                         echo $comment['member'] . " (" . _EDITC_MEMBER . ")";\r
3863                                 }\r
3864                                 else\r
3865                                 {\r
3866                                         echo $comment['user'] . " (" . _EDITC_NONMEMBER . ")";\r
3867                                 }\r
3868                                 break;\r
3869                         case 'date':\r
3870                                 echo date("Y-m-d @ H:i", $comment['timestamp']);\r
3871                                 break;\r
3872                         case 'body':\r
3873                                 $comment['body'] = str_replace('<br />', '', $comment['body']);\r
3874                                 $comment['body'] = preg_replace("#<a href=['\"]([^'\"]+)['\"]( rel=\"nofollow\")?>[^<]*</a>#", "\\1", $comment['body']);\r
3875                                 echo $comment['body'];\r
3876                         default:\r
3877                                 echo $comment[$type];\r
3878                                 break;\r
3879                 }\r
3880                 return;\r
3881         }\r
3882         \r
3883         /**\r
3884          * Actions::parse_editdesturl()\r
3885          * Parse skinvar editdesturl\r
3886          */\r
3887         public function parse_editdesturl()\r
3888         {\r
3889                 if ( requestVar('desturl') )\r
3890                 {\r
3891                         echo Entity::hsc(requestVar('desturl'));\r
3892                 }\r
3893                 return;\r
3894         }\r
3895         \r
3896         /**\r
3897          * Actions::parse_editmemberlist()\r
3898          * Parse skinvar editmemberlist\r
3899          * \r
3900          * @param       string  $templateName   name of template\r
3901          * @return      void\r
3902          */\r
3903         public function parse_editmemberlist($templateName = '')\r
3904         {\r
3905                 global $manager;\r
3906                 // show list of members with actions\r
3907                 $query =  'SELECT * FROM '.sql_table('member');\r
3908                 $template['content']  = 'memberlist';\r
3909                 $template['tabindex'] = 10;\r
3910                 \r
3911                 $batch = new skinableBATCH('member');\r
3912                 $batch->showlist($query, 'table', $template, _LISTS_NOMORE, $templateName);\r
3913                 return;\r
3914         }\r
3915         \r
3916         /**\r
3917          * Actions::parse_editmemberlist()\r
3918          * Parse skinvar editmemberlist\r
3919          * \r
3920          * @param       string  $templateName   name of template\r
3921          * @return      void\r
3922          */\r
3923         public function parse_editmemberlist($templateName = '')\r
3924         {\r
3925                 global $manager;\r
3926                 // show list of members with actions\r
3927                 $query =  'SELECT * FROM '. sql_table('member');\r
3928                 $template['content']  = 'memberlist';\r
3929                 $template['tabindex'] = 10;\r
3930                 \r
3931                 $batch = new skinableBATCH('member');\r
3932                 $batch->showlist($query, 'table', $template, _LISTS_NOMORE, $templateName);\r
3933                 return;\r
3934         }\r
3935         \r
3936         /**\r
3937          * Actions::parse_editpluginfo()\r
3938          * Parse skinvar editpluginfo\r
3939          * \r
3940          * @param       string  $type   type of plugin info\r
3941          * @return      void\r
3942          */\r
3943         public function parse_editpluginfo($type)\r
3944         {\r
3945                 $pid = intRequestVar('plugid');\r
3946                 switch ( $type )\r
3947                 {\r
3948                         case 'id':\r
3949                                 echo $pid;\r
3950                                 break;\r
3951                         case 'name':\r
3952                                 echo Entity::hsc(getPluginNameFromPid($pid));\r
3953                                 break;\r
3954                 }\r
3955                 return;\r
3956         }\r
3957         \r
3958         /**\r
3959          * Actions::parse_editplugoptionslist()\r
3960          * Parse skinvar editplugoptionslist\r
3961          * \r
3962          * @param       string  $templateName   name of template\r
3963          * @return      void\r
3964          */\r
3965         public function parse_editplugoptionslist($templateName = '')\r
3966         {\r
3967                 global $manager;\r
3968                 \r
3969                 $pid = intRequestVar('plugid');\r
3970                 $aOptions = array();\r
3971                 $aOIDs  = array();\r
3972                 \r
3973                 $query  = "SELECT * FROM %s WHERE ocontext='global' AND opid=%d ORDER BY oid ASC";\r
3974                 $query = sprintf($query, sql_table('plugin_option_desc'), (integer) $pid);\r
3975                 $resource = sql_query($query);\r
3976                 \r
3977                 while ( $o = sql_fetch_object($resource) )\r
3978                 {\r
3979                         array_push($aOIDs, $o->oid);\r
3980                         $aOptions[$o->oid] = array(\r
3981                                 \r
3982                                 'oid'                   => $o->oid,\r
3983                                 'value'                 => $o->odef,\r
3984                                 'name'                  => $o->oname,\r
3985                                 'description'   => $o->odesc,\r
3986                                 'type'                  => $o->otype,\r
3987                                 'typeinfo'              => $o->oextra,\r
3988                                 'contextid'             => 0\r
3989                         );\r
3990                 }\r
3991                 \r
3992                 // fill out actual values\r
3993                 if ( count($aOIDs) > 0 )\r
3994                 {\r
3995                         $query = 'SELECT oid, ovalue FROM %s WHERE oid in (%s)';\r
3996                         $query = sprintf($query, sql_table('plugin_option'), implode(',', $aOIDs));\r
3997                         \r
3998                         $result = sql_query($query);\r
3999                         \r
4000                         while ( $o = sql_fetch_object($result) )\r
4001                         {\r
4002                                 $aOptions[$o->oid]['value'] = $o->ovalue;\r
4003                         }\r
4004                 }\r
4005                 \r
4006                 // call plugins\r
4007                 $manager->notify(\r
4008                         'PrePluginOptionsEdit',\r
4009                         array(\r
4010                                 'context'       =>  'global',\r
4011                                 'plugid'        =>  $pid,\r
4012                                 'options'       => &$aOptions\r
4013                         )\r
4014                 );\r
4015                 \r
4016                 $template['content'] = 'plugoptionlist';\r
4017                 $amount                   = skinableShowlist($aOptions, 'table', $template, $templateName);\r
4018                 if ( $amount == 0 )\r
4019                 {\r
4020                         echo '<p>' . _ERROR_NOPLUGOPTIONS . "</p>\n";\r
4021                 }\r
4022                 return;\r
4023         }\r
4024         \r
4025         /**\r
4026          * Actions::parse_editskin()\r
4027          * Parse skinvar editskin\r
4028          * \r
4029          * @param       string  $type   type of skin\r
4030          * @return      void\r
4031          */\r
4032         public function parse_editskin($type = 'id')\r
4033         {\r
4034                 $skinid = intRequestVar('skinid');\r
4035                 $skin   = new SKIN($skinid);\r
4036                 switch ( $type )\r
4037                 {\r
4038                         case 'id':\r
4039                                 echo intRequestVar('skinid');\r
4040                                 break;\r
4041                         case 'name':\r
4042                                 echo Entity::hsc($skin->getName());\r
4043                                 break;\r
4044                         case 'desc':\r
4045                                 echo Entity::hsc($skin->getDescription());\r
4046                                 break;\r
4047                         case 'type':\r
4048                                 echo Entity::hsc($skin->getContentType());\r
4049                                 break;\r
4050                         case 'prefix':\r
4051                                 echo Entity::hsc($skin->getIncludePrefix());\r
4052                                 break;\r
4053                         case 'mode':\r
4054                                 $this->parse_inputyesno('inc_mode', $skin->getIncludeMode(), 120, 'skindir', 'normal', _PARSER_INCMODE_SKINDIR, _PARSER_INCMODE_NORMAL);\r
4055                         default:\r
4056                                 break;\r
4057                 }\r
4058                 return;\r
4059         }\r
4060         \r
4061         /**\r
4062          * Actions::parse_editskintype()\r
4063          * Parse skinvar editskintype\r
4064          * \r
4065          * @param       string  $type   name of type for skin type\r
4066          * @return      void\r
4067          */\r
4068         function parse_editskintype($type = 'id')\r
4069         {\r
4070                 global $CONF, $manager, $member;\r
4071                 $skinid = intRequestVar('skinid');\r
4072                 $skin   = new SKIN($skinid);\r
4073                 $fNames = SKIN::getFriendlyNames();\r
4074                 $sType  = strtolower(trim(requestVar('type')));\r
4075                 \r
4076                 switch ( $type )\r
4077                 {\r
4078                         case 'id':\r
4079                                 echo intRequestVar('skinid');\r
4080                                 break;\r
4081                         case 'name':\r
4082                                 echo Entity::hsc($skin->getName());\r
4083                                 break;\r
4084                         case 'desc':\r
4085                                 echo Entity::hsc($skin->getDescription());\r
4086                                 break;\r
4087                         case 'type':\r
4088                                 echo Entity::hsc($skin->getContentType());\r
4089                                 break;\r
4090                         case 'content':\r
4091                                 echo Entity::hsc($skin->getContent($sType));\r
4092                                 break;\r
4093                         case 'skintype':\r
4094                                 $skinType = isset($fNames[$sType]) ? $fNames[$sType] : ucfirst($sType);\r
4095                                 echo Entity::hsc($skinType);\r
4096                                 break;\r
4097                         case 'skintyperaw':\r
4098                                 echo Entity::hsc($sType);\r
4099                                 break;\r
4100                         case 'prefix':\r
4101                                 echo Entity::hsc($skin->getIncludePrefix());\r
4102                                 break;\r
4103                         case 'mode':\r
4104                                 $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;\r
4105                                 echo Entity::hsc($incMode);\r
4106                                 break;\r
4107                         default:\r
4108                                 break;\r
4109                 }\r
4110                 return;\r
4111         }\r
4112         \r
4113         /**\r
4114          * Actions::parse_edittemplateinfo()\r
4115          * Parse skinvar edittemplateinfo\r
4116          * \r
4117          * @param       string  $type                   name of type for skin\r
4118          * @param       string  $description    description for skin\r
4119          * @param       string  $name                   name of skin\r
4120          * @param       string  $help                   \r
4121          * @param       string  $tabindex               index value for tabindex attribute of input element\r
4122          * @param       string  $big                    \r
4123          * @param       string  $tplt                   name of template\r
4124          */\r
4125         public function parse_edittemplateinfo($type, $description = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')\r
4126         {\r
4127                 global $manager;\r
4128                 $templateid                             =  intRequestVar('templateid');\r
4129                 $templatename                   =  TEMPLATE::getNameFromId($templateid);\r
4130                 $templatedescription    =  TEMPLATE::getDesc($templateid);\r
4131                 $template                               =& $manager->getTemplate($templatename);\r
4132                 switch ( $type )\r
4133                 {\r
4134                         case 'id':\r
4135                                 echo intval($templateid);\r
4136                                 break;\r
4137                         case 'name':\r
4138                                 echo Entity::hsc($templatename);\r
4139                                 break;\r
4140                         case 'desc':\r
4141                                 echo Entity::hsc($templatedescription);\r
4142                                 break;\r
4143                         case 'extratemplate':\r
4144                                 $tabidx    = 600;\r
4145                                 $pluginfields = array();\r
4146                                 $manager->notify(\r
4147                                         'TemplateExtraFields',\r
4148                                         array(\r
4149                                                 'fields' => &$pluginfields\r
4150                                         )\r
4151                                 );\r
4152                                 $tmplt = array();\r
4153                                 if ( $description )\r
4154                                 {\r
4155                                         $tmplt = skinableTEMPLATE::read($description);\r
4156                                 }\r
4157                                 if ( array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) && !empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )\r
4158                                 {\r
4159                                         $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];\r
4160                                 }\r
4161                                 else\r
4162                                 {\r
4163                                         $base = "</tr><tr>\n"\r
4164                                                   . "\t" . '<th colspan="2"><%explugtplname%>' . "</th>\n";\r
4165                                 }\r
4166                                 foreach ( $pluginfields as $pfkey => $pfvalue )\r
4167                                 {\r
4168                                         $data = array(\r
4169                                                 'explugtplname' => Entity::hsc($pfkey)\r
4170                                         );\r
4171                                         echo TEMPLATE::fill($base, $data);\r
4172                                         foreach ( $pfvalue as $pffield => $pfdesc )\r
4173                                         {\r
4174                                                 $this->_templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);\r
4175                                         }\r
4176                                 }\r
4177                                 break;\r
4178                         default:\r
4179                                 $desc = defined($description) ? constant($description) : $description;\r
4180                                 $name = defined($name) ? constant($name) : $name;\r
4181                                 $this->_templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);\r
4182                                 break;\r
4183                 }\r
4184                 return;\r
4185         }\r
4186         \r
4187         /**\r
4188          * Actions::parse_eventformextra()\r
4189          * Parse skinvar eventformextra\r
4190          * \r
4191          * @param       string  $type   name of type for event form extra\r
4192          * @return      void\r
4193          */\r
4194         public function parse_eventformextra($type = 'activation')\r
4195         {\r
4196                 global $manager;\r
4197                 switch ( $type )\r
4198                 {\r
4199                         case 'activation':\r
4200                                 $key = requestVar('ackey');\r
4201                                 if ( !$key )\r
4202                                 {\r
4203                                         $this->objAdmin->error(_ERROR_ACTIVATE);\r
4204                                 }\r
4205                                 $info = MEMBER::getActivationInfo($key);\r
4206                                 if ( !$info )\r
4207                                 {\r
4208                                         $this->objAdmin->error(_ERROR_ACTIVATE);\r
4209                                 }\r
4210                                 $mem  = MEMBER::createFromId($info->vmember);\r
4211                                 if ( !$mem )\r
4212                                 {\r
4213                                         $this->objAdmin->error(_ERROR_ACTIVATE);\r
4214                                 }\r
4215                                 $data = array(\r
4216                                         'type'   => 'activation',\r
4217                                         'member' => $mem\r
4218                                 );\r
4219                                 break;\r
4220                         case 'membermailform-notloggedin':\r
4221                                 $data = array(\r
4222                                         'type' => 'membermailform-notloggedin',\r
4223                                 );\r
4224                                 break;\r
4225                 }\r
4226                 $manager->notify('FormExtra', $data);\r
4227                 return;\r
4228         }\r
4229         \r
4230         /**\r
4231          * Actions::parse_extrahead()\r
4232          * Parse skinvar extrahead\r
4233          */\r
4234         public function parse_extrahead()\r
4235         {\r
4236                 global $manager;\r
4237                 $extrahead = $this->objAdmin->extrahead;\r
4238                 $manager->notify(\r
4239                         'AdminPrePageHead',\r
4240                         array(\r
4241                                 'extrahead'     => &$extrahead,\r
4242                                 'action'        => $this->objAdmin->action\r
4243                         )\r
4244                 );\r
4245                 echo $extrahead;\r
4246                 return;\r
4247         }\r
4248         \r
4249         /**\r
4250          * Actions::parse_blogsetting()\r
4251          * Parse skinvar blogsetting\r
4252          * \r
4253          * @param       string  $which  name of setting for blog\r
4254          * @return      void\r
4255          */\r
4256         public function parse_blogsetting($which)\r
4257         {\r
4258                 echo $this->parse_getblogsetting($which);\r
4259                 return;\r
4260         }\r
4261         \r
4262         /**\r
4263          * Actions::parse_category()\r
4264          * Parse skinvar category\r
4265          * \r
4266          * @param       string  $type   name of setting for category\r
4267          * @return      void\r
4268          */\r
4269         public function parse_category($type = 'name')\r
4270         {\r
4271                 echo $this->parse_getcategory($type);\r
4272                 return;\r
4273         }\r
4274         \r
4275         /**\r
4276          * Actions::parse_geteditpluginfo()\r
4277          * Parse skinvar geteditpluginfo\r
4278          * \r
4279          * @param       string  $type   name of setting for edit plugin info\r
4280          * @return      void\r
4281          */\r
4282         public function parse_geteditpluginfo($type)\r
4283         {\r
4284                 $pid = intRequestVar('plugid');\r
4285                 switch ( $type )\r
4286                 {\r
4287                         case 'id':\r
4288                                 return $pid;\r
4289                                 break;\r
4290                         case 'name':\r
4291                                 return Entity::hsc(getPluginNameFromPid($pid));\r
4292                                 break;\r
4293                 }\r
4294                 return;\r
4295         }\r
4296         \r
4297         /**\r
4298          * Actions::parse_getmember()\r
4299          * Parse skinvar getmember\r
4300          * (includes a member info thingie)\r
4301          * \r
4302          * @param       string  $what   name of setting for member\r
4303          * @return      void\r
4304          */\r
4305         public function parse_getmember($what)\r
4306         {\r
4307                 global $memberinfo, $member;\r
4308                 // 1. only allow the member-details-page specific variables on member pages\r
4309                 if ( $this->skintype == 'member' )\r
4310                 {\r
4311                         switch ( $what )\r
4312                         {\r
4313                                 case 'name':\r
4314                                         return Entity::hsc($memberinfo->getDisplayName());\r
4315                                         break;\r
4316                                 case 'realname':\r
4317                                         return Entity::hsc($memberinfo->getRealName());\r
4318                                         break;\r
4319                                 case 'notes':\r
4320                                         return Entity::hsc($memberinfo->getNotes());\r
4321                                         break;\r
4322                                 case 'url':\r
4323                                         return Entity::hsc($memberinfo->getURL());\r
4324                                         break;\r
4325                                 case 'email':\r
4326                                         return Entity::hsc($memberinfo->getEmail());\r
4327                                         break;\r
4328                                 case 'id':\r
4329                                         return Entity::hsc($memberinfo->getID());\r
4330                                         break;\r
4331                         }\r
4332                 }\r
4333                 // 2. the next bunch of options is available everywhere, as long as the user is logged in\r
4334                 if ( $member->isLoggedIn() )\r
4335                 {\r
4336                         switch ( $what )\r
4337                         {\r
4338                                 case 'yourname':\r
4339                                         return $member->getDisplayName();\r
4340                                         break;\r
4341                                 case 'yourrealname':\r
4342                                         return $member->getRealName();\r
4343                                         break;\r
4344                                 case 'yournotes':\r
4345                                         return $member->getNotes();\r
4346                                         break;\r
4347                                 case 'yoururl':\r
4348                                         return $member->getURL();\r
4349                                         break;\r
4350                                 case 'youremail':\r
4351                                         return $member->getEmail();\r
4352                                         break;\r
4353                                 case 'yourid':\r
4354                                         return $member->getID();\r
4355                                         break;\r
4356                         }\r
4357                 }\r
4358                 return;\r
4359         }\r
4360         \r
4361         /**\r
4362          * Actions::parse_headmessage()\r
4363          * Parse skinvar headmessage\r
4364          * \r
4365          * @param       void\r
4366          * @return      void\r
4367          */\r
4368         public function parse_headmessage()\r
4369         {\r
4370                 if ( !empty($this->objAdmin->headMess) )\r
4371                 {\r
4372                         echo '<p>' . _MESSAGE . ': ' . Entity::hsc($this->objAdmin->headMess) . "</p>\n";\r
4373                 }\r
4374                 return;\r
4375         }\r
4376         \r
4377         /**\r
4378          * Actions::parse_helplink()\r
4379          * Parse skinvar helplink\r
4380          * \r
4381          * @param       string  $topic  name of topic for help\r
4382          * @return      void\r
4383          */\r
4384         public function parse_helplink($topic = '')\r
4385         {\r
4386                 if ( empty($topic) )\r
4387                 {\r
4388                         return;\r
4389                 }\r
4390                 help($topic);\r
4391                 return;\r
4392         }\r
4393         \r
4394         /**\r
4395          * Actions::parse_helpplugname()\r
4396          * Parse skinvar helpplugname\r
4397          * \r
4398          * @param       void\r
4399          * @return      void\r
4400          */\r
4401         public function parse_helpplugname()\r
4402         {\r
4403                 $plugid = intGetVar('plugid');\r
4404                 Entity::hsc(getPluginNameFromPid($plugid));\r
4405                 return;\r
4406         }\r
4407         \r
4408         /**\r
4409          * Actions::parse_ilistaddnew()\r
4410          * Parse skinvar ilistaddnew\r
4411          * \r
4412          * @param       void\r
4413          * @return      void\r
4414          */\r
4415         public function parse_ilistaddnew()\r
4416         {\r
4417                 $blogid = intRequestVar('blogid');\r
4418                 if ( intPostVar('start') == 0 )\r
4419                 {\r
4420                         echo '<p><a href="index.php?action=createitem&amp;blogid=' . $blogid . '">' . _ITEMLIST_ADDNEW . "</a></p>\n";\r
4421                 }\r
4422                 return;\r
4423         }\r
4424         \r
4425         /**\r
4426          * Actions::parse_importskininfo()\r
4427          * Parse skinvar importskininfo\r
4428          * \r
4429          * @param       string  $type   name of information for imported skin\r
4430          * @return      void\r
4431          */\r
4432         public function parse_importskininfo($type)\r
4433         {\r
4434                 switch ( $type )\r
4435                 {\r
4436                         case 'info':\r
4437                                 echo Entity::hsc(requestVar('skininfo'));\r
4438                                 break;\r
4439                         case 'snames':\r
4440                                 $dataArr = requestArray('skinnames');\r
4441                                 echo implode(' <em>' . _AND . '</em> ', $dataArr);\r
4442                                 break;\r
4443                         case 'tnames':\r
4444                                 $dataArr = requestArray('tpltnames');\r
4445                                 echo implode(' <em>' . _AND . '</em> ', $dataArr);\r
4446                                 break;\r
4447                         case 'sclashes':\r
4448                                 $dataArr = requestArray('skinclashes');\r
4449                                 echo implode(' <em>' . _AND . '</em> ', $dataArr);\r
4450                                 break;\r
4451                         case 'tclashes':\r
4452                                 $dataArr = requestArray('tpltclashes');\r
4453                                 echo implode(' <em>' . _AND . '</em> ', $dataArr);\r
4454                                 break;\r
4455                         case 'skinfile':\r
4456                                 echo Entity::hsc(requestVar('skinfile'));\r
4457                                 break;\r
4458                         case 'mode':\r
4459                                 echo Entity::hsc(requestVar('mode'));\r
4460                                 break;\r
4461                 }\r
4462                 return;\r
4463         }\r
4464         \r
4465         /**\r
4466          * Actions::parse_inputyesno()\r
4467          * Parse skinvar inputyesno\r
4468          * \r
4469          * @param       string  $name                   \r
4470          * @param       string  $checkedval             \r
4471          * @param       string  $tabindex               \r
4472          * @param       string  $value1                 \r
4473          * @param       string  $value2                 \r
4474          * @param       string  $yesval                 \r
4475          * @param       string  $noval                  \r
4476          * @param       string  $isAdmin                \r
4477          * @param       string  $templateName   \r
4478          * @return      void\r
4479          */\r
4480         public function parse_inputyesno($name, $checkedval, $tabindex = 0, $value1 = 1, $value2 = 0, $yesval = _YES, $noval = _NO, $isAdmin = 0, $templateName = '')\r
4481         {\r
4482                 self::input_yesno($name, $checkedval, $tabindex, $value1, $value2, $yesval, $noval, $isAdmin, $templateName );\r
4483                 return;\r
4484         }\r
4485         \r
4486         /**\r
4487          * Actions::parse_insertpluginfo()\r
4488          * Parse templatevar insertpluginfo\r
4489          */\r
4490         public function parse_insertpluginfo($type)\r
4491         {\r
4492                 $option = $this->objAdmin;\r
4493                 switch ( $type )\r
4494                 {\r
4495                         case 'id':\r
4496                                 return $option['pid'];\r
4497                                 break;\r
4498                         case 'name':\r
4499                                 return Entity::hsc($option['pfile']);\r
4500                                 break;\r
4501                 }\r
4502                 return;\r
4503         }\r
4504         \r
4505         /**\r
4506          * Actions::parse_insertpluginoptions()\r
4507          * Parse skinvar insertpluginoptions\r
4508          * \r
4509          * @param       string  $templateName   name of template\r
4510          * @return      void\r
4511          */\r
4512         public function parse_insertpluginoptions($templateName = '')\r
4513         {\r
4514                 $options        = $this->objAdmin->aOptions;\r
4515                 $template       = array();\r
4516                 $templats       = array();\r
4517                 \r
4518                 if ( $templateName )\r
4519                 {\r
4520                         $templates = skinableTEMPLATE::read($templateName);\r
4521                 }\r
4522                 if (array_key_exists('INSERT_PLUGOPTION_TITLE', $templates) && !empty($templates['INSERT_PLUGOPTION_TITLE']) )\r
4523                 {\r
4524                         $template['title'] = $templates['INSERT_PLUGOPTION_TITLE'];\r
4525                 }\r
4526                 else\r
4527                 {\r
4528                         $template['title'] = '<tr><th colspan="2"><%sprinttext(_PLUGIN_OPTIONS_TITLE, <|%insertpluginfo(name)%|>)%></th></tr>' . "\n";\r
4529                 }\r
4530                 if ( array_key_exists('INSERT_PLUGOPTION_BODY', $templates) && !empty($templates['INSERT_PLUGOPTION_BODY']) )\r
4531                 {\r
4532                         $template['body'] = $templates['INSERT_PLUGOPTION_BODY'];\r
4533                 }\r
4534                 else\r
4535                 {\r
4536                         $template['body'] = '<tr><%listplugplugoptionrow%></tr>' . "\n";\r
4537                 }\r
4538                 \r
4539                 $prevPid = -1;\r
4540                 \r
4541                 foreach ( $options as $option )\r
4542                 {\r
4543                         $handler = new skinableACTIONS($this->skintype, $template, $option);\r
4544                         $parser  = new PARSER(skinableACTIONS::getDefinedActions(), $handler);\r
4545                         // new plugin?\r
4546                         if ( $prevPid != $option['pid'] )\r
4547                         {\r
4548                                 $prevPid  = $option['pid'];\r
4549                                 $parser->parse($template['title']);\r
4550                         }\r
4551                         $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);\r
4552                         if ( @$meta['access'] != 'hidden' )\r
4553                         {\r
4554                                 $parsed = $parser->parse($template['body']);\r
4555                         }\r
4556                 }\r
4557                 return;\r
4558         }\r
4559         \r
4560         /**\r
4561          * Actions::parse_insplugoptcontent()\r
4562          * Parse skinvar insplugoptcontent\r
4563          * \r
4564          * @param       void\r
4565          * @return      void\r
4566          */\r
4567         public function parse_insplugoptcontent()\r
4568         {\r
4569                 $option = $this->objAdmin->aOption;\r
4570                 \r
4571                 $meta   = NucleusPlugin::getOptionMeta($option['typeinfo']);\r
4572                 if (array_key_exists('access', $meta) && $meta['access'] != 'hidden')\r
4573                 {\r
4574                         echo '<tr>';\r
4575                         skinableListplug_plugOptionRow($option);\r
4576                         echo '</tr>';\r
4577                 }\r
4578                 return;\r
4579         }\r
4580         \r
4581         /**\r
4582          * Actions::parse_iprangeinput()\r
4583          * Parse skinvar iprangeinput\r
4584          * \r
4585          * @param       void\r
4586          * @return      void\r
4587          */\r
4588         function parse_iprangeinput()\r
4589         {\r
4590                 if ( requestVar('ip') )\r
4591                 {\r
4592                         $iprangeVal = Entity::hsc(requestVar('ip'));\r
4593                         echo '<input name="iprange" type="radio" value="' . $iprangeVal . '" checked="checked" id="ip_fixed" />' . "\n";\r
4594                         echo '<label for="ip_fixed">' . $iprangeVal . "</label><br />\n";\r
4595                         echo '<input name="iprange" type="radio" value="custom" id="ip_custom" />' . "\n";\r
4596                         echo '<label for="ip_custom">' . _BAN_IP_CUSTOM . '</label>' . "\n";\r
4597                         echo '<input name="customiprange" value="' . $iprangeVal . '" maxlength="15" size="15" />' . "\n";\r
4598                 }\r
4599                 else\r
4600                 {\r
4601                         echo '<input name="iprange" value="custom" type="hidden" />' . "\n";\r
4602                         echo '<input name="customiprange" value="" maxlength="15" size="15" />' . "\n";\r
4603                 }\r
4604                 return;\r
4605         }\r
4606         \r
4607         /**\r
4608          * Actions::parse_itemnavlist()\r
4609          * Parse skinvar itemnavlist\r
4610          * \r
4611          * @param       void\r
4612          * @return      void\r
4613          */\r
4614         public function parse_itemnavlist()\r
4615         {\r
4616                 global $CONF, $manager, $member;\r
4617                 if ( $this->skintype == 'itemlist' )\r
4618                 {\r
4619                         $blogid =  intRequestVar('blogid');\r
4620                         $blog   =& $manager->getBlog($blogid);\r
4621                 }\r
4622                 if ( postVar('start') )\r
4623                 {\r
4624                         $start = intPostVar('start');\r
4625                 }\r
4626                 else\r
4627                 {\r
4628                         $start = 0;\r
4629                 }\r
4630                 \r
4631                 // amount of items to show\r
4632                 if ( postVar('amount') )\r
4633                 {\r
4634                         $amount = intPostVar('amount');\r
4635                 }\r
4636                 else\r
4637                 {\r
4638                         $amount = intval($CONF['DefaultListSize']);\r
4639                         if ( $amount < 1 )\r
4640                         {\r
4641                                 $amount = 10;\r
4642                         }\r
4643                 }\r
4644                 $query  = "SELECT bshortname, cname, mname, ititle, ibody, inumber, idraft, itime"\r
4645                         . " FROM %s, %s, %s"\r
4646                         . " WHERE iblog=bnumber AND iauthor=mnumber AND icat=catid;";\r
4647                 \r
4648                 $query = sprintf($query, sql_table('item'), sql_table('blog'), sql_table('member'), sql_table('category'));\r
4649                 \r
4650                 if ( $this->skintype == 'itemlist' )\r
4651                 {\r
4652                         $query .= 'and iblog   = ' . $blogid;\r
4653                         $template['now'] = $blog->getCorrectTime(time());\r
4654                         \r
4655                         // non-blog-admins can only edit/delete their own items\r
4656                         if ( !$member->blogAdminRights($blogid) )\r
4657                         {\r
4658                                 $query .= ' and iauthor = ' . $member->getID();\r
4659                         }\r
4660                 }\r
4661                 elseif ( $this->skintype == 'browseownitems' )\r
4662                 {\r
4663                         $query .= 'and iauthor   = ' . $member->getID();\r
4664                         $blogid = 0;\r
4665                         $template['now'] = time();\r
4666                 }\r
4667                 \r
4668                 // search through items\r
4669                 $search = postVar('search');\r
4670                 \r
4671                 if ( !empty($search) )\r
4672                 {\r
4673                         $query .= ' AND ((ititle LIKE "%' . sql_real_escape_string($search) . '%") '\r
4674                                 . '  OR  (ibody LIKE "%' . sql_real_escape_string($search) . '%") '\r
4675                                 . '  OR  (imore LIKE "%' . sql_real_escape_string($search) . '%"))';\r
4676                 }\r
4677                 $query .= ' ORDER BY itime DESC'\r
4678                         . " LIMIT {$start},{$amount}";\r
4679                 \r
4680                 $template['content'] = 'itemlist';\r
4681                 \r
4682                 $navList = new skinableNAVLIST($this->skintype, $start, $amount, 0, 1000, $blogid, $search, 0);\r
4683                 $navList->showBatchList('item', $query, 'table', $template);\r
4684                 return;\r
4685         }\r
4686         \r
4687         /**\r
4688          * Actions::parse_jstoolbaroptions()\r
4689          * Parse skinvar jstoolbaroptions\r
4690          * \r
4691          * @param       void\r
4692          * @return      void\r
4693          */\r
4694         public function parse_jstoolbaroptions()\r
4695         {\r
4696                 global $CONF;\r
4697                 $options = array(\r
4698                         _SETTINGS_JSTOOLBAR_NONE,\r
4699                         _SETTINGS_JSTOOLBAR_SIMPLE,\r
4700                         _SETTINGS_JSTOOLBAR_FULL\r
4701                 );\r
4702                 $i = 1;\r
4703                 foreach ( $options as $option )\r
4704                 {\r
4705                         $text  = "<option value=\"%d\"%s>%s</option>\n";\r
4706                         $extra = ($CONF['DisableJsTools'] == $i) ? ' selected="selected"' : '';\r
4707                         echo sprintf($text, $i, $extra, $option);\r
4708                         $i++;\r
4709                 }\r
4710                 return;\r
4711         }\r
4712         \r
4713         /**\r
4714          * Actions::parse_localeselectoptions()\r
4715          * Parse skinvar localeselectoptions\r
4716          * \r
4717          * @param       void\r
4718          * @return      void\r
4719          */\r
4720         public function parse_localeselectoptions()\r
4721         {\r
4722                 $locales = i18n::get_available_locale_list();\r
4723                 $memid   = intRequestVar('memberid');\r
4724                 if ( $memid )\r
4725                 {\r
4726                         $mem = MEMBER::createFromID($memid);\r
4727                         if ( !$mem->getLocale() || !in_array($mem->getLocale(), $locales) )\r
4728                         {\r
4729                                 echo "<option value=\"\" selected=\"selected\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";\r
4730                         }\r
4731                         else\r
4732                         {\r
4733                                 echo "<option value=\"\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";\r
4734                         }\r
4735                 }\r
4736                 else\r
4737                 {\r
4738                         if ( !i18n::get_current_locale() || !in_array(i18n::get_current_locale(), $locales) )\r
4739                         {\r
4740                                 echo "<option value=\"\" selected=\"selected\">en_Latn_US</option>\n";\r
4741                         }\r
4742                 }\r
4743                 foreach ( $locales as $locale )\r
4744                 {\r
4745                         if ($memid)\r
4746                         {\r
4747                                 if ( $locale == $mem->getLocale() )\r
4748                                 {\r
4749                                         echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";\r
4750                                 }\r
4751                                 else\r
4752                                 {\r
4753                                         echo "<option value=\"{$locale}\">{$locale}</option>\n";\r
4754                                 }\r
4755                         }\r
4756                         else\r
4757                         {\r
4758                                 if ( $locale == i18n::get_current_locale() )\r
4759                                 {\r
4760                                         echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";\r
4761                                 }\r
4762                                 else\r
4763                                 {\r
4764                                         echo "<option value=\"{$locale}\">{$locale}</option>\n";\r
4765                                 }\r
4766                         }\r
4767                 }\r
4768                 return;\r
4769         }\r
4770         \r
4771         /**\r
4772          * Actions::parse_listplugplugoptionrow()\r
4773          * Parse templatevar listplugplugoptionrow\r
4774          * \r
4775          * @param       string  $templateName   name of template\r
4776          * @return      void\r
4777          */\r
4778         public function parse_listplugplugoptionrow($templateName = '')\r
4779         {\r
4780                 $option = $this->objAdmin;\r
4781                 echo skinableListplug_plugOptionRow($option, $templateName);\r
4782                 return;\r
4783         }\r
4784         \r
4785         /**\r
4786          * Actions::parse_mediadirwarning()\r
4787          * Parse skinvar mediadirwarning\r
4788          * \r
4789          * @param       void\r
4790          * @return      void\r
4791          */\r
4792         public function parse_mediadirwarning()\r
4793         {\r
4794                 global $DIR_MEDIA;\r
4795                 if ( !is_dir($DIR_MEDIA) )\r
4796                 {\r
4797                         echo "<br /><b>" . _WARNING_NOTADIR . "</b>\n";\r
4798                 }\r
4799                 if ( !is_readable($DIR_MEDIA) )\r
4800                 {\r
4801                         echo "<br /><b>" . _WARNING_NOTREADABLE . "</b>\n";\r
4802                 }\r
4803                 if ( !is_writeable($DIR_MEDIA) )\r
4804                 {\r
4805                         echo "<br /><b>" . _WARNING_NOTWRITABLE . "</b>\n";\r
4806                 }\r
4807                 return;\r
4808         }\r
4809         \r
4810         /**\r
4811          * Actions::parse_movedistselect()\r
4812          * Parse skinvar movedistselect\r
4813          */\r
4814         function parse_movedistselect()\r
4815         {\r
4816                 $actionType = requestVar('action');\r
4817                 switch ( $actionType )\r
4818                 {\r
4819                         case 'batchitem':\r
4820                                 $this->objAdmin->selectBlogCategory('destcatid');\r
4821                                 break;\r
4822                         case 'batchcategory':\r
4823                                 $this->objAdmin->selectBlog('destblogid');\r
4824                                 break;\r
4825                         default:\r
4826                                 if ( $this->skintype == 'itemmove' )\r
4827                                 {\r
4828                                         $query  = "SELECT icat as result FROM %s WHERE inumber=%d;";\r
4829                                         $query = spriintf($query, sql_table('item'), intRequestVar('itemid'));\r
4830                                         $catid  = quickQuery(sprintf($query, intRequestVar('itemid')));\r
4831                                         $this->objAdmin->selectBlogCategory('catid', $catid, 10, 1);\r
4832                                 }\r
4833                                 break;\r
4834                 }\r
4835                 return;\r
4836         }\r
4837         \r
4838         /**\r
4839          * Actions::parse_moveitemid()\r
4840          * Parse skinvar moveitemid\r
4841          * \r
4842          * @param       void\r
4843          * @return      void\r
4844          */\r
4845         public function parse_moveitemid()\r
4846         {\r
4847                 echo intRequestVar('itemid');\r
4848                 return;\r
4849         }\r
4850         \r
4851         /**\r
4852          * Actions::parse_newestcompare()\r
4853          * Parse skinvar newestcompare\r
4854          * \r
4855          * @param       void\r
4856          * @return      void\r
4857          */\r
4858         public function parse_newestcompare()\r
4859         {\r
4860                 global $nucleus;\r
4861                 $newestVersion  = getLatestVersion();\r
4862                 $newestCompare  = str_replace('/', '.', $newestVersion);\r
4863                 $currentVersion = str_replace(array('/', 'v'), array('.', ''), $nucleus['version']);\r
4864                 if ( $newestVersion && version_compare($newestCompare, $currentVersion, '>') )\r
4865                 {\r
4866                         echo '<br /><a style="color:red" href="http://nucleuscms.org/upgrade.php" title="' . _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE . '">';\r
4867                         echo _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT . $newestVersion . '</a>';\r
4868                 }\r
4869                 return;\r
4870         }\r
4871         \r
4872         /**\r
4873          * Actions::parse_newmemberselect()\r
4874          * Parse skinvar newmemberselect\r
4875          * \r
4876          * @param       string  $templateName   name of template to use\r
4877          * @return      void\r
4878          */\r
4879         public function parse_newmemberselect($templateName = '')\r
4880         {\r
4881                 $blogid = intRequestVar('blogid');\r
4882                 \r
4883                 $query  = "SELECT tmember FROM %s WHERE tblog=%d;";\r
4884                 $query = sprintf($query, sql_table('team'), (integer) $blogid);\r
4885                 $res = sql_query($query);\r
4886                 \r
4887                 $tmem = array();\r
4888                 while ( $tmember = sql_fetch_object($res) ) \r
4889                 {\r
4890                         $tmem[] = intval($tmember->tmember);\r
4891                 }\r
4892                 \r
4893                 $query  = "SELECT mname as text, mnumber as value FROM %s WHERE mnumber NOT IN (%s);";\r
4894                 $query = sprintf($query, sql_table('member'), implode(', ', $tmem));\r
4895                 \r
4896                 $template['name']        = 'memberid';\r
4897                 $template['tabindex'] = 10000;\r
4898                 skinableShowlist($query, 'select', $template, $templateName);\r
4899                 return;\r
4900         }\r
4901         \r
4902         /**\r
4903          * Actions::parse_newpluginlist()\r
4904          * Parse skinvar newpluginlist\r
4905          * \r
4906          * @param       void\r
4907          * @return      void\r
4908          */\r
4909         public function parse_newpluginlist()\r
4910         {\r
4911                 $candidates = $this->newPlugCandidates;\r
4912                 foreach ( $candidates as $name )\r
4913                 {\r
4914                         echo '<option value="NP_' . $name . '">' . Entity::hsc($name) . "</option>\n";\r
4915                 }\r
4916                 return;\r
4917         }\r
4918         \r
4919         /**\r
4920          * Actions::parse_outputspecialdirs()\r
4921          * Parse skinvar outputspecialdirs\r
4922          * \r
4923          * @param       string  $type   type of setting for directory\r
4924          * @return      void\r
4925          */\r
4926         public function parse_outputspecialdirs($type)\r
4927         {\r
4928                 switch ( $type )\r
4929                 {\r
4930                         case 'nucleusdir':\r
4931                                 global $DIR_NUCLEUS;\r
4932                                 echo Entity::hsc($DIR_NUCLEUS);\r
4933                                 break;\r
4934                         case 'mediadir':\r
4935                                 global $DIR_MEDIA;\r
4936                                 echo Entity::hsc($DIR_MEDIA);\r
4937                                 break;\r
4938                 }\r
4939                 return;\r
4940         }\r
4941         \r
4942         /**\r
4943          * Actions::parse_passrequestvars()\r
4944          * Parse skinvar passrequestvars\r
4945          * \r
4946          * @param       void\r
4947          * @return      void\r
4948          */\r
4949         public function parse_passrequestvars()\r
4950         {\r
4951                 $oldaction = postVar('oldaction');\r
4952                 if ( ($oldaction != 'logout')\r
4953                   && ($oldaction != 'login')\r
4954                   && $this->objAdmin->passvar\r
4955                   && !postVar('customaction') )\r
4956                 {\r
4957                         passRequestVars();\r
4958                 }\r
4959                 return;\r
4960         }\r
4961         \r
4962         /**\r
4963          * Actions::parse_pluginextras()\r
4964          * Parse skinvar pluginextras\r
4965          * \r
4966          * @param       string  $type   type of plugin context\r
4967          * @return      void\r
4968          */\r
4969         function parse_pluginextras($type = 'global')\r
4970         {\r
4971                 global $manager;\r
4972                 switch ( $type )\r
4973                 {\r
4974                         case 'member':\r
4975                                 $id  = intRequestVar('memberid');\r
4976                                 $mem = MEMBER::createFromID($id);\r
4977                                 $manager->notify(\r
4978                                         'MemberSettingsFormExtras',\r
4979                                         array(\r
4980                                                 'member' => &$mem\r
4981                                         )\r
4982                                 );\r
4983                                 break;\r
4984                         case 'blog':\r
4985                                 $id  = intRequestVar('blogid');\r
4986                                 $blg = $manager->getBlog($id);\r
4987                                 $manager->notify(\r
4988                                         'BlogSettingsFormExtras',\r
4989                                         array(\r
4990                                                 'member' => &$blg\r
4991                                         )\r
4992                                 );\r
4993                                 break;\r
4994                         default:\r
4995                                 $manager->notify(\r
4996                                         'GeneralSettingsFormExtras',\r
4997                                         array(\r
4998                                         )\r
4999                                 );\r
5000                                 break;\r
5001                 }\r
5002                 return;\r
5003         }\r
5004         \r
5005         /**\r
5006          * Actions::parse_pluginhelp()\r
5007          * Parse skinvar pluginhelp\r
5008          * \r
5009          * @param       void\r
5010          * @return      void\r
5011          */\r
5012         public function parse_pluginhelp()\r
5013         {\r
5014                 global $manager, $DIR_PLUGINS;\r
5015                 $plugid = intGetVar('plugid');\r
5016                 $plugName =  getPluginNameFromPid($plugid);\r
5017                 $plug =& $manager->getPlugin($plugName);\r
5018                 \r
5019                 if ( $plug->supportsFeature('HelpPage') > 0 )\r
5020                 {\r
5021                         $helpfile = $DIR_PLUGINS . $plug->getShortName() . '/help.';\r
5022                         if ( @file_exists($helpfile . 'php') )\r
5023                         {\r
5024                                 @include($helpfile . 'php');\r
5025                                 return;\r
5026                         }\r
5027                         elseif ( @file_exists($helpfile . 'html') )\r
5028                         {\r
5029                                 @include($helpfile . 'html');\r
5030                                 return;\r
5031                         }\r
5032                 }\r
5033                 echo '<p>' . _ERROR . ': ' . _ERROR_PLUGNOHELPFILE . "</p>\n";\r
5034                 echo '<p><a href="index.php?action=pluginlist">(' . _BACK . ")</a></p>\n";\r
5035                 return;\r
5036         }\r
5037         \r
5038         /**\r
5039          * Actions::parse_pluginlistlist()\r
5040          * Parse skinvar pluginlistlist\r
5041          * \r
5042          * @param       string  $templateName   name of template to use\r
5043          * @return      void\r
5044          */\r
5045         public function parse_pluginlistlist($templateName = '')\r
5046         {\r
5047                 $query  = "SELECT * FROM %s ORDER BY porder ASC;";\r
5048                 $query = sprintf($query, sql_table('plugin'));\r
5049                 $template['content']  = 'pluginlist';\r
5050                 $template['tabindex'] = 10;\r
5051                 skinableShowlist($query, 'table', $template, $templateName);\r
5052                 return;\r
5053         }\r
5054         \r
5055         /**\r
5056          * Actions::parse_pluginoptions()\r
5057          * Parse skinvar pluginoptions\r
5058          * \r
5059          * @param       string  $type   type of plugin option\r
5060          * @return      void\r
5061          */\r
5062         public function parse_pluginoptions($type = 'global')\r
5063         {\r
5064                 switch ( $type )\r
5065                 {\r
5066                         case 'member':\r
5067                                 $id = intRequestVar('memberid');\r
5068                                 break;\r
5069                         case 'blog':\r
5070                                 $id = intRequestVar('blogid');\r
5071                                 break;\r
5072                         case 'category':\r
5073                                 $id = intRequestVar('catid');\r
5074                                 break;\r
5075                 }\r
5076                 $this->objAdmin->_insertPluginOptions($type, $id);\r
5077                 return;\r
5078         }\r
5079         \r
5080         /**\r
5081          * Actions::parse_qmenuaddselect()\r
5082          * Parse skinvar qmanuaddselect\r
5083          * \r
5084          * @param       string  $templateName   name of template to use\r
5085          * @return      void\r
5086          */\r
5087         public function parse_qmenuaddselect($templateName = '')\r
5088         {\r
5089                 global $member;\r
5090                 $showAll = requestVar('showall');\r
5091                 if ( $member->isAdmin() && ($showAll == 'yes') )\r
5092                 {\r
5093                         // Super-Admins have access to all blogs! (no add item support though)\r
5094                         $query =  'SELECT bnumber as value, bname as text'\r
5095                                . ' FROM ' . sql_table('blog')\r
5096                                . ' ORDER BY bname';\r
5097                 }\r
5098                 else\r
5099                 {\r
5100                         $query =  'SELECT bnumber as value, bname as text'\r
5101                                . ' FROM ' . sql_table('blog') . ', ' . sql_table('team')\r
5102                                . ' WHERE tblog=bnumber and tmember=' . $member->getID()\r
5103                                . ' ORDER BY bname';\r
5104                 }\r
5105                 $template['name']          = 'blogid';\r
5106                 $template['tabindex']   = 15000;\r
5107                 $template['extra']        = _QMENU_ADD_SELECT;\r
5108                 $template['selected']   = -1;\r
5109                 $template['shorten']    = 10;\r
5110                 $template['shortenel']  = '';\r
5111                 $template['javascript'] = 'onchange="return form.submit()"';\r
5112                 skinableShowlist($query, 'select', $template, $templateName);\r
5113                 return;\r
5114         }\r
5115 \r
5116         /**\r
5117          * Actions::parse_quickmenu()\r
5118          * Parse skinvar quickmenu\r
5119          * \r
5120          * @param       string  $templateName   name of template to use\r
5121          * @return      void\r
5122          */\r
5123         public function parse_quickmenu($templateName = '')\r
5124         {\r
5125                 global $manager;\r
5126                 $templates = array();\r
5127                 $template  = array();\r
5128                 if ( !empty($templateName) )\r
5129                 {\r
5130                         $templates = skinableTEMPLATE::read($templateName);\r
5131                 }\r
5132                 $pluginExtras = array();\r
5133                 $manager->notify(\r
5134                         'QuickMenu',\r
5135                         array(\r
5136                                 'options' => &$pluginExtras\r
5137                         )\r
5138                 );\r
5139                 if ( count($pluginExtras) > 0 )\r
5140                 {\r
5141                         if ( array_key_exists('PLUGIN_QUICKMENU_TITLE', $templates) || !empty($templates['PLUGIN_QUICKMENU_TITLE']) )\r
5142                         {\r
5143                                 $template['title'] = $templates['PLUGIN_QUICKMENU_TITLE'];\r
5144                         }\r
5145                         else\r
5146                         {\r
5147                                 $template['title'] = '<h2><%text(_QMENU_PLUGINS)%></h2>';\r
5148                         }\r
5149                         $handler = new skinableACTIONS($this->skintype, $template, $this->objAdmin);\r
5150                         $parser  = new PARSER(skinableACTIONS::getDefinedActions(), $handler);\r
5151                         $parser->parse($template['title']);\r
5152                         \r
5153                         if ( array_key_exists('PLUGIN_QUICKMENU_HEAD', $templates) || !empty($templates['PLUGIN_QUICKMENU_HEAD']) )\r
5154                         {\r
5155                                 $template['head'] = $templates['PLUGIN_QUICKMENU_HEAD'];\r
5156                         }\r
5157                         else\r
5158                         {\r
5159                                 $template['head'] = '<ul>';\r
5160                         }\r
5161                         \r
5162                         echo $template['head'];\r
5163                         \r
5164                         if ( array_key_exists('PLUGIN_QUICKMENU_BODY', $templates) || !empty($templates['PLUGIN_QUICKMENU_BODY']) )\r
5165                         {\r
5166                                 $template['body'] = $templates['PLUGIN_QUICKMENU_BODY'];\r
5167                         }\r
5168                         else\r
5169                         {\r
5170                                 $template['body'] = '<li><a href="<%plugadminurl%>" title="<%plugadmintooltip%>"><%plugadmintitle%></a></li>';\r
5171                         }\r
5172                         \r
5173                         foreach ( $pluginExtras as $aInfo )\r
5174                         {\r
5175                                 $data = array(\r
5176                                         'plugadminurl'          => ENTITY::hsc($aInfo['url'], ENT_QUOTES),\r
5177                                         'plugadmintooltip'      => ENTITY::hsc($aInfo['tooltip'], ENT_QUOTES),\r
5178                                         'plugadmintitle'        => ENTITY::hsc($aInfo['title'], ENT_QUOTES),\r
5179                                 );\r
5180                                 echo TEMPLATE::fill($template['body'], $data);\r
5181                         }\r
5182                         if ( array_key_exists('PLUGIN_QUICKMENU_FOOT', $templates) || !empty($templates['PLUGIN_QUICKMENU_FOOT']) )\r
5183                         {\r
5184                                 $template['foot'] = $templates['PLUGIN_QUICKMENU_FOOT'];\r
5185                         }\r
5186                         else\r
5187                         {\r
5188                                 $template['foot'] = '</ul>';\r
5189                         }\r
5190                         echo $template['foot'];\r
5191                 }\r
5192                 return;\r
5193         }\r
5194         \r
5195         /**\r
5196          * Actions::parse_requestblogid()\r
5197          * Parse skinvar requestblogid\r
5198          * \r
5199          * @param       void\r
5200          * @return      void\r
5201          */\r
5202         public function parse_requestblogid()\r
5203         {\r
5204                 echo intRequestVar('blogid');\r
5205                 return;\r
5206         }\r
5207         \r
5208         /**\r
5209          * Actions::parse_requestiprange()\r
5210          * Parse skinvar requestiprange\r
5211          * \r
5212          * @param       void\r
5213          * @return      void\r
5214          */\r
5215         public function parse_requestiprange()\r
5216         {\r
5217                 if ( requestVar('iprange') )\r
5218                 {\r
5219                         echo Entity::hsc(requestVar('iprange'));\r
5220                 }\r
5221                 elseif ( requestVar('ip') )\r
5222                 {\r
5223                         echo Entity::hsc(requestVar('ip'));\r
5224                 }\r
5225                 return;\r
5226         }\r
5227         \r
5228         /**\r
5229          * Actions::parse_selectlocaladminskinfiles()\r
5230          * Parse skinvar selectlocaladminskinfiles\r
5231          * \r
5232          * @param       void\r
5233          * @return      void\r
5234          */\r
5235         public function parse_selectlocaladminskinfiles()\r
5236         {\r
5237                 global $DIR_ADMINSKINS, $manager;\r
5238                 $candidates = skinableSKINIMPORT::searchForCandidates($DIR_ADMINSKINS);\r
5239                 foreach ( $candidates as $skinname => $skinfile )\r
5240                 {\r
5241                         $html = Entit::hsc($skinfile);\r
5242                         echo '<option value="' . $html . '">' . $skinname . "</option>\n";\r
5243                 }\r
5244                 return;\r
5245         }\r
5246         \r
5247         /**\r
5248          * Actions::parse_selectlocalskinfiles()\r
5249          * Parse skinvar selectlocalskinfiles\r
5250          * \r
5251          * @param       void\r
5252          * @return      void\r
5253          */\r
5254         function parse_selectlocalskinfiles()\r
5255         {\r
5256                 global $DIR_SKINS;\r
5257                 $candidates = SKINIMPORT::searchForCandidates($DIR_SKINS);\r
5258                 foreach ( $candidates as $skinname => $skinfile )\r
5259                 {\r
5260                         $html = ENTITY::hsc($skinfile);\r
5261                         echo '<option value="' . $html . '">' . $skinname . "</option>\n";\r
5262                 }\r
5263                 return;\r
5264         }\r
5265         \r
5266         /**\r
5267          * Actions::parse_skineditallowedlist()\r
5268          * Parse skinvar skineditallowedlist\r
5269          * \r
5270          * @param       string  $type                   type of skin\r
5271          * @param       string  $templateName   name of template\r
5272          * @return      void\r
5273          */\r
5274         public function parse_skineditallowedlist($type, $templateName = '')\r
5275         {\r
5276                 switch ( $type )\r
5277                 {\r
5278                         case 'blog':\r
5279                                 $query = "SELECT bshortname, bname FROM %s";\r
5280                                 $show  = array(\r
5281                                         'content' => 'shortblognames'\r
5282                                 );\r
5283                                 $query = sprintf($query, sql_table('blog'));\r
5284                                 skinableShowlist($query, 'table', $show, $templateName);\r
5285                                 break;\r
5286                         case 'template':\r
5287                                 $query = "SELECT tdname as name, tddesc as description FROM %s";\r
5288                                 $show  = array(\r
5289                                         'content' => 'shortnames'\r
5290                                 );\r
5291                                 $query = sprintf($query, sql_table('template_desc'));\r
5292                                 skinableShowlist($query, 'table', $show, $templateName);\r
5293                                 break;\r
5294                 }\r
5295                 return;\r
5296         }\r
5297         \r
5298         /**\r
5299          * Actions::parse_skinfile()\r
5300          * Inserts an url relative to the skindir (useful when doing import/export)\r
5301          *\r
5302          * e.g. <skinfile(default/myfile.sth)>\r
5303          * \r
5304          * @param       string  $filename       file name for skin\r
5305          * @return      void\r
5306          */\r
5307         public function parse_skinfile($filename)\r
5308         {\r
5309                 $base = NP_SkinableAdmin::getAdminSkinURL();\r
5310                 $pref = PARSER::getProperty('IncludePrefix');\r
5311                 echo $base . $pref . $filename;\r
5312                 return;\r
5313         }\r
5314         \r
5315         /**\r
5316          * Actions::parse_skinielist()\r
5317          * Parse skinvar skinielist\r
5318          * \r
5319          * @param       string  $type                   type of skin\r
5320          * @param       string  $templateName   name of template to use\r
5321          * @return      void\r
5322          */\r
5323         public function parse_skinielist($type, $templateName = '')\r
5324         {\r
5325                 $templates = array();\r
5326                 if ( $templateName )\r
5327                 {\r
5328                         $templates = skinableTEMPLATE::read($templateName);\r
5329                 }\r
5330                 if ( array_key_exists('SKINIE_EXPORT_LIST', $templates) && !empty($templates['SKINIE_EXPORT_LIST']) )\r
5331                 {\r
5332                         $template = $templates['SKINIE_EXPORT_LIST'];\r
5333                 }\r
5334                 else\r
5335                 {\r
5336                         $template = '<td><input type="checkbox" name="<%typeid%>"  id="<%expid%>" /><label for="<%expid%>"><%expname%></label></td>' . "\n"\r
5337                                           . "<td><%expdesc%></td>\n"\r
5338                                           . "</tr><tr>\n";\r
5339                 }\r
5340                 switch ( $type )\r
5341                 {\r
5342                         case 'skin':\r
5343                                 $res = sql_query('SELECT * FROM ' . sql_table('skin_desc'));\r
5344                                 while ( $skinObj = sql_fetch_object($res) )\r
5345                                 {\r
5346                                         $data = array(\r
5347                                                 'typeid'        => 'skin[' . $skinObj->sdnumber . ']',\r
5348                                                 'expid'         => 'skinexp' . $skinObj->sdnumber,\r
5349                                                 'expname'       => ENTITY::hsc($skinObj->sdname, ENT_QUOTES),\r
5350                                                 'expdesc'       => ENTITY::hsc($skinObj->sddesc, ENT_QUOTES),\r
5351                                         );\r
5352                                         echo TEMPLATE::fill($template, $data);\r
5353                                 }\r
5354                                 break;\r
5355                         case 'template':\r
5356                                 $res = sql_query('SELECT * FROM '.sql_table('template_desc'));\r
5357                                 while ($templateObj = sql_fetch_object($res)) {\r
5358                                         $data = array(\r
5359                                                 'typeid'        => 'template[' . $templateObj->tdnumber . ']',\r
5360                                                 'expid'         => 'templateexp' . $templateObj->tdnumber,\r
5361                                                 'expname'       => ENTITY::hsc($templateObj->tdname, ENT_QUOTES),\r
5362                                                 'expdesc'       => ENTITY::hsc($templateObj->tddesc, ENT_QUOTES),\r
5363                                         );\r
5364                                         echo TEMPLATE::fill($template, $data);\r
5365                                 }\r
5366                                 break;\r
5367                 }\r
5368                 return;\r
5369         }\r
5370         \r
5371         /**\r
5372          * Actions::parse_skinoverview()\r
5373          * Parse skinvar skinoverview\r
5374          * \r
5375          * @param       string  $templateName   name of template to use\r
5376          * @return      void\r
5377          */\r
5378         public function parse_skinoverview($templateName = '')\r
5379         {\r
5380                 $query  = "SELECT * FROM %s ORDER BY sdname";\r
5381                 $query = sprintf($query, sql_table('skin_desc'));\r
5382                 \r
5383                 $template['content']  = 'skinlist';\r
5384                 $template['tabindex'] = 10;\r
5385                 \r
5386                 skinableShowlist($query, 'table', $template, $templateName);\r
5387                 return;\r
5388         }\r
5389         \r
5390         /**\r
5391          * Actions::parse_skintypehelp()\r
5392          * Check editing skintypehelp\r
5393          * \r
5394          * @param       void\r
5395          * @return      void\r
5396          */\r
5397         public function parse_skintypehelp()\r
5398         {\r
5399                 $nowSkinType = strtolower(trim(requestVar('type')));\r
5400                 $regularType = array(\r
5401                         'index',\r
5402                         'item',\r
5403                         'archivelist',\r
5404                         'archive',\r
5405                         'search',\r
5406                         'error',\r
5407                         'member',\r
5408                         'imagepopup'\r
5409                 );\r
5410                 \r
5411                 if ( in_array($nowSkinType, $regularType) )\r
5412                 {\r
5413                         help('skinpart' . $nowSkinType);\r
5414                 }\r
5415                 else\r
5416                 {\r
5417                         help('skinpartspecial');\r
5418                 }\r
5419                 return;\r
5420         }\r
5421         \r
5422         /**\r
5423          * Actions::parse_specialskinlist()\r
5424          * Parse skinvar specialskinlist\r
5425          * \r
5426          * @param       string  $templateName   name of template to use\r
5427          * @return      void\r
5428          */\r
5429         public function parse_specialskinlist($templateName = '')\r
5430         {\r
5431                 $templates = array();\r
5432                 if ( $templateName )\r
5433                 {\r
5434                         $templates = skinableTEMPLATE::read($templateName);\r
5435                 }\r
5436                 $nType  = array(\r
5437                         'index',\r
5438                         'item',\r
5439                         'error',\r
5440                         'search',\r
5441                         'archive',\r
5442                         'archivelist',\r
5443                         'imagepopup',\r
5444                         'member'\r
5445                 );\r
5446                 $skinid = intRequestVar('skinid');\r
5447                 $query  = "SELECT stype FROM %s WHERE stype NOT IN ('%s') AND sdesc = %d;";\r
5448                 $query = sprintf($query, sql_table('skin'), implode("', '", $nType), $skinid);\r
5449                 \r
5450                 $res    = sql_query($query);\r
5451                 if ( $res && sql_num_rows($res) > 0 )\r
5452                 {\r
5453                         $data = array();\r
5454                         if ( array_key_exists('SPECIALSKINLIST_HEAD', $templates) && !empty($templates['SPECIALSKINLIST_HEAD']) )\r
5455                         {\r
5456                                 $template['head'] = $templates['SPECIALSKINLIST_HEAD'];\r
5457                         }\r
5458                         else\r
5459                         {\r
5460                                 $template['head'] = "<ul>\n";\r
5461                         }\r
5462                         echo TEMPLATE::fill($template['head'], $data);\r
5463                         if ( array_key_exists('SPECIALSKINLIST_BODY', $templates) && !empty($templates['SPECIALSKINLIST_BODY']) )\r
5464                         {\r
5465                                 $template['body'] = $templates['SPECIALSKINLIST_BODY'];\r
5466                         }\r
5467                         else\r
5468                         {\r
5469                                 $template['body'] = '<li><a tabindex="<%tabindex%>" href="index.php?action=skinedittype&amp;skinid=<%skinid%>'\r
5470                                                                   . '&amp;type=<%skintype%>"><%skintype%></a> (<a tabindex="<%tabindex%>" href="index.php?'\r
5471                                                                   . 'action=skinremovetype&amp;skinid=<%skinid%>&amp;type=<%skintype%>">remove</a>)</li>';\r
5472                         }\r
5473                         $tabstart = 75;\r
5474                         while ( $row = sql_fetch_assoc($res) )\r
5475                         {\r
5476                                 $data = array(\r
5477                                         'tabindex' => $tabstart++,\r
5478                                         'skinid'   => $skinid,\r
5479                                         'skintype' => ENTITY::hsc(strtolower($row['stype']), ENT_QUOTES)\r
5480                                 );\r
5481                                 echo TEMPLATE::fill($template['body'], $data);\r
5482                         }\r
5483                         $data = array();\r
5484                         if (array_key_exists('SPECIALSKINLIST_FOOT', $templates) && !empty($templates['SPECIALSKINLIST_FOOT']) )\r
5485                         {\r
5486                                 $template['foot'] = $templates['SPECIALSKINLIST_FOOT'];\r
5487                         }\r
5488                         else\r
5489                         {\r
5490                                 $template['foot'] = "</ul>\n";\r
5491                         }\r
5492                         echo TEMPLATE::fill($template['foot'], $data);\r
5493                         return;\r
5494                 }\r
5495         }\r
5496         \r
5497         /**\r
5498          * Actions::parse_sprinttext()\r
5499          * Parse sprinttext\r
5500          * \r
5501          * @param       string  $which  \r
5502          * @param       string  $val    \r
5503          * @return      void\r
5504          */\r
5505         public function parse_sprinttext($which, $val)\r
5506         {\r
5507                 if ( !defined($which) )\r
5508                 {\r
5509                         $base = $which;\r
5510                 }\r
5511                 else\r
5512                 {\r
5513                         $base = constant($which);\r
5514                 }\r
5515                 \r
5516                 if ( preg_match('#[^<|%].*[^%|>]#', $val, $matchies) )\r
5517                 {\r
5518                         if ( !preg_match('#[(].*[^)]#', $matchies[0], $args) )\r
5519                         {\r
5520                                 $met = 'parse_' . $matchies[0];\r
5521                         }\r
5522                         else\r
5523                         {\r
5524                                 $arg = trim($args[0], '()');\r
5525                                 $met = 'parse_' . substr($matchies[0], 0, strpos($matchies[0], '('));\r
5526                         }\r
5527                         \r
5528                         if ( method_exists($this, $met) )\r
5529                         {\r
5530                                 $value = call_user_func(array(&$this, $met), $arg);\r
5531                         }\r
5532                 }\r
5533                 \r
5534                 if ( !isset($value) || empty($value) )\r
5535                 {\r
5536                         $value = $val;\r
5537                 }\r
5538                 echo sprintf($base, $value);\r
5539                 return;\r
5540         }\r
5541         \r
5542         /**\r
5543          * Actions::parse_systemsettings()\r
5544          * Parse skinvar systemsettings\r
5545          * \r
5546          * @param       string  $type                   type of settings for system\r
5547          * @param       string  $templateName   name of template to use \r
5548          * @return      void\r
5549          */\r
5550         public function parse_systemsettings($type = 'phpinfo', $templateName = '')\r
5551         {\r
5552                 global $member, $CONF, $nucleus;\r
5553                 \r
5554                 $member->isAdmin() or $this->objAdmin->disallow();\r
5555                 \r
5556                 $enable  = _ADMIN_SYSTEMOVERVIEW_ENABLE;\r
5557                 $disable = _ADMIN_SYSTEMOVERVIEW_DISABLE;\r
5558                 \r
5559                 switch ( $type )\r
5560                 {\r
5561                         case 'phpversion':\r
5562                                 echo phpversion();\r
5563                                 break;\r
5564                         case 'sqlserverinfo':\r
5565                                 echo sql_get_server_info();\r
5566                                 break;\r
5567                         case 'sqlclientinfo':\r
5568                                 echo sql_get_client_info();\r
5569                                 break;\r
5570                         case 'magicquotesgpc':\r
5571                                 echo ini_get('magic_quotes_gpc') ? 'On' : 'Off';\r
5572                                 break;\r
5573                         case 'magicquotesruntime':\r
5574                                 echo ini_get('magic_quotes_runtime') ? 'On' : 'Off';\r
5575                                 break;\r
5576                         case 'registerglobals':\r
5577                                 echo ini_get('register_globals') ? 'On' : 'Off';\r
5578                                 break;\r
5579                         case 'gdinfo':\r
5580                                 $templates = array();\r
5581                                 if ( $templateName )\r
5582                                 {\r
5583                                         $templates = skinableTEMPLATE::read($templateName);\r
5584                                 }\r
5585                                 if ( array_key_exists('SYSTEMINFO_GDSETTINGS', $templates) && !empty($templates['SYSTEMINFO_GDSETTINGS']) )\r
5586                                 {\r
5587                                         $template = $templates['SYSTEMINFO_GDSETTINGS'];\r
5588                                 }\r
5589                                 else\r
5590                                 {\r
5591                                         $template = "<tr>\n\t\t" . '<td width="50%">' . "<%key%></td><td><%value%></td>\n</tr>\n";\r
5592                                 }\r
5593                                 \r
5594                                 $gdinfo = gd_info();\r
5595                                 \r
5596                                 foreach ( $gdinfo as $key => $value )\r
5597                                 {\r
5598                                         if ( is_bool($value) )\r
5599                                         {\r
5600                                                 $value = $value ? $enable : $disable;\r
5601                                         }\r
5602                                         else\r
5603                                         {\r
5604                                                 $value = ENTITY::hsc($value, ENT_QUOTES);\r
5605                                         }\r
5606                                         $data = array(\r
5607                                                 'key'   => $key,\r
5608                                                 'value' => $value,\r
5609                                         );\r
5610                                         echo TEMPLATE::fill($template, $data);\r
5611                                 }\r
5612                                 break;\r
5613                         case 'modrewrite':\r
5614                                 ob_start();\r
5615                                 phpinfo(INFO_MODULES);\r
5616                                 $im = ob_get_contents();\r
5617                                 ob_end_clean();\r
5618                                 echo (strstr($im, 'mod_rewrite') != '') ? $enable : $disable;\r
5619                                 break;\r
5620                         case 'nucleusversion':\r
5621                                 echo getNucleusVersion() / 100 . '(' . $nucleus['version'] . ')';\r
5622                                 break;\r
5623                         case 'nucleuspatchlevel':\r
5624                                 echo getNucleusPatchLevel();\r
5625                                 break;\r
5626                         case 'confself':\r
5627                                 echo $CONF['Self'];\r
5628                                 break;\r
5629                         case 'confitemurl':\r
5630                                 echo $CONF['ItemURL'];\r
5631                                 break;\r
5632                         case 'alertonheaderssent':\r
5633                                 echo $CONF['alertOnHeadersSent'] ? $enable : $disable;\r
5634                                 break;\r
5635                         case 'nucleuscodename':\r
5636                                 if ( $nucleus['codename'] != '' )\r
5637                                 {\r
5638                                         echo ' &quot;' . $nucleus['codename'] . '&quot;';\r
5639                                 }\r
5640                                 break;\r
5641                         case 'versioncheckurl':\r
5642                                 echo sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());\r
5643                                 break;\r
5644                 }\r
5645                 return;\r
5646         }\r
5647         \r
5648         /**\r
5649          * Actions::parse_templateoverview()\r
5650          * Parse skinvar templateoverview\r
5651          * \r
5652          * @param       string  $templateName   name of template to use\r
5653          * @return      void\r
5654          */\r
5655         public function parse_templateoverview($templateName = '')\r
5656         {\r
5657                 $query  = "SELECT * FROM %s ORDER BY tdname";\r
5658                 $query = sprintf($query, sql_table('template_desc'));\r
5659                 $template['content']  = 'templatelist';\r
5660                 $template['tabindex'] = 10;\r
5661                 skinableShowlist($query, 'table', $template, $templateName);\r
5662                 return;\r
5663         }\r
5664         \r
5665         /**\r
5666          * Actions::parse_versioncheckurl()\r
5667          * Parse skinvar versioncheckurl\r
5668          * \r
5669          * @param       void\r
5670          * @return      void\r
5671          */\r
5672         public function parse_versioncheckurl()\r
5673         {\r
5674                 echo sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());\r
5675                 return;\r
5676         }\r
5677         \r
5678         /**\r
5679          * Actions::parse_yrbloglist()\r
5680          * Parse skinvar yrbloglist\r
5681          * \r
5682          * @param       string  $templateName   name of template to use\r
5683          * @return      void\r
5684          */\r
5685         public function parse_yrbloglist($templateName = '')\r
5686         {\r
5687                 global $member;\r
5688                 $showAll = requestVar('showall');\r
5689                 \r
5690                 if ( $member->isAdmin() && ($showAll == 'yes') )\r
5691                 {\r
5692                         // Super-Admins have access to all blogs! (no add item support though)\r
5693                         $query =  "SELECT bnumber, bname, 1 as tadmin, burl, bshortname"\r
5694                                 . " FROM %s"\r
5695                                 . " ORDER BY bnumber";\r
5696                         $query = sprintf($query, sql_table('blog'));\r
5697                 }\r
5698                 else\r
5699                 {\r
5700                         $query =  "SELECT bnumber, bname, tadmin, burl, bshortname"\r
5701                                 . " FROM %s,%s"\r
5702                                 . " WHERE tblog=bnumber and tmember=%d"\r
5703                                 . " ORDER BY bnumber";\r
5704                         $query = sprintf($query, sql_table('blog'), sql_table('team'), (integer) $member->getID());\r
5705                 }\r
5706                 \r
5707                 $template['content']    = 'bloglist';\r
5708                 $template['superadmin'] = $member->isAdmin();\r
5709                 \r
5710                 $amount = skinableShowlist($query, 'table', $template, $templateName);\r
5711                 \r
5712                 if ( ($showAll != 'yes') && ($member->isAdmin()) )\r
5713                 {\r
5714                         $query = 'SELECT COUNT(*) as result FROM ' . sql_table('blog');\r
5715                         \r
5716                         $total = quickQuery($query);\r
5717                         if ( $total > $amount )\r
5718                         {\r
5719                                 echo '<p><a href="index.php?action=overview&amp;showall=yes">' . _OVERVIEW_SHOWALL . '</a></p>';\r
5720                         }\r
5721                 }\r
5722                 \r
5723                 if ( $amount == 0 )\r
5724                 {\r
5725                         echo _OVERVIEW_NOBLOGS;\r
5726                 }\r
5727                 elseif( $amount != 0 )\r
5728                 {\r
5729                         echo '<h2>' . _OVERVIEW_YRDRAFTS . '</h2>';\r
5730                         \r
5731                         $query =  "SELECT ititle, inumber, bshortname"\r
5732                                . " FROM %s,%s"\r
5733                                . ' WHERE iauthor=%d AND iblog=bnumber AND idraft=1';\r
5734                         $query = sprintf($query. sql_table('item'), sql_table('blog'), (integer) $member->getID());\r
5735                         \r
5736                         $template['content'] = 'draftlist';\r
5737                         \r
5738                         $amountdrafts = skinableShowlist($query, 'table', $template, $templateName);\r
5739                         if ( $amountdrafts == 0 )\r
5740                         {\r
5741                                 echo _OVERVIEW_NODRAFTS;\r
5742                         }\r
5743                 }\r
5744                 return;\r
5745         }\r
5746         \r
5747         /**\r
5748          * Actions::customHelp()\r
5749          * shows a link to custom help file\r
5750          * \r
5751          * @param       integer $id                     \r
5752          * @param       string  $tplName        \r
5753          * @param       string  $url            \r
5754          * @param       string  $iconURL        \r
5755          * @param       string  $alt            \r
5756          * @param       string  $title          \r
5757          * @param       $onclick\r
5758          * \r
5759          */\r
5760         private function customHelp($id, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')\r
5761         {\r
5762                 echo self::customHelpHtml($id, $tplName, $url, $iconURL, $alt, $title, $onclick);\r
5763         }\r
5764         \r
5765         /**\r
5766          * Actions::customHelpHtml()\r
5767          * \r
5768          * @param       integer $id                     \r
5769          * @param       string  $tplName        \r
5770          * @param       string  $url            \r
5771          * @param       string  $iconURL        \r
5772          * @param       string  $alt            \r
5773          * @param       string  $title          \r
5774          * @param       string  $onclick        \r
5775          * @return      string  anchor element with help uri\r
5776          */\r
5777         static public function customHelpHtml($id, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')\r
5778         {\r
5779                 $templates = array();\r
5780                 if ( $tplName )\r
5781                 {\r
5782                         $templates = skinableTEMPLATE::read($tplName);\r
5783                 }\r
5784                 if ( array_key_exists('ADMIN_CUSTOMHELPLINK_ICON', $templates) && !empty($templates['ADMIN_CUSTOMHELPLINK_ICON']) )\r
5785                 {\r
5786                         $template = $templates['ADMIN_CUSTOMHELPLINK_ICON'];\r
5787                 }\r
5788                 else\r
5789                 {\r
5790                         $template = '<img src="<%iconurl%>" <%width%><%height%>alt="<%alt%>" title="<%title%>" /></a>';\r
5791                 }\r
5792                 \r
5793                 if ( empty($iconURL) )\r
5794                 {\r
5795                         global $CONF;\r
5796                         $iconURL = $CONF['AdminURL'] . 'documentation/icon-help.gif';\r
5797                 }\r
5798                 if ( function_exists('getimagesize') )\r
5799                 {\r
5800                         $size   = getimagesize($iconURL);\r
5801                         $width  = 'width="'  . $size[0] . '" ';\r
5802                         $height = 'height="' . $size[1] . '" ';\r
5803                 }\r
5804                 $data = array(\r
5805                         'iconurl'       => $iconURL,\r
5806                         'width'         => $width,\r
5807                         'height'        => $height,\r
5808                         'alt'           => (isset($alt) && !empty($alt))         ? $alt   : _HELP_TT,\r
5809                         'title'         => (isset($title) && !empty($title)) ? $title : _HELP_TT,\r
5810                 );\r
5811                 $icon = TEMPLATE::fill($template, $data);\r
5812                 $help = self::customHelplink($id, $tplName, $url, $title, $onclick);\r
5813                 return $help . $icon;\r
5814         }\r
5815         \r
5816         /**\r
5817          * Actions::input_yesno\r
5818          * \r
5819          * @param               $name\r
5820          * @param               $checkedval\r
5821          * @param               $tabindex\r
5822          * @param               $value1\r
5823          * @param               $value2\r
5824          * @param               $yesval\r
5825          * @param               $noval\r
5826          * @param               $isAdmin\r
5827          * @param               $templateName\r
5828          * @param               $showlist\r
5829          */\r
5830         static function input_yesno($name,\r
5831                                                                 $checkedval,\r
5832                                                                 $tabindex        = 0,\r
5833                                                                 $value1    = 1,\r
5834                                                                 $value2    = 0,\r
5835                                                                 $yesval    = _YES,\r
5836                                                                 $noval          = _NO,\r
5837                                                                 $isAdmin          = 0,\r
5838                                                                 $templateName = '',\r
5839                                                                 $showlist        = false)\r
5840         {\r
5841                 $templates = array();\r
5842                 if ( $templateName )\r
5843                 {\r
5844                         $templates = skinableTEMPLATE::read($templateName);\r
5845                 }\r
5846                 \r
5847                 if ( $name == 'admin' )\r
5848                 {\r
5849                         if ( array_key_exists('INPUTYESNO_TEMPLATE_ADMIN', $templates) && !empty($templates['INPUTYESNO_TEMPLATE_ADMIN']) )\r
5850                         {\r
5851                                 $template = $templates['INPUTYESNO_TEMPLATE_ADMIN'];\r
5852                         }\r
5853                         else\r
5854                         {\r
5855                                 $template = '<input onclick="selectCanLogin(true);" type="radio" name="<%name%>" value="<%yesval%>" <%yescheckedval%> id="<%yesid%>" />' . "\n"\r
5856                                           . '<label for="<%yesid%>"><%yesvaltext%></label>' . "\n"\r
5857                                           . '<input onclick="selectCanLogin(false);" type="radio" name="<%name%>" value="<%noval%>" <%nocheckedval%> id="<%noid%>"<%disabled%> />' . "\n"\r
5858                                           . '<label for="<%noid%>"><%novaltext%></label>' . "\n";\r
5859                         }\r
5860                 }\r
5861                 else\r
5862                 {\r
5863                         if ( array_key_exists('INPUTYESNO_TEMPLATE_NORMAL', $templates) && !empty($templates['INPUTYESNO_TEMPLATE_NORMAL']) )\r
5864                         {\r
5865                                 $template = $templates['INPUTYESNO_TEMPLATE_NORMAL'];\r
5866                         }\r
5867                         if ( $showlist )\r
5868                         {\r
5869                                 if ( array_key_exists('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO', $templates) && !empty($templates['SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO']) )\r
5870                                 {\r
5871                                         $template = $templates['SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO'];\r
5872                                 }\r
5873                         }\r
5874                         if ( !isset($template) )\r
5875                         {\r
5876                                 $template = '<input type="radio" name="<%name%>" value="<%yesval%>" <%yescheckedval%> id="<%yesid%>" />' . "\n"\r
5877                                           . '<label for="<%yesid%>"><%yesvaltext%></label>' . "\n"\r
5878                                           . '<input type="radio" name="<%name%>" value="<%noval%>" <%nocheckedval%> id="<%noid%>"<%disabled%> />' . "\n"\r
5879                                           . '<label for="<%noid%>"><%novaltext%></label>' . "\n";\r
5880                         }\r
5881                 }\r
5882                 \r
5883                 //echo $template;\r
5884                 $id             = ENTITY::hsc($name);\r
5885                 $id             = str_replace('[', '-', $id);\r
5886                 $id             = str_replace(']', '-', $id);\r
5887                 $id1    = $id . ENTITY::hsc($value1);\r
5888                 $id2    = $id . ENTITY::hsc($value2);\r
5889                 $dat = array(\r
5890                         'name'            => ENTITY::hsc($name),\r
5891                         'yesval'                => ENTITY::hsc($value1),\r
5892                         'noval'          => ENTITY::hsc($value2),\r
5893                         'yesid'          => $id1,\r
5894                         'noid'            => $id2,\r
5895                         'yesvaltext'    => $yesval,\r
5896                         'novaltext'      => $noval,\r
5897                         'yescheckedval' => ($checkedval == $value1) ? ' checked="checked" tabindex="' . $tabindex . '"': '',\r
5898                         'nocheckedval'  => ($checkedval != $value1) ? ' checked="checked" tabindex="' . $tabindex . '"': '',\r
5899                         'disabled'        => ($isAdmin && $name == 'canlogin') ? ' disabled="disabled"' : '',\r
5900                 );\r
5901                 \r
5902                 if ( $showlist )\r
5903                 {\r
5904                         return skinableTEMPLATE::fill($template, $dat);\r
5905                 }\r
5906                 else\r
5907                 {\r
5908                         echo TEMPLATE::fill($template, $dat);\r
5909                 }\r
5910                 return;\r
5911         }\r
5912 }\r