OSDN Git Service

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