OSDN Git Service

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