OSDN Git Service

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