OSDN Git Service

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