OSDN Git Service

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