OSDN Git Service

ActionsクラスにskinnableActonsクラスのメソッドの大部分を移植。
[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 }