OSDN Git Service

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