OSDN Git Service

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