OSDN Git Service

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