OSDN Git Service

MERGE: AdminActionクラスの追加とmasterからのマージ。
[nucleus-jp/nucleus-next.git] / nucleus / libs / SKIN.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  * Class representing a skin\r
14  *\r
15  * @license http://nucleuscms.org/license.txt GNU General Public License\r
16  * @copyright Copyright (C) 2002-2009 The Nucleus Group\r
17  * @version $Id: SKIN.php 1727 2012-04-07 02:54:22Z sakamocchi $\r
18  */\r
19 \r
20 if ( !function_exists('requestVar') ) \r
21 {\r
22         exit;\r
23 }\r
24 require_once dirname(__FILE__) . '/ACTIONS.php';\r
25 \r
26 class Skin\r
27 {\r
28         // after creating a SKIN object, evaluates to true when the skin exists\r
29         private $valid;\r
30         \r
31         // skin characteristics. Use the getXXX methods rather than accessing directly\r
32         private $id;\r
33         private $description;\r
34         private $contentType;\r
35         private $includeMode;           // either 'normal' or 'skindir'\r
36         private $includePrefix;\r
37         private $name;\r
38         \r
39         /**\r
40          * Skin::__construct()\r
41          * Constructor for a new SKIN object\r
42          * \r
43          * @param       integer $id     id of the skin\r
44          * @return      void\r
45          */\r
46         public function __construct($id)\r
47         {\r
48                 $this->id = (integer) $id;\r
49                 \r
50                 // read skin name/description/content type\r
51                 $query = "SELECT * FROM %s WHERE sdnumber=%d";\r
52                 $query = sprintf($query, sql_table('skin_desc'), (integer) $this->id);\r
53                 $res = sql_query($query);\r
54                 $obj = sql_fetch_object($res);\r
55                 $this->valid = (sql_num_rows($res) > 0);\r
56                 if ( !$this->valid )\r
57                 {\r
58                         return;\r
59                 }\r
60                 \r
61                 $this->name = $obj->sdname;\r
62                 $this->description = $obj->sddesc;\r
63                 $this->contentType = $obj->sdtype;\r
64                 $this->includeMode = $obj->sdincmode;\r
65                 $this->includePrefix = $obj->sdincpref;\r
66                 return;\r
67         }\r
68         \r
69         /**\r
70          * Skin::getID()\r
71          * Get SKIN id\r
72          * \r
73          * @param       void\r
74          * @return      integer id for this skin instance\r
75          */\r
76         public function getID()\r
77         {\r
78                 return (integer) $this->id;\r
79         }\r
80         \r
81         /**\r
82          * Skin::isValid()\r
83          * \r
84          * @param       void\r
85          * @return      boolean\r
86          */\r
87         public function isValid()\r
88         {\r
89                 return (boolean) $this->valid;\r
90         }\r
91         \r
92         /**\r
93          * Skin::getName()\r
94          * Get SKIN name\r
95          * \r
96          * @param       void\r
97          * @return      string  name of this skin instance\r
98          */\r
99         public function getName()\r
100         {\r
101                 return (string) $this->name;\r
102         }\r
103         \r
104         /**\r
105          * Skin::getDescription()\r
106          * Get SKIN description\r
107          * \r
108          * @param       void\r
109          * @return      string  description of this skin instance\r
110          */\r
111         public function getDescription()\r
112         {\r
113                 return (string) $this->description;\r
114         }\r
115         \r
116         /**\r
117          * Skin::getContentType()\r
118          * Get SKIN content type\r
119          * e.g. text/xml, text/html, application/atom+xml\r
120          * \r
121          * @param       void\r
122          * @return      string  name of this skin instance\r
123          */\r
124         public function getContentType()\r
125         {\r
126                 return (string) $this->contentType;\r
127         }\r
128         \r
129         /**\r
130          * Skin::getIncludeMode()\r
131          * Get include mode of the SKIN\r
132          * \r
133          * Returns either 'normal' or 'skindir':\r
134          * 'normal': if a all data of the skin can be found in the databse\r
135          * 'skindir': if the skin has data in the it's skin driectory\r
136          * \r
137          * @param       void\r
138          * @return      string  normal/skindir\r
139          */\r
140         public function getIncludeMode()\r
141         {\r
142                 return (string) $this->includeMode;\r
143         }\r
144         \r
145         /**\r
146          * Skin::getIncludePrefix()\r
147          * Get include prefix of the SKIN\r
148          * \r
149          * Get name of the subdirectory (with trailing slash) where\r
150          * the files of the current skin can be found (e.g. 'default/')\r
151          * \r
152          * @param       void\r
153          * @return      string  include prefix of this skin instance\r
154          */\r
155         public function getIncludePrefix()\r
156         {\r
157                 return (string) $this->includePrefix;\r
158         }\r
159         \r
160         /**\r
161          * Skin::exists()\r
162          * Checks if a skin with a given shortname exists\r
163          * \r
164          * @static\r
165          * @param       string  $name   Skin short name\r
166          * @return      integer number of skins with the given ID\r
167          */\r
168         static public function exists($name)\r
169         {\r
170                 $query = "SELECT COUNT (*) AS result FROM %s WHERE sdname='%s';";\r
171                 $query = sprintf($query, sql_table('skin_desc'), sql_real_escape_string($name));\r
172                 return quickQuery($query) > 0;\r
173         }\r
174         \r
175         /**\r
176          * Skin::existsID()\r
177          * Checks if a skin with a given ID exists\r
178          * \r
179          * @static\r
180          * @param       string  $id     Skin ID\r
181          * @return      integer number of skins with the given ID\r
182          */\r
183         static public function existsID($id)\r
184         {\r
185                 $query = "SELECT COUNT(*) AS result FROM %s WHERE sdnumber=%d;";\r
186                 $query = sprintf($query, sql_table('skin_desc'), (integer) $id);\r
187                 return quickQuery($query) > 0;\r
188         }\r
189         \r
190         /**\r
191          * Skin::createFromName()\r
192          * Returns a skin given its shortname\r
193          * \r
194          * @static\r
195          * @param       string  $name   Skin shortname\r
196          * @return      object instance of Skin class\r
197          */\r
198         static public function createFromName($name)\r
199         {\r
200                 return new SKIN(SKIN::getIdFromName($name));\r
201         }\r
202         \r
203         /**\r
204          * Skin::getIdFromName()\r
205          * Returns a skin ID given its shortname\r
206          * \r
207          * @static\r
208          * @param       string  $name   Skin shortname\r
209          * @return      integer Skin ID\r
210          */\r
211         static public function getIdFromName($name)\r
212         {\r
213                 $query = "SELECT sdnumber FROM %s WHERE sdname='%s';";\r
214                 $query = sprintf($query, sql_table('skin_desc'), sql_real_escape_string($name));\r
215                 $res = sql_query($query);\r
216                 $obj = sql_fetch_object($res);\r
217                 return $obj->sdnumber;\r
218         }\r
219         \r
220         /**\r
221          * Skin::getNameFromId()\r
222          * Returns a skin shortname given its ID\r
223          * \r
224          * @static\r
225          * @param       string  $name\r
226          * @return      string  Skin short name\r
227          */\r
228         static public function getNameFromId($id)\r
229         {\r
230                 $query = "SELECT sdname AS result FROM %s WHERE sdnumber=%d;";\r
231                 $query = sprintf($query, sql_table('skin_desc'), (integer) $id);\r
232                 return quickQuery($query);\r
233         }\r
234         \r
235         /**\r
236          * SKIN::createNew()\r
237          * Creates a new skin, with the given characteristics.\r
238          *\r
239          * @static\r
240          * @param       String  $name   value for nucleus_skin.sdname\r
241          * @param       String  $desc   value for nucleus_skin.sddesc\r
242          * @param       String  $type   value for nucleus_skin.sdtype\r
243          * @param       String  $includeMode    value for nucleus_skin.sdinclude\r
244          * @param       String  $includePrefix  value for nucleus_skin.sdincpref\r
245          * @return      Integer ID for just inserted record\r
246          */\r
247         function createNew($name, $desc, $type = 'text/html', $includeMode = 'normal', $includePrefix = '')\r
248         {\r
249                 global $manager;\r
250                 \r
251                 $manager->notify(\r
252                         'PreAddSkin',\r
253                         array(\r
254                                 'name' => &$name,\r
255                                 'description' => &$desc,\r
256                                 'type' => &$type,\r
257                                 'includeMode' => &$includeMode,\r
258                                 'includePrefix' => &$includePrefix\r
259                         )\r
260                 );\r
261                 \r
262                 $query = "INSERT INTO %s (sdname, sddesc, sdtype, sdincmode, sdincpref) VALUES ('%s', '%s', '%s', '%s', '%s');";\r
263                 $sdname         = sql_real_escape_string($name);\r
264                 $sddesc         = sql_real_escape_string($desc);\r
265                 $sdtype         = sql_real_escape_string($type);\r
266                 $sdincmode      = sql_real_escape_string($includeMode);\r
267                 $sdincpref      = sql_real_escape_string($includePrefix);\r
268                 $query = sprintf($query, sql_table('skin_desc'), $sdname, $sddesc, $sdtype, $sdincmode, $sdincpref);\r
269                 sql_query($query);\r
270                 $newid = sql_insert_id();\r
271                 \r
272                 $manager->notify(\r
273                         'PostAddSkin',\r
274                         array(\r
275                                 'skinid'                => $newid,\r
276                                 'name'                  => $name,\r
277                                 'description'   => $desc,\r
278                                 'type'                  => $type,\r
279                                 'includeMode'   => $includeMode,\r
280                                 'includePrefix' => $includePrefix\r
281                         )\r
282                 );\r
283                 return $newid;\r
284         }\r
285         \r
286         /**\r
287          * Skin::parse()\r
288          * Parse a SKIN\r
289          * \r
290          * @param       string  $type\r
291          * @return      void\r
292          */\r
293         public function parse($type)\r
294         {\r
295                 global $currentSkinName, $manager, $CONF;\r
296                 \r
297                 $manager->notify('InitSkinParse',array('skin' => &$this, 'type' => $type));\r
298                 \r
299                 // set output type\r
300                 sendContentType($this->getContentType(), 'skin');\r
301                 \r
302                 // set skin name as global var (so plugins can access it)\r
303                 $currentSkinName = $this->getName();\r
304                 $contents = $this->getContent($type);\r
305                 \r
306                 if ( !$contents )\r
307                 {\r
308                         // use base skin if this skin does not have contents\r
309                         $defskin = new SKIN($CONF['BaseSkin']);\r
310                         $contents = $defskin->getContent($type);\r
311                         if ( !$contents )\r
312                         {\r
313                                 echo _ERROR_SKIN;\r
314                                 return;\r
315                         }\r
316                 }\r
317                 \r
318                 $actions = $this->getAllowedActionsForType($type);\r
319                 \r
320                 $manager->notify('PreSkinParse',array('skin' => &$this, 'type' => $type, 'contents' => &$contents));\r
321                 \r
322                 // set IncludeMode properties of parser\r
323                 Parser::setProperty('IncludeMode', $this->getIncludeMode());\r
324                 Parser::setProperty('IncludePrefix', $this->getIncludePrefix());\r
325                 \r
326                 $handler = new Actions($type, $this);\r
327                 $parser = new Parser($actions, $handler);\r
328                 $handler->setParser($parser);\r
329                 $handler->setSkin($this);\r
330                 $parser->parse($contents);\r
331                 \r
332                 $manager->notify('PostSkinParse',array('skin' => &$this, 'type' => $type));\r
333                 return;\r
334         }\r
335         \r
336         /**\r
337          * Skin::getContent()\r
338          * Get content of the skin part from the database\r
339          * \r
340          * @param       string  $type   type of the skin (e.g. index, item, search ...)\r
341          * @return      string  content of scontent\r
342          */\r
343         function getContent($type)\r
344         {\r
345                 $query = "SELECT scontent FROM %s WHERE sdesc=%d and stype='%s';";\r
346                 $query = sprintf($query, sql_table('skin'), (integer) $this->id, sql_real_escape_string($type));\r
347                 $res = sql_query($query);\r
348                 \r
349                 if ( sql_num_rows($res) == 0 )\r
350                 {\r
351                         return '';\r
352                 }\r
353                 return sql_result($res, 0, 0);\r
354         }\r
355 \r
356         /**\r
357          * SKIN::update()\r
358          * Updates the contents for one part of the skin in the database\r
359          * \r
360          * @param       string  $type type of the skin part (e.g. index, item, search ...) \r
361          * @param       string  $content new content for this skin part\r
362          * @return      void\r
363          * \r
364          */\r
365         function update($type, $content)\r
366         {\r
367                 global $manager;\r
368                 \r
369                 $query = "SELECT sdesc FROM %s WHERE stype='%s' and sdesc=%d;";\r
370                 $query = sprintf($query, sql_table('skin'), sql_real_escape_string($type), (integer) $this->id);\r
371                 $res = sql_query($query);\r
372                 \r
373                 $skintypeexists = sql_fetch_object($res);\r
374                 $skintypevalue = ($content == true);\r
375                 \r
376                 if( $skintypevalue && $skintypeexists )\r
377                 {\r
378                         // PreUpdateSkinPart event\r
379                         $manager->notify(\r
380                                 'PreUpdateSkinPart',\r
381                                 array(\r
382                                         'skinid' => $this->id,\r
383                                         'type' => $type,\r
384                                         'content' => &$content\r
385                                 )\r
386                         );\r
387                 }\r
388                 else if( $skintypevalue && !$skintypeexists )\r
389                 {\r
390                         // PreAddSkinPart event\r
391                         $manager->notify(\r
392                                 'PreAddSkinPart',\r
393                                 array(\r
394                                         'skinid' => $this->id,\r
395                                         'type' => $type,\r
396                                         'content' => &$content\r
397                                 )\r
398                         );\r
399                 }\r
400                 else if( !$skintypevalue && $skintypeexists )\r
401                 {\r
402                         // PreDeleteSkinPart event\r
403                         $manager->notify(\r
404                                 'PreDeleteSkinPart',\r
405                                 array(\r
406                                         'skinid' => $this->id,\r
407                                         'type' => $type\r
408                                 )\r
409                         );\r
410                 }\r
411                 \r
412                 // delete old thingie\r
413                 $query = "DELETE FROM %s WHERE stype='%s' and sdesc=%d";\r
414                 $query = sprintf($query, sql_table('skin'), sql_real_escape_string($type), (integer) $this->id);\r
415                 sql_query($query);\r
416                 \r
417                 // write new thingie\r
418                 if ( $content )\r
419                 {\r
420                         $query = "INSERT INTO %s (scontent, stype, sdesc) VALUE ('%s', '%s', %d)";\r
421                         $query = sprintf($query, sql_table('skin'), sql_real_escape_string($content), sql_real_escape_string($type), (integer) $this->id);\r
422                         sql_query($query);\r
423                 }\r
424                 \r
425                 if( $skintypevalue && $skintypeexists )\r
426                 {\r
427                         // PostUpdateSkinPart event\r
428                         $manager->notify(\r
429                         'PostUpdateSkinPart',\r
430                                 array(\r
431                                         'skinid'        => $this->id,\r
432                                         'type'          => $type,\r
433                                         'content'       => &$content\r
434                                 )\r
435                         );\r
436                 }\r
437                 else if( $skintypevalue && (!$skintypeexists) )\r
438                 {\r
439                         // PostAddSkinPart event\r
440                         $manager->notify(\r
441                                 'PostAddSkinPart',\r
442                                 array(\r
443                                         'skinid'        => $this->id,\r
444                                         'type'          => $type,\r
445                                         'content'       => &$content\r
446                                 )\r
447                         );\r
448                 }\r
449                 else if( (!$skintypevalue) && $skintypeexists )\r
450                 {\r
451                         // PostDeleteSkinPart event\r
452                         $manager->notify(\r
453                                 'PostDeleteSkinPart',\r
454                                 array(\r
455                                         'skinid'        => $this->id,\r
456                                         'type'          => $type\r
457                                 )\r
458                         );\r
459                 }\r
460                 return;\r
461         }\r
462         \r
463         /**\r
464          * Skin::deleteAllParts()\r
465          * Deletes all skin parts from the database\r
466          * \r
467          * @param       void\r
468          * @return      void\r
469          */\r
470         function deleteAllParts()\r
471         {\r
472                 $query = "DELETE FROM %s WHERE sdesc=%d;";\r
473                 $query = sprintf($query, sql_table('skin'), (integer) $this->id);\r
474                 sql_query($query);\r
475         }\r
476         \r
477         /**\r
478          * Skin::updateGeneralInfo()\r
479          * Updates the general information about the skin\r
480          * \r
481          * @param       string  $name                   name of the skin\r
482          * @param       string  $desc                   description of the skin\r
483          * @param       string  $type                   type of the skin\r
484          * @param       string  $includeMode    include mode of the skin\r
485          * @param       string  $includePrefix  include prefix of the skin\r
486          * @return      void\r
487          */\r
488         function updateGeneralInfo($name, $desc, $type = 'text/html', $includeMode = 'normal', $includePrefix = '')\r
489         {\r
490                 $name                   = sql_real_escape_string($name);\r
491                 $desc                   = sql_real_escape_string($desc);\r
492                 $type                   = sql_real_escape_string($type);\r
493                 $includeMode    = sql_real_escape_string($includeMode);\r
494                 $includePrefix  = sql_real_escape_string($includePrefix);\r
495                 \r
496                 $query ="UPDATE %s SET sdname='', sddesc='%s', sdtype='%s', sdincmode='%s', sdincpref='%s' WHERE sdnumber=%d:";\r
497                 $query = sprintf($query, $name, $desc, $type, $includeMode, $includePrefix, (integer) $this->id);\r
498                 \r
499                 sql_query($query);\r
500                 return;\r
501         }\r
502         \r
503         /**\r
504          * Skin::getFriendlyNames()\r
505          * Get an array with the names of possible skin parts\r
506          * Used to show all possible parts of a skin in the administration backend\r
507          * \r
508          * @param       void\r
509          * @param       array   type of the skin\r
510          */\r
511         static public function getFriendlyNames()\r
512         {\r
513                 $skintypes = array(\r
514                         'index'                 => _SKIN_PART_MAIN,\r
515                         'item'                  => _SKIN_PART_ITEM,\r
516                         'archivelist'   => _SKIN_PART_ALIST,\r
517                         'archive'               => _SKIN_PART_ARCHIVE,\r
518                         'search'                => _SKIN_PART_SEARCH,\r
519                         'error'                 => _SKIN_PART_ERROR,\r
520                         'member'                => _SKIN_PART_MEMBER,\r
521                         'imagepopup'    => _SKIN_PART_POPUP\r
522                 );\r
523                 \r
524                 $query = "SELECT stype FROM " . sql_table('skin')\r
525                        . " WHERE stype NOT IN ('index', 'item', 'error', 'search', 'archive', 'archivelist', 'imagepopup', 'member')";\r
526                 $res = sql_query($query);\r
527                 while ( $row = sql_fetch_array($res) )\r
528                 {\r
529                         /* TODO: ucfirst() depends on the current locale  */\r
530                         $skintypes[strtolower($row['stype'])] = ucfirst($row['stype']);\r
531                 }\r
532                 return $skintypes;\r
533         }\r
534         \r
535         /**\r
536          * Skin::getAllowedActionsForType()\r
537          * Get the allowed actions for a skin type\r
538          * returns an array with the allowed actions\r
539          * \r
540          * @param       string  $type   type of the skin (e.g. index, item, search ...)\r
541          * @return      array   allowed action types\r
542          */\r
543         function getAllowedActionsForType($type)\r
544         {\r
545                 global $blogid;\r
546                 \r
547                 // some actions that can be performed at any time, from anywhere\r
548                 $defaultActions = array(\r
549                         'otherblog',\r
550                         'plugin',\r
551                         'version',\r
552                         'nucleusbutton',\r
553                         'include',\r
554                         'phpinclude',\r
555                         'parsedinclude',\r
556                         'loginform',\r
557                         'sitevar',\r
558                         'otherarchivelist',\r
559                         'otherarchivedaylist',\r
560                         'otherarchiveyearlist',\r
561                         'self',\r
562                         'adminurl',\r
563                         'todaylink',\r
564                         'archivelink',\r
565                         'member',\r
566                         'category',\r
567                         'searchform',\r
568                         'referer',\r
569                         'skinname',\r
570                         'skinfile',\r
571                         'set',\r
572                         'if',\r
573                         'else',\r
574                         'endif',\r
575                         'elseif',\r
576                         'ifnot',\r
577                         'elseifnot',\r
578                         'charset',\r
579                         'bloglist',\r
580                         'addlink',\r
581                         'addpopupcode',\r
582                         'sticky',\r
583                         // deprecated (Nucleus v2.0)\r
584                         /* TODO: remove this */\r
585                         'ifcat'\r
586                 );\r
587                 \r
588                 // extra actions specific for a certain skin type\r
589                 $extraActions = array();\r
590                 \r
591                 switch ( $type )\r
592                 {\r
593                         case 'index':\r
594                                 $extraActions = array(\r
595                                         'blog',\r
596                                         'blogsetting',\r
597                                         'preview',\r
598                                         'additemform',\r
599                                         'categorylist',\r
600                                         'archivelist',\r
601                                         'archivedaylist',\r
602                                         'archiveyearlist',\r
603                                         'nextlink',\r
604                                         'prevlink'\r
605                                 );\r
606                                 break;\r
607                         case 'archive':\r
608                                 $extraActions = array(\r
609                                         'blog',\r
610                                         'archive',\r
611                                         'otherarchive',\r
612                                         'categorylist',\r
613                                         'archivelist',\r
614                                         'archivedaylist',\r
615                                         'archiveyearlist',\r
616                                         'blogsetting',\r
617                                         'archivedate',\r
618                                         'nextarchive',\r
619                                         'prevarchive',\r
620                                         'nextlink',\r
621                                         'prevlink',\r
622                                         'archivetype'\r
623                                 );\r
624                                 break;\r
625                         case 'archivelist':\r
626                                 $extraActions = array(\r
627                                         'blog',\r
628                                         'archivelist',\r
629                                         'archivedaylist',\r
630                                         'archiveyearlist',\r
631                                         'categorylist',\r
632                                         'blogsetting'\r
633                                 );\r
634                                 break;\r
635                         case 'search':\r
636                                 $extraActions = array(\r
637                                         'blog',\r
638                                         'archivelist',\r
639                                         'archivedaylist',\r
640                                         'archiveyearlist',\r
641                                         'categorylist',\r
642                                         'searchresults',\r
643                                         'othersearchresults',\r
644                                         'blogsetting',\r
645                                         'query',\r
646                                         'nextlink',\r
647                                         'prevlink'\r
648                                 );\r
649                                 break;\r
650                         case 'imagepopup':\r
651                                 $extraActions = array(\r
652                                         'image',\r
653                                         // deprecated (Nucleus v2.0)\r
654                                         /* TODO: remove this */\r
655                                         'imagetext'\r
656                                 );\r
657                                 break;\r
658                         case 'member':\r
659                                 $extraActions = array(\r
660                                         'membermailform',\r
661                                         'blogsetting',\r
662                                         'nucleusbutton',\r
663                                         'categorylist'\r
664                                 );\r
665                                 break;\r
666                         case 'item':\r
667                                 $extraActions = array(\r
668                                         'blog',\r
669                                         'item',\r
670                                         'comments',\r
671                                         'commentform',\r
672                                         'vars',\r
673                                         'blogsetting',\r
674                                         'nextitem',\r
675                                         'previtem',\r
676                                         'nextlink',\r
677                                         'prevlink',\r
678                                         'nextitemtitle',\r
679                                         'previtemtitle',\r
680                                         'categorylist',\r
681                                         'archivelist',\r
682                                         'archivedaylist',\r
683                                         'archiveyearlist',\r
684                                         'itemtitle',\r
685                                         'itemid',\r
686                                         'itemlink'\r
687                                 );\r
688                                 break;\r
689                         case 'error':\r
690                                 $extraActions = array(\r
691                                         'errormessage',\r
692                                         'categorylist'\r
693                                 );\r
694                                 break;\r
695                         default:\r
696                                 if ( $blogid && $blogid > 0 )\r
697                                 {\r
698                                         $extraActions = array(\r
699                                                 'blog',\r
700                                                 'blogsetting',\r
701                                                 'preview',\r
702                                                 'additemform',\r
703                                                 'categorylist',\r
704                                                 'archivelist',\r
705                                                 'archivedaylist',\r
706                                                 'archiveyearlist',\r
707                                                 'nextlink',\r
708                                                 'prevlink',\r
709                                                 'membermailform',\r
710                                                 'nucleusbutton',\r
711                                                 'categorylist'\r
712                                         );\r
713                                 }\r
714                                 break;\r
715                 }\r
716                 return array_merge($defaultActions, $extraActions);\r
717         }\r
718 }\r