OSDN Git Service

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