OSDN Git Service

Merge branch 'skinnable-master' of ssh://shizuki@git.sourceforge.jp/gitroot/nucleus...
[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                 /* TODO: offset is based on i18n::get_current_locale()? */
2221                 echo i18n::formatted_datetime($format, time());
2222                 return;
2223         }
2224         
2225         /**
2226          * AdminActions::parse_defaultadminskintypes()
2227          * Parse skinvar defaultadminskintypes
2228          * 
2229          * @param       string  $tabindex               index number for tabindex attribute of input element
2230          * @param       string  $templateName   name of template
2231          * @return      void
2232          */
2233         public function parse_defaultadminskintypes($tabindex, $templateName = '')
2234         {
2235                 global $manager;
2236                 
2237                 $templates = array();
2238                 
2239                 if ( $templateName )
2240                 {
2241                         $templates =& $manager->getTemplate($templateName);
2242                 }
2243                 
2244                 $types = $this->parser->skin->getAvailableTypes();
2245                 ksort($types);
2246                 
2247                 /* NOTE: set templates for HEAD/BODY/FOOT */
2248                 if ( !array_key_exists('ADMINSKINTYPELIST_HEAD', $templates) || empty($templates['ADMINSKINTYPELIST_HEAD']) )
2249                 {
2250                         $template['head'] = "<ul>\n";
2251                 }
2252                 else
2253                 {
2254                         $template['head'] = $templates['ADMINSKINTYPELIST_HEAD'];
2255                 }
2256                 if ( !array_key_exists('ADMINSKINTYPELIST_BODY', $templates) || empty($templates['ADMINSKINTYPELIST_BODY']) )
2257                 {
2258                         $template['body'] = "<li>"
2259                                           . "<a tabindex=\"<%tabindex%>\" href=\"index.php?action=adminskinedittype&amp;skinid=<%skinid%>&amp;type=<%skintype%>\"><%name%></a> <%help%>"
2260                                           . "</li>\n";
2261                 }
2262                 else
2263                 {
2264                         $template['body'] = $templates['ADMINSKINTYPELIST_BODY'];
2265                 }
2266                 if ( !array_key_exists('ADMINSKINTYPELIST_FOOT', $templates) || empty($templates['ADMINSKINTYPELIST_FOOT']) )
2267                 {
2268                         $template['foot'] = "</ul>\n";
2269                 }
2270                 else
2271                 {
2272                         $template['foot'] = $templates['ADMINSKINTYPELIST_FOOT'];
2273                 }
2274                 
2275                 $handler = new AdminActions('template');
2276                 $parser = new PARSER($handler);
2277                 
2278                 /* NOTE: do output */
2279                 echo $template['head'];
2280                 foreach ( $types as $type => $fName )
2281                 {
2282                         $helplink = $this->customHelpHtml("skinpart{$type}{$templateName}");
2283                         $data = array(
2284                                 'tabindex'      => $tabindex,
2285                                 'skintype'      => $type,
2286                                 'name'          => $fName,
2287                                 'help'          => $helplink,
2288                                 'skinid'        => intrequestVar('skinid'),
2289                         );
2290                         $parser->parse(Template::fill($template['body'], $data));
2291                         $tabindex++;
2292                 }
2293                 echo $template['foot'];
2294                 
2295                 return;
2296         }
2297         
2298         /**
2299          * AdminActions::parse_defblogselect()
2300          * Parse skinvar defblogselect
2301          * 
2302          * @param       string  $templateName   name of template
2303          * @return      void
2304          */
2305         public function parse_defblogselect($templateName = '')
2306         {
2307                 global $CONF;
2308                 
2309                 $query = "SELECT bname as text, bnumber as value FROM %s;";
2310                 $query = sprintf($query, sql_table('blog'));
2311                 
2312                 $template['name'] = 'DefaultBlog';
2313                 $template['selected'] = $CONF['DefaultBlog'];
2314                 $template['tabindex'] = 10;
2315                 
2316                 Showlist($query, 'select', $template, $templateName);
2317                 
2318                 return;
2319         }
2320         
2321         /**
2322          * AdminActions::parse_defcatselect()
2323          * Parse skinvar defcatselect
2324          * 
2325          * @param       string  $templateName   name of template
2326          * @return      void
2327          */
2328         public function parse_defcatselect($templateName = '')
2329         {
2330                 global $manager;
2331                 
2332                 $blogid = intRequestVar('blogid');
2333                 $blog =& $manager->getBlog($blogid);
2334                 
2335                 $query = "SELECT cname as text, catid as value FROM %s WHERE cblog=%d;";
2336                 $query = sprintf($query, sql_table('category'), (integer) $blog->getID());
2337                 
2338                 $template['name']        = 'defcat';
2339                 $template['selected'] = $blog->getDefaultCategory();
2340                 $template['tabindex'] = 110;
2341                 
2342                 Showlist($query, 'select', $template, $templateName);
2343                 
2344                 return;
2345         }
2346         
2347         /**
2348          * AdminActions::parse_defskinselect()
2349          * Parse skinvar defskinselect
2350          * 
2351          * @param       string  $type                   type of skin
2352          * @param       string  $templateName   name of template
2353          * @return      void
2354          */
2355         public function parse_defskinselect($type = 'blog', $templateName = '')
2356         {
2357                 global $CONF, $manager;
2358                 
2359                 $query  = "SELECT sdname as text, sdnumber as value FROM %s WHERE sdname NOT LIKE 'admin/%%';";
2360                 $query = sprintf($query, sql_table('skin_desc'));
2361                 
2362                 $blogid = intRequestVar('blogid');
2363                 
2364                 if ( !$blogid )
2365                 {
2366                         $template['selected'] = $CONF['BaseSkin'];
2367                 }
2368                 else
2369                 {
2370                         $blog =& $manager->getBlog($blogid);
2371                         $template['selected'] = $blog->getDefaultSkin();
2372                 }
2373                 
2374                 if ( $type != 'blog' )
2375                 {
2376                         $nname = 'BaseSkin';
2377                 }
2378                 else
2379                 {
2380                         $nname = 'defskin';
2381                 }
2382                 
2383                 $template['name']        = $nname;
2384                 $template['tabindex'] = 50;
2385                 
2386                 Showlist($query, 'select', $template, $templateName);
2387                 
2388                 return;
2389         }
2390         
2391         /**
2392          * AdminActions::parse_deletecomment()
2393          * Parse skinvar deletecomment
2394          * 
2395          * @param       string  $type   type of infomation for comment
2396          * @return      void
2397          */
2398         public function parse_deletecomment($type = 'id')
2399         {
2400                 $commentid      = intRequestVar('commentid');
2401                 $comment        = COMMENT::getComment($commentid);
2402                 
2403                 switch ( $type )
2404                 {
2405                         case 'id':
2406                                 echo intRequestVar('commentid');
2407                                 break;
2408                         case 'author':
2409                                 if ( array_key_exists('member', $comment) && !empty($comment['member']) )
2410                                 {
2411                                         echo $comment['member'];
2412                                 }
2413                                 else
2414                                 {
2415                                         echo $comment['user'];
2416                                 }
2417                                 break;
2418                         case 'body':
2419                                 $body = strip_tags($comment['body']);
2420                                 echo Entity::hsc(shorten($body, 300, '...'));
2421                 }
2422                 return;
2423         }
2424         
2425         /**
2426          * AdminActions::parse_deleteitembody()
2427          * Parse skinvar deleteitembody
2428          * 
2429          * @param       void
2430          * @return      void
2431          */
2432         public function parse_deleteitembody()
2433         {
2434                 global $manager;
2435                 
2436                 $itemid =  intRequestVar('itemid');
2437                 $item =& $manager->getItem($itemid, 1, 1);
2438                 
2439                 $body =  strip_tags($item['body']);
2440                 
2441                 echo Entity::hsc(shorten($body, 300, '...'));
2442                 
2443                 return;
2444         }
2445         
2446         /**
2447          * AdminActions::parse_deleteitemid()
2448          * Parse skinvar deleteitemid
2449          * 
2450          * @param       void
2451          * @return      void
2452          */
2453         public function parse_deleteitemid()
2454         {
2455                 echo (integer) intRequestVar('itemid');
2456                 return;
2457         }
2458         
2459         /**
2460          * AdminActions::parse_deleteitemtitle()
2461          * Parse skinvar deleteitemtitle
2462          * 
2463          * @param       void
2464          * @return      void
2465          */
2466         public function parse_deleteitemtitle()
2467         {
2468                 global $manager;
2469                 
2470                 $itemid = intRequestVar('itemid');
2471                 $item =& $manager->getItem($itemid, 1, 1);
2472                 
2473                 echo Entity::hsc(strip_tags($item['title']));
2474                 
2475                 return;
2476         }
2477         
2478         /**
2479          * AdminActions::parse_editadminskin()
2480          * Parse skinvar editadminskin
2481          * 
2482          * @param       string  $type   type of skin setting
2483          * @return      void
2484          */
2485         public function parse_editadminskin($type = 'id')
2486         {
2487                 $skinid = intRequestVar('skinid');
2488                 $skin   = new Skin($skinid);
2489                 switch ( $type )
2490                 {
2491                         case 'id':
2492                                 echo intRequestVar('skinid');
2493                                 break;
2494                         case 'name':
2495                                 echo Entity::hsc($skin->getName());
2496                                 break;
2497                         case 'desc':
2498                                 echo Entity::hsc($skin->getDescription());
2499                                 break;
2500                         case 'type':
2501                                 echo Entity::hsc($skin->getContentType());
2502                                 break;
2503                         case 'prefix':
2504                                 echo Entity::hsc($skin->getIncludePrefix());
2505                                 break;
2506                         case 'mode':
2507                                 $this->parse_inputyesno('inc_mode', $skin->getIncludeMode(), 120, 'skindir', 'normal', _PARSER_INCMODE_SKINDIR, _PARSER_INCMODE_NORMAL);
2508                         default:
2509                                 break;
2510                 }
2511                 return;
2512         }
2513         
2514         /**
2515          * AdminActions::parse_editadminskintype()
2516          * Parse skinvar editadminskintype
2517          * 
2518          * @param       string  $type   name of skin type
2519          * @return      void
2520          */
2521         public function parse_editadminskintype($type = 'id')
2522         {
2523                 global $CONF, $manager, $member;
2524                 
2525                 $fNames = $this->parser->skin->getAvailableTypes();
2526                 $sType  = strtolower(trim(requestVar('type')));
2527                 
2528                 switch ( $type )
2529                 {
2530                         case 'id':
2531                                 echo intRequestVar('skinid');
2532                                 break;
2533                         case 'name':
2534                                 echo Entity::hsc($this->parser->skin->getName());
2535                                 break;
2536                         case 'desc':
2537                                 echo Entity::hsc($this->parser->skin->getDescription());
2538                                 break;
2539                         case 'type':
2540                                 echo Entity::hsc($this->parser->skin->getContentType());
2541                                 break;
2542                         case 'content':
2543                                 echo Entity::hsc($this->parser->skin->getContentFromDB($sType));
2544                                 break;
2545                         case 'skintype':
2546                                 $skinType = !array_key_exists($sType, $fNames) ? ucfirst($sType) : $fNames[$sType];
2547                                 echo Entity::hsc($skinType);
2548                                 break;
2549                         case 'skintyperaw':
2550                                 echo Entity::hsc($sType);
2551                                 break;
2552                         case 'prefix':
2553                                 echo Entity::hsc($this->parser->skin->getIncludePrefix());
2554                                 break;
2555                         case 'mode':
2556                                 $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;
2557                                 echo Entity::hsc($incMode);
2558                                 break;
2559                         default:
2560                                 break;
2561                 }
2562                 return;
2563         }
2564         
2565         /**
2566          * AdminActions::parse_editcomment()
2567          * Parse skinvar editcomment
2568          * 
2569          * @param       string  $type   type of comment setting
2570          * @return      void
2571          */
2572         public function parse_editcomment($type = 'id')
2573         {
2574                 global $manager;
2575                 
2576                 $commentid      = intRequestVar('commentid');
2577                 $comment        = COMMENT::getComment($commentid);
2578                 
2579                 $manager->notify('PrepareCommentForEdit', array('comment' => &$comment));
2580                 
2581                 switch ( $type )
2582                 {
2583                         case 'id':
2584                                 echo intRequestVar('commentid');
2585                                 break;
2586                         case 'user':
2587                                 if ( !array_key_exists('member', $comment) || empty($comment['member']) )
2588                                 {
2589                                         echo $comment['user'] . " (" . _EDITC_NONMEMBER . ")";
2590                                 }
2591                                 else
2592                                 {
2593                                         echo $comment['member'] . " (" . _EDITC_MEMBER . ")";
2594                                 }
2595                                 break;
2596                         case 'date':
2597                                 echo date("Y-m-d @ H:i", $comment['timestamp']);
2598                                 break;
2599                         case 'body':
2600                                 $comment['body'] = str_replace('<br />', '', $comment['body']);
2601                                 $comment['body'] = preg_replace("#<a href=['\"]([^'\"]+)['\"]( rel=\"nofollow\")?>[^<]*</a>#", "\\1", $comment['body']);
2602                                 echo $comment['body'];
2603                                 break;
2604                         case 'cmail':
2605                                 echo $comment['userid'];
2606                                 break;
2607                         case 'url':
2608                                 echo $comment['userid'];
2609                                 break;
2610                         default:
2611                                 echo $comment[$type];
2612                                 break;
2613                 }
2614                 return;
2615         }
2616         
2617         /**
2618          * AdminActions::parse_editdesturl()
2619          * Parse skinvar editdesturl
2620          */
2621         public function parse_editdesturl()
2622         {
2623                 if ( requestVar('desturl') )
2624                 {
2625                         echo Entity::hsc(requestVar('desturl'));
2626                 }
2627                 return;
2628         }
2629         
2630         /**
2631          * AdminActions::parse_editmemberlist()
2632          * Parse skinvar editmemberlist
2633          * 
2634          * @param       string  $templateName   name of template
2635          * @return      void
2636          */
2637         public function parse_editmemberlist($templateName = '')
2638         {
2639                 global $manager;
2640                 // show list of members with actions
2641                 $query =  'SELECT * FROM '.sql_table('member');
2642                 $template['content'] = 'memberlist';
2643                 $template['tabindex'] = 10;
2644                 
2645                 $batch = new Batch('member');
2646                 $batch->showList($query, 'table', $template, $templateName, _LISTS_NOMORE);
2647                 return;
2648         }
2649         
2650         /**
2651          * AdminActions::parse_editmember()
2652          * Parse skinvar editmember
2653          * 
2654          * @param       string  $type                   type of information for member
2655          * @return      string  $tempateName    name of template to use
2656          * @return      void
2657          */
2658         public function parse_editmember($type = 'id', $templateName = '')
2659         {
2660                 global $CONF, $manager, $member;
2661                 
2662                 $memberid = intRequestVar('memberid');
2663                 $mem =& $manager->getMember($memberid);
2664                 
2665                 switch ( $type )
2666                 {
2667                         case 'id':
2668                                 echo intRequestVar('memberid');
2669                                 break;
2670                         case 'displayname':
2671                                 if ( $this->skintype == 'teamdelete' || $this->skintype == 'memberdelete' )
2672                                 {
2673                                         echo Entity::hsc($mem->getDisplayName());
2674                                 }
2675                                 else
2676                                 {
2677                                         $dispName = Entity::hsc($mem->getDisplayName());
2678                                         if ( $CONF['AllowLoginEdit'] || $member->isAdmin() )
2679                                         {
2680                                                 echo '<input name="name" tabindex="10" maxlength="32" size="32" value="' . $dispName . "\" />\n";
2681                                         }
2682                                         else
2683                                         {
2684                                                 echo $dispName;
2685                                         }
2686                                 }
2687                                 break;
2688                         case 'realname':
2689                                 echo Entity::hsc($mem->getRealName());
2690                                 break;
2691                         case 'email':
2692                                 echo Entity::hsc($mem->getEmail());
2693                                 break;
2694                         case 'url':
2695                                 echo Entity::hsc($mem->getURL());
2696                                 break;
2697                         case 'admin':
2698                                 $this->parse_inputyesno('admin', $mem->isAdmin(), 60, 1, 0, _YES, _NO, 0, $templateName);
2699                                 break;
2700                         case 'canlogin':
2701                                 $this->parse_inputyesno('canlogin', $mem->canLogin(), 70, 1, 0, _YES, _NO, $mem->isAdmin(), $templateName);
2702                                 break;
2703                         case 'notes':
2704                                 echo Entity::hsc($mem->getNotes());
2705                                 break;
2706                         case 'autosave':
2707                                 $this->parse_inputyesno('autosave', $mem->getAutosave(), 87, 1, 0, _YES, _NO, 0, $templateName);
2708                                 break;
2709                         default:
2710                                 break;
2711                 }
2712                 return;
2713         }
2714         
2715         /**
2716          * AdminActions::parse_editpluginfo()
2717          * Parse skinvar editpluginfo
2718          * 
2719          * @param       string  $type   type of plugin info
2720          * @return      void
2721          */
2722         public function parse_editpluginfo($type)
2723         {
2724                 global $manager;
2725                 
2726                 $pid = intRequestVar('plugid');
2727                 switch ( $type )
2728                 {
2729                         case 'id':
2730                                 echo $pid;
2731                                 break;
2732                         case 'name':
2733                                 echo Entity::hsc($manager->getPluginNameFromPid($pid));
2734                                 break;
2735                 }
2736                 return;
2737         }
2738         
2739         /**
2740          * AdminActions::parse_editplugoptionslist()
2741          * Parse skinvar editplugoptionslist
2742          * 
2743          * @param       string  $templateName   name of template
2744          * @return      void
2745          */
2746         public function parse_editplugoptionslist($templateName = '')
2747         {
2748                 global $manager;
2749                 
2750                 $pid = intRequestVar('plugid');
2751                 $aOptions = array();
2752                 $aOIDs  = array();
2753                 
2754                 $query  = "SELECT * FROM %s WHERE ocontext='global' AND opid=%d ORDER BY oid ASC;";
2755                 $query = sprintf($query, sql_table('plugin_option_desc'), (integer) $pid);
2756                 $resource = DB::getResult($query);
2757                 
2758                 foreach ( $resource as $row )
2759                 {
2760                         array_push($aOIDs, $row['oid']);
2761                         $aOptions[$row['oid']] = array(
2762                                 'oid'                   => $row['oid'],
2763                                 'value'                 => $row['odef'],
2764                                 'name'                  => $row['oname'],
2765                                 'description'   => $row['odesc'],
2766                                 'type'                  => $row['otype'],
2767                                 'typeinfo'              => $row['oextra'],
2768                                 'contextid'             => 0
2769                         );
2770                 }
2771                 
2772                 // fill out actual values
2773                 if ( count($aOIDs) > 0 )
2774                 {
2775                         $query = 'SELECT oid, ovalue FROM %s WHERE oid in (%s)';
2776                         $query = sprintf($query, sql_table('plugin_option'), implode(',', $aOIDs));
2777                         
2778                         $result = DB::getResult($query);
2779                         
2780                         foreach ( $result as $row )
2781                         {
2782                                 $aOptions[$row['oid']]['value'] = $row['ovalue'];
2783                         }
2784                 }
2785                 
2786                 // call plugins
2787                 $data = array(
2788                         'context'       =>  'global',
2789                         'plugid'        =>  $pid,
2790                         'options'       => &$aOptions
2791                 );
2792                 $manager->notify('PrePluginOptionsEdit', $data);
2793                 
2794                 $template['content'] = 'plugoptionlist';
2795                 
2796                 $amount = Showlist($aOptions, 'table', $template, $templateName);
2797                 
2798                 if ( $amount == 0 )
2799                 {
2800                         echo '<p>' . _ERROR_NOPLUGOPTIONS . "</p>\n";
2801                 }
2802                 return;
2803         }
2804         
2805         /**
2806          * AdminActions::parse_editskin()
2807          * Parse skinvar editskin
2808          * 
2809          * @param       string  $type   type of skin
2810          * @return      void
2811          */
2812         public function parse_editskin($type = 'id')
2813         {
2814                 $skinid = intRequestVar('skinid');
2815                 $skin   = new SKIN($skinid);
2816                 switch ( $type )
2817                 {
2818                         case 'id':
2819                                 echo intRequestVar('skinid');
2820                                 break;
2821                         case 'name':
2822                                 echo Entity::hsc($skin->getName());
2823                                 break;
2824                         case 'desc':
2825                                 echo Entity::hsc($skin->getDescription());
2826                                 break;
2827                         case 'type':
2828                                 echo Entity::hsc($skin->getContentType());
2829                                 break;
2830                         case 'prefix':
2831                                 echo Entity::hsc($skin->getIncludePrefix());
2832                                 break;
2833                         case 'mode':
2834                                 $this->parse_inputyesno('inc_mode', $skin->getIncludeMode(), 120, 'skindir', 'normal', _PARSER_INCMODE_SKINDIR, _PARSER_INCMODE_NORMAL);
2835                         default:
2836                                 break;
2837                 }
2838                 return;
2839         }
2840         
2841         /**
2842          * AdminActions::parse_editskintype()
2843          * Parse skinvar editskintype
2844          * 
2845          * @param       string  $type   name of type for skin type
2846          * @return      void
2847          */
2848         public function parse_editskintype($type = 'id')
2849         {
2850                 global $CONF, $manager, $member;
2851                 $skinid = intRequestVar('skinid');
2852                 $skin   = new SKIN($skinid);
2853                 $fNames = $skin->getAvailableTypes();
2854                 $sType  = strtolower(trim(requestVar('type')));
2855                 
2856                 switch ( $type )
2857                 {
2858                         case 'id':
2859                                 echo intRequestVar('skinid');
2860                                 break;
2861                         case 'name':
2862                                 echo Entity::hsc($skin->getName());
2863                                 break;
2864                         case 'desc':
2865                                 echo Entity::hsc($skin->getDescription());
2866                                 break;
2867                         case 'type':
2868                                 echo Entity::hsc($skin->getContentType());
2869                                 break;
2870                         case 'content':
2871                                 echo Entity::hsc($skin->getContentFromDB($sType));
2872                                 break;
2873                         case 'skintype':
2874                                 $skinType = !array_key_exists($sType, $fNames) ? ucfirst($sType) : $fNames[$sType];
2875                                 echo Entity::hsc($skinType);
2876                                 break;
2877                         case 'skintyperaw':
2878                                 echo Entity::hsc($sType);
2879                                 break;
2880                         case 'prefix':
2881                                 echo Entity::hsc($skin->getIncludePrefix());
2882                                 break;
2883                         case 'mode':
2884                                 $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;
2885                                 echo Entity::hsc($incMode);
2886                                 break;
2887                         default:
2888                                 break;
2889                 }
2890                 return;
2891         }
2892         
2893         /**
2894          * AdminActions::parse_adminurl()
2895          * Parse skinvar adminurl
2896          * (shortcut for admin url)
2897          *
2898          * @param       void
2899          * @return      void
2900          */
2901         public function parse_adminurl()
2902         {
2903                 $this->parse_sitevar('adminurl');
2904                 return;
2905         }
2906         
2907         /**
2908          * AdminActions::parse_edittemplateinfo()
2909          * Parse skinvar edittemplateinfo
2910          * 
2911          * @param       string  $type                   name of type for skin
2912          * @param       string  $description    description for skin
2913          * @param       string  $name                   name of skin
2914          * @param       string  $help                   
2915          * @param       string  $tabindex               index value for tabindex attribute of input element
2916          * @param       string  $big                    
2917          * @param       string  $tplt                   name of template
2918          * @return      boolean 
2919          */
2920         public function parse_edittemplateinfo($type, $desc = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')
2921         {
2922                 global $manager;
2923                 static $cache = array();
2924                 
2925                 if ( !array_key_exists('id', $cache) )
2926                 {
2927                         $cache['id'] = intRequestVar('templateid');
2928                 }
2929                 
2930                 if ( !array_key_exists('name', $cache) )
2931                 {
2932                         $cache['name'] = Template::getNameFromId($cache['id']);
2933                 }
2934                 
2935                 if ( !array_key_exists('desc', $cache) )
2936                 {
2937                         $cache['desc'] = Template::getDesc($cache['id']);
2938                 }
2939                 
2940                 $template =& $manager->getTemplate($cache['name']);
2941                 
2942                 switch ( $type )
2943                 {
2944                         case 'id':
2945                                 echo (integer) $cache['id'];
2946                                 break;
2947                         case 'name':
2948                                 echo Entity::hsc($cache['name']);
2949                                 break;
2950                         case 'desc':
2951                                 echo Entity::hsc($cache['desc']);
2952                                 break;
2953                         case 'extratemplate':
2954                                 $tabidx = 600;
2955                                 $pluginfields = array();
2956                                 $manager->notify('TemplateExtraFields', array('fields' => &$pluginfields));
2957                                 
2958                                 $tmplt = array();
2959                                 if ( $desc )
2960                                 {
2961                                         $tmplt =& $manager->getTemplate($desc);
2962                                 }
2963                                 if ( !array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) || empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )
2964                                 {
2965                                         $base = "</tr>\n"
2966                                               . "<tr>\n"
2967                                               . '<th colspan="2"><%explugtplname%>' . "</th>\n";
2968                                 }
2969                                 else
2970                                 {
2971                                         $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];
2972                                 }
2973                                 
2974                                 foreach ( $pluginfields as $pfkey => $pfvalue )
2975                                 {
2976                                         $data = array('explugtplname' => Entity::hsc($pfkey));
2977                                         
2978                                         echo Template::fill($base, $data);
2979                                         
2980                                         foreach ( $pfvalue as $pffield => $pfdesc )
2981                                         {
2982                                                 $this->templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);
2983                                         }
2984                                 }
2985                                 break;
2986                         default:
2987                                 $desc = defined($desc) ? constant($desc) : $desc;
2988                                 $name = defined($name) ? constant($name) : $name;
2989                                 $this->templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);
2990                                 break;
2991                 }
2992                 
2993                 return;
2994         }
2995         
2996         /**
2997          * AdminActions::parse_editadmintemplateinfo()
2998          * Parse skinvar editadmintemplateinfo
2999          * 
3000          * @param       string  $type                   type of skin template
3001          * @param       string  $description    description of template
3002          * @param       string  $name                   name of stemplate
3003          * @param       string  $tabindex               index number for tabindex attribute of input element
3004          * @param       string  $big                    
3005          * @param       string  $tplt                   
3006          */
3007         public function parse_editadmintemplateinfo($type, $desc = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')
3008         {
3009                 global $manager;
3010                 static $cache = array();
3011                 
3012                 if ( !array_key_exists('id', $cache) )
3013                 {
3014                         $cache['id'] = intRequestVar('templateid');
3015                 }
3016                 
3017                 if ( !array_key_exists('name', $cache) )
3018                 {
3019                         $cache['name'] = Template::getNameFromId($cache['id']);
3020                 }
3021                 
3022                 if ( !array_key_exists('desc', $cache) )
3023                 {
3024                         $cache['desc'] = Template::getDesc($cache['id']);
3025                 }
3026                 
3027                 $template =& $manager->getTemplate($cache['name']);
3028                 
3029                 switch ( $type )
3030                 {
3031                         case 'id':
3032                                 echo (integer) $cache['id'];
3033                                 break;
3034                         case 'name':
3035                                 echo Entity::hsc($cache['name']);
3036                                 break;
3037                         case 'desc':
3038                                 echo Entity::hsc($cache['desc']);
3039                                 break;
3040                         case 'extratemplate':
3041                                 $tabidx = 600;
3042                                 $pluginfields = array();
3043                                 $manager->notify('AdminTemplateExtraFields', array('fields' => &$pluginfields));
3044                                 
3045                                 $tmplt = array();
3046                                 if ( $desc )
3047                                 {
3048                                         $tmplt =& $manager->getTemplate($desc);
3049                                 }
3050                                 if ( !array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) || empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )
3051                                 {
3052                                         $base = "</tr>\n"
3053                                               . "<tr>\n"
3054                                               . '<th colspan="2"><%explugtplname%>' . "</th>\n";
3055                                 }
3056                                 else
3057                                 {
3058                                         $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];
3059                                 }
3060                                 
3061                                 foreach ( $pluginfields as $pfkey => $pfvalue )
3062                                 {
3063                                         $data = array('explugtplname' => Entity::hsc($pfkey));
3064                                         
3065                                         echo Template::fill($base, $data);
3066                                         
3067                                         foreach ( $pfvalue as $pffield => $pfdesc )
3068                                         {
3069                                                 $this->templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);
3070                                         }
3071                                 }
3072                                 break;
3073                         default:
3074                                 $desc = defined($desc) ? constant($desc) : $desc;
3075                                 $name = defined($name) ? constant($name) : $name;
3076                                 $this->templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);
3077                                 break;
3078                 }
3079                 return;
3080         }
3081         
3082         /**
3083          * AdminActions::parse_eventformextra()
3084          * Parse skinvar eventformextra
3085          * 
3086          * @param       string  $type   name of type for event form extra
3087          * @return      void
3088          */
3089         public function parse_eventformextra($type = 'activation')
3090         {
3091                 global $manager;
3092                 
3093                 $data = array();
3094                 
3095                 switch ( $type )
3096                 {
3097                         case 'activation':
3098                                 $key = requestVar('ackey');
3099                                 if ( !$key )
3100                                 {
3101                                         Admin::error(_ERROR_ACTIVATE);
3102                                 }
3103                                 $info = MEMBER::getActivationInfo($key);
3104                                 if ( !$info )
3105                                 {
3106                                         Admin::error(_ERROR_ACTIVATE);
3107                                 }
3108                                 $mem  =& $manager->getMember($info->vmember);
3109                                 if ( !$mem )
3110                                 {
3111                                         Admin::error(_ERROR_ACTIVATE);
3112                                 }
3113                                 $data = array(
3114                                         'type'          => 'activation',
3115                                         'member'        => $mem
3116                                 );
3117                                 break;
3118                         case 'membermailform-notloggedin':
3119                                 $data = array('type' => 'membermailform-notloggedin',);
3120                                 break;
3121                 }
3122                 $manager->notify('FormExtra', $data);
3123                 return;
3124         }
3125         
3126         /**
3127          * AdminActions::parse_extrahead()
3128          * Parse skinvar extrahead
3129          */
3130         public function parse_extrahead()
3131         {
3132                 global $manager;
3133                 
3134                 $extrahead = Admin::getAdminextrahead();
3135                 
3136                 $data = array(
3137                         'extrahead'     => &$extrahead,
3138                         'action'        => Admin::getAdminAction()
3139                 );
3140                 
3141                 $manager->notify('AdminPrePageHead', $data);
3142                 echo $extrahead;
3143                 return;
3144         }
3145         
3146         /**
3147          * AdminActions::parse_member()
3148          * Parse skinvar member
3149          * (includes a member info thingie)
3150          * 
3151          * @param       string  $what   which memberdata is needed
3152          * @return      void
3153          */
3154         public function parse_member($what)
3155         {
3156                 global $memberinfo, $member, $CONF;
3157                 
3158                 // 1. only allow the member-details-page specific variables on member pages
3159                 if ( $this->skintype == 'member' )
3160                 {
3161                         switch( $what )
3162                         {
3163                                 case 'name':
3164                                         echo Entity::hsc($memberinfo->getDisplayName());
3165                                         break;
3166                                 case 'realname':
3167                                         echo Entity::hsc($memberinfo->getRealName());
3168                                         break;
3169                                 case 'notes':
3170                                         echo Entity::hsc($memberinfo->getNotes());
3171                                         break;
3172                                 case 'url':
3173                                         echo Entity::hsc($memberinfo->getURL());
3174                                         break;
3175                                 case 'email':
3176                                         echo Entity::hsc($memberinfo->getEmail());
3177                                         break;
3178                                 case 'id':
3179                                         echo Entity::hsc($memberinfo->getID());
3180                                         break;
3181                         }
3182                 }
3183                 
3184                 // 2. the next bunch of options is available everywhere, as long as the user is logged in
3185                 if ( $member->isLoggedIn() )
3186                 {
3187                         switch( $what )
3188                         {
3189                                 case 'yourname':
3190                                         echo $member->getDisplayName();
3191                                         break;
3192                                 case 'yourrealname':
3193                                         echo $member->getRealName();
3194                                         break;
3195                                 case 'yournotes':
3196                                         echo $member->getNotes();
3197                                         break;
3198                                 case 'yoururl':
3199                                         echo $member->getURL();
3200                                         break;
3201                                 case 'youremail':
3202                                         echo $member->getEmail();
3203                                         break;
3204                                 case 'yourid':
3205                                         echo $member->getID();
3206                                         break;
3207                                 case 'yourprofileurl':
3208                                         if ( $CONF['URLMode'] == 'pathinfo' )
3209                                         {
3210                                                 echo Link::create_member_link($member->getID());
3211                                         }
3212                                         else
3213                                         {
3214                                                 echo $CONF['IndexURL'] . Link::create_member_link($member->getID());
3215                                         }
3216                                         break;
3217                         }
3218                 }
3219                 return;
3220         }
3221         
3222         /**
3223          * AdminActions::parse_version()
3224          * Parse skinvar version
3225          * (include nucleus versionnumber)
3226          *
3227          * @param       void
3228          * @return      void
3229          */
3230         public function parse_version()
3231         {
3232                 global $nucleus;
3233                 echo 'Nucleus CMS ' . $nucleus['version'];
3234                 return;
3235         }
3236         
3237         /**
3238          * AdminActions::parse_sitevar()
3239          * Parse skinvar sitevar
3240          * (include a sitevar)
3241          * 
3242          * @param       string  $which
3243          * @return      void
3244          */
3245         public function parse_sitevar($which)
3246         {
3247                 global $CONF;
3248                 switch ( $which )
3249                 {
3250                         case 'url':
3251                                 echo $CONF['IndexURL'];
3252                                 break;
3253                         case 'name':
3254                                 echo $CONF['SiteName'];
3255                                 break;
3256                         case 'admin':
3257                                 echo $CONF['AdminEmail'];
3258                                 break;
3259                         case 'adminurl':
3260                                 echo $CONF['AdminURL'];
3261                                 break;
3262                 }
3263                 return;
3264         }
3265         
3266         /**
3267          * AdminActions::parse_actionurl()
3268          * Parse $CONF;
3269          * 
3270          * @param       void
3271          * @return      void
3272          */
3273         public function parse_actionurl()
3274         {
3275                 global $CONF;
3276                 echo Entity::hsc($CONF['ActionURL']);
3277                 return;
3278         }
3279         
3280         /**
3281          * AdminActions::parse_getblogsetting()
3282          * Parse skinvar getblogsetting
3283          */
3284         public function parse_getblogsetting($which)
3285         {
3286                 global $blog, $manager;
3287                 
3288                 if ( $blog )
3289                 {
3290                         $b =& $blog;
3291                 }
3292                 elseif ( $bid = intRequestVar('blogid') )
3293                 {
3294                         $b =& $manager->getBlog($bid);
3295                 }
3296                 else
3297                 {
3298                         return;
3299                 }
3300                 
3301                 switch ( $which )
3302                 {
3303                         case 'id':
3304                                 return Entity::hsc($b->getID());
3305                                 break;
3306                         case 'url':
3307                                 return Entity::hsc($b->getURL());
3308                                 break;
3309                         case 'name':
3310                                 return Entity::hsc($b->getName());
3311                                 break;
3312                         case 'desc':
3313                                 return Entity::hsc($b->getDescription());
3314                                 break;
3315                         case 'short':
3316                                 return Entity::hsc($b->getShortName());
3317                                 break;
3318                         case 'notifyaddress':
3319                                 return Entity::hsc($b->getNotifyAddress());
3320                                 break;
3321                         case 'maxcomments':
3322                                 return Entity::hsc($b->getMaxComments());
3323                                 break;
3324                         case 'updatefile':
3325                                 return Entity::hsc($b->getUpdateFile());
3326                                 break;
3327                         case 'timeoffset':
3328                                 return Entity::hsc($b->getTimeOffset());
3329                                 break;
3330                 }
3331                 return;
3332         }
3333         
3334         /**
3335          * AdminActions::parse_geteditpluginfo()
3336          * Parse skinvar geteditpluginfo
3337          * 
3338          * @param       string  $type   name of setting for edit plugin info
3339          * @return      void
3340          */
3341         public function parse_geteditpluginfo($type)
3342         {
3343                 global $manager;
3344                 $pid = intRequestVar('plugid');
3345                 switch ( $type )
3346                 {
3347                         case 'id':
3348                                 return $pid;
3349                                 break;
3350                         case 'name':
3351                                 return Entity::hsc($manager->getPluginNameFromPid($pid));
3352                                 break;
3353                 }
3354                 return;
3355         }
3356         
3357         /**
3358          * AdminActions::parse_getmember()
3359          * Parse skinvar getmember
3360          * (includes a member info thingie)
3361          * 
3362          * @param       string  $what   name of setting for member
3363          * @return      void
3364          */
3365         public function parse_getmember($what)
3366         {
3367                 global $memberinfo, $member;
3368                 // 1. only allow the member-details-page specific variables on member pages
3369                 if ( $this->skintype == 'member' )
3370                 {
3371                         switch ( $what )
3372                         {
3373                                 case 'name':
3374                                         return Entity::hsc($memberinfo->getDisplayName());
3375                                         break;
3376                                 case 'realname':
3377                                         return Entity::hsc($memberinfo->getRealName());
3378                                         break;
3379                                 case 'notes':
3380                                         return Entity::hsc($memberinfo->getNotes());
3381                                         break;
3382                                 case 'url':
3383                                         return Entity::hsc($memberinfo->getURL());
3384                                         break;
3385                                 case 'email':
3386                                         return Entity::hsc($memberinfo->getEmail());
3387                                         break;
3388                                 case 'id':
3389                                         return Entity::hsc($memberinfo->getID());
3390                                         break;
3391                         }
3392                 }
3393                 // 2. the next bunch of options is available everywhere, as long as the user is logged in
3394                 if ( $member->isLoggedIn() )
3395                 {
3396                         switch ( $what )
3397                         {
3398                                 case 'yourname':
3399                                         return $member->getDisplayName();
3400                                         break;
3401                                 case 'yourrealname':
3402                                         return $member->getRealName();
3403                                         break;
3404                                 case 'yournotes':
3405                                         return $member->getNotes();
3406                                         break;
3407                                 case 'yoururl':
3408                                         return $member->getURL();
3409                                         break;
3410                                 case 'youremail':
3411                                         return $member->getEmail();
3412                                         break;
3413                                 case 'yourid':
3414                                         return $member->getID();
3415                                         break;
3416                         }
3417                 }
3418                 return;
3419         }
3420         
3421         /**
3422          * AdminActions::parse_headmessage()
3423          * Parse skinvar headmessage
3424          * 
3425          * @param       void
3426          * @return      void
3427          */
3428         public function parse_headmessage()
3429         {
3430                 if ( !empty(Admin::$headMess) )
3431                 {
3432                         echo '<p>' . _MESSAGE . ': ' . Entity::hsc(Admin::$headMess) . "</p>\n";
3433                 }
3434                 return;
3435         }
3436         
3437         /**
3438          * AdminActions::parse_helplink()
3439          * Parse skinvar helplink
3440          * 
3441          * @param       string  $topic  name of topic for help
3442          * @return      void
3443          */
3444         public function parse_helplink($topic = '')
3445         {
3446                 if ( !empty($topic) )
3447                 {
3448                         help($topic);
3449                 }
3450                 return;
3451         }
3452         
3453         /**
3454          * AdminActions::parse_helpplugname()
3455          * Parse skinvar helpplugname
3456          * 
3457          * @param       void
3458          * @return      void
3459          */
3460         public function parse_helpplugname()
3461         {
3462                 $plugid = intGetVar('plugid');
3463                 Entity::hsc($manager->getPluginNameFromPid($plugid));
3464                 return;
3465         }
3466         
3467         /**
3468          * AdminActions::parse_ilistaddnew()
3469          * Parse skinvar ilistaddnew
3470          * 
3471          * @param       void
3472          * @return      void
3473          */
3474         public function parse_ilistaddnew()
3475         {
3476                 $blogid = intRequestVar('blogid');
3477                 if ( intPostVar('start') == 0 )
3478                 {
3479                         echo '<p><a href="index.php?action=createitem&amp;blogid=' . $blogid . '">' . _ITEMLIST_ADDNEW . "</a></p>\n";
3480                 }
3481                 return;
3482         }
3483         
3484         /**
3485          * AdminActions::parse_importskininfo()
3486          * Parse skinvar importskininfo
3487          * 
3488          * @param       string  $type   name of information for imported skin
3489          * @return      void
3490          */
3491         public function parse_importskininfo($type)
3492         {
3493                 switch ( $type )
3494                 {
3495                         case 'info':
3496                                 echo Entity::hsc(requestVar('skininfo'));
3497                                 break;
3498                         case 'snames':
3499                                 $dataArr = requestArray('skinnames');
3500                                 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3501                                 break;
3502                         case 'tnames':
3503                                 $dataArr = requestArray('tpltnames');
3504                                 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3505                                 break;
3506                         case 'sclashes':
3507                                 $dataArr = requestArray('skinclashes');
3508                                 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3509                                 break;
3510                         case 'tclashes':
3511                                 $dataArr = requestArray('tpltclashes');
3512                                 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3513                                 break;
3514                         case 'skinfile':
3515                                 echo Entity::hsc(requestVar('skinfile'));
3516                                 break;
3517                         case 'mode':
3518                                 echo Entity::hsc(requestVar('mode'));
3519                                 break;
3520                 }
3521                 return;
3522         }
3523         
3524         /**
3525          * AdminActions::parse_inputyesno()
3526          * Parse skinvar inputyesno
3527          * 
3528          * some init stuff for all forms
3529          * 
3530          * @param       void
3531          * @return      void
3532          */
3533         public function parse_init()
3534         {
3535                 global $manager;
3536                 
3537                 $authorid = '';
3538                 if ( requestVar('action') == 'itemedit' )
3539                 {
3540                         $authorid = Admin::$contents['authorid'];
3541                 }
3542                 
3543                 Admin::$blog->insertJavaScriptInfo($authorid);
3544                 return;
3545         }
3546         
3547         /**
3548          * AdminActions::parse_inputyesno()
3549          * Parse skinvar inputyesno
3550          * 
3551          * @param       string  $name                   
3552          * @param       string  $checkedval             
3553          * @param       string  $tabindex               
3554          * @param       string  $value1                 
3555          * @param       string  $value2                 
3556          * @param       string  $yesval                 
3557          * @param       string  $noval                  
3558          * @param       string  $isAdmin                
3559          * @param       string  $templateName   
3560          * @return      void
3561          */
3562         public function parse_inputyesno($name, $checkedval, $tabindex = 0, $value1 = 1, $value2 = 0, $yesval = _YES, $noval = _NO, $isAdmin = 0, $templateName = '')
3563         {
3564                 self::input_yesno($name, $checkedval, $tabindex, $value1, $value2, $yesval, $noval, $isAdmin, $templateName );
3565                 return;
3566         }
3567         
3568         /**
3569          * AdminActions::parse_insertpluginfo()
3570          * Parse templatevar insertpluginfo
3571          */
3572         public function parse_insertpluginfo($type)
3573         {
3574                 $option = Admin::getAdminaOption();
3575                 switch ( $type )
3576                 {
3577                         case 'id':
3578                                 return $option['pid'];
3579                                 break;
3580                         case 'name':
3581                                 return Entity::hsc($option['pfile']);
3582                                 break;
3583                 }
3584                 return;
3585         }
3586         
3587         /**
3588          * AdminActions::parse_insplugoptcontent()
3589          * Parse skinvar insplugoptcontent
3590          * 
3591          * @param       void
3592          * @return      void
3593          */
3594         public function parse_insplugoptcontent()
3595         {
3596                 $option = Admin::getAdminaOption();
3597                 
3598                 $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);
3599                 if ( array_key_exists('access', $meta) && $meta['access'] != 'hidden' )
3600                 {
3601                         echo '<tr>';
3602                         listplug_plugOptionRow($option);
3603                         echo '</tr>';
3604                 }
3605                 return;
3606         }
3607         
3608         /**
3609          * AdminActions::parse_iprangeinput()
3610          * Parse skinvar iprangeinput
3611          * 
3612          * @param       void
3613          * @return      void
3614          */
3615         public function parse_iprangeinput()
3616         {
3617                 if ( requestVar('ip') )
3618                 {
3619                         $iprangeVal = Entity::hsc(requestVar('ip'));
3620                         echo "<input name=\"iprange\" type=\"radio\" value=\"{$iprangeVal}\" checked=\"checked\" id=\"ip_fixed\" />\n";
3621                         echo "<label for=\"ip_fixed\">{$iprangeVal}</label><br />\n";
3622                         echo '<input name="iprange" type="radio" value="custom" id="ip_custom" />' . "\n";
3623                         echo '<label for="ip_custom">' . _BAN_IP_CUSTOM . '</label>' . "\n";
3624                         echo "<input name=\"customiprange\" value=\"{$iprangeVal}\" maxlength=\"15\" size=\"15\" />\n";
3625                 }
3626                 else
3627                 {
3628                         echo '<input name="iprange" value="custom" type="hidden" />' . "\n";
3629                         echo '<input name="customiprange" value="" maxlength="15" size="15" />' . "\n";
3630                 }
3631                 return;
3632         }
3633         
3634         /**
3635          * AdminActions::parse_itemnavlist()
3636          * Parse skinvar itemnavlist
3637          * 
3638          * @param       void
3639          * @return      void
3640          */
3641         public function parse_itemnavlist($templateName)
3642         {
3643                 global $CONF, $manager, $member;
3644                 
3645                 $query  = "SELECT bshortname, cname, mname, ititle, ibody, inumber, idraft, itime"
3646                         . " FROM %s, %s, %s, %s"
3647                         . " WHERE iblog=bnumber AND iauthor=mnumber AND icat=catid";
3648                 
3649                 $query = sprintf($query, sql_table('item'), sql_table('blog'), sql_table('member'), sql_table('category'));
3650                 
3651                 if ( $this->skintype == 'itemlist' )
3652                 {
3653                         $blog = FALSE;
3654                         if ( array_key_exists('blogid', $_REQUEST) )
3655                         {
3656                                 $blogid = intRequestVar('blogid');
3657                         }
3658                         else if ( array_key_exists('itemid', $_REQUEST) )
3659                         {
3660                                 $itemid =  intRequestVar('itemid');
3661                                 $item   = &$manager->getItem($itemid, 1, 1);
3662                                 $blogid =  (integer) $item['blogid'];
3663                         }
3664                         $blog =& $manager->getBlog($blogid);
3665                         
3666                         $query .= " AND iblog={$blogid}";
3667                         $template['now'] = $blog->getCorrectTime(time());
3668                         
3669                         // non-blog-admins can only edit/delete their own items
3670                         if ( !$member->blogAdminRights($blogid) )
3671                         {
3672                                 $query .= ' AND iauthor = ' . $member->getID();
3673                         }
3674                 }
3675                 elseif ( $this->skintype == 'browseownitems' )
3676                 {
3677                         $query .= ' AND iauthor   = ' . $member->getID();
3678                         $blogid = 0;
3679                         $template['now'] = time();
3680                 }
3681                 
3682                 // search through items
3683                 $search = postVar('search');
3684                 
3685                 if ( !empty($search) )
3686                 {
3687                         $query .= ' AND ((ititle LIKE ' . DB::quoteValue('%'.$search.'%') . ') '
3688                                 . '  OR  (ibody LIKE ' . DB::quoteValue('%'.$search.'%') . ') '
3689                                 . '  OR  (imore LIKE ' . DB::quoteValue('%'.$search.'%') . '))';
3690                 }
3691                 
3692                 if ( postVar('start') )
3693                 {
3694                         $start = intPostVar('start');
3695                 }
3696                 else
3697                 {
3698                         $start = 0;
3699                 }
3700                 
3701                 // amount of items to show
3702                 if ( postVar('amount') )
3703                 {
3704                         $amount = intPostVar('amount');
3705                 }
3706                 else
3707                 {
3708                         $amount = (integer) $CONF['DefaultListSize'];
3709                         if ( $amount < 1 )
3710                         {
3711                                 $amount = 10;
3712                         }
3713                 }
3714                 
3715                 $query .= ' ORDER BY itime DESC'
3716                         . " LIMIT {$start},{$amount}";
3717                 
3718                 $template['content'] = 'itemlist';
3719
3720                 $navList = new Navlist($this->skintype, $start, $amount, 0, 1000, $blogid, $search, 0);
3721                 $navList->showBatchList('item', $query, 'table', $template, '', $templateName);
3722                 return;
3723         }
3724         
3725         /**
3726          * AdminActions::parse_itemtime()
3727          * date change on edit item
3728          * 
3729          * @param       string  $key    key of PHP's getDate()
3730          * @return      void
3731          */
3732         public function parse_itemtime($key)
3733         {
3734                 global $manager;
3735                 
3736                 $item = false;
3737                 $itemid = intRequestVar('itemid');
3738                 $item =& $manager->getItem($itemid, 1, 1);
3739                 
3740                 $blog   =& $manager->getBlog(getBlogIDFromItemID($itemid));
3741                 
3742                 if ( $item && $blog->convertBreaks() && requestVar('action') == 'itemedit' )
3743                 {
3744                         $item['body'] = removeBreaks($item['body']);
3745                         $item['more'] = removeBreaks($item['more']);
3746                 }
3747                 
3748                 $contents = array();
3749                 if ( requestVar('action') == 'itemedit' )
3750                 {
3751                         $contents = $item;
3752                 } 
3753                 elseif ( requestVar('action') == 'createitem' )
3754                 {
3755                         $data = array(
3756                                 'contents' => &$contents,
3757                                 'blog'     => &$this->blog
3758                         );
3759                         $manager->notify('PreAddItemForm', $data);
3760                 }
3761                 $itemtime = getdate($contents['timestamp']);
3762                 echo $itemtime[$key];
3763                 return;
3764         }
3765         
3766         /**
3767          * AdminActions::parse_jstoolbaroptions()
3768          * Parse skinvar jstoolbaroptions
3769          * 
3770          * @param       void
3771          * @return      void
3772          */
3773         public function parse_jstoolbaroptions()
3774         {
3775                 global $CONF;
3776                 $options = array(
3777                         _SETTINGS_JSTOOLBAR_NONE,
3778                         _SETTINGS_JSTOOLBAR_SIMPLE,
3779                         _SETTINGS_JSTOOLBAR_FULL
3780                 );
3781                 
3782                 $i = 1;
3783                 foreach ( $options as $option )
3784                 {
3785                         $text  = "<option value=\"%d\"%s>%s</option>\n";
3786                         $extra = ($CONF['DisableJsTools'] == $i) ? ' selected="selected"' : '';
3787                         echo sprintf($text, $i, $extra, $option);
3788                         $i++;
3789                 }
3790                 return;
3791         }
3792         /**
3793          * AdminActions::parse_localeselectoptions()
3794          * Parse skinvar localeselectoptions
3795          * 
3796          * @param       void
3797          * @return      void
3798          */
3799         public function parse_localeselectoptions()
3800         {
3801                 global $manager;
3802                 
3803                 $locales = i18n::get_available_locale_list();
3804                 
3805                 $memid = intRequestVar('memberid');
3806                 if ( $memid )
3807                 {
3808                         $mem =& $manager->getMember($memid);
3809                         if ( !$mem->getLocale() || !in_array($mem->getLocale(), $locales) )
3810                         {
3811                                 echo "<option value=\"\" selected=\"selected\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";
3812                         }
3813                         else
3814                         {
3815                                 echo "<option value=\"\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";
3816                         }
3817                 }
3818                 else
3819                 {
3820                         if ( !i18n::get_current_locale() || !in_array(i18n::get_current_locale(), $locales) )
3821                         {
3822                                 echo "<option value=\"\" selected=\"selected\">en_Latn_US</option>\n";
3823                         }
3824                         else
3825                         {
3826                                 echo "<option value=\"\">en_Latn_US</option>\n";
3827                         }
3828                 }
3829                 foreach ( $locales as $locale )
3830                 {
3831                         if ( $locale == 'en_Latn_US' )
3832                         {
3833                                 continue;
3834                         }
3835                         else if ($memid)
3836                         {
3837                                 if ( $locale == $mem->getLocale() )
3838                                 {
3839                                         echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";
3840                                 }
3841                                 else
3842                                 {
3843                                         echo "<option value=\"{$locale}\">{$locale}</option>\n";
3844                                 }
3845                         }
3846                         else
3847                         {
3848                                 if ( $locale == i18n::get_current_locale() )
3849                                 {
3850                                         echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";
3851                                 }
3852                                 else
3853                                 {
3854                                         echo "<option value=\"{$locale}\">{$locale}</option>\n";
3855                                 }
3856                         }
3857                 }
3858                 return;
3859         }
3860         
3861         /**
3862          * AdminActions::parse_listplugplugoptionrow()
3863          * Parse templatevar listplugplugoptionrow
3864          * 
3865          * @param       string  $templateName   name of template
3866          * @return      void
3867          */
3868         public function parse_listplugplugoptionrow($templateName = '')
3869         {
3870                 echo listplug_plugOptionRow(Admin::getAdminaOption(), $templateName);
3871                 return;
3872         }
3873         
3874         /**
3875          * AdminActions::parse_mediadirwarning()
3876          * Parse skinvar mediadirwarning
3877          * 
3878          * @param       void
3879          * @return      void
3880          */
3881         public function parse_mediadirwarning()
3882         {
3883                 global $DIR_MEDIA;
3884                 if ( !is_dir($DIR_MEDIA) )
3885                 {
3886                         echo "<br /><b>" . _WARNING_NOTADIR . "</b>\n";
3887                 }
3888                 if ( !is_readable($DIR_MEDIA) )
3889                 {
3890                         echo "<br /><b>" . _WARNING_NOTREADABLE . "</b>\n";
3891                 }
3892                 if ( !is_writeable($DIR_MEDIA) )
3893                 {
3894                         echo "<br /><b>" . _WARNING_NOTWRITABLE . "</b>\n";
3895                 }
3896                 return;
3897         }
3898         
3899         /**
3900          * AdminActions::parse_movedistselect()
3901          * Parse skinvar movedistselect
3902          */
3903         public function parse_movedistselect()
3904         {
3905                 $actionType = requestVar('action');
3906                 switch ( $actionType )
3907                 {
3908                         case 'batchitem':
3909                                 $this->selectBlog('destcatid', 'category');
3910                                 break;
3911                         case 'batchcategory':
3912                                 $this->selectBlog('destblogid');
3913                                 break;
3914                         default:
3915                                 if ( $this->skintype == 'itemmove' )
3916                                 {
3917                                         $query  = "SELECT icat as result FROM %s WHERE inumber=%d;";
3918                                         $query = sprintf($query, sql_table('item'), intRequestVar('itemid'));
3919                                         $catid  = DB::getValue(sprintf($query, intRequestVar('itemid')));
3920                                         $this->selectBlog('catid', 'category', $catid, 10, 1);
3921                                 }
3922                                 break;
3923                 }
3924                 return;
3925         }
3926         
3927         /**
3928          * AdminActions::parse_moveitemid()
3929          * Parse skinvar moveitemid
3930          * 
3931          * @param       void
3932          * @return      void
3933          */
3934         public function parse_moveitemid()
3935         {
3936                 echo intRequestVar('itemid');
3937                 return;
3938         }
3939         
3940         /**
3941          * AdminActions::parse_newestcompare()
3942          * Parse skinvar newestcompare
3943          * 
3944          * @param       void
3945          * @return      void
3946          */
3947         public function parse_newestcompare()
3948         {
3949                 global $nucleus;
3950                 
3951                 $newestVersion  = getLatestVersion();
3952                 $newestCompare  = str_replace('/', '.', $newestVersion);
3953                 $currentVersion = str_replace(array('/', 'v'), array('.', ''), $nucleus['version']);
3954                 
3955                 if ( $newestVersion && version_compare($newestCompare, $currentVersion, '>') )
3956                 {
3957                         echo '<br /><a style="color:red" href="http://nucleuscms.org/upgrade.php" title="' . _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE . '">';
3958                         echo _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT . $newestVersion . '</a>';
3959                 }
3960                 return;
3961         }
3962         
3963         /**
3964          * AdminActions::parse_newmemberselect()
3965          * Parse skinvar newmemberselect
3966          * 
3967          * @param       string  $templateName   name of template to use
3968          * @return      void
3969          */
3970         public function parse_newmemberselect($templateName = '')
3971         {
3972                 $blogid = intRequestVar('blogid');
3973                 
3974                 $query = "SELECT tmember FROM %s WHERE tblog=%d;";
3975                 $query = sprintf($query, sql_table('team'), (integer) $blogid);
3976                 $res = DB::getResult($query);
3977                 
3978                 $tmem = array();
3979                 foreach ( $res as $row ) 
3980                 {
3981                         $tmem[] = intval($row['tmember']);
3982                 }
3983                 
3984                 $query  = "SELECT mname as text, mnumber as value FROM %s WHERE mnumber NOT IN (%s);";
3985                 $query = sprintf($query, sql_table('member'), implode(', ', $tmem));
3986                 
3987                 $template = array(
3988                                         'name'          => 'memberid',
3989                                         'tabindex'      => 10000,
3990                                         'selected'      => 0
3991                                 );
3992                 Showlist($query, 'select', $template, $templateName);
3993                 return;
3994         }
3995         
3996         /**
3997          * AdminActions::parse_newpluginlist()
3998          * Parse skinvar newpluginlist
3999          * 
4000          * @param       void
4001          * @return      void
4002          */
4003         public function parse_newpluginlist()
4004         {
4005                 $candidates = $this->newPlugCandidates;
4006                 foreach ( $candidates as $name )
4007                 {
4008                         echo '<option value="NP_' . $name . '">' . Entity::hsc($name) . "</option>\n";
4009                 }
4010                 return;
4011         }
4012         
4013         /**
4014          * AdminActions::parse_outputspecialdirs()
4015          * Parse skinvar outputspecialdirs
4016          * 
4017          * @param       string  $type   type of setting for directory
4018          * @return      void
4019          */
4020         public function parse_outputspecialdirs($type)
4021         {
4022                 global $DIR_MEDIA, $DIR_NUCLEUS;
4023                 
4024                 switch ( $type )
4025                 {
4026                         case 'nucleusdir':
4027                                 echo Entity::hsc($DIR_NUCLEUS);
4028                                 break;
4029                         case 'mediadir':
4030                                 echo Entity::hsc($DIR_MEDIA);
4031                                 break;
4032                 }
4033                 return;
4034         }
4035         
4036         /**
4037          * AdminActions::parse_passrequestvars()
4038          * Parse skinvar passrequestvars
4039          * 
4040          * @param       void
4041          * @return      void
4042          */
4043         public function parse_passrequestvars()
4044         {
4045                 $passvar   = Admin::getAdminpassvar();
4046                 $oldaction = postVar('oldaction');
4047                 
4048                 if ( ($oldaction != 'logout')
4049                   && ($oldaction != 'login')
4050                   && $passvar
4051                   && !postVar('customaction') )
4052                 {
4053                         passRequestVars();
4054                 }
4055                 return;
4056         }
4057         
4058         /**
4059          * AdminActions::parse_pluginextras()
4060          * Parse skinvar pluginextras
4061          * 
4062          * @param       string  $type   type of plugin context
4063          * @return      void
4064          */
4065         public function parse_pluginextras($type = 'global')
4066         {
4067                 global $manager;
4068                 
4069                 switch ( $type )
4070                 {
4071                         case 'member':
4072                                 $id  = intRequestVar('memberid');
4073                                 $mem =& $manager->getMember($id);
4074                                 $manager->notify('MemberSettingsFormExtras', array('member' => &$mem));
4075                                 break;
4076                         case 'blog':
4077                                 $id  = intRequestVar('blogid');
4078                                 $blg =& $manager->getBlog($id);
4079                                 $manager->notify('BlogSettingsFormExtras', array('member' => &$blg));
4080                                 break;
4081                         case 'createaccount':
4082                                 $data = array(
4083                                         'type'          => 'createaccount.php',
4084                                         'prelabel'      => '',
4085                                         'postlabel'     => '<br />',
4086                                         'prefield'      => '',
4087                                         'postfield'     => '<br /><br />'
4088                                 );
4089                                 $manager->notify('RegistrationFormExtraFields', $data);
4090                         break;
4091                         default:
4092                                 $manager->notify('GeneralSettingsFormExtras', array());
4093                                 break;
4094                 }
4095                 return;
4096         }
4097         
4098         /**
4099          * AdminActions::parse_pluginhelp()
4100          * Parse skinvar pluginhelp
4101          * 
4102          * @param       void
4103          * @return      void
4104          */
4105         public function parse_pluginhelp()
4106         {
4107                 global $manager, $DIR_PLUGINS;
4108                 
4109                 $plugid = intGetVar('plugid');
4110                 $plugName = $manager->getPluginNameFromPid($plugid);
4111                 $plug =& $manager->getPlugin($plugName);
4112                 
4113                 if ( $plug->supportsFeature('HelpPage') > 0 )
4114                 {
4115                         $helpfile = $DIR_PLUGINS . $plug->getShortName() . '/help.';
4116                         if ( @file_exists($helpfile . 'php') )
4117                         {
4118                                 @include($helpfile . 'php');
4119                                 return;
4120                         }
4121                         elseif ( @file_exists($helpfile . 'html') )
4122                         {
4123                                 @include($helpfile . 'html');
4124                                 return;
4125                         }
4126                 }
4127                 echo '<p>' . _ERROR . ': ' . _ERROR_PLUGNOHELPFILE . "</p>\n";
4128                 echo '<p><a href="index.php?action=pluginlist">(' . _BACK . ")</a></p>\n";
4129                 return;
4130         }
4131         
4132         /**
4133          * AdminActions::parse_pluginlistlist()
4134          * Parse skinvar pluginlistlist
4135          * 
4136          * @param       string  $templateName   name of template to use
4137          * @return      void
4138          */
4139         public function parse_pluginlistlist($templateName = '')
4140         {
4141                 $query = "SELECT * FROM %s ORDER BY porder ASC;";
4142                 $query = sprintf($query, sql_table('plugin'));
4143                 
4144                 $template['content']  = 'pluginlist';
4145                 $template['tabindex'] = 10;
4146                 
4147                 Showlist($query, 'table', $template, $templateName);
4148                 
4149                 return;
4150         }
4151         
4152         /**
4153          * AdminActions::parse_pluginoptions()
4154          * Parse skinvar pluginoptions
4155          * 
4156          * @param       string  $type   type of plugin option
4157          * @return      void
4158          */
4159         public function parse_pluginoptions($context='global', $templateName='')
4160         {
4161                 global $itemid, $manager;
4162                 
4163                 switch ( $context )
4164                 {
4165                         case 'member':
4166                                 $contextid = intRequestVar('memberid');
4167                                 break;
4168                         case 'blog':
4169                                 $contextid = intRequestVar('blogid');
4170                                 break;
4171                         case 'category':
4172                                 $contextid = intRequestVar('catid');
4173                                 break;
4174                         case 'item':
4175                                 $contextid = $itemid;
4176                                 break;
4177                 }
4178                 
4179                 /* Actually registererd plugin options */
4180                 $aIdToValue = array();
4181                 $query = "SELECT oid, ovalue FROM %s WHERE ocontextid=%d;";
4182                 $query = sprintf($query, sql_table('plugin_option'), (integer) $contextid);
4183                 $res = DB::getResult($query);
4184                 foreach ( $res as $row )
4185                 {
4186                         $aIdToValue[$row['oid']] = $row['ovalue'];
4187                 }
4188                 
4189                 /* Currently available plugin options */
4190                 $query  = "SELECT * FROM %s, %s WHERE opid=pid and ocontext= %s ORDER BY porder, oid ASC;";
4191                 $query  = sprintf($query, sql_table('plugin_option_desc'), sql_table('plugin'), DB::quoteValue($context));
4192                 $res    = DB::getResult($query);
4193                 
4194                 $options = array();
4195                 foreach ($res as $row )
4196                 {
4197                         if ( !array_key_exists($row['oid'], $aIdToValue) )
4198                         {
4199                                 $value = $row['odef'];
4200                         }
4201                         else
4202                         {
4203                                 $value = $aIdToValue[$row['oid']];
4204                         }
4205                                 
4206                         $options[] = array(
4207                                 'pid'                   => $row['pid'],
4208                                 'pfile'                 => $row['pfile'],
4209                                 'oid'                   => $row['oid'],
4210                                 'value'                 => $value,
4211                                 'name'                  => $row['oname'],
4212                                 'description'   => $row['odesc'],
4213                                 'type'                  => $row['otype'],
4214                                 'typeinfo'              => $row['oextra'],
4215                                 'contextid'             => $contextid,
4216                                 'extra'                 => ''
4217                         );
4218                 }
4219                 
4220                 $data = array(
4221                         'context'       =>  $context,
4222                         'contextid'     =>  $contextid,
4223                         'options'       => &$options
4224                 );
4225                 $manager->notify('PrePluginOptionsEdit', $data);
4226                 
4227                 $template = array();
4228                 if ( $templateName )
4229                 {
4230                         $templates =& $manager->getTemplate($templateName);
4231                         if ( !array_key_exists('INSERT_PLUGOPTION_TITLE', $templates) || empty($templates['INSERT_PLUGOPTION_TITLE']) )
4232                         {
4233                                 $template['title'] = "<tr>"
4234                                                    . "<th colspan=\"2\"><%sprinttext(_PLUGIN_OPTIONS_TITLE, <|%insertpluginfo(name)%|>)%></th>"
4235                                                    . "</tr>\n";
4236                         }
4237                         else
4238                         {
4239                                 $template['title'] = $templates['INSERT_PLUGOPTION_TITLE'];
4240                         }
4241                         
4242                         if ( !array_key_exists('INSERT_PLUGOPTION_BODY', $templates) || empty($templates['INSERT_PLUGOPTION_BODY']) )
4243                         {
4244                                 $template['body'] = "<tr>"
4245                                                   . "<%listplugplugoptionrow%>"
4246                                                   . "</tr>\n";
4247                         }
4248                         else
4249                         {
4250                                 $template['body'] = $templates['INSERT_PLUGOPTION_BODY'];
4251                         }
4252                 }
4253                 
4254                 $prevPid = -1;
4255                 
4256                 include_libs('ACTIONS.php');
4257                 $handler = new Actions($this->skintype);
4258                 $parser = new PARSER($handler);
4259                         
4260                 foreach ( $options as $option )
4261                 {
4262                         // new plugin?
4263                         if ( $prevPid != $option['pid'] )
4264                         {
4265                                 $prevPid  = $option['pid'];
4266                                 $parser->parse($template['title']);
4267                         }
4268                         
4269                         $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);
4270                         
4271                         if ( @$meta['access'] != 'hidden' )
4272                         {
4273                                 $parsed = $parser->parse($template['body']);
4274                         }
4275                 }
4276                 
4277                 return;
4278         }
4279         
4280         /**
4281          * AdminActions::parse_qmenuaddselect()
4282          * Parse skinvar qmanuaddselect
4283          * 
4284          * @param       string  $templateName   name of template to use
4285          * @return      void
4286          */
4287         public function parse_qmenuaddselect($templateName = '')
4288         {
4289                 global $member;
4290                 $showAll = requestVar('showall');
4291                 if ( $member->isAdmin() && ($showAll == 'yes') )
4292                 {
4293                         // Super-Admins have access to all blogs! (no add item support though)
4294                         $query =  'SELECT bnumber as value, bname as text'
4295                                . ' FROM ' . sql_table('blog')
4296                                . ' ORDER BY bname';
4297                 }
4298                 else
4299                 {
4300                         $query =  'SELECT bnumber as value, bname as text'
4301                                . ' FROM ' . sql_table('blog') . ', ' . sql_table('team')
4302                                . ' WHERE tblog=bnumber and tmember=' . $member->getID()
4303                                . ' ORDER BY bname';
4304                 }
4305                 
4306                 $template['name']               = 'blogid';
4307                 $template['tabindex']   = 15000;
4308                 $template['extra']              = _QMENU_ADD_SELECT;
4309                 $template['selected']   = -1;
4310                 $template['shorten']    = 10;
4311                 $template['shortenel']  = '';
4312                 $template['javascript'] = 'onchange="return form.submit()"';
4313                 
4314                 Showlist($query, 'select', $template, $templateName);
4315                 
4316                 return;
4317         }
4318
4319         /**
4320          * AdminActions::parse_quickmenu()
4321          * Parse skinvar quickmenu
4322          * 
4323          * @param       string  $templateName   name of template to use
4324          * @return      void
4325          */
4326         public function parse_quickmenu($templateName = '')
4327         {
4328                 global $manager;
4329                 $templates = array();
4330                 $template  = array();
4331                 if ( !empty($templateName) )
4332                 {
4333                         $templates = & $manager->getTemplate($templateName);
4334                 }
4335                 $pluginExtras = array();
4336                 $manager->notify(
4337                         'QuickMenu',
4338                         array(
4339                                 'options' => &$pluginExtras
4340                         )
4341                 );
4342                 if ( count($pluginExtras) > 0 )
4343                 {
4344                         if ( !array_key_exists('PLUGIN_QUICKMENU_TITLE', $templates) || empty($templates['PLUGIN_QUICKMENU_TITLE']) )
4345                         {
4346                                 $template['title'] = "<h2><%text(_QMENU_PLUGINS)%></h2>\n";
4347                         }
4348                         else
4349                         {
4350                                 $template['title'] = $templates['PLUGIN_QUICKMENU_TITLE'];
4351                         }
4352                         if ( !array_key_exists('PLUGIN_QUICKMENU_HEAD', $templates) || empty($templates['PLUGIN_QUICKMENU_HEAD']) )
4353                         {
4354                                 $template['head'] = "<ul>\n";
4355                         }
4356                         else
4357                         {
4358                                 $template['head'] = $templates['PLUGIN_QUICKMENU_HEAD'];
4359                         }
4360                         if ( !array_key_exists('PLUGIN_QUICKMENU_BODY', $templates) && empty($templates['PLUGIN_QUICKMENU_BODY']) )
4361                         {
4362                                 $template['body'] = "<li><a href=\"<%plugadminurl%>\" title=\"<%plugadmintooltip%>\"><%plugadmintitle%></a></li>\n";
4363                         }
4364                         else
4365                         {
4366                                 $template['body'] = $templates['PLUGIN_QUICKMENU_BODY'];
4367                         }
4368                         if ( !array_key_exists('PLUGIN_QUICKMENU_FOOT', $templates) || empty($templates['PLUGIN_QUICKMENU_FOOT']) )
4369                         {
4370                                 $template['foot'] = "</ul>\n";
4371                         }
4372                         else
4373                         {
4374                                 $template['foot'] = $templates['PLUGIN_QUICKMENU_FOOT'];
4375                         }
4376                         
4377                         $handler = new Actions($this->skintype);
4378                         $parser = new PARSER($handler);
4379                         
4380                         $parser->parse($template['title']);
4381                         echo $template['head'];
4382                         foreach ( $pluginExtras as $aInfo )
4383                         {
4384                                 $data = array(
4385                                         'plugadminurl'          => Entity::hsc($aInfo['url']),
4386                                         'plugadmintooltip'      => Entity::hsc($aInfo['tooltip']),
4387                                         'plugadmintitle'        => Entity::hsc($aInfo['title']),
4388                                 );
4389                                 echo Template::fill($template['body'], $data);
4390                         }
4391                         echo $template['foot'];
4392                 }
4393                 return;
4394         }
4395         
4396         /**
4397          * AdminActions::parse_requestblogid()
4398          * Parse skinvar requestblogid
4399          * 
4400          * @param       void
4401          * @return      void
4402          */
4403         public function parse_requestblogid()
4404         {
4405                 echo intRequestVar('blogid');
4406                 return;
4407         }
4408         
4409         /**
4410          * AdminActions::parse_requestiprange()
4411          * Parse skinvar requestiprange
4412          * 
4413          * @param       void
4414          * @return      void
4415          */
4416         public function parse_requestiprange()
4417         {
4418                 if ( requestVar('iprange') )
4419                 {
4420                         echo Entity::hsc(requestVar('iprange'));
4421                 }
4422                 elseif ( requestVar('ip') )
4423                 {
4424                         echo Entity::hsc(requestVar('ip'));
4425                 }
4426                 return;
4427         }
4428         
4429         /**
4430          * AdminActions::parse_selectlocaladminskinfiles()
4431          * Parse skinvar selectlocaladminskinfiles
4432          * 
4433          * @param       void
4434          * @return      void
4435          */
4436         public function parse_selectlocaladminskinfiles()
4437         {
4438                 global $DIR_SKINS, $manager, $DIR_LIBS;
4439                 
4440                 if ( !class_exists('SkinImport', FALSE) )
4441                 {
4442                         include_once("{$DIR_LIBS}skinie.php");
4443                 }
4444                 $adminskindir = $DIR_SKINS . 'admin/';
4445                 $candidates = SkinImport::searchForCandidates($adminskindir);
4446                 
4447                 foreach ( $candidates as $skinname => $skinfile )
4448                 {
4449                         $html = Entity::hsc($skinfile);
4450                         echo '<option value="' . $html . '">' . $skinname . "</option>\n";
4451                 }
4452                 
4453                 return;
4454         }
4455         
4456         /**
4457          * AdminActions::parse_selectlocalskinfiles()
4458          * Parse skinvar selectlocalskinfiles
4459          * 
4460          * @param       void
4461          * @return      void
4462          */
4463         public function parse_selectlocalskinfiles()
4464         {
4465                 global $DIR_SKINS;
4466                 
4467                 $candidates = SkinImport::searchForCandidates($DIR_SKINS);
4468                 
4469                 foreach ( $candidates as $skinname => $skinfile )
4470                 {
4471                         $html = Entity::hsc($skinfile);
4472                         echo '<option value="' . $html . '">' . $skinname . "</option>\n";
4473                 }
4474                 
4475                 return;
4476         }
4477         
4478         /**
4479          * AdminActions::parse_skineditallowedlist()
4480          * Parse skinvar skineditallowedlist
4481          * 
4482          * @param       string  $type                   type of skin
4483          * @param       string  $templateName   name of template
4484          * @return      void
4485          */
4486         public function parse_skineditallowedlist($type, $templateName = '')
4487         {
4488                 switch ( $type )
4489                 {
4490                         case 'blog':
4491                                 $query = "SELECT bshortname, bname FROM %s;";
4492                                 $show  = array(
4493                                         'content' => 'shortblognames'
4494                                 );
4495                                 $query = sprintf($query, sql_table('blog'));
4496                                 Showlist($query, 'table', $show, $templateName);
4497                                 break;
4498                         case 'template':
4499                                 $query = "SELECT tdname as name, tddesc as description FROM %s WHERE tdname NOT LIKE 'admin/%%';";
4500                                 $show  = array(
4501                                         'content' => 'shortnames'
4502                                 );
4503                                 $query = sprintf($query, sql_table('template_desc'));
4504                                 Showlist($query, 'table', $show, $templateName);
4505                                 break;
4506                 }
4507                 return;
4508         }
4509         
4510         /**
4511          * AdminActions::parse_skinielist()
4512          * Parse skinvar skinielist
4513          * 
4514          * @param       string  $type                   type of skin
4515          * @param       string  $templateName   name of template to use
4516          * @return      void
4517          */
4518         public function parse_skinielist($type, $templateName = '')
4519         {
4520                 global $manager;
4521                 
4522                 $templates = array();
4523                 if ( $templateName )
4524                 {
4525                         $templates =& $manager->getTemplate($templateName);
4526                 }
4527                 if ( array_key_exists('SKINIE_EXPORT_LIST', $templates) && !empty($templates['SKINIE_EXPORT_LIST']) )
4528                 {
4529                         $template = $templates['SKINIE_EXPORT_LIST'];
4530                 }
4531                 else
4532                 {
4533                         $template = "<td>"
4534                                   . "<input type=\"checkbox\" name=\"<%typeid%>\" id=\"<%expid%>\" />\n"
4535                                   . "<label for=\"<%expid%>\"><%expname%></label>\n"
4536                                   . "</td>\n"
4537                                   . "<td><%expdesc%></td>\n"
4538                                   . "</tr>\n"
4539                                   . "<tr>\n";
4540                 }
4541                 switch ( $type )
4542                 {
4543                         case 'skin':
4544                                 $res = DB::getResult('SELECT * FROM ' . sql_table('skin_desc'). " WHERE sdname NOT LIKE 'admin/%%';");
4545                                 foreach ( $res as $row )
4546                                 {
4547                                         $data = array(
4548                                                 'typeid'        => 'skin[' . $row['sdnumber'] . ']',
4549                                                 'expid'         => 'skinexp' . $row['sdnumber'],
4550                                                 'expname'       => Entity::hsc($row['sdname']),
4551                                                 'expdesc'       => Entity::hsc($row['sddesc'])
4552                                         );
4553                                         echo Template::fill($template, $data);
4554                                 }
4555                                 break;
4556                         case 'template':
4557                                 $res = DB::getResult('SELECT * FROM '.sql_table('template_desc'). " WHERE tdname NOT LIKE 'admin/%%';");
4558                                 foreach ( $res as $row )
4559                                 {
4560                                         $data = array(
4561                                                 'typeid'        => 'template[' . $row['tdnumber'] . ']',
4562                                                 'expid'         => 'templateexp' . $row['tdnumber'],
4563                                                 'expname'       => Entity::hsc($row['tdname']),
4564                                                 'expdesc'       => Entity::hsc($row['tddesc'])
4565                                         );
4566                                         echo Template::fill($template, $data);
4567                                 }
4568                                 break;
4569                 }
4570                 return;
4571         }
4572         
4573         /**
4574          * AdminActions::parse_skinoverview()
4575          * Parse skinvar skinoverview
4576          * 
4577          * @param       string  $templateName   name of template to use
4578          * @return      void
4579          */
4580         public function parse_skinoverview($templateName = '')
4581         {
4582                 global $CONF;
4583                 $query = "SELECT * FROM %s WHERE sdname NOT LIKE 'admin/%%';";
4584                 $query = sprintf($query, sql_table('skin_desc'));
4585                 
4586                 $template['content']  = 'skinlist';
4587                 $template['tabindex'] = 10;
4588                 
4589                 Showlist($query, 'table', $template, $templateName);
4590                 return;
4591         }
4592         
4593         /**
4594          * AdminActions::parse_skintypehelp()
4595          * Check editing skintypehelp
4596          * 
4597          * @param       void
4598          * @return      void
4599          */
4600         public function parse_skintypehelp()
4601         {
4602                 $nowSkinType = strtolower(trim(requestVar('type')));
4603                 
4604                 /* TODO: use Skin class */
4605                 $regularType = array(
4606                         'index',
4607                         'item',
4608                         'archivelist',
4609                         'archive',
4610                         'search',
4611                         'error',
4612                         'member',
4613                         'imagepopup'
4614                 );
4615                 
4616                 if ( in_array($nowSkinType, $regularType) )
4617                 {
4618                         help('skinpart' . $nowSkinType);
4619                 }
4620                 else
4621                 {
4622                         help('skinpartspecial');
4623                 }
4624                 return;
4625         }
4626         
4627         /**
4628          * AdminActions::parse_specialskinlist()
4629          * Parse skinvar specialskinlist
4630          * 
4631          * @param       string  $templateName   name of template to use
4632          * @return      void
4633          */
4634         public function parse_specialskinlist($templateName = '')
4635         {
4636                 global $manager;
4637                 
4638                 $templates = array();
4639                 if ( $templateName )
4640                 {
4641                         $templates =& $manager->getTemplate($templateName);
4642                 }
4643                 
4644                 /* TODO: use Skin class */
4645                 $nType  = array(
4646                         'index',
4647                         'item',
4648                         'error',
4649                         'search',
4650                         'archive',
4651                         'archivelist',
4652                         'imagepopup',
4653                         'member'
4654                 );
4655                 $skinid = intRequestVar('skinid');
4656                 $query  = "SELECT stype FROM %s WHERE stype NOT IN ('%s') AND sdesc = %d;";
4657                 $query = sprintf($query, sql_table('skin'), implode("', '", $nType), $skinid);
4658                 
4659                 $res    = DB::getResult($query);
4660                 if ( $res && $res->rowCount() > 0 )
4661                 {
4662                         $data = array();
4663                         if ( array_key_exists('SPECIALSKINLIST_HEAD', $templates) && !empty($templates['SPECIALSKINLIST_HEAD']) )
4664                         {
4665                                 $template['head'] = $templates['SPECIALSKINLIST_HEAD'];
4666                         }
4667                         else
4668                         {
4669                                 $template['head'] = "<ul>\n";
4670                         }
4671                         echo Template::fill($template['head'], $data);
4672                         if ( !array_key_exists('SPECIALSKINLIST_BODY', $templates) || empty($templates['SPECIALSKINLIST_BODY']) )
4673                         {
4674                                 $template['body'] = '<li><a tabindex="<%tabindex%>" href="index.php?action=skinedittype&amp;skinid=<%skinid%>'
4675                                                                   . '&amp;type=<%skintype%>"><%skintype%></a> (<a tabindex="<%tabindex%>" href="index.php?'
4676                                                                   . 'action=skinremovetype&amp;skinid=<%skinid%>&amp;type=<%skintype%>">remove</a>)</li>';
4677                         }
4678                         else
4679                         {
4680                                 $template['body'] = $templates['SPECIALSKINLIST_BODY'];
4681                         }
4682                         
4683                         $tabstart = 75;
4684                         foreach ( $res as $row )
4685                         {
4686                                 $data = array(
4687                                         'tabindex'      => $tabstart++,
4688                                         'skinid'        => $skinid,
4689                                         'skintype'      => Entity::hsc(strtolower($row['stype']))
4690                                 );
4691                                 echo Template::fill($template['body'], $data);
4692                         }
4693                         $data = array();
4694                         if (array_key_exists('SPECIALSKINLIST_FOOT', $templates) && !empty($templates['SPECIALSKINLIST_FOOT']) )
4695                         {
4696                                 $template['foot'] = $templates['SPECIALSKINLIST_FOOT'];
4697                         }
4698                         else
4699                         {
4700                                 $template['foot'] = "</ul>\n";
4701                         }
4702                         echo Template::fill($template['foot'], $data);
4703                         return;
4704                 }
4705         }
4706         
4707         /**
4708          * AdminActions::parse_sprinttext()
4709          * Parse sprinttext
4710          * 
4711          * @param       string  $which  
4712          * @param       string  $val    
4713          * @return      void
4714          */
4715         public function parse_sprinttext($which, $val)
4716         {
4717                 if ( !defined($which) )
4718                 {
4719                         $base = $which;
4720                 }
4721                 else
4722                 {
4723                         $base = constant($which);
4724                 }
4725                 
4726                 if ( preg_match('#[^<|%].*[^%|>]#', $val, $matchies) )
4727                 {
4728                         if ( !preg_match('#[(].*[^)]#', $matchies[0], $args) )
4729                         {
4730                                 $met = 'parse_' . $matchies[0];
4731                         }
4732                         else
4733                         {
4734                                 $arg = trim($args[0], '()');
4735                                 $met = 'parse_' . substr($matchies[0], 0, strpos($matchies[0], '('));
4736                         }
4737                         
4738                         if ( method_exists($this, $met) )
4739                         {
4740                                 $value = call_user_func(array(&$this, $met), $arg);
4741                         }
4742                 }
4743                 
4744                 if ( !isset($value) || empty($value) )
4745                 {
4746                         $value = $val;
4747                 }
4748                 echo sprintf($base, $value);
4749                 return;
4750         }
4751         
4752         /**
4753          * AdminActions::parse_systemsettings()
4754          * Parse skinvar systemsettings
4755          * 
4756          * @param       string  $type                   type of settings for system
4757          * @param       string  $templateName   name of template to use 
4758          * @return      void
4759          */
4760         public function parse_systemsettings($type = 'phpinfo', $templateName = '')
4761         {
4762                 global $manager, $member, $CONF, $nucleus;
4763                 
4764                 $member->isAdmin() or Admin::disallow();
4765                 
4766                 $enable  = _ADMIN_SYSTEMOVERVIEW_ENABLE;
4767                 $disable = _ADMIN_SYSTEMOVERVIEW_DISABLE;
4768                 
4769                 switch ( $type )
4770                 {
4771                         case 'phpversion':
4772                                 echo phpversion();
4773                                 break;
4774                         case 'sqlserverinfo':
4775                                 echo DB::getAttribute(PDO::ATTR_SERVER_VERSION);
4776                                 break;
4777                         case 'sqlclientinfo':
4778                                 echo DB::getAttribute(PDO::ATTR_CLIENT_VERSION);
4779                                 break;
4780                         case 'magicquotesgpc':
4781                                 echo ini_get('magic_quotes_gpc') ? 'On' : 'Off';
4782                                 break;
4783                         case 'magicquotesruntime':
4784                                 echo ini_get('magic_quotes_runtime') ? 'On' : 'Off';
4785                                 break;
4786                         case 'registerglobals':
4787                                 echo ini_get('register_globals') ? 'On' : 'Off';
4788                                 break;
4789                         case 'gdinfo':
4790                                 $templates = array();
4791                                 if ( $templateName )
4792                                 {
4793                                         $templates =& $manager->getTemplate($templateName);
4794                                 }
4795                                 if ( !array_key_exists('SYSTEMINFO_GDSETTINGS', $templates) || empty($templates['SYSTEMINFO_GDSETTINGS']) )
4796                                 {
4797                                         $template = "<tr>\n"
4798                                                   . "<td><%key%></td>\n"
4799                                                   . "<td><%value%></td>\n"
4800                                                   . "</tr>\n";
4801                                 }
4802                                 else
4803                                 {
4804                                         $template = $templates['SYSTEMINFO_GDSETTINGS'];
4805                                 }
4806                                 
4807                                 $gdinfo = gd_info();
4808                                 
4809                                 foreach ( $gdinfo as $key => $value )
4810                                 {
4811                                         if ( is_bool($value) )
4812                                         {
4813                                                 $value = $value ? $enable : $disable;
4814                                         }
4815                                         else
4816                                         {
4817                                                 $value = Entity::hsc($value);
4818                                         }
4819                                         $data = array(
4820                                                 'key'   => $key,
4821                                                 'value' => $value,
4822                                         );
4823                                         echo Template::fill($template, $data);
4824                                 }
4825                                 break;
4826                         case 'modrewrite':
4827                                 ob_start();
4828                                 phpinfo(INFO_MODULES);
4829                                 $im = ob_get_contents();
4830                                 ob_end_clean();
4831                                 echo ( i18n::strpos($im, 'mod_rewrite') !== FALSE ) ? $enable : $disable;
4832                                 break;
4833                         case 'nucleusversion':
4834                                 echo getNucleusVersion() / 100 . '(' . $nucleus['version'] . ')';
4835                                 break;
4836                         case 'nucleuspatchlevel':
4837                                 echo getNucleusPatchLevel();
4838                                 break;
4839                         case 'confself':
4840                                 echo $CONF['Self'];
4841                                 break;
4842                         case 'confitemurl':
4843                                 echo $CONF['ItemURL'];
4844                                 break;
4845                         case 'alertonheaderssent':
4846                                 echo $CONF['alertOnHeadersSent'] ? $enable : $disable;
4847                                 break;
4848                         case 'nucleuscodename':
4849                                 if ( $nucleus['codename'] != '' )
4850                                 {
4851                                         echo ' &quot;' . $nucleus['codename'] . '&quot;';
4852                                 }
4853                                 break;
4854                         case 'versioncheckurl':
4855                                 echo sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
4856                                 break;
4857                 }
4858                 return;
4859         }
4860         
4861         /**
4862          * AdminActions::parse_templateoverview()
4863          * Parse skinvar templateoverview
4864          * 
4865          * @param       string  $templateName   name of template to use
4866          * @return      void
4867          */
4868         public function parse_templateoverview($templateName = '')
4869         {
4870                 $query  = "SELECT * FROM %s WHERE tdname NOT LIKE 'admin/%%' ORDER BY tdname";
4871                 $query = sprintf($query, sql_table('template_desc'));
4872                 
4873                 $template['content']  = 'templatelist';
4874                 $template['tabindex'] = 10;
4875                 
4876                 Showlist($query, 'table', $template, $templateName);
4877                 
4878                 return;
4879         }
4880         
4881         /**
4882          * AdminActions::parse_ticket()
4883          * Parse ticket
4884          * 
4885          * @param       void
4886          * @return      void
4887          */
4888         public function parse_ticket()
4889         {
4890                 global $manager;
4891                 $manager->addTicketHidden();
4892                 return;
4893         }
4894         
4895         /**
4896          * AdminActions::parse_versioncheckurl()
4897          * Parse skinvar versioncheckurl
4898          * 
4899          * @param       void
4900          * @return      void
4901          */
4902         public function parse_versioncheckurl()
4903         {
4904                 echo sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
4905                 return;
4906         }
4907         
4908         /**
4909          * AdminActions::parse_yrbloglist()
4910          * Parse skinvar yrbloglist
4911          * 
4912          * @param       string  $templateName   name of template to use
4913          * @return      void
4914          */
4915         public function parse_yrbloglist($templateName = '')
4916         {
4917                 global $member;
4918                 $showAll = requestVar('showall');
4919                 
4920                 if ( $member->isAdmin() && ($showAll == 'yes') )
4921                 {
4922                         // Super-Admins have access to all blogs! (no add item support though)
4923                         $query =  "SELECT bnumber, bname, 1 as tadmin, burl, bshortname"
4924                                 . " FROM %s"
4925                                 . " ORDER BY bnumber;";
4926                         $query = sprintf($query, sql_table('blog'));
4927                 }
4928                 else
4929                 {
4930                         $query =  "SELECT bnumber, bname, tadmin, burl, bshortname"
4931                                 . " FROM %s,%s"
4932                                 . " WHERE tblog=bnumber and tmember=%d"
4933                                 . " ORDER BY bnumber;";
4934                         $query = sprintf($query, sql_table('blog'), sql_table('team'), (integer) $member->getID());
4935                 }
4936                 
4937                 $template['content']    = 'bloglist';
4938                 $template['superadmin'] = $member->isAdmin();
4939                 
4940                 $amount = Showlist($query, 'table', $template, $templateName);
4941                 
4942                 if ( ($showAll != 'yes') && ($member->isAdmin()) )
4943                 {
4944                         $query = 'SELECT COUNT(*) as result FROM ' . sql_table('blog');
4945                         
4946                         $total = DB::getValue($query);
4947                         if ( $total > $amount )
4948                         {
4949                                 echo '<p><a href="index.php?action=overview&amp;showall=yes">' . _OVERVIEW_SHOWALL . '</a></p>';
4950                         }
4951                 }
4952                 
4953                 if ( $amount == 0 )
4954                 {
4955                         echo _OVERVIEW_NOBLOGS;
4956                 }
4957                 elseif( $amount != 0 )
4958                 {
4959                         echo '<h2>' . _OVERVIEW_YRDRAFTS . '</h2>';
4960                         
4961                         $query =  "SELECT ititle, inumber, bshortname"
4962                                . " FROM %s,%s"
4963                                . ' WHERE iauthor=%d AND iblog=bnumber AND idraft=1;';
4964                         $query = sprintf($query, sql_table('item'), sql_table('blog'), (integer) $member->getID());
4965                         
4966                         $template['content'] = 'draftlist';
4967                         
4968                         $amountdrafts = Showlist($query, 'table', $template, $templateName);
4969                         if ( $amountdrafts == 0 )
4970                         {
4971                                 echo _OVERVIEW_NODRAFTS;
4972                         }
4973                 }
4974                 return;
4975         }
4976         
4977         /**
4978          * AdminActions::checkCondition()
4979          * Checks conditions for if statements
4980          *
4981          * @param       string  $field type of <%if%>
4982          * @param       string  $name property of field
4983          * @param       string  $value value of property
4984          * @return      boolean condition
4985          */
4986         protected function checkCondition($field, $name='', $value = '')
4987         {
4988                 global $CONF, $archiveprevexists, $archivenextexists, $blog, $catid, $itemidnext, $itemidprev, $manager, $member;
4989                 
4990                 $condition = 0;
4991                 switch ( $field )
4992                 {
4993                         case 'category':
4994                                 if ( !$blog )
4995                                 {
4996                                         if ( $blogid )
4997                                         {
4998                                                 $blog =& $manager->getBlog($blogid);
4999                                         }
5000                                         elseif ( $catid )
5001                                         {
5002                                                 $blogid = getBlogIDFromCatID($catid);
5003                                                 $blog =& $manager->getBlog($blogid);
5004                                         }
5005                                         elseif ( intRequestVar('catid') )
5006                                         {
5007                                                 $catid = intRequestVar('catid');
5008                                                 $blogid = getBlogIDFromCatID($catid);
5009                                                 $blog =& $manager->getBlog($blogid);
5010                                         }
5011                                         else
5012                                         {
5013                                                 return;
5014                                         }
5015                                 }
5016                                 $condition = ($blog && $this->ifCategory($name, $value));
5017                                 break;
5018                         case 'loggedin':
5019                                 $condition = $member->isLoggedIn();
5020                                 break;
5021                         case 'onteam':
5022                                 $condition = $member->isLoggedIn() && $this->ifOnTeam($name);
5023                                 break;
5024                         case 'admin':
5025                                 $condition = $member->isLoggedIn() && $this->ifAdmin($name);
5026                                 break;
5027                         case 'superadmin':
5028                                 $condition = $member->isLoggedIn() && $member->isAdmin();
5029                                 break;
5030                         case 'allowloginedit':
5031                                 $condition = $member->isLoggedIn() && ($CONF['AllowLoginEdit'] || $member->isAdmin());
5032                                 break;
5033                         case 'nextitem':
5034                                 $condition = ($itemidnext != '');
5035                                 break;
5036                         case 'previtem':
5037                                 $condition = ($itemidprev != '');
5038                                 break;
5039                         case 'archiveprevexists':
5040                                 $condition = ($archiveprevexists == true);
5041                                 break;
5042                         case 'archivenextexists':
5043                                 $condition = ($archivenextexists == true);
5044                                 break;
5045                         case 'skintype':
5046                                 $condition = (($name == $this->skintype) || ($name == requestVar('action')));
5047                                 break;
5048                         case 'hasplugin':
5049                                 $condition = $this->ifHasPlugin($name, $value);
5050                                 break;
5051                         case 'adminaction':
5052                                 $condition = (Admin::getAdminAction() == $name);
5053                                 break;
5054                         case 'adminoldaction':
5055                                 $condition = (Admin::getAdminAction() == $name);
5056                                 break;
5057                         case 'addresschange':
5058                                 $condition = ($this->ifAddresscange());
5059                                 break;
5060                         case 'bechangepass':
5061                                 $condition = ($this->beChangePassword());
5062                                 break;
5063                         case 'skincandidates':
5064                                 $condition = ($this->ifSkincandidates());
5065                                 break;
5066                         case 'nameclashes':
5067                                 $condition = requestVar('nameclashes');
5068                                 break;
5069                         case 'existsnewplugin':
5070                                 $condition = ($this->existsNewPlugin());
5071                                 break;
5072                         case 'autosave':
5073                                 if ( $value == '' )
5074                                 {
5075                                         $value = 1;
5076                                 }
5077                                 $condition = (boolean) ($member->getAutosave() == $value);
5078                                 break;
5079                         case 'blogsetting':
5080                                 if ( $value == '' )
5081                                 {
5082                                         $value = 1;
5083                                 }
5084                                 $condition = (Admin::$blog->getSetting($name) == $value);
5085                                 break;
5086                         case 'itemproperty':
5087                                 if ( $value == '' )
5088                                 {
5089                                         $value = 1;
5090                                 }
5091                                 if ( array_key_exists($name, Admin::$contents) )
5092                                 {
5093                                         $condition = (boolean) (Admin::$contents[$name] == $value);
5094                                 }
5095                                 break;
5096                         default:
5097                                 $condition = $manager->pluginInstalled("NP_{$field}") && $this->ifPlugin($field, $name, $value);
5098                                 break;
5099                 }
5100                 return $condition;
5101         }
5102         
5103         /**
5104          * AdminActions::_ifHasPlugin()
5105          *      hasplugin,PlugName
5106          *         -> checks if plugin exists
5107          *      hasplugin,PlugName,OptionName
5108          *         -> checks if the option OptionName from plugin PlugName is not set to 'no'
5109          *      hasplugin,PlugName,OptionName=value
5110          *         -> checks if the option OptionName from plugin PlugName is set to value
5111          *
5112          * @param       string  $name   name of plugin
5113          * @param       string  $value  
5114          * @return      
5115          */
5116         private function ifHasPlugin($name, $value)
5117         {
5118                 global $manager;
5119                 $condition = false;
5120                 // (pluginInstalled method won't write a message in the actionlog on failure)
5121                 if ( $manager->pluginInstalled("NP_{$name}") )
5122                 {
5123                         $plugin =& $manager->getPlugin("NP_{$name}");
5124                         if ( $plugin != NULL )
5125                         {
5126                                 if ( $value == "" )
5127                                 {
5128                                         $condition = true;
5129                                 }
5130                                 else
5131                                 {
5132                                         list($name2, $value2) = preg_split('#=#', $value, 2);
5133                                         if ( $value2 == "" && $plugin->getOption($name2) != 'no' )
5134                                         {
5135                                                 $condition = true;
5136                                         }
5137                                         else if ( $plugin->getOption($name2) == $value2 )
5138                                         {
5139                                                 $condition = true;
5140                                         }
5141                                 }
5142                         }
5143                 }
5144                 return $condition;
5145         }
5146         
5147         /**
5148          * AdminActions::beChangePassword()
5149          * 
5150          * @param       void
5151          * @return      void
5152          */
5153         private function beChangePassword()
5154         {
5155                 return intRequestVar('bNeedsPasswordChange');
5156         }
5157         
5158         /**
5159          * AdminActions::ifSkincandidates()
5160          * Checks if a plugin exists and call its doIf function
5161          * 
5162          * @param       void
5163          * @return      void
5164          * @return      boolean
5165          */
5166         private function ifSkincandidates()
5167         {
5168                 global $DIR_SKINS;
5169                 $candidates = SKINIMPORT::searchForCandidates($DIR_SKINS);
5170                 return (count($candidates) > 0);
5171         }
5172         
5173         /**
5174          * AdminActions::ifPlugin()
5175          * Checks if a plugin exists and call its doIf function
5176          * 
5177          * @param       string  $name   name of plugin
5178          * @param       string  $key    
5179          * @param       string  $value  
5180          * @return      callback
5181          */
5182         private function ifPlugin($name, $key = '', $value = '')
5183         {
5184                 global $manager;
5185
5186                 $plugin =& $manager->getPlugin("NP_{$name}");
5187                 if ( !$plugin )
5188                 {
5189                         return;
5190                 }
5191                 
5192                 $params = func_get_args();
5193                 array_shift($params);
5194                 
5195                 return call_user_func_array(array(&$plugin, 'doIf'), $params);
5196         }
5197
5198         /**
5199          * AdminActions::ifCategory()
5200          *  Different checks for a category
5201          * 
5202          * @param       string  $key    key for information of category
5203          * @param       string  $value  value for information of category
5204          * @return      boolean
5205          */
5206         private function ifCategory($key = '', $value='')
5207         {
5208                 global $blog, $catid;
5209                 
5210                 // when no parameter is defined, just check if a category is selected
5211                 if (($key != 'catname' && $key != 'catid') || ($value == ''))
5212                 {
5213                         return $blog->isValidCategory($catid);
5214                 }
5215                 
5216                 // check category name
5217                 if ( $key == 'catname' )
5218                 {
5219                         $value = $blog->getCategoryIdFromName($value);
5220                         if ($value == $catid)
5221                         {
5222                                 return $blog->isValidCategory($catid);
5223                         }
5224                 }
5225                 
5226                 // check category id
5227                 if (($key == 'catid') && ($value == $catid))
5228                 {
5229                         return $blog->isValidCategory($catid);
5230                 }
5231                 
5232                 return FALSE;
5233         }
5234         
5235         /**
5236          * AdminActions::ifOnTeam()
5237          * Checks if a member is on the team of a blog and return his rights
5238          * 
5239          * @param       string  $blogName       name of weblog
5240          * @return      boolean
5241          */
5242         private function ifOnTeam($blogName = '')
5243         {
5244                 global $blog, $member, $manager;
5245                 
5246                 // when no blog found
5247                 if ( ($blogName == '') && !is_object($blog) )
5248                 {
5249                         return 0;
5250                 }
5251                 
5252                 // explicit blog selection
5253                 if ($blogName != '')
5254                 {
5255                         $blogid = getBlogIDFromName($blogName);
5256                 }
5257                 
5258                 if (($blogName == '') || !$manager->existsBlogID($blogid))
5259                 {
5260                         // use current blog
5261                         $blogid = $blog->getID();
5262                 }
5263                 return $member->teamRights($blogid);
5264         }
5265         
5266         /**
5267          * AdminActions::ifAdmin()
5268          * Checks if a member is admin of a blog
5269          * 
5270          * @param       string  $blogName       name of weblog
5271          * @return      boolean
5272          */
5273         private function ifAdmin($blogName = '')
5274         {
5275                 global $blog, $member, $manager;
5276                 
5277                 // when no blog found
5278                 if (($blogName == '') && (!is_object($blog)))
5279                 {
5280                         return 0;
5281                 }
5282                 
5283                 // explicit blog selection
5284                 if ($blogName != '')
5285                 {
5286                         $blogid = getBlogIDFromName($blogName);
5287                 }
5288                 
5289                 if (($blogName == '') || !$manager->existsBlogID($blogid))
5290                 {
5291                         // use current blog
5292                         $blogid = $blog->getID();
5293                 }
5294                 
5295                 return $member->isBlogAdmin($blogid);
5296         }
5297         
5298         /**
5299          * AdminActions::ifAddresscange()
5300          * Check e-Mail address is changed
5301          * 
5302          * @param       void
5303          * @return      boolean
5304          */
5305         private function ifAddresscange()
5306         {
5307                 global $manager;
5308                 
5309                 $key = $this->objAdmin->sessionVar("{$CONF['CookiePrefix']}ackey");
5310                 if ( !$key )
5311                 {
5312                         return FALSE;
5313                 }
5314                 $info = MEMBER::getActivationInfo($key);
5315                 if ( !$info )
5316                 {
5317                         return FALSE;
5318                 }
5319                 $mem =& $manager->getMember($info->vmember);
5320                 if ( !$mem )
5321                 {
5322                         return FALSE;
5323                 }
5324                 if ( $info->vtype == 'addresschange' )
5325                 {
5326                         return TRUE;
5327                 }
5328                 return FALSE;
5329         }
5330         
5331         /**
5332          * AdminActions::templateEditRow()
5333          * Template edit box
5334          * 
5335          * @param       array   $template       
5336          * @param       string  $desc           
5337          * @param       string  $name           
5338          * @param       string  $help           
5339          * @param       integer $tabindex       
5340          * @param       boolean $big            
5341          * @param       array   $tmplt          
5342          * @return      void
5343          */
5344         private function templateEditRow(&$template, $desc, $name, $help = '', $tabindex = 0, $big = 0, $tplt = '')
5345         {
5346                 global $manager;
5347                 
5348                 static $count = 1;
5349                 
5350                 if ( !array_key_exists($name, $template) )
5351                 {
5352                         $template[$name] = '';
5353                 }
5354                 
5355                 $tmplt = array();
5356                 $base  = array();
5357                 
5358                 if ( $tplt )
5359                 {
5360                         $tmplt =& $manager->getTemplate($tplt);
5361                 }
5362                 
5363                 $data = array(
5364                         'description'   => $desc,
5365                         'help'                  => empty($help) ? '' : helpHtml('template' . $help),
5366                         'count'                 => $count,
5367                         'name'                  => $name,
5368                         'tabindex'              => $tabindex,
5369                         'rows'                  => $big ? 10 : 5,
5370                 );
5371                 
5372                 if ( !array_key_exists('TEMPLATE_EDIT_ROW_HEAD', $tmplt) || empty($tmplt['TEMPLATE_EDIT_ROW_HEAD']) )
5373                 {
5374                         $base['head'] = "</tr>"
5375                                       . "<tr>\n"
5376                                       . "<td><%description%><%help%></td>\n"
5377                                       . "<td id=\"td<%count%>\">\n"
5378                                       . "<textarea class=\"templateedit\" name=\"<%name%>\" tabindex=\"<%tabindex%>\" cols=\"50\" rows=\"<%rows%>\" id=\"textarea<%count%>\">\n";
5379                 }
5380                 else
5381                 {
5382                         $base['head'] = $tmplt['TEMPLATE_EDIT_ROW_HEAD'];
5383                 }
5384                 
5385                 if ( !array_key_exists('TEMPLATE_EDIT_ROW_TAIL', $tmplt) || empty($tmplt['TEMPLATE_EDIT_ROW_TAIL']) )
5386                 {
5387                         $base['tail'] = "</textarea>\n"
5388                                       . "</td>\n";
5389                 }
5390                 else
5391                 {
5392                         $base['tail'] = $tmplt['TEMPLATE_EDIT_ROW_TAIL'];
5393                 }
5394                 
5395                 echo TEMPLATE::fill($base['head'], $data);
5396                 echo ENTITY::hsc($template[$name]);
5397                 echo TEMPLATE::fill($base['tail'], $data);
5398                 
5399                 $count++;
5400                 
5401                 return;
5402         }
5403         
5404         /**
5405          * AdminActions::customHelp()
5406          * shows a link to custom help file
5407          * 
5408          * @param       string  $id                     
5409          * @param       string  $tplName        
5410          * @param       string  $url            
5411          * @param       string  $iconURL        
5412          * @param       string  $alt            
5413          * @param       string  $title          
5414          * @param       $onclick
5415          * 
5416          */
5417         private function customHelp($id, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
5418         {
5419                 echo self::customHelpHtml($id, $tplName, $url, $iconURL, $alt, $title, $onclick);
5420         }
5421         
5422         /**
5423          * AdminActions::customHelp()
5424          * shows a link to custom help file
5425          * 
5426          * @param       string  $id                     
5427          * @param       string  $tplName        
5428          * @param       string  $url            
5429          * @param       string  $iconURL        
5430          * @param       string  $alt            
5431          * @param       string  $title          
5432          * @param       $onclick
5433          * 
5434          */
5435         static function customHelplink($id, $tplName = '', $url = '', $title = '', $onclick = '')
5436         {
5437                 global $CONF, $manager;
5438                 
5439                 $templates = array();
5440                 
5441                 if ( $tplName )
5442                 {
5443                         $templates =& $manager->getTemplate($tplName);
5444                 }
5445                 
5446                 if ( !array_key_exists('ADMIN_CUSTOMHELPLINK_ANCHOR', $templates) || empty($templates['ADMIN_CUSTOMHELPLINK_ANCHOR']) )
5447                 {
5448                         $template = "<a href=\"<%helpurl%>#<%helptarget%>\" title=\"<%title%>\" <%onclick%>>\n";
5449                 }
5450                 else
5451                 {
5452                         $template = $templates['ADMIN_CUSTOMHELPLINK_ANCHOR'];
5453                 }
5454                 
5455                 if ( empty($url) )
5456                 {
5457                         $url = $CONF['AdminURL'] . 'documentation/customHelp.html';
5458                 }
5459                 
5460                 if ( empty($onclick) )
5461                 {
5462                         $onclick = 'onclick="if (event &amp;&amp; event.preventDefault) event.preventDefault(); return help(this.href);"';
5463                 }
5464                 elseif ( preg_match('#^onclick#', $onclick) )
5465                 {
5466                         $onclick = $onclick;
5467                 }
5468                 else
5469                 {
5470                         $onclick = 'onclick="' . $onclick . '"';
5471                 }
5472                 
5473                 $data = array(
5474                         'helpurl'               => $url,
5475                         'helptarget'    => $id,
5476                         'onclick'               => $onclick,
5477                         'title'                 => (isset($title) && !empty($title)) ? $title : _HELP_TT,
5478                 );
5479                 return Template::fill($template, $data);
5480         }
5481         
5482         /**
5483          * AdminActions::customHelpHtml()
5484          * 
5485          * @param       string  $id                     
5486          * @param       string  $tplName        
5487          * @param       string  $url            
5488          * @param       string  $iconURL        
5489          * @param       string  $alt            
5490          * @param       string  $title          
5491          * @param       string  $onclick        
5492          * @return      string  anchor element with help uri
5493          */
5494         private function customHelpHtml($id, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
5495         {
5496                 global $CONF, $manager;
5497                 
5498                 $templates = array();
5499                 
5500                 if ( $tplName )
5501                 {
5502                         $templates =& $manager->getTemplate($tplName);
5503                 }
5504                 if ( !array_key_exists('ADMIN_CUSTOMHELPLINK_ICON', $templates) || !empty($templates['ADMIN_CUSTOMHELPLINK_ICON']) )
5505                 {
5506                         $template = "<img src=\"<%iconurl%>\" <%width%><%height%>alt=\"<%alt%>\" title=\"<%title%>\" /></a>\n";
5507                 }
5508                 else
5509                 {
5510                         $template = $templates['ADMIN_CUSTOMHELPLINK_ICON'];
5511                 }
5512                 
5513                 if ( empty($iconURL) )
5514                 {
5515                         $iconURL = $CONF['AdminURL'] . 'documentation/icon-help.gif';
5516                 }
5517                 
5518                 if ( function_exists('getimagesize') )
5519                 {
5520                         $size   = getimagesize($iconURL);
5521                         $width  = 'width="'  . $size[0] . '" ';
5522                         $height = 'height="' . $size[1] . '" ';
5523                 }
5524                 
5525                 $data = array(
5526                         'iconurl'       => $iconURL,
5527                         'width'         => $width,
5528                         'height'        => $height,
5529                         'alt'           => (isset($alt) && !empty($alt))         ? $alt   : _HELP_TT,
5530                         'title'         => (isset($title) && !empty($title)) ? $title : _HELP_TT,
5531                 );
5532                 
5533                 $icon = Template::fill($template, $data);
5534                 $help = self::customHelplink($id, $tplName, $url, $title, $onclick);
5535                 
5536                 return $help . $icon;
5537         }
5538         
5539         /**
5540          * AdminActions::input_yesno
5541          * 
5542          * @param               $name
5543          * @param               $checkedval
5544          * @param               $tabindex
5545          * @param               $value1
5546          * @param               $value2
5547          * @param               $yesval
5548          * @param               $noval
5549          * @param               $isAdmin
5550          * @param               $templateName
5551          * @param               $showlist
5552          */
5553         public function input_yesno($name,
5554                                                                 $checkedval,
5555                                                                 $tabindex        = 0,
5556                                                                 $value1    = 1,
5557                                                                 $value2    = 0,
5558                                                                 $yesval    = _YES,
5559                                                                 $noval          = _NO,
5560                                                                 $isAdmin          = 0,
5561                                                                 $templateName = '',
5562                                                                 $showlist        = false)
5563         {
5564                 global $manager;
5565                 
5566                 $templates = array();
5567                 if ( $templateName )
5568                 {
5569                         $templates =& $manager->getTemplate($templateName);
5570                 }
5571                 
5572                 if ( $name == 'admin' )
5573                 {
5574                         if ( !array_key_exists('INPUTYESNO_TEMPLATE_ADMIN', $templates) || empty($templates['INPUTYESNO_TEMPLATE_ADMIN']) )
5575                         {
5576                                 $template = '<input onclick="selectCanLogin(true);" type="radio" name="<%name%>" value="<%yesval%>" <%yescheckedval%> id="<%yesid%>" />' . "\n"
5577                                           . '<label for="<%yesid%>"><%yesvaltext%></label>' . "\n"
5578                                           . '<input onclick="selectCanLogin(false);" type="radio" name="<%name%>" value="<%noval%>" <%nocheckedval%> id="<%noid%>"<%disabled%> />' . "\n"
5579                                           . '<label for="<%noid%>"><%novaltext%></label>' . "\n";
5580                         }
5581                         else
5582                         {
5583                                 $template = $templates['INPUTYESNO_TEMPLATE_ADMIN'];
5584                         }
5585                 }
5586                 else
5587                 {
5588                         if ( array_key_exists('INPUTYESNO_TEMPLATE_NORMAL', $templates) && !empty($templates['INPUTYESNO_TEMPLATE_NORMAL']) )
5589                         {
5590                                 $template = $templates['INPUTYESNO_TEMPLATE_NORMAL'];
5591                         }
5592                         if ( $showlist )
5593                         {
5594                                 if ( array_key_exists('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO', $templates) && !empty($templates['SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO']) )
5595                                 {
5596                                         $template = $templates['SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO'];
5597                                 }
5598                         }
5599                         if ( !isset($template) )
5600                         {
5601                                 $template = '<input type="radio" name="<%name%>" value="<%yesval%>" <%yescheckedval%> id="<%yesid%>" />' . "\n"
5602                                           . '<label for="<%yesid%>"><%yesvaltext%></label>' . "\n"
5603                                           . '<input type="radio" name="<%name%>" value="<%noval%>" <%nocheckedval%> id="<%noid%>"<%disabled%> />' . "\n"
5604                                           . '<label for="<%noid%>"><%novaltext%></label>' . "\n";
5605                         }
5606                 }
5607                 
5608                 //echo $template;
5609                 $id             = Entity::hsc($name);
5610                 $id             = str_replace('[', '-', $id);
5611                 $id             = str_replace(']', '-', $id);
5612                 $id1    = $id . Entity::hsc($value1);
5613                 $id2    = $id . Entity::hsc($value2);
5614                 $dat = array(
5615                         'name'                  => Entity::hsc($name),
5616                         'yesval'                => Entity::hsc($value1),
5617                         'noval'                 => Entity::hsc($value2),
5618                         'yesid'                 => $id1,
5619                         'noid'                  => $id2,
5620                         'yesvaltext'    => $yesval,
5621                         'novaltext'             => $noval,
5622                         'yescheckedval' => ($checkedval == $value1) ? ' checked="checked" tabindex="' . $tabindex . '"': '',
5623                         'nocheckedval'  => ($checkedval != $value1) ? ' checked="checked" tabindex="' . $tabindex . '"': '',
5624                         'disabled'              => ($isAdmin && $name == 'canlogin') ? ' disabled="disabled"' : '',
5625                 );
5626                 
5627                 if ( $showlist )
5628                 {
5629                         return Template::fill($template, $dat);
5630                 }
5631                 else
5632                 {
5633                         echo Template::fill($template, $dat);
5634                 }
5635                 return;
5636         }
5637         
5638         /**
5639          * AdminActions::existsNewPlugin()
5640          * Check exists new plugin
5641          * 
5642          * @param       void
5643          * @return      boolean exists or not
5644          */
5645         private function existsNewPlugin()
5646         {
5647                 global $DIR_PLUGINS;
5648                 
5649                 $query = "SELECT * FROM %s;";
5650                 $query = sprintf($query, sql_table('plugin'));
5651                 $res  = DB::getResult($query);
5652                 
5653                 $installed = array();
5654                 foreach( $res as $row )
5655                 {
5656                         $installed[] = $row['pfile'];
5657                 }
5658                 
5659                 $files = scandir($DIR_PLUGINS);
5660                 
5661                 $candidates = array();
5662                 foreach ( $files as $file )
5663                 {
5664                         if ( preg_match("#^(NP_.*)\.php$#", $file, $matches) )
5665                         {
5666                                 if ( !in_array($matches[1], $installed) )
5667                                 {
5668                                         $candidates[] = preg_replace("#^NP_#", "", $matches[1]);
5669                                 }
5670                         }
5671                 }
5672                 $this->newPlugCandidates = $candidates;
5673                 return (count($candidates) > 0);
5674         }
5675         
5676         /**
5677          * AdminActions::pagehead()
5678          * Output admin page head
5679          * 
5680          * @param       void
5681          * @return      void
5682          */
5683         public function parse_pagehead()
5684         {
5685                 global $member, $nucleus, $CONF, $manager;
5686                 
5687                 $extrahead = Admin::getAdminextrahead();
5688                 $data = array(
5689                         'extrahead'     => &$extrahead,
5690                         'action'        =>  Admin::getAdminAction()
5691                 );
5692                 $manager->notify('AdminPrePageHead', $data);
5693                 
5694                 $content = $this->parser->skin->getContentFromDB('pagehead');
5695                 if ( !$content )
5696                 {
5697                         $baseUrl = Entity::hsc($CONF['SkinsURL']);
5698                         
5699                         /*
5700                          * TODO: obsoleted
5701                         if ( !array_key_exists('AdminCSS', $CONF) )
5702                         {
5703                                 DB::execute("INSERT INTO " . sql_table('config') . " VALUES ('AdminCSS', 'original')");
5704                                 $CONF['AdminCSS'] = 'original';
5705                         }
5706                         */
5707                         
5708                         /* HTTP 1.1 application for no caching */
5709                         header("Cache-Control: no-cache, must-revalidate");
5710                         header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
5711                         
5712                         $root_element = 'html';
5713                         $charset = i18n::get_current_charset();
5714                         $locale = preg_replace('#_#', '-', i18n::get_current_locale());
5715                         $xml_version_info = self::$xml_version_info;
5716                         $formal_public_identifier = self::$formal_public_identifier;
5717                         $system_identifier = self::$system_identifier;
5718                         $xhtml_namespace = self::$xhtml_namespace;
5719                         
5720                         echo "<?xml version=\"{$xml_version_info}\" encoding=\"{$charset}\" ?>\n";
5721                         echo "<!DOCTYPE {$root_element} PUBLIC \"{$formal_public_identifier}\" \"{$system_identifier}\">\n";
5722                         echo "<{$root_element} xmlns=\"{$xhtml_namespace}\" xml:lang=\"{$locale}\" lang=\"{$locale}\">\n";
5723                         echo "<head>\n";
5724                         echo '<title>' . Entity::hsc($CONF['SiteName']) . " - Admin</title>\n";
5725                         /*
5726                          * TODO: obsoleted
5727                         echo "<link rel=\"stylesheet\" title=\"Nucleus Admin Default\" type=\"text/css\" href=\"{$baseUrl}admin/defaultadmin/styles/admin_{$CONF["AdminCSS"]}.css\" />\n";
5728                         */
5729                         echo "<link rel=\"stylesheet\" title=\"Nucleus Admin Default\" type=\"text/css\" href=\"{$baseUrl}admin/defaultadmin/styles/addedit.css\" />\n";
5730                         echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/edit.js\"></script>\n";
5731                         echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/admin.js\"></script>\n";
5732                         echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/compatibility.js\"></script>\n";
5733                         echo "{$extrahead}\n";
5734                         echo "</head>\n\n";
5735                         echo "<body>\n";
5736                         echo "<div id=\"adminwrapper\">\n";
5737                         echo "<div class=\"header\">\n";
5738                         echo '<h1>' . Entity::hsc($CONF['SiteName']) . "</h1>\n";
5739                         echo "</div>\n";
5740                         echo "<div id=\"container\">\n";
5741                         echo "<div id=\"content\">\n";
5742                         echo "<div class=\"loginname\">\n";
5743                         
5744                         if ( !$member->isLoggedIn() )
5745                         {
5746                                 echo '<a href="index.php?action=showlogin" title="Log in">' . _NOTLOGGEDIN . "</a><br />\n";
5747                         }
5748                         else
5749                         {
5750                                 echo _LOGGEDINAS . ' ' . $member->getDisplayName() ." - <a href='index.php?action=logout'>" . _LOGOUT. "</a><br />\n";
5751                                 echo "<a href='index.php?action=overview'>" . _ADMINHOME . "</a> - ";
5752                         }
5753                         
5754                         echo "<a href='".$CONF['IndexURL']."'>"._YOURSITE."</a><br />\n";
5755                         echo '(';
5756                         
5757                         if ( !array_key_exists('codename', $nucleus) || empty($nucleus['codename']) )
5758                         {
5759                                 $codenamestring = '';
5760                         }
5761                         else
5762                         {
5763                                 $codenamestring = ' &quot;' . $nucleus['codename'].'&quot;';
5764                         }
5765                         
5766                         if ( $member->isLoggedIn() && $member->isAdmin() )
5767                         {
5768                                 $checkURL = sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
5769                                 echo '<a href="' . $checkURL . '" title="' . _ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TITLE . '">Nucleus CMS ' . $nucleus['version'] . $codenamestring . '</a>';
5770                                 
5771                                 $newestVersion = getLatestVersion();
5772                                 $newestCompare = str_replace('/', '.', $newestVersion);
5773                                 $currentVersion = str_replace(array('/','v'), array('.',''), $nucleus['version']);
5774                                 
5775                                 if ( $newestVersion && version_compare($newestCompare, $currentVersion) > 0 )
5776                                 {
5777                                         echo "<br />\n";
5778                                         echo '<a style="color:red" href="http://nucleuscms.org/upgrade.php" title="' . _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE . '">';
5779                                         echo _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT . $newestVersion;
5780                                         echo "</a>";
5781                                 }
5782                         }
5783                         else
5784                         {
5785                                 echo "Nucleus CMS {$nucleus['version']}{$codenamestring}";
5786                         }
5787                         echo ')';
5788                         echo '</div>';
5789                 }
5790                 else
5791                 {
5792                         $this->parser->parse($content);
5793                 }
5794                 
5795                 return;
5796         }
5797         
5798         /**
5799          * AdminActionss::pagefoot()
5800          * Output admin page foot include quickmenu
5801          * 
5802          * @param       void
5803          * @return      void
5804          */
5805         public function parse_pagefoot()
5806         {
5807                 global $action, $member, $manager;
5808                 
5809                 $data = array(
5810                         'action' => Admin::getAdminAction()
5811                 );
5812                 $manager->notify('AdminPrePageFoot', $data);
5813                 
5814                 $content = $this->parser->skin->getContentFromDB('pagefoot');
5815                 if ( !$content )
5816                 {
5817                         if ( $member->isLoggedIn() && ($action != 'showlogin') )
5818                         {
5819                                 echo '<h2>' . _LOGOUT . "</h2>\n";
5820                                 echo "<ul>\n";
5821                                 echo '<li><a href="index.php?action=overview">' . _BACKHOME . "</a></li>\n";
5822                                 echo '<li><a href="index.php?action=logout">' .  _LOGOUT . "</a></li>\n";
5823                                 echo "</ul>\n";
5824                         }
5825                         
5826                         echo "<div class=\"foot\">\n";
5827                         echo '<a href="' . _ADMINPAGEFOOT_OFFICIALURL . '">Nucleus CMS</a> &copy; 2002-' . date('Y') . ' ' . _ADMINPAGEFOOT_COPYRIGHT;
5828                         echo '-';
5829                         echo '<a href="' . _ADMINPAGEFOOT_DONATEURL . '">' . _ADMINPAGEFOOT_DONATE . "</a>\n";
5830                         echo "</div>\n";
5831                         
5832                         echo "<div id=\"quickmenu\">\n";
5833                         
5834                         if ( ($action != 'showlogin') && ($member->isLoggedIn()) )
5835                         {
5836                                 echo "<ul>\n";
5837                                 echo '<li><a href="index.php?action=overview">' . _QMENU_HOME . "</a></li>\n";
5838                                 echo "</ul>\n";
5839                                 
5840                                 echo '<h2>' . _QMENU_ADD . "</h2>\n";
5841                                 echo "<form method=\"get\" action=\"index.php\">\n";
5842                                 echo "<p>\n";
5843                                 echo "<input type=\"hidden\" name=\"action\" value=\"createitem\" />\n";
5844                                 
5845                                 $showAll = requestVar('showall');
5846                                 
5847                                 if ( ($member->isAdmin()) && ($showAll == 'yes') )
5848                                 {
5849                                         // Super-Admins have access to all blogs! (no add item support though)
5850                                         $query = "SELECT bnumber as value, bname as text FROM %s ORDER BY bname;";
5851                                         $query = sprintf($query, sql_table('blog'));
5852                                 }
5853                                 else
5854                                 {
5855                                         $query = "SELECT bnumber as value, bname as text FROM %s, %s WHERE tblog=bnumber and tmember=%d ORDER BY bname;";
5856                                         $query = sprintf($query, sql_table('blog'), sql_table('team'), (integer) $member->getID());
5857                                 }
5858                                 $template['name']               = 'blogid';
5859                                 $template['tabindex']   = 15000;
5860                                 $template['extra']              = _QMENU_ADD_SELECT;
5861                                 $template['selected']   = -1;
5862                                 $template['shorten']    = 10;
5863                                 $template['shortenel']  = '';
5864                                 $template['javascript'] = 'onchange="return form.submit()"';
5865                                 showlist($query, 'select', $template);
5866                                 
5867                                 echo "</p>\n";
5868                                 echo "</form>\n";
5869                                 
5870                                 echo "<h2>{$member->getDisplayName()}</h2>\n";
5871                                 echo "<ul>\n";
5872                                 echo '<li><a href="index.php?action=editmembersettings">' . _QMENU_USER_SETTINGS . "</a></li>\n";
5873                                 echo '<li><a href="index.php?action=browseownitems">' . _QMENU_USER_ITEMS . "</a></li>\n";
5874                                 echo '<li><a href="index.php?action=browseowncomments">' . _QMENU_USER_COMMENTS . "</a></li>\n";
5875                                 echo "</ul>\n";
5876                                 
5877                                 if ( $member->isAdmin() )
5878                                 {
5879                                         echo '<h2>' . _QMENU_MANAGE . "</h2>\n";
5880                                         echo "<ul>\n";
5881                                         echo '<li><a href="index.php?action=actionlog">' . _QMENU_MANAGE_LOG . "</a></li>\n";
5882                                         echo '<li><a href="index.php?action=settingsedit">' . _QMENU_MANAGE_SETTINGS . "</a></li>\n";
5883                                         echo '<li><a href="index.php?action=systemoverview">' . _QMENU_MANAGE_SYSTEM . "</a></li>\n";
5884                                         echo '<li><a href="index.php?action=usermanagement">' . _QMENU_MANAGE_MEMBERS . "</a></li>\n";
5885                                         echo '<li><a href="index.php?action=createnewlog">' . _QMENU_MANAGE_NEWBLOG . "</a></li>\n";
5886                                         echo '<li><a href="index.php?action=backupoverview">' . _QMENU_MANAGE_BACKUPS . "</a></li>\n";
5887                                         echo '<li><a href="index.php?action=pluginlist">' . _QMENU_MANAGE_PLUGINS . "</a></li>\n";
5888                                         echo "</ul>\n";
5889                                         
5890                                         echo "<h2>" . _QMENU_LAYOUT . "</h2>\n";
5891                                         echo "<ul>\n";
5892                                         echo '<li><a href="index.php?action=skinoverview">' . _QMENU_LAYOUT_SKINS . "</a></li>\n";
5893                                         echo '<li><a href="index.php?action=templateoverview">' . _QMENU_LAYOUT_TEMPL . "</a></li>\n";
5894                                         echo '<li><a href="index.php?action=skinieoverview">' . _QMENU_LAYOUT_IEXPORT . "</a></li>\n";
5895                                         echo "</ul>\n";
5896                                 }
5897                                 
5898                                 $data = array('options' => array());
5899                                 
5900                                 $manager->notify('QuickMenu', $data);
5901                                 
5902                                 if ( count($data['options']) > 0 )
5903                                 {
5904                                         echo "<h2>" . _QMENU_PLUGINS . "</h2>\n";
5905                                         echo "<ul>\n";
5906                                         foreach ( $data['options'] as $option )
5907                                         {
5908                                                 echo '<li><a href="' . Entity::hsc($option['url']) . '" title="' . Entity::hsc($option['tooltip']) . '">' . Entity::hsc($option['title']) . "</a></li>\n";
5909                                         }
5910                                         echo "</ul>\n";
5911                                 }
5912                         }
5913                         else if ( ($action == 'activate') || ($action == 'activatesetpwd') )
5914                         {
5915                         
5916                                 echo '<h2>' . _QMENU_ACTIVATE . '</h2>' . _QMENU_ACTIVATE_TEXT;
5917                         }
5918                         else
5919                         {
5920                                 echo '<h2>' . _QMENU_INTRO . '</h2>' . _QMENU_INTRO_TEXT;
5921                         }
5922                         
5923                         echo "<!-- quickmenu -->\n";
5924                         echo "</div>\n";
5925                         
5926                         echo "<!-- content -->\n";
5927                         echo "</div>\n";
5928                         
5929                         echo "<!-- container -->\n";
5930                         echo "</div>\n";
5931                         
5932                         echo "<!-- adminwrapper -->\n";
5933                         echo "</div>\n";
5934                         
5935                         echo "</body>\n";
5936                         echo "</html>\n";
5937                 }
5938                 else
5939                 {
5940                         $this->parser->parse($content);
5941                         exit;
5942                 }
5943                 
5944                 return;
5945         }
5946         /**
5947          * AdminActions::selectBlog()
5948          * Inserts a HTML select element with choices for all blogs to which the user has access
5949          *      mode = 'blog' => shows blognames and values are blogids
5950          *      mode = 'category' => show category names and values are catids
5951          *
5952          * @param       string  $name                           
5953          * @param       string  $mode                           
5954          * @param       integer $selected                       
5955          * @param       integer $tabindex                       
5956          * @param       integer $showNewCat                     
5957          * @param       integer $iForcedBlogInclude     ID for weblog always included
5958          * @param $iForcedBlogInclude
5959          *      ID of a blog that always needs to be included, without checking if the
5960          *      member is on the blog team (-1 = none)
5961          * @return      void
5962          */
5963         private function selectBlog($name, $mode='blog', $selected = 0, $tabindex = 0, $showNewCat = 0, $iForcedBlogInclude = -1)
5964         {
5965                 global $member, $CONF;
5966                 
5967                 // 0. get IDs of blogs to which member can post items (+ forced blog)
5968                 $aBlogIds = array();
5969                 if ( $iForcedBlogInclude != -1 )
5970                 {
5971                         $aBlogIds[] = intval($iForcedBlogInclude);
5972                 }
5973                 
5974                 if ( $member->isAdmin() && array_key_exists('ShowAllBlogs', $CONF) && $CONF['ShowAllBlogs'] )
5975                 {
5976                         $query =  "SELECT bnumber FROM %s ORDER BY bname;";
5977                         $query = sprintf($query, sql_table('blog'));
5978                 }
5979                 else
5980                 {
5981                         $query =  "SELECT bnumber FROM %s, %s WHERE tblog=bnumber AND tmember=%d;";
5982                         $query = sprintf($query, sql_table('blog'), sql_table('team'), (integer) $member->getID());
5983                 }
5984                 
5985                 $rblogids = DB::getResult($query);
5986                 foreach ( $rblogids as $row )
5987                 {
5988                         if ( $row['bnumber'] != $iForcedBlogInclude )
5989                         {
5990                                 $aBlogIds[] = intval($row['bnumber']);
5991                         }
5992                 }
5993                 
5994                 if ( count($aBlogIds) == 0 )
5995                 {
5996                         return;
5997                 }
5998                 
5999                 echo "<select name=\"{$name}\" tabindex=\"{$tabindex}\">\n";
6000                 
6001                 // 1. select blogs (we'll create optiongroups)
6002                 // (only select those blogs that have the user on the team)
6003                 $queryBlogs = "SELECT bnumber, bname FROM %s WHERE bnumber in (%s) ORDER BY bname;";
6004                 $queryBlogs = sprintf($queryBlogs, sql_table('blog'), implode(',', $aBlogIds));
6005                 $blogs = DB::getResult($queryBlogs);
6006                 
6007                 if ( $mode == 'category' )
6008                 {
6009                         if ( $blogs->rowCount() > 1 )
6010                         {
6011                                 $multipleBlogs = 1;
6012                         }
6013                         foreach ( $blogs as $rBlog )
6014                         {
6015                                 if ( isset($multipleBlogs) && !empty($multipleBlogs) )
6016                                 {
6017                                         echo '<optgroup label="' . Entity::hsc($rBlog['bname']) . "\">\n";
6018                                 }
6019                                 
6020                                 // show selection to create new category when allowed/wanted
6021                                 if ( $showNewCat )
6022                                 {
6023                                         // check if allowed to do so
6024                                         if ( $member->blogAdminRights($rBlog['bnumber']) )
6025                                         {
6026                                                 echo '<option value="newcat-' . $rBlog['bnumber'] . '">' . _ADD_NEWCAT . "</option>\n";
6027                                         }
6028                                 }
6029                                 
6030                                 // 2. for each category in that blog
6031                                 $catQuery = "SELECT cname, catid FROM %s WHERE cblog=%d ORDER BY cname ASC;";
6032                                 $catQuery = sprintf($catQuery, sql_table('category'), (integer) $rBlog['bnumber']);
6033                                 $categories = DB::getResult($catQuery);
6034                                 foreach ( $categories as $rCat )
6035                                 {
6036                                         if ( $rCat['catid'] == $selected )
6037                                         {
6038                                                 $selectText = ' selected="selected" ';
6039                                         }
6040                                         else
6041                                         {
6042                                                 $selectText = '';
6043                                         }
6044                                         echo '<option value="' . $rCat['catid'] . '" ' . $selectText . '>' . Entity::hsc($rCat['cname']) . "</option>\n";
6045                                 }
6046                                 
6047                                 if ( isset($multipleBlogs) && !empty($multipleBlogs) )
6048                                 {
6049                                         echo '</optgroup>';
6050                                 }
6051                         }
6052                 }
6053                 else
6054                 {
6055                         foreach ( $blogs as $rBlog )
6056                         {
6057                                 echo '<option value="' . $rBlog['bnumber'] . '"';
6058                                 if ( $rBlog['bnumber'] == $selected )
6059                                 {
6060                                         echo '<option value="' . $rBlog['bnumber'] . '" selected="selected">' . Entity::hsc($rBlog['bname']) . "</option>\n";
6061                                 }
6062                                 else
6063                                 {
6064                                         echo '<option value="' . $rBlog['bnumber'] . '">' . Entity::hsc($rBlog['bname']) . "</option>\n";
6065                                 }
6066                         }
6067                 }
6068                 echo "</select>\n";
6069                 return;
6070         }
6071 }