OSDN Git Service

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