3 * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
\r
4 * Copyright (C) 2002-2012 The Nucleus Group
\r
6 * This program is free software; you can redistribute it and/or
\r
7 * modify it under the terms of the GNU General Public License
\r
8 * as published by the Free Software Foundation; either version 2
\r
9 * of the License, or (at your option) any later version.
\r
10 * (see nucleus/documentation/index.html#license for more info)
\r
13 * The code for the Nucleus admin area
\r
15 * @license http://nucleuscms.org/license.txt GNU General Public License
\r
16 * @copyright Copyright (C) 2002-2012 The Nucleus Group
\r
17 * @version $Id: ADMIN.php 1661 2012-02-12 11:55:39Z sakamocchi $
\r
20 if ( !function_exists('requestVar') ) exit;
\r
21 require_once dirname(__FILE__) . '/showlist.php';
\r
25 static private $xml_version_info = '1.0';
\r
26 static private $formal_public_identifier = '-//W3C//DTD XHTML 1.0 Strict//EN';
\r
27 static private $system_identifier = 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd';
\r
28 static private $xhtml_namespace = 'http://www.w3.org/1999/xhtml';
\r
30 static public $headMess;
\r
32 static private $action;
\r
33 static private $skin;
\r
34 static private $passvar;
\r
35 static private $aOptions;
\r
37 static public $extrahead;
\r
38 static public $blog;
\r
39 static public $contents;
\r
42 * Admin::$edit_actions
\r
44 static private $edit_actions = array(
\r
45 'adminskinoverview',
\r
46 'adminskinieoverview',
\r
47 'adminskinedittype',
\r
48 'adminskinremovetype',
\r
51 'adminskinieimport',
\r
52 'adminskiniedoimport',
\r
53 'admintemplateedit',
\r
54 'admintemplateoverview',
\r
55 'admintemplatedelete'
\r
59 * Admin::$skinless_actions
\r
61 static private $skinless_actions = array(
\r
62 'plugindeleteconfirm',
\r
63 'pluginoptionsupdate',
\r
64 'skinremovetypeconfirm',
\r
66 'skindeleteconfirm',
\r
72 'templatedeleteconfirm',
\r
75 'adminskinremovetypeconfirm',
\r
77 'adminskindeleteconfirm',
\r
79 'adminskineditgeneral',
\r
80 'adminskinieexport',
\r
82 'admintemplateupdate',
\r
83 'admintemplatedeleteconfirm',
\r
85 'admintemplateclone',
\r
86 'blogsettingsupdate',
\r
90 'itemdeleteconfirm',
\r
92 'changemembersettings',
\r
97 static private $actions_needless_to_check = array(
\r
108 'editmembersettings',
\r
111 'browseowncomments',
\r
125 'templateoverview',
\r
130 'banlistnewfromitem',
\r
152 static public function initialize()
\r
154 global $CONF, $DIR_LIBS, $manager, $member;
\r
156 /* NOTE: 1. decide which skinid to use */
\r
157 $skinid = $CONF['AdminSkin'];
\r
159 * NOTE: this is temporary escaped because not implemented yet*/
\r
160 if (isset($member) && $member->isLoggedIn())
\r
162 $memskin = $member->getAdminSkin();
\r
163 if ( $memskin && Skin::existsID($memskin))
\r
165 $skinid = $memskin;
\r
169 /* NOTE: 2. make an instance of skin object */
\r
170 if ( !Skin::existsID($skinid) )
\r
175 /* NOTE: 3. initializing each members */
\r
176 self::$skin =& $manager->getSkin($skinid, 'AdminActions', 'AdminSkin');
\r
177 self::$action = '';
\r
178 self::$extrahead = '';
\r
179 self::$passvar = '';
\r
180 self::$headMess = '';
\r
181 self::$aOptions = '';
\r
187 * Executes an action
\r
189 * @param string $action action to be performed
\r
192 static public function action($action)
\r
194 global $CONF, $DIR_LIBS, $manager, $member;
\r
196 /* 1. decide action name */
\r
197 $customAction = postvar('customaction');
\r
198 if ( !empty($customAction) )
\r
201 'login' => $customAction,
\r
202 '' => $customAction
\r
208 'login' => 'overview',
\r
212 if ( array_key_exists($action, $alias) && isset($alias[$action]) )
\r
214 $action = $alias[$action];
\r
216 $methodName = "action_{$action}";
\r
217 self::$action = strtolower($action);
\r
219 /* 2. check the action */
\r
220 $synonimActions = array(
\r
221 'banlistnewfromitem',
\r
225 $allowActions = array_merge($synonimActions, self::$skinless_actions);
\r
226 $aActionsNotToCheck = array_merge(self::$actions_needless_to_check, self::$edit_actions, $allowActions);
\r
227 if ( !in_array(self::$action, $aActionsNotToCheck) && !self::existsSkinContents($action) )
\r
229 if (!$manager->checkTicket())
\r
231 self::error(_ERROR_BADTICKET);
\r
236 /* 3. parse according to the action */
\r
237 if ( !method_exists('Admin', $methodName) && !in_array(self::$action, $allowActions) && self::existsSkinContents($action) )
\r
239 /* TODO: what is this?
\r
240 self::action_parseSpecialskin();
\r
243 elseif ( method_exists('Admin', $methodName) )
\r
245 call_user_func(array(__CLASS__, $methodName));
\r
247 else if ( self::existsSkinContents('adminerrorpage') )
\r
249 self::error(_BADACTION . ENTITY::hsc($action));
\r
252 elseif ( $id != $CONF['AdminSkin'] )
\r
254 self::$skin =& $manager->getSkin($CONF['AdminSkin'], 'AdminActions');
\r
255 if ( self::$skin && self::existsSkinContents('adminerrorpage') )
\r
257 self::error(_BADACTION . ENTITY::hsc($action));
\r
263 self::error(_BADACTION . ENTITY::hsc($action));
\r
270 * Action::existsSkinContents()
\r
271 * Check skin contents
\r
273 * @param string $action action type
\r
276 static private function existsSkinContents($action)
\r
278 $in_array = in_array($action, self::$skinless_actions);
\r
286 $query = "SELECT scontent as result FROM %s WHERE sdesc=%d AND stype=%s";
\r
287 /* TODO: skinid should be a default */
\r
288 if ( !is_object(self::$skin) )
\r
291 return DB::getValue(sprintf($query, sql_table('skin'), $CONF['AdminSkin'], DB::quoteValue($action)));
\r
295 return DB::getValue(sprintf($query, sql_table('skin'), self::$skin->getID(), DB::quoteValue($action)));
\r
302 * Action::specialActionsAllow()
\r
303 * Check exists specialskinparts
\r
305 * @param string $action action type
\r
308 static private function specialActionsAllow($action)
\r
310 $query = "SELECT sdesc as result FROM %s WHERE sdesc = %d AND stype = %s";
\r
311 $query = sprintf($query, sql_table('skin'), (integer) self::$skin->id, DB::quoteValue($action));
\r
312 return DB::getValue($query);
\r
316 * Action::action_showlogin()
\r
321 static private function action_showlogin()
\r
324 self::action_login($error);
\r
329 * Action::action_login()
\r
331 * @param string $msg message for pageheader
\r
332 * @param integer $passvars ???
\r
334 static private function action_login($msg = '', $passvars = 1)
\r
338 // skip to overview when allowed
\r
339 if ( $member->isLoggedIn() && $member->canLogin() )
\r
341 self::action_overview();
\r
345 /* TODO: needless variable??? */
\r
346 self::$passvar = $passvars;
\r
349 self::$headMess = $msg;
\r
352 self::$skin->parse('showlogin');
\r
356 * Action::action_overview()
\r
357 * provides a screen with the overview of the actions available
\r
359 * @param string $msg message for pageheader
\r
362 static private function action_overview($msg = '')
\r
366 self::$headMess = $msg;
\r
369 self::$skin->parse('overview');
\r
374 * Admin::action_manage()
\r
376 * @param string $msg message for pageheader
\r
379 static private function action_manage($msg = '')
\r
385 self::$headMess = $msg;
\r
387 $member->isAdmin() or self::disallow();
\r
389 self::$skin->parse('manage');
\r
394 * Action::action_itemlist()
\r
396 * @param integer id for weblod
\r
399 static private function action_itemlist($blogid = '')
\r
401 global $member, $manager, $CONF;
\r
403 if ( $blogid == '' )
\r
405 $blogid = intRequestVar('blogid');
\r
408 $member->teamRights($blogid) or $member->isAdmin() or self::disallow();
\r
410 self::$skin->parse('itemlist');
\r
415 * Action::action_batchitem()
\r
420 static private function action_batchitem()
\r
422 global $member, $manager;
\r
424 $member->isLoggedIn() or self::disallow();
\r
426 $selected = requestIntArray('batch');
\r
427 $action = requestVar('batchaction');
\r
429 if ( !is_array($selected) || sizeof($selected) == 0 )
\r
431 self::error(_BATCH_NOSELECTION);
\r
435 // On move: when no destination blog/category chosen, show choice now
\r
436 $destCatid = intRequestVar('destcatid');
\r
437 if ( ($action == 'move') && (!$manager->existsCategory($destCatid)) )
\r
439 self::batchMoveSelectDestination('item', $selected);
\r
442 // On delete: check if confirmation has been given
\r
443 if ( ($action == 'delete') && (requestVar('confirmation') != 'yes') )
\r
445 self::batchAskDeleteConfirmation('item', $selected);
\r
448 self::$skin->parse('batchitem');
\r
453 * Action::action_batchcomment()
\r
458 static private function action_batchcomment()
\r
462 $member->isLoggedIn() or self::disallow();
\r
464 $selected = requestIntArray('batch');
\r
465 $action = requestVar('batchaction');
\r
467 // Show error when no items were selected
\r
468 if ( !is_array($selected) || sizeof($selected) == 0 )
\r
470 self::error(_BATCH_NOSELECTION);
\r
474 // On delete: check if confirmation has been given
\r
475 if ( ($action == 'delete') && (requestVar('confirmation') != 'yes') )
\r
477 self::batchAskDeleteConfirmation('comment', $selected);
\r
480 self::$skin->parse('batchcomment');
\r
485 * Admin::setAdminAction()
\r
487 * @param string $action
\r
490 static public function setAdminAction($action)
\r
492 self::$action = $action;
\r
497 * Admin::action_batchmember()
\r
502 static private function action_batchmember()
\r
506 ($member->isLoggedIn() && $member->isAdmin()) or self::disallow();
\r
508 $selected = requestIntArray('batch');
\r
509 $action = requestVar('batchaction');
\r
511 // Show error when no members selected
\r
512 if ( !is_array($selected) || sizeof($selected) == 0 )
\r
514 self::error(_BATCH_NOSELECTION);
\r
518 // On delete: check if confirmation has been given
\r
519 if ( ($action == 'delete') && (requestVar('confirmation') != 'yes') )
\r
521 self::batchAskDeleteConfirmation('member',$selected);
\r
524 self::$skin->parse('batchmember');
\r
529 * Admin::action_batchteam()
\r
534 static private function action_batchteam()
\r
538 $blogid = intRequestVar('blogid');
\r
540 ($member->isLoggedIn() && $member->blogAdminRights($blogid)) or self::disallow();
\r
542 $selected = requestIntArray('batch');
\r
543 $action = requestVar('batchaction');
\r
545 if ( !is_array($selected) || sizeof($selected) == 0 )
\r
547 self::error(_BATCH_NOSELECTION);
\r
551 // On delete: check if confirmation has been given
\r
552 if ( ($action == 'delete') && (requestVar('confirmation') != 'yes') )
\r
554 self::batchAskDeleteConfirmation('team',$selected);
\r
557 self::$skin->parse('batchteam');
\r
562 * Admin::action_batchcategory()
\r
567 static private function action_batchcategory()
\r
569 global $member, $manager;
\r
571 $member->isLoggedIn() or self::disallow();
\r
573 $selected = requestIntArray('batch');
\r
574 $action = requestVar('batchaction');
\r
576 if ( !is_array($selected) || sizeof($selected) == 0 )
\r
578 self::error(_BATCH_NOSELECTION);
\r
582 // On move: when no destination blog chosen, show choice now
\r
583 $destBlogId = intRequestVar('destblogid');
\r
584 if ( ($action == 'move') && (!$manager->existsBlogID($destBlogId)) )
\r
586 self::batchMoveCategorySelectDestination('category', $selected);
\r
589 // On delete: check if confirmation has been given
\r
590 if ( ($action == 'delete') && (requestVar('confirmation') != 'yes') )
\r
592 self::batchAskDeleteConfirmation('category', $selected);
\r
595 self::$skin->parse('batchcategory');
\r
600 * Admin::batchMoveSelectDestination()
\r
602 * @param string $type type of batch action
\r
603 * @param integer $ids needless???
\r
606 * TODO: remove needless argument
\r
608 static private function batchMoveSelectDestination($type, $ids)
\r
610 $_POST['batchmove'] = $type;
\r
611 self::$skin->parse('batchmove');
\r
616 * Admin::batchMoveCategorySelectDestination()
\r
618 * @param string $type type of batch action
\r
619 * @param integer $ids needless???
\r
622 * TODO: remove needless argument
\r
624 static private function batchMoveCategorySelectDestination($type, $ids)
\r
626 $_POST['batchmove'] = $type;
\r
628 self::$skin->parse('batchmovecat');
\r
633 * Admin::batchAskDeleteConfirmation()
\r
635 * @param string $type type of batch action
\r
636 * @param integer $ids needless???
\r
639 * TODO: remove needless argument
\r
641 static private function batchAskDeleteConfirmation($type, $ids)
\r
643 self::$skin->parse('batchdelete');
\r
648 * Admin::action_browseownitems()
\r
653 static private function action_browseownitems()
\r
655 global $member, $manager, $CONF;
\r
657 self::$skin->parse('browseownitems');
\r
662 * Admin::action_itemcommentlist()
\r
663 * Show all the comments for a given item
\r
665 * @param integer $itemid ID for item
\r
668 static private function action_itemcommentlist($itemid = '')
\r
670 global $member, $manager, $CONF;
\r
672 if ( $itemid == '' )
\r
674 $itemid = intRequestVar('itemid');
\r
677 // only allow if user is allowed to alter item
\r
678 $member->canAlterItem($itemid) or self::disallow();
\r
680 $item =& $manager->getItem($itemid, 1, 1);
\r
681 $_REQUEST['itemid'] = $item['itemid'];
\r
682 $_REQUEST['blogid'] = $item['blogid'];
\r
684 self::$skin->parse('itemcommentlist');
\r
689 * Admin::action_browseowncomments()
\r
690 * Browse own comments
\r
695 static private function action_browseowncomments()
\r
697 self::$skin->parse('browseowncomments');
\r
702 * Admin::action_blogcommentlist()
\r
703 * Browse all comments for a weblog
\r
705 * @param integer $blogid ID for weblog
\r
708 static private function action_blogcommentlist($blogid = '')
\r
710 global $member, $manager, $CONF;
\r
712 if ( $blogid == '' )
\r
714 $blogid = intRequestVar('blogid');
\r
718 $blogid = intval($blogid);
\r
721 $member->teamRights($blogid) or $member->isAdmin() or self::disallow();
\r
723 /* TODO: we consider to use the other way insterad of this */
\r
724 $_REQUEST['blogid'] = $blogid;
\r
726 self::$skin->parse('blogcommentlist');
\r
731 * Admin::action_createaccount()
\r
736 static private function action_createaccount()
\r
740 if ( $CONF['AllowMemberCreate'] != 1 )
\r
742 self::$skin->parse('createaccountdisable');
\r
758 if ( array_key_exists('showform', $_POST) && $_POST['showform'] == 1 )
\r
760 $action = new Action();
\r
761 $message = $action->createAccount();
\r
762 if ( $message === 1 )
\r
764 self::$headMess = $message;
\r
765 self::$skin->parse('createaccountsuccess');
\r
769 /* TODO: validation */
\r
770 if ( array_key_exists('name', $_POST) )
\r
772 $contents['name'] = $_POST['name'];
\r
774 if ( array_key_exists('realname', $_POST) )
\r
776 $contents['realname'] = $_POST['realname'];
\r
778 if ( array_key_exists('email', $_POST) )
\r
780 $contents['email'] = $_POST['email'];
\r
782 if ( array_key_exists('url', $_POST) )
\r
784 $contents['url'] = $_POST['url'];
\r
787 self::$contents = $contents;
\r
791 self::$skin->parse('createaccountinput');
\r
796 * Admin::action_createitem()
\r
797 * Provide a page to item a new item to the given blog
\r
802 static private function action_createitem()
\r
804 global $member, $manager;
\r
806 $blogid = intRequestVar('blogid');
\r
808 // check if allowed
\r
809 $member->teamRights($blogid) or self::disallow();
\r
811 $blog =& $manager->getBlog($blogid);
\r
812 $contents = array();
\r
816 'contents' => &$contents
\r
818 $manager->notify('PreAddItemForm', $data);
\r
820 if ( $blog->convertBreaks() )
\r
822 if ( array_key_exists('body', $contents) && !empty($contents['body']) )
\r
824 $contents['body'] = removeBreaks($contents['body']);
\r
826 if ( array_key_exists('more', $contents) && !empty($contents['more']) )
\r
828 $contents['more'] = removeBreaks($contents['more']);
\r
832 self::$blog = &$blog;
\r
833 self::$contents = &$contents;
\r
835 self::$skin->parse('createitem');
\r
840 * Admin::action_itemedit()
\r
845 static private function action_itemedit()
\r
847 global $member, $manager;
\r
849 $itemid = intRequestVar('itemid');
\r
851 // only allow if user is allowed to alter item
\r
852 $member->canAlterItem($itemid) or self::disallow();
\r
854 $item =& $manager->getItem($itemid, 1, 1);
\r
855 $blog =& $manager->getBlog($item['blogid']);
\r
856 $manager->notify('PrepareItemForEdit', array('blog'=> &$blog, 'item' => &$item));
\r
858 if ( $blog->convertBreaks() )
\r
860 if ( array_key_exists('body', $item) && !empty($item['body']) )
\r
862 $item['body'] = removeBreaks($item['body']);
\r
864 if ( array_key_exists('more', $item) && !empty($item['more']) )
\r
866 $item['more'] = removeBreaks($item['more']);
\r
870 self::$blog = &$blog;
\r
871 self::$contents = &$item;
\r
873 self::$skin->parse('itemedit');
\r
878 * Admin::action_itemupdate()
\r
883 static private function action_itemupdate()
\r
885 global $member, $manager, $CONF;
\r
887 $itemid = intRequestVar('itemid');
\r
888 $catid = postVar('catid');
\r
890 // only allow if user is allowed to alter item
\r
891 $member->canUpdateItem($itemid, $catid) or self::disallow();
\r
893 $actiontype = postVar('actiontype');
\r
895 // delete actions are handled by itemdelete (which has confirmation)
\r
896 if ( $actiontype == 'delete' )
\r
898 self::action_itemdelete();
\r
902 $body = postVar('body');
\r
903 $title = postVar('title');
\r
904 $more = postVar('more');
\r
905 $closed = intPostVar('closed');
\r
906 $draftid = intPostVar('draftid');
\r
908 // default action = add now
\r
909 if ( !$actiontype )
\r
911 $actiontype='addnow';
\r
914 // create new category if needed
\r
915 if ( i18n::strpos($catid,'newcat') === 0 )
\r
918 list($blogid) = sscanf($catid,"newcat-%d");
\r
921 $blog =& $manager->getBlog($blogid);
\r
922 $catid = $blog->createNewCategory();
\r
924 // show error when sth goes wrong
\r
927 self::doError(_ERROR_CATCREATEFAIL);
\r
932 * set some variables based on actiontype
\r
935 * draft items -> addnow, addfuture, adddraft, delete
\r
936 * non-draft items -> edit, changedate, delete
\r
939 * $timestamp: set to a nonzero value for future dates or date changes
\r
940 * $wasdraft: set to 1 when the item used to be a draft item
\r
941 * $publish: set to 1 when the edited item is not a draft
\r
943 $blogid = getBlogIDFromItemID($itemid);
\r
944 $blog =& $manager->getBlog($blogid);
\r
946 $wasdrafts = array('adddraft', 'addfuture', 'addnow');
\r
947 $wasdraft = in_array($actiontype, $wasdrafts) ? 1 : 0;
\r
948 $publish = ($actiontype != 'adddraft' && $actiontype != 'backtodrafts') ? 1 : 0;
\r
949 if ( $actiontype == 'addfuture' || $actiontype == 'changedate' )
\r
951 $timestamp = mktime(intPostVar('hour'), intPostVar('minutes'), 0, intPostVar('month'), intPostVar('day'), intPostVar('year'));
\r
958 // edit the item for real
\r
959 Item::update($itemid, $catid, $title, $body, $more, $closed, $wasdraft, $publish, $timestamp);
\r
961 self::updateFuturePosted($blogid);
\r
963 if ( $draftid > 0 )
\r
965 // delete permission is checked inside Item::delete()
\r
966 Item::delete($draftid);
\r
969 if ( $catid != intPostVar('catid') )
\r
971 self::action_categoryedit(
\r
974 $CONF['AdminURL'] . 'index.php?action=itemlist&blogid=' . getBlogIDFromItemID($itemid)
\r
979 // TODO: set start item correctly for itemlist
\r
980 $item =& $manager->getitem($itemid, 1, 1);
\r
981 $query = "SELECT COUNT(*) FROM %s WHERE unix_timestamp(itime) <= '%s';";
\r
982 $query = sprintf($query, sql_table('item'), $item['timestamp']);
\r
983 $cnt = DB::getValue($query);
\r
984 $_REQUEST['start'] = $cnt + 1;
\r
985 self::action_itemlist(getBlogIDFromItemID($itemid));
\r
991 * Admin::action_itemdelete()
\r
997 static private function action_itemdelete()
\r
999 global $member, $manager;
\r
1001 $itemid = intRequestVar('itemid');
\r
1003 // only allow if user is allowed to alter item
\r
1004 $member->canAlterItem($itemid) or self::disallow();
\r
1006 if ( !$manager->existsItem($itemid,1,1) )
\r
1008 self::error(_ERROR_NOSUCHITEM);
\r
1012 self::$skin->parse('itemdelete');
\r
1017 * Admin::action_itemdeleteconfirm()
\r
1022 static private function action_itemdeleteconfirm()
\r
1024 global $member, $manager;
\r
1026 $itemid = intRequestVar('itemid');
\r
1028 // only allow if user is allowed to alter item
\r
1029 $member->canAlterItem($itemid) or self::disallow();
\r
1032 $item =& $manager->getItem($itemid, 1, 1);
\r
1034 // delete item (note: some checks will be performed twice)
\r
1035 self::deleteOneItem($item['itemid']);
\r
1037 self::action_itemlist($item['blogid']);
\r
1042 * Admin::deleteOneItem()
\r
1043 * Deletes one item and returns error if something goes wrong
\r
1045 * @param integer $itemid ID for item
\r
1048 static public function deleteOneItem($itemid)
\r
1050 global $member, $manager;
\r
1052 // only allow if user is allowed to alter item (also checks if itemid exists)
\r
1053 if ( !$member->canAlterItem($itemid) )
\r
1055 return _ERROR_DISALLOWED;
\r
1058 // need to get blogid before the item is deleted
\r
1059 $item =& $manager->getItem($itemid, 1, 1);
\r
1061 $manager->loadClass('ITEM');
\r
1062 Item::delete($item['itemid']);
\r
1064 // update blog's futureposted
\r
1065 self::updateFuturePosted($item['itemid']);
\r
1070 * Admin::updateFuturePosted()
\r
1071 * Update a blog's future posted flag
\r
1073 * @param integer $blogid
\r
1076 static private function updateFuturePosted($blogid)
\r
1080 $blogid = intval($blogid);
\r
1081 $blog =& $manager->getBlog($blogid);
\r
1082 $currenttime = $blog->getCorrectTime(time());
\r
1084 $query = "SELECT * FROM %s WHERE iblog=%d AND iposted=0 AND itime>'%s'";
\r
1085 $query = sprintf($query, sql_table('item'), (integer) $blogid, i18n::formatted_datetime('mysql', $currenttime));
\r
1086 $result = DB::getResult($query);
\r
1088 if ( $result->rowCount() > 0 )
\r
1090 $blog->setFuturePost();
\r
1094 $blog->clearFuturePost();
\r
1100 * Admin::action_itemmove()
\r
1105 static private function action_itemmove()
\r
1107 global $member, $manager;
\r
1109 $itemid = intRequestVar('itemid');
\r
1111 $member->canAlterItem($itemid) or self::disallow();
\r
1113 self::$skin->parse('itemmove');
\r
1118 * Admin::action_itemmoveto()
\r
1123 static private function action_itemmoveto()
\r
1125 global $member, $manager;
\r
1127 $itemid = intRequestVar('itemid');
\r
1128 $catid = requestVar('catid');
\r
1130 // create new category if needed
\r
1131 if ( i18n::strpos($catid,'newcat') === 0 )
\r
1134 list($blogid) = sscanf($catid,'newcat-%d');
\r
1137 $blog =& $manager->getBlog($blogid);
\r
1138 $catid = $blog->createNewCategory();
\r
1140 // show error when sth goes wrong
\r
1143 self::doError(_ERROR_CATCREATEFAIL);
\r
1147 // only allow if user is allowed to alter item
\r
1148 $member->canUpdateItem($itemid, $catid) or self::disallow();
\r
1150 $old_blogid = getBlogIDFromItemId($itemid);
\r
1152 Item::move($itemid, $catid);
\r
1154 // set the futurePosted flag on the blog
\r
1155 self::updateFuturePosted(getBlogIDFromItemId($itemid));
\r
1157 // reset the futurePosted in case the item is moved from one blog to another
\r
1158 self::updateFuturePosted($old_blogid);
\r
1160 if ( $catid != intRequestVar('catid') )
\r
1162 self::action_categoryedit($catid, $blog->getID());
\r
1166 self::action_itemlist(getBlogIDFromCatID($catid));
\r
1172 * Admin::moveOneItem()
\r
1173 * Moves one item to a given category (category existance should be checked by caller)
\r
1174 * errors are returned
\r
1176 * @param integer $itemid ID for item
\r
1177 * @param integer $destCatid ID for category to which the item will be moved
\r
1180 static public function moveOneItem($itemid, $destCatid)
\r
1184 // only allow if user is allowed to move item
\r
1185 if ( !$member->canUpdateItem($itemid, $destCatid) )
\r
1187 return _ERROR_DISALLOWED;
\r
1190 Item::move($itemid, $destCatid);
\r
1195 * Admin::action_additem()
\r
1196 * Adds a item to the chosen blog
\r
1201 static private function action_additem()
\r
1203 global $manager, $CONF;
\r
1205 $manager->loadClass('ITEM');
\r
1207 $result = Item::createFromRequest();
\r
1209 if ( $result['status'] == 'error' )
\r
1211 self::error($result['message']);
\r
1215 $item =& $manager->getItem($result['itemid'], 0, 0);
\r
1217 if ( $result['status'] == 'newcategory' )
\r
1219 $distURI = $manager->addTicketToUrl($CONF['AdminURL'] . 'index.php?action=itemList&blogid=' . $item['blogid']);
\r
1220 self::action_categoryedit($result['catid'], $item['blogid'], $distURI);
\r
1224 $methodName = 'action_itemlist';
\r
1225 self::action_itemlist($item['blogid']);
\r
1231 * Admin::action_commentedit()
\r
1232 * Allows to edit previously made comments
\r
1237 static private function action_commentedit()
\r
1239 global $member, $manager;
\r
1241 $commentid = intRequestVar('commentid');
\r
1243 $member->canAlterComment($commentid) or self::disallow();
\r
1245 $comment = COMMENT::getComment($commentid);
\r
1246 $manager->notify('PrepareCommentForEdit', array('comment' => &$comment));
\r
1248 Admin::$contents = $comment;
\r
1249 self::$skin->parse('commentedit');
\r
1254 * Admin::action_commentupdate()
\r
1259 static private function action_commentupdate()
\r
1261 global $member, $manager;
\r
1263 $commentid = intRequestVar('commentid');
\r
1265 $member->canAlterComment($commentid) or self::disallow();
\r
1267 $url = postVar('url');
\r
1268 $email = postVar('email');
\r
1269 $body = postVar('body');
\r
1271 // intercept words that are too long
\r
1272 if (preg_match('#[a-zA-Z0-9|\.,;:!\?=\/\\\\]{90,90}#', $body) != FALSE)
\r
1274 self::error(_ERROR_COMMENT_LONGWORD);
\r
1279 if ( i18n::strlen($body) < 3 )
\r
1281 self::error(_ERROR_COMMENT_NOCOMMENT);
\r
1285 if ( i18n::strlen($body) > 5000 )
\r
1287 self::error(_ERROR_COMMENT_TOOLONG);
\r
1292 $body = Comment::prepareBody($body);
\r
1298 $manager->notify('PreUpdateComment', $data);
\r
1300 $query = "UPDATE %s SET cmail=%s, cemail=%s, cbody=%s WHERE cnumber=%d;";
\r
1301 $query = sprintf($query, sql_table('comment'), DB::quoteValue($url), DB::quoteValue($email), DB::quoteValue($body), (integer) $commentid);
\r
1302 DB::execute($query);
\r
1305 $query = "SELECT citem FROM %s WHERE cnumber=%d;";
\r
1306 $query = sprintf($query, sql_table('comment'), (integer) $commentid);
\r
1308 $itemid = DB::getValue($query);
\r
1310 if ( $member->canAlterItem($itemid) )
\r
1312 self::action_itemcommentlist($itemid);
\r
1316 self::action_browseowncomments();
\r
1322 * Admin::action_commentdelete()
\r
1328 static private function action_commentdelete()
\r
1330 global $member, $manager;
\r
1332 $commentid = intRequestVar('commentid');
\r
1333 $member->canAlterComment($commentid) or self::disallow();
\r
1335 self::$skin->parse('commentdelete');
\r
1340 * Admin::action_commentdeleteconfirm()
\r
1345 static private function action_commentdeleteconfirm()
\r
1349 $commentid = intRequestVar('commentid');
\r
1351 // get item id first
\r
1352 $query = "SELECT citem FROM %s WHERE cnumber=%d;";
\r
1353 $query = sprintf($query, sql_table('comment'), (integer) $commentid);
\r
1355 $itemid = DB::getValue($query);
\r
1357 $error = self::deleteOneComment($commentid);
\r
1360 self::doError($error);
\r
1363 if ( $member->canAlterItem($itemid) )
\r
1365 self::action_itemcommentlist($itemid);
\r
1369 self::action_browseowncomments();
\r
1375 * Admin::deleteOneComment()
\r
1377 * @param integer $commentid ID for comment
\r
1380 static public function deleteOneComment($commentid)
\r
1382 global $member, $manager;
\r
1384 $commentid = (integer) $commentid;
\r
1386 if ( !$member->canAlterComment($commentid) )
\r
1388 return _ERROR_DISALLOWED;
\r
1392 'commentid' => $commentid
\r
1395 $manager->notify('PreDeleteComment', $data);
\r
1397 // delete the comments associated with the item
\r
1398 $query = "DELETE FROM %s WHERE cnumber=%d;";
\r
1399 $query = sprintf($query, sql_table('comment'), (integer) $commentid);
\r
1400 DB::execute($query);
\r
1403 'commentid' => $commentid
\r
1406 $manager->notify('PostDeleteComment', $data);
\r
1412 * Admin::action_usermanagement()
\r
1413 * Usermanagement main
\r
1418 static private function action_usermanagement()
\r
1420 global $member, $manager;
\r
1422 // check if allowed
\r
1423 $member->isAdmin() or self::disallow();
\r
1425 self::$skin->parse('usermanagement');
\r
1430 * Admin::action_memberedit()
\r
1431 * Edit member settings
\r
1436 static private function action_memberedit()
\r
1438 self::action_editmembersettings(intRequestVar('memberid'));
\r
1443 * Admin::action_editmembersettings()
\r
1445 * @param integer $memberid ID for member
\r
1449 static private function action_editmembersettings($memberid = '')
\r
1451 global $member, $manager, $CONF;
\r
1453 if ( $memberid == '' )
\r
1455 $memberid = $member->getID();
\r
1458 /* TODO: we should consider to use the other way insterad of this */
\r
1459 $_REQUEST['memberid'] = $memberid;
\r
1461 // check if allowed
\r
1462 ($member->getID() == $memberid) or $member->isAdmin() or self::disallow();
\r
1464 Admin::$extrahead .= "<script type=\"text/javascript\" src=\"<%skinfile(/javascripts/numbercheck.js)%>\"></script>\n";
\r
1466 self::$skin->parse('editmembersettings');
\r
1471 * Admin::action_changemembersettings()
\r
1476 static private function action_changemembersettings()
\r
1478 global $member, $CONF, $manager;
\r
1480 $memberid = intRequestVar('memberid');
\r
1482 // check if allowed
\r
1483 ($member->getID() == $memberid) or $member->isAdmin() or self::disallow();
\r
1485 $name = trim(strip_tags(postVar('name')));
\r
1486 $realname = trim(strip_tags(postVar('realname')));
\r
1487 $password = postVar('password');
\r
1488 $repeatpassword = postVar('repeatpassword');
\r
1489 $email = strip_tags(postVar('email'));
\r
1490 $url = strip_tags(postVar('url'));
\r
1491 $adminskin = intPostVar('adminskin');
\r
1492 $bookmarklet = intPostVar('bookmarklet');
\r
1494 // begin if: sometimes user didn't prefix the URL with http:// or https://, this cause a malformed URL. Let's fix it.
\r
1495 if ( !preg_match('#^https?://#', $url) )
\r
1497 $url = 'http://' . $url;
\r
1500 $admin = postVar('admin');
\r
1501 $canlogin = postVar('canlogin');
\r
1502 $notes = strip_tags(postVar('notes'));
\r
1503 $locale = postVar('locale');
\r
1505 $mem =& $manager->getMember($memberid);
\r
1507 if ( $CONF['AllowLoginEdit'] || $member->isAdmin() )
\r
1509 if ( !isValidDisplayName($name) )
\r
1511 self::error(_ERROR_BADNAME);
\r
1515 if ( ($name != $mem->getDisplayName()) && Member::exists($name) )
\r
1517 self::error(_ERROR_NICKNAMEINUSE);
\r
1521 if ( $password != $repeatpassword )
\r
1523 self::error(_ERROR_PASSWORDMISMATCH);
\r
1527 if ( $password && (i18n::strlen($password) < 6) )
\r
1529 self::error(_ERROR_PASSWORDTOOSHORT);
\r
1539 'password' => $password,
\r
1540 'errormessage' => &$pwderror,
\r
1541 'valid' => &$pwdvalid
\r
1543 $manager->notify('PrePasswordSet', $data);
\r
1547 self::error($pwderror);
\r
1553 if ( !NOTIFICATION::address_validation($email) )
\r
1555 self::error(_ERROR_BADMAILADDRESS);
\r
1560 self::error(_ERROR_REALNAMEMISSING);
\r
1563 if ( ($locale != '') && (!in_array($locale, i18n::get_available_locale_list())) )
\r
1565 self::error(_ERROR_NOSUCHTRANSLATION);
\r
1569 // check if there will remain at least one site member with both the logon and admin rights
\r
1570 // (check occurs when taking away one of these rights from such a member)
\r
1571 if ( (!$admin && $mem->isAdmin() && $mem->canLogin())
\r
1572 || (!$canlogin && $mem->isAdmin() && $mem->canLogin())
\r
1575 $r = DB::getResult('SELECT * FROM '.sql_table('member').' WHERE madmin=1 and mcanlogin=1');
\r
1576 if ( $r->rowCount() < 2 )
\r
1578 self::error(_ERROR_ATLEASTONEADMIN);
\r
1583 if ( $CONF['AllowLoginEdit'] || $member->isAdmin() )
\r
1585 $mem->setDisplayName($name);
\r
1588 $mem->setPassword($password);
\r
1592 $oldEmail = $mem->getEmail();
\r
1594 $mem->setRealName($realname);
\r
1595 $mem->setEmail($email);
\r
1596 $mem->setURL($url);
\r
1597 $mem->setNotes($notes);
\r
1598 $mem->setLocale($locale);
\r
1599 $mem->setAdminSkin($adminskin);
\r
1600 $mem->setBookmarklet($bookmarklet);
\r
1602 // only allow super-admins to make changes to the admin status
\r
1603 if ( $member->isAdmin() )
\r
1605 $mem->setAdmin($admin);
\r
1606 $mem->setCanLogin($canlogin);
\r
1609 $autosave = postVar('autosave');
\r
1610 $mem->setAutosave($autosave);
\r
1614 // store plugin options
\r
1615 $aOptions = requestArray('plugoption');
\r
1616 NucleusPlugin::apply_plugin_options($aOptions);
\r
1618 'context' => 'member',
\r
1619 'memberid' => $memberid,
\r
1622 $manager->notify('PostPluginOptionsUpdate', $data);
\r
1624 // if email changed, generate new password
\r
1625 if ( $oldEmail != $mem->getEmail() )
\r
1627 $mem->sendActivationLink('addresschange', $oldEmail);
\r
1629 $mem->newCookieKey();
\r
1631 // only log out if the member being edited is the current member.
\r
1632 if ( $member->getID() == $memberid )
\r
1634 $member->logout();
\r
1636 self::action_login(_MSG_ACTIVATION_SENT, 0);
\r
1640 if ( ($mem->getID() == $member->getID())
\r
1641 && ($mem->getDisplayName() != $member->getDisplayName()) )
\r
1643 $mem->newCookieKey();
\r
1644 $member->logout();
\r
1645 self::action_login(_MSG_LOGINAGAIN, 0);
\r
1649 self::action_overview(_MSG_SETTINGSCHANGED);
\r
1655 * Admin::action_memberadd()
\r
1661 static private function action_memberadd()
\r
1663 global $member, $manager;
\r
1665 // check if allowed
\r
1666 $member->isAdmin() or self::disallow();
\r
1668 if ( postVar('password') != postVar('repeatpassword') )
\r
1670 self::error(_ERROR_PASSWORDMISMATCH);
\r
1674 if ( i18n::strlen(postVar('password')) < 6 )
\r
1676 self::error(_ERROR_PASSWORDTOOSHORT);
\r
1680 $res = Member::create(
\r
1682 postVar('realname'),
\r
1683 postVar('password'),
\r
1687 postVar('canlogin'),
\r
1693 self::error($res);
\r
1697 // fire PostRegister event
\r
1698 $newmem = new Member();
\r
1699 $newmem->readFromName(postVar('name'));
\r
1701 'member' => &$newmem
\r
1703 $manager->notify('PostRegister', $data);
\r
1705 self::action_usermanagement();
\r
1710 * Admin::action_forgotpassword()
\r
1715 static private function action_forgotpassword()
\r
1717 self::$skin->parse('forgotpassword');
\r
1722 * Admin::action_activate()
\r
1723 * Account activation
\r
1728 static private function action_activate()
\r
1730 $key = getVar('key');
\r
1731 self::showActivationPage($key);
\r
1736 * Admin::showActivationPage()
\r
1741 static private function showActivationPage($key, $message = '')
\r
1745 // clean up old activation keys
\r
1746 Member::cleanupActivationTable();
\r
1748 // get activation info
\r
1749 $info = Member::getActivationInfo($key);
\r
1753 self::error(_ERROR_ACTIVATE);
\r
1757 $mem =& $manager->getMember($info->vmember);
\r
1761 self::error(_ERROR_ACTIVATE);
\r
1765 /* TODO: we should consider to use the other way insterad of this */
\r
1766 $_POST['ackey'] = $key;
\r
1767 $_POST['bNeedsPasswordChange'] = TRUE;
\r
1769 self::$headMess = $message;
\r
1770 self::$skin->parse('activate');
\r
1775 * Admin::action_activatesetpwd()
\r
1776 * Account activation - set password part
\r
1781 static private function action_activatesetpwd()
\r
1784 $key = postVar('key');
\r
1786 // clean up old activation keys
\r
1787 Member::cleanupActivationTable();
\r
1789 // get activation info
\r
1790 $info = Member::getActivationInfo($key);
\r
1792 if ( !$info || ($info->type == 'addresschange') )
\r
1794 return self::showActivationPage($key, _ERROR_ACTIVATE);
\r
1797 $mem =& $manager->getMember($info->vmember);
\r
1801 return self::showActivationPage($key, _ERROR_ACTIVATE);
\r
1804 $password = postVar('password');
\r
1805 $repeatpassword = postVar('repeatpassword');
\r
1807 if ( $password != $repeatpassword )
\r
1809 return self::showActivationPage($key, _ERROR_PASSWORDMISMATCH);
\r
1812 if ( $password && (i18n::strlen($password) < 6) )
\r
1814 return self::showActivationPage($key, _ERROR_PASSWORDTOOSHORT);
\r
1823 'password' => $password,
\r
1824 'errormessage' => &$pwderror,
\r
1825 'valid' => &$pwdvalid
\r
1827 $manager->notify('PrePasswordSet', $data);
\r
1830 return self::showActivationPage($key,$pwderror);
\r
1837 'type' => 'activation',
\r
1839 'error' => &$error
\r
1841 $manager->notify('ValidateForm', $data);
\r
1842 if ( $error != '' )
\r
1844 return self::showActivationPage($key, $error);
\r
1848 $mem->setPassword($password);
\r
1851 // do the activation
\r
1852 Member::activate($key);
\r
1854 self::$skin->parse('activatesetpwd');
\r
1859 * Admin::action_manageteam()
\r
1865 static private function action_manageteam()
\r
1867 global $member, $manager;
\r
1869 $blogid = intRequestVar('blogid');
\r
1871 // check if allowed
\r
1872 $member->blogAdminRights($blogid) or self::disallow();
\r
1874 self::$skin->parse('manageteam');
\r
1879 * Admin::action_teamaddmember()
\r
1880 * Add member to team
\r
1885 static private function action_teamaddmember()
\r
1887 global $member, $manager;
\r
1889 $memberid = intPostVar('memberid');
\r
1890 $blogid = intPostVar('blogid');
\r
1891 $admin = intPostVar('admin');
\r
1893 // check if allowed
\r
1894 $member->blogAdminRights($blogid) or self::disallow();
\r
1896 $blog =& $manager->getBlog($blogid);
\r
1897 if ( !$blog->addTeamMember($memberid, $admin) )
\r
1899 self::error(_ERROR_ALREADYONTEAM);
\r
1903 self::action_manageteam();
\r
1908 * Admin::action_teamdelete()
\r
1913 static private function action_teamdelete()
\r
1915 global $member, $manager;
\r
1917 $memberid = intRequestVar('memberid');
\r
1918 $blogid = intRequestVar('blogid');
\r
1920 // check if allowed
\r
1921 $member->blogAdminRights($blogid) or self::disallow();
\r
1923 $teammem =& $manager->getMember($memberid);
\r
1924 $blog =& $manager->getBlog($blogid);
\r
1926 self::$skin->parse('teamdelete');
\r
1931 * Admin::action_teamdeleteconfirm()
\r
1936 static private function action_teamdeleteconfirm()
\r
1940 $memberid = intRequestVar('memberid');
\r
1941 $blogid = intRequestVar('blogid');
\r
1943 $error = self::deleteOneTeamMember($blogid, $memberid);
\r
1946 self::error($error);
\r
1949 self::action_manageteam();
\r
1954 * Admin::deleteOneTeamMember()
\r
1959 static public function deleteOneTeamMember($blogid, $memberid)
\r
1961 global $member, $manager;
\r
1963 $blogid = intval($blogid);
\r
1964 $memberid = intval($memberid);
\r
1966 // check if allowed
\r
1967 if ( !$member->blogAdminRights($blogid) )
\r
1969 return _ERROR_DISALLOWED;
\r
1972 // check if: - there remains at least one blog admin
\r
1973 // - (there remains at least one team member)
\r
1974 $tmem =& $manager->getMember($memberid);
\r
1978 'member' => &$tmem,
\r
1979 'blogid' => $blogid
\r
1980 );
\r $manager->notify('PreDeleteTeamMember', $data);
\r
1982 if ( $tmem->isBlogAdmin($blogid) )
\r
1984 /* TODO: why we did double check? */
\r
1985 // check if there are more blog members left and at least one admin
\r
1986 // (check for at least two admins before deletion)
\r
1987 $query = "SELECT * FROM %s WHERE tblog=%d and tadmin=1;";
\r
1988 $query = sprintf($query, sql_table('team'), (integer) $blogid);
\r
1989 $r = DB::getResult($query);
\r
1990 if ( $r->rowCount() < 2 )
\r
1992 return _ERROR_ATLEASTONEBLOGADMIN;
\r
1996 $query = "DELETE FROM %s WHERE tblog=%d AND tmember=%d;";
\r
1997 $query = sprintf($query, sql_table('team'), (integer) $blogid, (integer) $memberid);
\r
1998 DB::execute($query);
\r
2001 'member' => &$tmem,
\r
2002 'blogid' => $blogid
\r
2004 $manager->notify('PostDeleteTeamMember', $data);
\r
2010 * Admin::action_teamchangeadmin()
\r
2015 static private function action_teamchangeadmin()
\r
2017 global $manager, $member;
\r
2019 $blogid = intRequestVar('blogid');
\r
2020 $memberid = intRequestVar('memberid');
\r
2022 // check if allowed
\r
2023 $member->blogAdminRights($blogid) or self::disallow();
\r
2025 $mem =& $manager->getMember($memberid);
\r
2027 // don't allow when there is only one admin at this moment
\r
2028 if ( $mem->isBlogAdmin($blogid) )
\r
2030 $query = "SELECT * FROM %s WHERE tblog=%d AND tadmin=1;";
\r
2031 $query = sprintf($query, sql_table('team'), (integer) $blogid);
\r
2032 $r = DB::getResult($query);
\r
2033 if ( $r->rowCount() == 1 )
\r
2035 self::error(_ERROR_ATLEASTONEBLOGADMIN);
\r
2040 if ( $mem->isBlogAdmin($blogid) )
\r
2049 $query = "UPDATE %s SET tadmin=%d WHERE tblog=%d and tmember=%d;";
\r
2050 $query = sprintf($query, (integer) $blogid, (integer) $newval, (integer) $blogid, (integer) $memberid);
\r
2051 DB::execute($query);
\r
2053 // only show manageteam if member did not change its own admin privileges
\r
2054 if ( $member->isBlogAdmin($blogid) )
\r
2056 self::action_manageteam();
\r
2060 self::action_overview(_MSG_ADMINCHANGED);
\r
2066 * Admin::action_blogsettings()
\r
2071 static private function action_blogsettings()
\r
2073 global $member, $manager;
\r
2075 $blogid = intRequestVar('blogid');
\r
2077 // check if allowed
\r
2078 $member->blogAdminRights($blogid) or self::disallow();
\r
2080 $blog =& $manager->getBlog($blogid);
\r
2082 Admin::$extrahead .= "<script type=\"text/javascript\" src=\"<%skinfile(/javascripts/numbercheck.js)%>\"></script>\n";
\r
2084 self::$skin->parse('blogsettings');
\r
2089 * Admin::action_categorynew()
\r
2094 static private function action_categorynew()
\r
2096 global $member, $manager;
\r
2098 $blogid = intRequestVar('blogid');
\r
2100 $member->blogAdminRights($blogid) or self::disallow();
\r
2102 $cname = postVar('cname');
\r
2103 $cdesc = postVar('cdesc');
\r
2105 if ( !isValidCategoryName($cname) )
\r
2107 self::error(_ERROR_BADCATEGORYNAME);
\r
2111 $query = "SELECT * FROM %s WHERE cname=%s AND cblog=%d;";
\r
2112 $query = sprintf($query, sql_table('category'), DB::quoteValue($cname), (integer) $blogid);
\r
2113 $res = DB::getResult($query);
\r
2114 if ( $res->rowCount() > 0 )
\r
2116 self::error(_ERROR_DUPCATEGORYNAME);
\r
2120 $blog =& $manager->getBlog($blogid);
\r
2121 $newCatID = $blog->createNewCategory($cname, $cdesc);
\r
2123 self::action_blogsettings();
\r
2128 * Admin::action_categoryedit()
\r
2133 static private function action_categoryedit($catid = '', $blogid = '', $desturl = '')
\r
2135 global $member, $manager;
\r
2137 if ( $blogid == '' )
\r
2139 $blogid = intGetVar('blogid');
\r
2143 $blogid = intval($blogid);
\r
2145 if ( $catid == '' )
\r
2147 $catid = intGetVar('catid');
\r
2151 $catid = intval($catid);
\r
2154 /* TODO: we should consider to use the other way insterad of this */
\r
2155 $_REQUEST['blogid'] = $blogid;
\r
2156 $_REQUEST['catid'] = $catid;
\r
2157 $_REQUEST['desturl'] = $desturl;
\r
2158 $member->blogAdminRights($blogid) or self::disallow();
\r
2160 Admin::$extrahead .= "<script type=\"text/javascript\" src=\"<%skinfile(/javascripts/numbercheck.js)%>\"></script>\n";
\r
2162 self::$skin->parse('categoryedit');
\r
2167 * Admin::action_categoryupdate()
\r
2172 static private function action_categoryupdate()
\r
2174 global $member, $manager;
\r
2176 $blogid = intPostVar('blogid');
\r
2177 $catid = intPostVar('catid');
\r
2178 $cname = postVar('cname');
\r
2179 $cdesc = postVar('cdesc');
\r
2180 $desturl = postVar('desturl');
\r
2182 $member->blogAdminRights($blogid) or self::disallow();
\r
2184 if ( !isValidCategoryName($cname) )
\r
2186 self::error(_ERROR_BADCATEGORYNAME);
\r
2190 $query = "SELECT * FROM %s WHERE cname=%s AND cblog=%d AND not(catid=%d);";
\r
2191 $query = sprintf($query, sql_table('category'), DB::quoteValue($cname), (integer) $blogid, (integer) $catid);
\r
2192 $res = DB::getResult($query);
\r
2193 if ( $res->rowCount() > 0 )
\r
2195 self::error(_ERROR_DUPCATEGORYNAME);
\r
2199 $query = "UPDATE %s SET cname=%s, cdesc=%s WHERE catid=%d;";
\r
2200 $query = sprintf($query, sql_table('category'), DB::quoteValue($cname), DB::quoteValue($cdesc), (integer) $catid);
\r
2201 DB::execute($query);
\r
2203 // store plugin options
\r
2204 $aOptions = requestArray('plugoption');
\r
2205 NucleusPlugin::apply_plugin_options($aOptions);
\r
2207 'context' => 'category',
\r
2210 $manager->notify('PostPluginOptionsUpdate', $data);
\r
2214 redirect($desturl);
\r
2218 self::action_blogsettings();
\r
2224 * Admin::action_categorydelete()
\r
2229 static private function action_categorydelete()
\r
2231 global $member, $manager;
\r
2233 $blogid = intRequestVar('blogid');
\r
2234 $catid = intRequestVar('catid');
\r
2236 $member->blogAdminRights($blogid) or self::disallow();
\r
2238 $blog =& $manager->getBlog($blogid);
\r
2240 // check if the category is valid
\r
2241 if ( !$blog->isValidCategory($catid) )
\r
2243 self::error(_ERROR_NOSUCHCATEGORY);
\r
2247 // don't allow deletion of default category
\r
2248 if ( $blog->getDefaultCategory() == $catid )
\r
2250 self::error(_ERROR_DELETEDEFCATEGORY);
\r
2254 // check if catid is the only category left for blogid
\r
2255 $query = "SELECT catid FROM %s WHERE cblog=%d;";
\r
2256 $query = sprintf($query, sql_table('category'), $blogid);
\r
2257 $res = DB::getResult($query);
\r
2258 if ( $res->rowCount() == 1 )
\r
2260 self::error(_ERROR_DELETELASTCATEGORY);
\r
2264 self::$skin->parse('categorydelete');
\r
2269 * Admin::action_categorydeleteconfirm()
\r
2274 static private function action_categorydeleteconfirm()
\r
2276 global $member, $manager;
\r
2278 $blogid = intRequestVar('blogid');
\r
2279 $catid = intRequestVar('catid');
\r
2281 $member->blogAdminRights($blogid) or self::disallow();
\r
2283 $error = self::deleteOneCategory($catid);
\r
2286 self::error($error);
\r
2290 self::action_blogsettings();
\r
2295 * Admin::deleteOneCategory()
\r
2296 * Delete a category by its id
\r
2298 * @param String $catid category id for deleting
\r
2301 static public function deleteOneCategory($catid)
\r
2303 global $manager, $member;
\r
2305 $catid = intval($catid);
\r
2306 $blogid = getBlogIDFromCatID($catid);
\r
2308 if ( !$member->blogAdminRights($blogid) )
\r
2310 return ERROR_DISALLOWED;
\r
2314 $blog =& $manager->getBlog($blogid);
\r
2316 // check if the category is valid
\r
2317 if ( !$blog || !$blog->isValidCategory($catid) )
\r
2319 return _ERROR_NOSUCHCATEGORY;
\r
2322 $destcatid = $blog->getDefaultCategory();
\r
2324 // don't allow deletion of default category
\r
2325 if ( $blog->getDefaultCategory() == $catid )
\r
2327 return _ERROR_DELETEDEFCATEGORY;
\r
2330 // check if catid is the only category left for blogid
\r
2331 $query = "SELECT catid FROM %s WHERE cblog=%d;";
\r
2332 $query = sprintf($query, sql_table('category'), (integer) $blogid);
\r
2334 $res = DB::getResult($query);
\r
2335 if ( $res->rowCount() == 1 )
\r
2337 return _ERROR_DELETELASTCATEGORY;
\r
2340 $data = array('catid' => $catid);
\r
2341 $manager->notify('PreDeleteCategory', $data);
\r
2343 // change category for all items to the default category
\r
2344 $query = "UPDATE %s SET icat=%d WHERE icat=%d;";
\r
2345 $query =sprintf($query, sql_table('item'), (integer) $destcatid, (integer) $catid);
\r
2346 DB::execute($query);
\r
2348 // delete all associated plugin options
\r
2349 NucleusPlugin::delete_option_values('category', (integer) $catid);
\r
2351 // delete category
\r
2352 $query = "DELETE FROM %s WHERE catid=%d;";
\r
2353 $query = sprintf($query, sql_table('category'), (integer) $catid);
\r
2354 DB::execute($query);
\r
2356 $data = array('catid' => $catid);
\r
2357 $manager->notify('PostDeleteCategory', $data);
\r
2362 * Admin::moveOneCategory()
\r
2363 * Delete a category by its id
\r
2365 * @param int $catid category id for move
\r
2366 * @param int $destblogid blog id for destination
\r
2369 static public function moveOneCategory($catid, $destblogid)
\r
2371 global $manager, $member;
\r
2372 $catid = intval($catid);
\r
2373 $destblogid = intval($destblogid);
\r
2374 $blogid = getBlogIDFromCatID($catid);
\r
2375 // mover should have admin rights on both blogs
\r
2376 if (!$member->blogAdminRights($blogid)) {
\r
2377 return _ERROR_DISALLOWED;
\r
2379 if (!$member->blogAdminRights($destblogid)) {
\r
2380 return _ERROR_DISALLOWED;
\r
2382 // cannot move to self
\r
2383 if ($blogid == $destblogid) {
\r
2384 return _ERROR_MOVETOSELF;
\r
2387 $blog =& $manager->getBlog($blogid);
\r
2388 $destblog =& $manager->getBlog($destblogid);
\r
2389 // check if the category is valid
\r
2390 if (!$blog || !$blog->isValidCategory($catid)) {
\r
2391 return _ERROR_NOSUCHCATEGORY;
\r
2393 // don't allow default category to be moved
\r
2394 if ($blog->getDefaultCategory() == $catid) {
\r
2395 return _ERROR_MOVEDEFCATEGORY;
\r
2398 'PreMoveCategory',
\r
2400 'catid' => &$catid,
\r
2401 'sourceblog' => &$blog,
\r
2402 'destblog' => &$destblog
\r
2405 // update comments table (cblog)
\r
2406 $query = 'SELECT '
\r
2409 . sql_table('item') . ' '
\r
2412 $items = sql_query(sprintf($query, $catid));
\r
2413 while ($oItem = sql_fetch_object($items)) {
\r
2414 $query = 'UPDATE '
\r
2415 . sql_table('comment') . ' '
\r
2417 . ' cblog = %d' . ' '
\r
2420 sql_query(sprintf($query, $destblogid, $oItem->inumber));
\r
2423 // update items (iblog)
\r
2424 $query = 'UPDATE '
\r
2425 . sql_table('item') . ' '
\r
2430 sql_query(sprintf($query, $destblogid, $catid));
\r
2433 $query = 'UPDATE '
\r
2434 . sql_table('category') . ' '
\r
2436 . ' cblog = %d' . ' '
\r
2439 sql_query(sprintf($query, $destblogid, $catid));
\r
2441 'PostMoveCategory',
\r
2443 'catid' => &$catid,
\r
2444 'sourceblog' => &$blog,
\r
2445 'destblog' => $destblog
\r
2452 * Admin::action_blogsettingsupdate
\r
2453 * Updating blog settings
\r
2458 static private function action_blogsettingsupdate()
\r
2460 global $member, $manager;
\r
2462 $blogid = intRequestVar('blogid');
\r
2464 $member->blogAdminRights($blogid) or self::disallow();
\r
2466 $blog =& $manager->getBlog($blogid);
\r
2468 $notify_address = trim(postVar('notify'));
\r
2469 $shortname = trim(postVar('shortname'));
\r
2470 $updatefile = trim(postVar('update'));
\r
2472 $notifyComment = intPostVar('notifyComment');
\r
2473 $notifyVote = intPostVar('notifyVote');
\r
2474 $notifyNewItem = intPostVar('notifyNewItem');
\r
2476 if ( $notifyComment == 0 )
\r
2478 $notifyComment = 1;
\r
2480 if ( $notifyVote == 0 )
\r
2484 if ( $notifyNewItem == 0 )
\r
2486 $notifyNewItem = 1;
\r
2488 $notifyType = $notifyComment * $notifyVote * $notifyNewItem;
\r
2490 if ( $notify_address && !NOTIFICATION::address_validation($notify_address) )
\r
2492 self::error(_ERROR_BADNOTIFY);
\r
2496 if ( !isValidShortName($shortname) )
\r
2498 self::error(_ERROR_BADSHORTBLOGNAME);
\r
2502 if ( ($blog->getShortName() != $shortname) && $manager->existsBlog($shortname) )
\r
2504 self::error(_ERROR_DUPSHORTBLOGNAME);
\r
2507 // check if update file is writable
\r
2508 if ( $updatefile && !is_writeable($updatefile) )
\r
2510 self::error(_ERROR_UPDATEFILE);
\r
2514 $blog->setName(trim(postVar('name')));
\r
2515 $blog->setShortName($shortname);
\r
2516 $blog->setNotifyAddress($notify_address);
\r
2517 $blog->setNotifyType($notifyType);
\r
2518 $blog->setMaxComments(postVar('maxcomments'));
\r
2519 $blog->setCommentsEnabled(postVar('comments'));
\r
2520 $blog->setTimeOffset(postVar('timeoffset'));
\r
2521 $blog->setUpdateFile($updatefile);
\r
2522 $blog->setURL(trim(postVar('url')));
\r
2523 $blog->setDefaultSkin(intPostVar('defskin'));
\r
2524 $blog->setDescription(trim(postVar('desc')));
\r
2525 $blog->setPublic(postVar('public'));
\r
2526 $blog->setConvertBreaks(intPostVar('convertbreaks'));
\r
2527 $blog->setAllowPastPosting(intPostVar('allowpastposting'));
\r
2528 $blog->setDefaultCategory(intPostVar('defcat'));
\r
2529 $blog->setSearchable(intPostVar('searchable'));
\r
2530 $blog->setEmailRequired(intPostVar('reqemail'));
\r
2531 $blog->writeSettings();
\r
2533 // store plugin options
\r
2534 $aOptions = requestArray('plugoption');
\r
2535 NucleusPlugin::apply_plugin_options($aOptions);
\r
2538 'context' => 'blog',
\r
2539 'blogid' => $blogid,
\r
2542 $manager->notify('PostPluginOptionsUpdate', $data);
\r
2544 self::action_overview(_MSG_SETTINGSCHANGED);
\r
2549 * Admin::action_deleteblog()
\r
2554 static private function action_deleteblog()
\r
2556 global $member, $CONF, $manager;
\r
2558 $blogid = intRequestVar('blogid');
\r
2560 $member->blogAdminRights($blogid) or self::disallow();
\r
2562 // check if blog is default blog
\r
2563 if ( $CONF['DefaultBlog'] == $blogid )
\r
2565 self::error(_ERROR_DELDEFBLOG);
\r
2569 $blog =& $manager->getBlog($blogid);
\r
2571 self::$skin->parse('deleteblog');
\r
2576 * Admin::action_deleteblogconfirm()
\r
2582 static private function action_deleteblogconfirm()
\r
2584 global $member, $CONF, $manager;
\r
2586 $blogid = intRequestVar('blogid');
\r
2588 $data = array('blogid' => $blogid);
\r
2589 $manager->notify('PreDeleteBlog', $data);
\r
2591 $member->blogAdminRights($blogid) or self::disallow();
\r
2593 // check if blog is default blog
\r
2594 if ( $CONF['DefaultBlog'] == $blogid )
\r
2596 self::error(_ERROR_DELDEFBLOG);
\r
2600 // delete all comments
\r
2601 $query = 'DELETE FROM ' . sql_table('comment') . ' WHERE cblog='.$blogid;
\r
2602 DB::execute($query);
\r
2604 // delete all items
\r
2605 $query = 'DELETE FROM ' . sql_table('item') . ' WHERE iblog=' . $blogid;
\r
2606 DB::execute($query);
\r
2608 // delete all team members
\r
2609 $query = 'DELETE FROM ' . sql_table('team') . ' WHERE tblog=' . $blogid;
\r
2610 DB::execute($query);
\r
2612 // delete all bans
\r
2613 $query = 'DELETE FROM ' . sql_table('ban') . ' WHERE blogid=' . $blogid;
\r
2614 DB::execute($query);
\r
2616 // delete all categories
\r
2617 $query = 'DELETE FROM ' . sql_table('category') . ' WHERE cblog=' . $blogid;
\r
2618 DB::execute($query);
\r
2620 // delete all associated plugin options
\r
2621 NucleusPlugin::delete_option_values('blog', $blogid);
\r
2623 // delete the blog itself
\r
2624 $query = 'DELETE FROM ' . sql_table('blog') . ' WHERE bnumber=' . $blogid;
\r
2625 DB::execute($query);
\r
2627 $data = array('blogid' => $blogid);
\r
2628 $manager->notify('PostDeleteBlog', $data);
\r
2630 self::action_overview(_DELETED_BLOG);
\r
2635 * Admin::action_memberdelete()
\r
2640 static private function action_memberdelete()
\r
2642 global $member, $manager;
\r
2644 $memberid = intRequestVar('memberid');
\r
2646 ($member->getID() == $memberid) or $member->isAdmin() or self::disallow();
\r
2648 $mem =& $manager->getMember($memberid);
\r
2650 self::$skin->parse('memberdelete');
\r
2655 * Admin::action_memberdeleteconfirm()
\r
2660 static private function action_memberdeleteconfirm()
\r
2664 $memberid = intRequestVar('memberid');
\r
2666 ($member->getID() == $memberid) or $member->isAdmin() or self::disallow();
\r
2668 $error = self::deleteOneMember($memberid);
\r
2671 self::error($error);
\r
2675 if ( $member->isAdmin() )
\r
2677 self::action_usermanagement();
\r
2682 self::action_overview(_DELETED_MEMBER);
\r
2689 * Admin::deleteOneMember()
\r
2690 * Delete a member by id
\r
2693 * @params Integer $memberid member id
\r
2694 * @return String null string or error messages
\r
2696 static public function deleteOneMember($memberid)
\r
2700 $memberid = intval($memberid);
\r
2701 $mem =& $manager->getMember($memberid);
\r
2703 if ( !$mem->canBeDeleted() )
\r
2705 return _ERROR_DELETEMEMBER;
\r
2708 $data = array('member' => &$mem);
\r
2709 $manager->notify('PreDeleteMember', $data);
\r
2711 /* unlink comments from memberid */
\r
2714 $query = "UPDATE %s SET cmember=0, cuser=%s WHERE cmember=%d;";
\r
2715 $query = sprintf($query, sql_table('comment'), DB::quoteValue($mem->getDisplayName()), $memberid);
\r
2716 DB::execute($query);
\r
2719 $query = 'DELETE FROM ' . sql_table('member') . ' WHERE mnumber=' . $memberid;
\r
2720 DB::execute($query);
\r
2722 $query = 'DELETE FROM ' . sql_table('team') . ' WHERE tmember=' . $memberid;
\r
2723 DB::execute($query);
\r
2725 $query = 'DELETE FROM ' . sql_table('activation') . ' WHERE vmember=' . $memberid;
\r
2726 DB::execute($query);
\r
2728 // delete all associated plugin options
\r
2729 NucleusPlugin::delete_option_values('member', $memberid);
\r
2731 $data = array('member' => &$mem);
\r
2732 $manager->notify('PostDeleteMember', $data);
\r
2738 * Admin::action_createnewlog()
\r
2743 static private function action_createnewlog()
\r
2745 global $member, $CONF, $manager;
\r
2747 // Only Super-Admins can do this
\r
2748 $member->isAdmin() or self::disallow();
\r
2750 self::$skin->parse('createnewlog');
\r
2755 * Admin::action_addnewlog()
\r
2760 static private function action_addnewlog()
\r
2762 global $member, $manager, $CONF;
\r
2764 // Only Super-Admins can do this
\r
2765 $member->isAdmin() or self::disallow();
\r
2767 $bname = trim(postVar('name'));
\r
2768 $bshortname = trim(postVar('shortname'));
\r
2769 $btimeoffset = postVar('timeoffset');
\r
2770 $bdesc = trim(postVar('desc'));
\r
2771 $bdefskin = postVar('defskin');
\r
2773 if ( !isValidShortName($bshortname) )
\r
2775 self::error(_ERROR_BADSHORTBLOGNAME);
\r
2779 if ( $manager->existsBlog($bshortname) )
\r
2781 self::error(_ERROR_DUPSHORTBLOGNAME);
\r
2786 'name' => &$bname,
\r
2787 'shortname' => &$bshortname,
\r
2788 'timeoffset' => &$btimeoffset,
\r
2789 'description' => &$bdesc,
\r
2790 'defaultskin' => &$bdefskin
\r
2792 $manager->notify('PreAddBlog', $data);
\r
2794 // add slashes for sql queries
\r
2795 $bname = DB::quoteValue($bname);
\r
2796 $bshortname = DB::quoteValue($bshortname);
\r
2797 $btimeoffset = DB::quoteValue($btimeoffset);
\r
2798 $bdesc = DB::quoteValue($bdesc);
\r
2799 $bdefskin = DB::quoteValue($bdefskin);
\r
2802 $query = "INSERT INTO %s (bname, bshortname, bdesc, btimeoffset, bdefskin) VALUES (%s, %s, %s, %s, %s);";
\r
2803 $query = sprintf($query, sql_table('blog'), $bname, $bshortname, $bdesc, $btimeoffset, $bdefskin);
\r
2804 DB::execute($query);
\r
2806 $blogid = DB::getInsertId();
\r
2807 $blog =& $manager->getBlog($blogid);
\r
2809 // create new category
\r
2810 $catdefname = (!defined('_EBLOGDEFAULTCATEGORY_NAME') ? 'General' : _EBLOGDEFAULTCATEGORY_NAME);
\r
2811 $catdefdesc = (!defined('_EBLOGDEFAULTCATEGORY_DESC') ? 'Items that do not fit in other categories' : _EBLOGDEFAULTCATEGORY_DESC);
\r
2813 $query = 'INSERT INTO %s (cblog, cname, cdesc) VALUES (%d, %s, %s)';
\r
2814 DB::execute(sprintf($query, sql_table('category'), (integer) $blogid, DB::quoteValue($catdefname), DB::quoteValue($catdefdesc)));
\r
2815 $catid = DB::getInsertId();
\r
2817 // set as default category
\r
2818 $blog->setDefaultCategory($catid);
\r
2819 $blog->writeSettings();
\r
2821 // create team member
\r
2822 $query = "INSERT INTO %s (tmember, tblog, tadmin) VALUES (%d, %d, 1);";
\r
2823 $query = sprintf($query, sql_table('team'), (integer) $member->getID(), (integer) $blogid);
\r
2824 DB::execute($query);
\r
2826 $itemdeftitle = (defined('_EBLOG_FIRSTITEM_TITLE') ? _EBLOG_FIRSTITEM_TITLE : 'First Item');
\r
2827 $itemdefbody = (defined('_EBLOG_FIRSTITEM_BODY') ? _EBLOG_FIRSTITEM_BODY : 'This is the first item in your weblog. Feel free to delete it.');
\r
2830 $blog->getDefaultCategory(),
\r
2831 $itemdeftitle,$itemdefbody,
\r
2835 $blog->getCorrectTime(),
\r
2841 $data = array('blog' => &$blog);
\r
2842 $manager->notify('PostAddBlog', $data);
\r
2846 'name' => _EBLOGDEFAULTCATEGORY_NAME,
\r
2847 'description' => _EBLOGDEFAULTCATEGORY_DESC,
\r
2850 $manager->notify('PostAddCategory', $data);
\r
2852 /* TODO: we should consider to use the other way insterad of this */
\r
2853 $_REQUEST['blogid'] = $blogid;
\r
2854 $_REQUEST['catid'] = $catid;
\r
2855 self::$skin->parse('addnewlog');
\r
2860 * Admin::action_addnewlog2()
\r
2865 static private function action_addnewlog2()
\r
2867 global $member, $manager;
\r
2868 $blogid = intRequestVar('blogid');
\r
2870 $member->blogAdminRights($blogid) or self::disallow();
\r
2872 $burl = requestVar('url');
\r
2874 $blog =& $manager->getBlog($blogid);
\r
2875 $blog->setURL(trim($burl));
\r
2876 $blog->writeSettings();
\r
2878 self::action_overview(_MSG_NEWBLOG);
\r
2883 * Admin::action_skinieoverview()
\r
2888 static private function action_skinieoverview()
\r
2890 global $member, $DIR_LIBS, $manager;
\r
2892 $member->isAdmin() or self::disallow();
\r
2894 include_once($DIR_LIBS . 'skinie.php');
\r
2896 self::$skin->parse('skinieoverview');
\r
2901 * Admin::action_skinieimport()
\r
2906 static private function action_skinieimport()
\r
2910 $member->isAdmin() or self::disallow();
\r
2912 $skinFileRaw = postVar('skinfile');
\r
2913 $mode = postVar('mode');
\r
2915 $error = self::skinieimport($mode, $skinFileRaw);
\r
2918 self::error($error);
\r
2922 self::$skin->parse('skinieimport');
\r
2927 * Admin::action_skiniedoimport()
\r
2932 static private function action_skiniedoimport()
\r
2934 global $member, $DIR_LIBS, $DIR_SKINS;
\r
2936 $member->isAdmin() or self::disallow();
\r
2938 // load skinie class
\r
2939 include_once($DIR_LIBS . 'skinie.php');
\r
2941 $mode = postVar('mode');
\r
2942 $skinFileRaw = postVar('skinfile');
\r
2943 $allowOverwrite = intPostVar('overwrite');
\r
2945 $error = self::skiniedoimport($mode, $skinFileRaw, $allowOverwrite);
\r
2948 self::error($msg);
\r
2952 self::$skin->parse('skiniedoimport');
\r
2957 * Admin::action_skinieexport()
\r
2962 static private function action_skinieexport()
\r
2966 $member->isAdmin() or self::disallow();
\r
2968 $aSkins = requestIntArray('skin');
\r
2969 $aTemplates = requestIntArray('template');
\r
2970 $info = postVar('info');
\r
2972 self::skinieexport($aSkins, $aTemplates, $info);
\r
2978 * Admin::action_templateoverview()
\r
2983 static private function action_templateoverview()
\r
2985 global $member, $manager;
\r
2987 $member->isAdmin() or self::disallow();
\r
2989 self::$skin->parse('templateoverview');
\r
2994 * Admin::action_templateedit()
\r
2996 * @param string $msg message for pageheader
\r
2999 static private function action_templateedit($msg = '')
\r
3001 global $member, $manager;
\r
3004 self::$headMess = $msg;
\r
3007 $templateid = intRequestVar('templateid');
\r
3009 $member->isAdmin() or self::disallow();
\r
3011 Admin::$extrahead .= "<script type=\"text/javascript\" src=\"<%skinfile(javascript/templateEdit.js)%>\"></script>\n";
\r
3012 Admin::$extrahead .= "<script type=\"text/javascript\">setTemplateEditText('" . Entity::hsc(_EDITTEMPLATE_EMPTY) . "');</script>\n";
\r
3014 self::$skin->parse('templateedit');
\r
3019 * Admin::action_templateupdate()
\r
3024 static private function action_templateupdate()
\r
3026 global $member,$manager;
\r
3028 $templateid = intRequestVar('templateid');
\r
3030 $member->isAdmin() or self::disallow();
\r
3032 $name = postVar('tname');
\r
3033 $desc = postVar('tdesc');
\r
3035 if ( !isValidTemplateName($name) )
\r
3037 self::error(_ERROR_BADTEMPLATENAME);
\r
3041 if ( (Template::getNameFromId($templateid) != $name) && Template::exists($name) )
\r
3043 self::error(_ERROR_DUPTEMPLATENAME);
\r
3047 // 1. Remove all template parts
\r
3048 $query = "DELETE FROM %s WHERE tdesc=%d;";
\r
3049 $query = sprintf($query, sql_table('template'), (integer) $templateid);
\r
3050 DB::execute($query);
\r
3052 // 2. Update description
\r
3053 $query = "UPDATE %s SET tdname=%s, tddesc=%s WHERE tdnumber=%d;";
\r
3054 $query = sprintf($query, sql_table('template_desc'), DB::quoteValue($name), DB::quoteValue($desc), (integer) $templateid);
\r
3055 DB::execute($query);
\r
3057 // 3. Add non-empty template parts
\r
3058 self::addToTemplate($templateid, 'ITEM_HEADER', postVar('ITEM_HEADER'));
\r
3059 self::addToTemplate($templateid, 'ITEM', postVar('ITEM'));
\r
3060 self::addToTemplate($templateid, 'ITEM_FOOTER', postVar('ITEM_FOOTER'));
\r
3061 self::addToTemplate($templateid, 'MORELINK', postVar('MORELINK'));
\r
3062 self::addToTemplate($templateid, 'EDITLINK', postVar('EDITLINK'));
\r
3063 self::addToTemplate($templateid, 'NEW', postVar('NEW'));
\r
3064 self::addToTemplate($templateid, 'COMMENTS_HEADER', postVar('COMMENTS_HEADER'));
\r
3065 self::addToTemplate($templateid, 'COMMENTS_BODY', postVar('COMMENTS_BODY'));
\r
3066 self::addToTemplate($templateid, 'COMMENTS_FOOTER', postVar('COMMENTS_FOOTER'));
\r
3067 self::addToTemplate($templateid, 'COMMENTS_CONTINUED', postVar('COMMENTS_CONTINUED'));
\r
3068 self::addToTemplate($templateid, 'COMMENTS_TOOMUCH', postVar('COMMENTS_TOOMUCH'));
\r
3069 self::addToTemplate($templateid, 'COMMENTS_AUTH', postVar('COMMENTS_AUTH'));
\r
3070 self::addToTemplate($templateid, 'COMMENTS_ONE', postVar('COMMENTS_ONE'));
\r
3071 self::addToTemplate($templateid, 'COMMENTS_MANY', postVar('COMMENTS_MANY'));
\r
3072 self::addToTemplate($templateid, 'COMMENTS_NONE', postVar('COMMENTS_NONE'));
\r
3073 self::addToTemplate($templateid, 'ARCHIVELIST_HEADER', postVar('ARCHIVELIST_HEADER'));
\r
3074 self::addToTemplate($templateid, 'ARCHIVELIST_LISTITEM', postVar('ARCHIVELIST_LISTITEM'));
\r
3075 self::addToTemplate($templateid, 'ARCHIVELIST_FOOTER', postVar('ARCHIVELIST_FOOTER'));
\r
3076 self::addToTemplate($templateid, 'BLOGLIST_HEADER', postVar('BLOGLIST_HEADER'));
\r
3077 self::addToTemplate($templateid, 'BLOGLIST_LISTITEM', postVar('BLOGLIST_LISTITEM'));
\r
3078 self::addToTemplate($templateid, 'BLOGLIST_FOOTER', postVar('BLOGLIST_FOOTER'));
\r
3079 self::addToTemplate($templateid, 'CATLIST_HEADER', postVar('CATLIST_HEADER'));
\r
3080 self::addToTemplate($templateid, 'CATLIST_LISTITEM', postVar('CATLIST_LISTITEM'));
\r
3081 self::addToTemplate($templateid, 'CATLIST_FOOTER', postVar('CATLIST_FOOTER'));
\r
3082 self::addToTemplate($templateid, 'DATE_HEADER', postVar('DATE_HEADER'));
\r
3083 self::addToTemplate($templateid, 'DATE_FOOTER', postVar('DATE_FOOTER'));
\r
3084 self::addToTemplate($templateid, 'FORMAT_DATE', postVar('FORMAT_DATE'));
\r
3085 self::addToTemplate($templateid, 'FORMAT_TIME', postVar('FORMAT_TIME'));
\r
3086 self::addToTemplate($templateid, 'LOCALE', postVar('LOCALE'));
\r
3087 self::addToTemplate($templateid, 'SEARCH_HIGHLIGHT', postVar('SEARCH_HIGHLIGHT'));
\r
3088 self::addToTemplate($templateid, 'SEARCH_NOTHINGFOUND', postVar('SEARCH_NOTHINGFOUND'));
\r
3089 self::addToTemplate($templateid, 'POPUP_CODE', postVar('POPUP_CODE'));
\r
3090 self::addToTemplate($templateid, 'MEDIA_CODE', postVar('MEDIA_CODE'));
\r
3091 self::addToTemplate($templateid, 'IMAGE_CODE', postVar('IMAGE_CODE'));
\r
3093 $data = array('fields' => array());
\r
3094 $manager->notify('TemplateExtraFields', $data);
\r
3095 foreach ( $data['fields'] as $pfkey=>$pfvalue )
\r
3097 foreach ( $pfvalue as $pffield => $pfdesc )
\r
3099 self::addToTemplate($templateid, $pffield, postVar($pffield));
\r
3103 // jump back to template edit
\r
3104 self::action_templateedit(_TEMPLATE_UPDATED);
\r
3109 * Admin::addToTemplate()
\r
3111 * @param Integer $id ID for template
\r
3112 * @param String $partname parts name
\r
3113 * @param String $content template contents
\r
3114 * @return Integer record index
\r
3117 static private function addToTemplate($id, $partname, $content)
\r
3119 // don't add empty parts:
\r
3120 if ( !trim($content) )
\r
3125 $query = "INSERT INTO %s (tdesc, tpartname, tcontent) VALUES (%d, %s, %s);";
\r
3126 $query = sprintf($query, sql_table('template'), (integer) $id, DB::quoteValue($partname), DB::quoteValue($content));
\r
3127 if ( DB::execute($query) === FALSE )
\r
3129 $err = DB::getError();
\r
3130 exit(_ADMIN_SQLDIE_QUERYERROR . $err[2]);
\r
3132 return DB::getInsertId();
\r
3136 * Admin::action_templatedelete()
\r
3141 static private function action_templatedelete()
\r
3143 global $member, $manager;
\r
3145 $member->isAdmin() or self::disallow();
\r
3147 $templateid = intRequestVar('templateid');
\r
3148 // TODO: check if template can be deleted
\r
3150 self::$skin->parse('templatedelete');
\r
3155 * Admin::action_templatedeleteconfirm()
\r
3160 static private function action_templatedeleteconfirm()
\r
3162 global $member, $manager;
\r
3164 $templateid = intRequestVar('templateid');
\r
3166 $member->isAdmin() or self::disallow();
\r
3168 $data = array('templateid' => $templateid);
\r
3169 $manager->notify('PreDeleteTemplate', $data);
\r
3171 // 1. delete description
\r
3172 DB::execute('DELETE FROM ' . sql_table('template_desc') . ' WHERE tdnumber=' . $templateid);
\r
3174 // 2. delete parts
\r
3175 DB::execute('DELETE FROM ' . sql_table('template') . ' WHERE tdesc=' . $templateid);
\r
3178 $data = array('templateid' => $templateid);
\r
3179 $manager->notify('PostDeleteTemplate', $data);
\r
3181 self::action_templateoverview();
\r
3186 * Admin::action_templatenew()
\r
3191 static private function action_templatenew()
\r
3195 $member->isAdmin() or self::disallow();
\r
3197 $name = postVar('name');
\r
3198 $desc = postVar('desc');
\r
3200 if ( !isValidTemplateName($name) )
\r
3202 self::error(_ERROR_BADTEMPLATENAME);
\r
3206 if ( Template::exists($name) )
\r
3208 self::error(_ERROR_DUPTEMPLATENAME);
\r
3212 $newTemplateId = Template::createNew($name, $desc);
\r
3214 self::action_templateoverview();
\r
3219 * Admin::action_templateclone()
\r
3224 static private function action_templateclone()
\r
3228 $templateid = intRequestVar('templateid');
\r
3230 $member->isAdmin() or self::disallow();
\r
3232 // 1. read old template
\r
3233 $name = Template::getNameFromId($templateid);
\r
3234 $desc = Template::getDesc($templateid);
\r
3236 // 2. create desc thing
\r
3237 $name = "cloned" . $name;
\r
3239 // if a template with that name already exists:
\r
3240 if ( Template::exists($name) )
\r
3243 while (Template::exists($name . $i))
\r
3250 $newid = Template::createNew($name, $desc);
\r
3252 // 3. create clone
\r
3253 // go through parts of old template and add them to the new one
\r
3254 $query = "SELECT tpartname, tcontent FROM %s WHERE tdesc=%d;";
\r
3255 $query = sprintf($query, sql_table('template'), (integer) $templateid);
\r
3257 $res = DB::getResult($query);
\r
3258 foreach ( $res as $row)
\r
3260 self::addToTemplate($newid, $row['tpartname'], $row['tcontent']);
\r
3263 self::action_templateoverview();
\r
3268 * Admin::action_admintemplateoverview()
\r
3273 static private function action_admintemplateoverview()
\r
3276 $member->isAdmin() or self::disallow();
\r
3277 self::$skin->parse('admntemplateoverview');
\r
3282 * Admin::action_admintemplateedit()
\r
3284 * @param string $msg message for pageheader
\r
3287 static private function action_admintemplateedit($msg = '')
\r
3289 global $member, $manager;
\r
3292 self::$headMess = $msg;
\r
3294 $member->isAdmin() or self::disallow();
\r
3296 Admin::$extrahead .= "<script type=\"text/javascript\" src=\"<%skinfile(javascript/templateEdit.js)%>\"></script>\n";
\r
3297 Admin::$extrahead .= '<script type="text/javascript">setTemplateEditText("' . Entity::hsc(_EDITTEMPLATE_EMPTY) . '");</script>' . "\n";
\r
3299 self::$skin->parse('admintemplateedit');
\r
3304 * Admin::action_admintemplateupdate()
\r
3309 static private function action_admintemplateupdate()
\r
3311 global $member, $manager;
\r
3312 $templateid = intRequestVar('templateid');
\r
3313 $member->isAdmin() or self::disallow();
\r
3314 $name = postVar('tname');
\r
3315 $desc = postVar('tdesc');
\r
3317 if ( !isValidTemplateName($name) )
\r
3319 self::error(_ERROR_BADTEMPLATENAME);
\r
3323 if ( (Template::getNameFromId($templateid) != $name) && Template::exists($name) )
\r
3325 self::error(_ERROR_DUPTEMPLATENAME);
\r
3329 // 1. Remove all template parts
\r
3330 $query = "DELETE FROM %s WHERE tdesc=%d;";
\r
3331 $query = sprintf($query, sql_table('template'), (integer) $templateid);
\r
3332 DB::execute($query);
\r
3334 // 2. Update description
\r
3335 $query = "UPDATE %s SET tdname=%s, tddesc=%s WHERE tdnumber=%d;";
\r
3336 $query = sprintf($query, sql_table('template_desc'), DB::quoteValue($name), DB::quoteValue($desc), (integer) $templateid);
\r
3337 DB::execute($query);
\r
3339 // 3. Add non-empty template parts
\r
3340 self::addToTemplate($templateid, 'NORMALSKINLIST_HEAD', postVar('NORMALSKINLIST_HEAD'));
\r
3341 self::addToTemplate($templateid, 'NORMALSKINLIST_BODY', postVar('NORMALSKINLIST_BODY'));
\r
3342 self::addToTemplate($templateid, 'NORMALSKINLIST_FOOT', postVar('NORMALSKINLIST_FOOT'));
\r
3343 self::addToTemplate($templateid, 'ADMIN_CUSTOMHELPLINK_ICON', postVar('ADMIN_CUSTOMHELPLINK_ICON'));
\r
3344 self::addToTemplate($templateid, 'ADMIN_CUSTOMHELPLINK_ANCHOR', postVar('ADMIN_CUSTOMHELPLINK_ANCHOR'));
\r
3345 self::addToTemplate($templateid, 'ADMIN_BLOGLINK', postVar('ADMIN_BLOGLINK'));
\r
3346 self::addToTemplate($templateid, 'ADMIN_BATCHLIST', postVar('ADMIN_BATCHLIST'));
\r
3347 self::addToTemplate($templateid, 'ACTIVATE_FORGOT_TITLE', postVar('ACTIVATE_FORGOT_TITLE'));
\r
3348 self::addToTemplate($templateid, 'ACTIVATE_FORGOT_TEXT', postVar('ACTIVATE_FORGOT_TEXT'));
\r
3349 self::addToTemplate($templateid, 'ACTIVATE_REGISTER_TITLE', postVar('ACTIVATE_REGISTER_TITLE'));
\r
3350 self::addToTemplate($templateid, 'ACTIVATE_REGISTER_TEXT', postVar('ACTIVATE_REGISTER_TEXT'));
\r
3351 self::addToTemplate($templateid, 'ACTIVATE_CHANGE_TITLE', postVar('ACTIVATE_CHANGE_TITLE'));
\r
3352 self::addToTemplate($templateid, 'ACTIVATE_CHANGE_TEXT', postVar('ACTIVATE_CHANGE_TEXT'));
\r
3353 self::addToTemplate($templateid, 'TEMPLATE_EDIT_EXPLUGNAME', postVar('TEMPLATE_EDIT_EXPLUGNAME'));
\r
3354 self::addToTemplate($templateid, 'TEMPLATE_EDIT_ROW_HEAD', postVar('TEMPLATE_EDIT_ROW_HEAD'));
\r
3355 self::addToTemplate($templateid, 'TEMPLATE_EDIT_ROW_TAIL', postVar('TEMPLATE_EDIT_ROW_TAIL'));
\r
3356 self::addToTemplate($templateid, 'SPECIALSKINLIST_HEAD', postVar('SPECIALSKINLIST_HEAD'));
\r
3357 self::addToTemplate($templateid, 'SPECIALSKINLIST_BODY', postVar('SPECIALSKINLIST_BODY'));
\r
3358 self::addToTemplate($templateid, 'SPECIALSKINLIST_FOOT', postVar('SPECIALSKINLIST_FOOT'));
\r
3359 self::addToTemplate($templateid, 'SYSTEMINFO_GDSETTINGS', postVar('SYSTEMINFO_GDSETTINGS'));
\r
3360 self::addToTemplate($templateid, 'BANLIST_DELETED_LIST', postVar('BANLIST_DELETED_LIST'));
\r
3361 self::addToTemplate($templateid, 'INSERT_PLUGOPTION_TITLE', postVar('INSERT_PLUGOPTION_TITLE'));
\r
3362 self::addToTemplate($templateid, 'INSERT_PLUGOPTION_BODY', postVar('INSERT_PLUGOPTION_BODY'));
\r
3363 self::addToTemplate($templateid, 'INPUTYESNO_TEMPLATE_ADMIN', postVar('INPUTYESNO_TEMPLATE_ADMIN'));
\r
3364 self::addToTemplate($templateid, 'INPUTYESNO_TEMPLATE_NORMAL', postVar('INPUTYESNO_TEMPLATE_NORMAL'));
\r
3365 self::addToTemplate($templateid, 'ADMIN_SPECIALSKINLIST_HEAD', postVar('ADMIN_SPECIALSKINLIST_HEAD'));
\r
3366 self::addToTemplate($templateid, 'ADMIN_SPECIALSKINLIST_BODY', postVar('ADMIN_SPECIALSKINLIST_BODY'));
\r
3367 self::addToTemplate($templateid, 'ADMIN_SPECIALSKINLIST_FOOT', postVar('ADMIN_SPECIALSKINLIST_FOOT'));
\r
3368 self::addToTemplate($templateid, 'SKINIE_EXPORT_LIST', postVar('SKINIE_EXPORT_LIST'));
\r
3369 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_SELECT_HEAD', postVar('SHOWLIST_LISTPLUG_SELECT_HEAD'));
\r
3370 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_SELECT_BODY', postVar('SHOWLIST_LISTPLUG_SELECT_BODY'));
\r
3371 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_SELECT_FOOT', postVar('SHOWLIST_LISTPLUG_SELECT_FOOT'));
\r
3372 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_HEAD'));
\r
3373 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_BODY'));
\r
3374 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_FOOT'));
\r
3375 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_MEMBLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_MEMBLIST_HEAD'));
\r
3376 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_MEMBLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_MEMBLIST_BODY'));
\r
3377 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_MEMBLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_MEMBLIST_FOOT'));
\r
3378 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_TEAMLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_TEAMLIST_HEAD'));
\r
3379 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_TEAMLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_TEAMLIST_BODY'));
\r
3380 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_TEAMLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_TEAMLIST_FOOT'));
\r
3381 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGLIST_HEAD'));
\r
3382 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGLIST_BODY'));
\r
3383 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGLIST_GURL', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGLIST_GURL'));
\r
3384 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGEVENTLIST', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGEVENTLIST'));
\r
3385 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGNEDUPDATE', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGNEDUPDATE'));
\r
3386 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGIN_DEPEND', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGIN_DEPEND'));
\r
3387 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGIN_DEPREQ', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGIN_DEPREQ'));
\r
3388 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGLISTFALSE', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGLISTFALSE'));
\r
3389 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGLIST_ACTN', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGLIST_ACTN'));
\r
3390 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGLIST_ADMN', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGLIST_ADMN'));
\r
3391 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGLIST_HELP', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGLIST_HELP'));
\r
3392 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGOPTSETURL', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGOPTSETURL'));
\r
3393 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGLIST_FOOT'));
\r
3394 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_POPTLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_POPTLIST_HEAD'));
\r
3395 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_POPTLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_POPTLIST_BODY'));
\r
3396 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO', postVar('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO'));
\r
3397 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLGOPT_OPWORD', postVar('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OPWORD'));
\r
3398 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLGOPT_OSELEP', postVar('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OSELEP'));
\r
3399 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLGOPT_OSELEO', postVar('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OSELEO'));
\r
3400 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLGOPT_OSELEC', postVar('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OSELEC'));
\r
3401 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLGOPT_OTAREA', postVar('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OTAREA'));
\r
3402 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLGOPT_OITEXT', postVar('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OITEXT'));
\r
3403 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_PLUGOPTN_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_PLUGOPTN_FOOT'));
\r
3404 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_POPTLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_POPTLIST_FOOT'));
\r
3405 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_ITEMLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_ITEMLIST_HEAD'));
\r
3406 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_ITEMLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_ITEMLIST_BODY'));
\r
3407 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_ITEMLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_ITEMLIST_FOOT'));
\r
3408 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_CMNTLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_CMNTLIST_HEAD'));
\r
3409 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_CMNTLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_CMNTLIST_BODY'));
\r
3410 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_CMNTLIST_ABAN', postVar('SHOWLIST_LISTPLUG_TABLE_CMNTLIST_ABAN'));
\r
3411 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_CMNTLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_CMNTLIST_FOOT'));
\r
3412 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BLOGLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_BLOGLIST_HEAD'));
\r
3413 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BLOGLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_BLOGLIST_BODY'));
\r
3414 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BLIST_BD_TADM', postVar('SHOWLIST_LISTPLUG_TABLE_BLIST_BD_TADM'));
\r
3415 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BLIST_BD_SADM', postVar('SHOWLIST_LISTPLUG_TABLE_BLIST_BD_SADM'));
\r
3416 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BLOGLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_BLOGLIST_FOOT'));
\r
3417 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BLOGSNAM_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_BLOGSNAM_HEAD'));
\r
3418 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BLOGSNAM_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_BLOGSNAM_BODY'));
\r
3419 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_BLOGSNAM_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_BLOGSNAM_FOOT'));
\r
3420 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_SHORTNAM_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_SHORTNAM_HEAD'));
\r
3421 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_SHORTNAM_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_SHORTNAM_BODY'));
\r
3422 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_SHORTNAM_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_SHORTNAM_FOOT'));
\r
3423 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_CATELIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_CATELIST_HEAD'));
\r
3424 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_CATELIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_CATELIST_BODY'));
\r
3425 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_CATELIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_CATELIST_FOOT'));
\r
3426 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_TPLTLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_TPLTLIST_HEAD'));
\r
3427 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_TPLTLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_TPLTLIST_BODY'));
\r
3428 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_TPLTLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_TPLTLIST_FOOT'));
\r
3429 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_SKINLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_SKINLIST_HEAD'));
\r
3430 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_SKINLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_SKINLIST_BODY'));
\r
3431 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_SKINLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_SKINLIST_FOOT'));
\r
3432 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_DRFTLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_DRFTLIST_HEAD'));
\r
3433 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_DRFTLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_DRFTLIST_BODY'));
\r
3434 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_DRFTLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_DRFTLIST_FOOT'));
\r
3435 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_ACTNLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_ACTNLIST_HEAD'));
\r
3436 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_ACTNLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_ACTNLIST_BODY'));
\r
3437 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_ACTNLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_ACTNLIST_FOOT'));
\r
3438 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_IBANLIST_HEAD', postVar('SHOWLIST_LISTPLUG_TABLE_IBANLIST_HEAD'));
\r
3439 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_IBANLIST_BODY', postVar('SHOWLIST_LISTPLUG_TABLE_IBANLIST_BODY'));
\r
3440 self::addToTemplate($templateid, 'SHOWLIST_LISTPLUG_TABLE_IBANLIST_FOOT', postVar('SHOWLIST_LISTPLUG_TABLE_IBANLIST_FOOT'));
\r
3441 self::addToTemplate($templateid, 'PLUGIN_QUICKMENU_TITLE', postVar('PLUGIN_QUICKMENU_TITLE'));
\r
3442 self::addToTemplate($templateid, 'PLUGIN_QUICKMENU_HEAD', postVar('PLUGIN_QUICKMENU_HEAD'));
\r
3443 self::addToTemplate($templateid, 'PLUGIN_QUICKMENU_BODY', postVar('PLUGIN_QUICKMENU_BODY'));
\r
3444 self::addToTemplate($templateid, 'PLUGIN_QUICKMENU_FOOT', postVar('PLUGIN_QUICKMENU_FOOT'));
\r
3446 $data = array('fields' => array());
\r
3447 $manager->notify('AdminTemplateExtraFields', $data);
\r
3448 foreach ( $data['fields'] as $pfkey => $pfvalue )
\r
3450 foreach ( $pfvalue as $pffield => $pfdesc )
\r
3452 self::addToTemplate($templateid, $pffield, postVar($pffield));
\r
3456 // jump back to template edit
\r
3457 self::action_admintemplateedit(_TEMPLATE_UPDATED);
\r
3462 * Admin::action_admintemplatedelete()
\r
3467 static private function action_admintemplatedelete()
\r
3469 global $member, $manager;
\r
3470 $member->isAdmin() or self::disallow();
\r
3472 // TODO: check if template can be deleted
\r
3473 self::$skin->parse('admintemplatedelete');
\r
3478 * Admin::action_admintemplatedeleteconfirm()
\r
3483 static private function action_admintemplatedeleteconfirm()
\r
3485 global $member, $manager;
\r
3487 $templateid = intRequestVar('templateid');
\r
3488 $member->isAdmin() or self::disallow();
\r
3490 $data = array('templateid' => $templateid);
\r
3491 $manager->notify('PreDeleteAdminTemplate', $data);
\r
3493 // 1. delete description
\r
3494 $query = "DELETE FROM %s WHERE tdnumber=%s;";
\r
3495 $query = sprintf($query, sql_table('template_desc'), (integer) $templateid);
\r
3496 DB::execute($query);
\r
3498 // 2. delete parts
\r
3499 $query = "DELETE FROM %s WHERE tdesc=%d;";
\r
3500 $query = sprintf($query, sql_table('template'), (integer) $templateid);
\r
3501 DB::execute($query);
\r
3503 $data = array('templateid' => $templateid);
\r
3504 $manager->notify('PostDeleteAdminTemplate', $data);
\r
3506 self::action_admintemplateoverview();
\r
3511 * Admin::action_admintemplatenew()
\r
3516 static private function action_admintemplatenew()
\r
3519 $member->isAdmin() or self::disallow();
\r
3520 $name = postVar('name');
\r
3521 $desc = postVar('desc');
\r
3523 if ( !isValidTemplateName($name) )
\r
3525 self::error(_ERROR_BADTEMPLATENAME);
\r
3528 else if ( !preg_match('#^admin/#', $name) )
\r
3530 self::error(_ERROR_BADADMINTEMPLATENAME);
\r
3533 else if ( Template::exists($name) )
\r
3535 self::error(_ERROR_DUPTEMPLATENAME);
\r
3539 $newTemplateId = Template::createNew($name, $desc);
\r
3540 self::action_admintemplateoverview();
\r
3545 * Admin::action_admintemplateclone()
\r
3550 static private function action_admintemplateclone()
\r
3553 $templateid = intRequestVar('templateid');
\r
3554 $member->isAdmin() or self::disallow();
\r
3556 // 1. read old template
\r
3557 $name = Template::getNameFromId($templateid);
\r
3558 $desc = Template::getDesc($templateid);
\r
3560 // 2. create desc thing
\r
3561 $name = $name . "cloned";
\r
3563 // if a template with that name already exists:
\r
3564 if ( Template::exists($name) )
\r
3567 while ( Template::exists($name . $i) )
\r
3574 $newid = Template::createNew($name, $desc);
\r
3576 // 3. create clone
\r
3577 // go through parts of old template and add them to the new one
\r
3578 $query = "SELECT tpartname, tcontent FROM %s WHERE tdesc=%d;";
\r
3579 $query = sprintf($query, sql_table('template'), (integer) $templateid);
\r
3581 $res = DB::getResult($query);
\r
3582 foreach ( $res as $row )
\r
3584 self::addToTemplate($newid, $row['tpartname'], $row['tcontent']);
\r
3587 self::action_admintemplateoverview();
\r
3592 * Admin::action_skinoverview()
\r
3597 static private function action_skinoverview()
\r
3599 global $member, $manager;
\r
3601 $member->isAdmin() or self::disallow();
\r
3603 self::$skin->parse('skinoverview');
\r
3608 * Admin::action_skinnew()
\r
3613 static private function action_skinnew()
\r
3617 $member->isAdmin() or self::disallow();
\r
3619 $name = trim(postVar('name'));
\r
3620 $desc = trim(postVar('desc'));
\r
3622 if ( !isValidSkinName($name) )
\r
3624 self::error(_ERROR_BADSKINNAME);
\r
3627 else if ( SKIN::exists($name) )
\r
3629 self::error(_ERROR_DUPSKINNAME);
\r
3633 SKIN::createNew($name, $desc);
\r
3635 self::action_skinoverview();
\r
3640 * Admin::action_skinedit()
\r
3645 static private function action_skinedit()
\r
3649 $member->isAdmin() or self::disallow();
\r
3651 self::$skin->parse('skinedit');
\r
3656 * Admin::action_skineditgeneral()
\r
3661 static private function action_skineditgeneral()
\r
3665 $skinid = intRequestVar('skinid');
\r
3667 $member->isAdmin() or self::disallow();
\r
3669 $error = self::skineditgeneral($skinid);
\r
3672 self::error($error);
\r
3676 self::action_skinedit();
\r
3680 static private function action_skinedittype($msg = '')
\r
3684 $member->isAdmin() or self::disallow();
\r
3688 self::$headMess = $msg;
\r
3691 $type = requestVar('type');
\r
3692 $type = trim($type);
\r
3693 $type = strtolower($type);
\r
3695 if ( !isValidShortName($type) )
\r
3697 self::error(_ERROR_SKIN_PARTS_SPECIAL_FORMAT);
\r
3701 self::$skin->parse('skinedittype');
\r
3706 * Admin::action_skinupdate()
\r
3711 static private function action_skinupdate()
\r
3713 global $manager, $member;
\r
3715 $skinid = intRequestVar('skinid');
\r
3716 $content = trim(postVar('content'));
\r
3717 $type = postVar('type');
\r
3719 $member->isAdmin() or self::disallow();
\r
3721 $skin =& $manager->getSKIN($skinid);
\r
3722 $skin->update($type, $content);
\r
3724 self::action_skinedittype(_SKIN_UPDATED);
\r
3729 * Admin::action_skindelete()
\r
3734 static private function action_skindelete()
\r
3736 global $CONF, $member;
\r
3738 $member->isAdmin() or self::disallow();
\r
3740 $skinid = intRequestVar('skinid');
\r
3742 // don't allow default skin to be deleted
\r
3743 if ( $skinid == $CONF['BaseSkin'] )
\r
3745 self::error(_ERROR_DEFAULTSKIN);
\r
3749 // don't allow deletion of default skins for blogs
\r
3750 $query = "SELECT bname FROM %s WHERE bdefskin=%d";
\r
3751 $query = sprintf($query, sql_table('blog'), (integer) $skinid);
\r
3753 $name = DB::getValue($query);
\r
3756 self::error(_ERROR_SKINDEFDELETE . Entity::hsc($name));
\r
3760 self::$skin->parse('skindelete');
\r
3765 * Admin::action_skindeleteconfirm()
\r
3770 static private function action_skindeleteconfirm()
\r
3772 global $member, $CONF;
\r
3774 $member->isAdmin() or self::disallow();
\r
3776 $skinid = intRequestVar('skinid');
\r
3778 // don't allow default skin to be deleted
\r
3779 if ( $skinid == $CONF['BaseSkin'] )
\r
3781 self::error(_ERROR_DEFAULTSKIN);
\r
3785 // don't allow deletion of default skins for blogs
\r
3786 $query = "SELECT bname FROM %s WHERE bdefskin=%d;";
\r
3787 $query = sprintf($query, sql_table('blog'), (integer) $skinid);
\r
3789 $name = DB::getValue($query);
\r
3792 self::error(_ERROR_SKINDEFDELETE . Entity::hsc($name));
\r
3796 self::skindeleteconfirm($skinid);
\r
3798 self::action_skinoverview();
\r
3803 * Admin::action_skinremovetype()
\r
3808 static private function action_skinremovetype()
\r
3810 global $member, $CONF;
\r
3812 $member->isAdmin() or self::disallow();
\r
3814 $skinid = intRequestVar('skinid');
\r
3815 $skintype = requestVar('type');
\r
3817 if ( !isValidShortName($skintype) )
\r
3819 self::error(_ERROR_SKIN_PARTS_SPECIAL_DELETE);
\r
3823 self::$skin->parse('skinremovetype');
\r
3828 * Admin::action_skinremovetypeconfirm()
\r
3833 static private function action_skinremovetypeconfirm()
\r
3837 $member->isAdmin() or self::disallow();
\r
3839 $skinid = intRequestVar('skinid');
\r
3840 $skintype = requestVar('type');
\r
3842 $error = self::skinremovetypeconfirm($skinid, $skintype);
\r
3845 self::error($error);
\r
3849 self::action_skinedit();
\r
3854 * Admin::action_skinclone()
\r
3859 static private function action_skinclone()
\r
3863 $member->isAdmin() or self::disallow();
\r
3865 $skinid = intRequestVar('skinid');
\r
3867 self::skinclone($skinid);
\r
3869 self::action_skinoverview();
\r
3874 * Admin::action_adminskinoverview()
\r
3879 static private function action_adminskinoverview()
\r
3883 $member->isAdmin() or self::disallow();
\r
3885 self::$skin->parse('adminskinoverview');
\r
3890 * Admin::action_adminskinnew()
\r
3895 static private function action_adminskinnew()
\r
3899 $member->isAdmin() or self::disallow();
\r
3901 $name = trim(postVar('name'));
\r
3902 $desc = trim(postVar('desc'));
\r
3904 if ( !isValidSkinName($name) )
\r
3906 self::error(_ERROR_BADSKINNAME);
\r
3909 else if ( !preg_match('#^admin/#', $name) )
\r
3911 self::error(_ERROR_BADADMINSKINNAME);
\r
3914 else if ( Skin::exists($name) )
\r
3916 self::error(_ERROR_DUPSKINNAME);
\r
3920 Skin::createNew($name, $desc);
\r
3922 self::action_adminskinoverview();
\r
3927 * Admin::action_adminskinedit()
\r
3932 static private function action_adminskinedit()
\r
3936 $member->isAdmin() or self::disallow();
\r
3938 self::$skin->parse('adminskinedit');
\r
3944 * Admin::action_adminskineditgeneral()
\r
3949 static private function action_adminskineditgeneral()
\r
3953 $skinid = intRequestVar('skinid');
\r
3955 $member->isAdmin() or self::disallow();
\r
3957 $error = self::skineditgeneral($skinid, 'AdminActions');
\r
3960 self::error($error);
\r
3964 self::action_adminskinedit();
\r
3969 * Admin::action_adminskinedittype()
\r
3971 * @param string $msg message for pageheader
\r
3974 static private function action_adminskinedittype($msg = '')
\r
3978 $member->isAdmin() or self::disallow();
\r
3982 self::$headMess = $msg;
\r
3984 $type = requestVar('type');
\r
3985 $type = trim($type);
\r
3986 $type = strtolower($type);
\r
3988 if ( !isValidShortName($type) )
\r
3990 self::error(_ERROR_SKIN_PARTS_SPECIAL_FORMAT);
\r
3994 self::$skin->parse('adminskinedittype');
\r
3999 * Admin::action_adminskinupdate()
\r
4004 static private function action_adminskinupdate()
\r
4006 global $manager, $member;
\r
4008 $skinid = intRequestVar('skinid');
\r
4009 $content = trim(postVar('content'));
\r
4010 $type = postVar('type');
\r
4012 $member->isAdmin() or self::disallow();
\r
4014 $skin =& $manager->getSkin($skinid, 'AdminActions', 'AdminSkin');
\r
4015 $skin->update($type, $content);
\r
4017 self::action_adminskinedittype(_SKIN_UPDATED);
\r
4022 * Admin::action_adminskindelete()
\r
4027 static private function action_adminskindelete()
\r
4029 global $CONF, $member;
\r
4031 $member->isAdmin() or self::disallow();
\r
4033 $skinid = intRequestVar('skinid');
\r
4035 // don't allow default skin to be deleted
\r
4036 if ( $skinid == $CONF['AdminSkin'] || $skinid == $CONF['BookmarkletSkin'] )
\r
4038 self::error(_ERROR_DEFAULTSKIN);
\r
4042 /* don't allow if someone use it as a default*/
\r
4043 $query = 'SELECT * FROM %s WHERE madminskin = %d or mbkmklt = %d;';
\r
4044 $res = DB::getResult(sprintf($query, sql_table('member'), $skinid, $skinid));
\r
4046 $members = array();
\r
4047 while ( $row = $res->fetch() ) {
\r
4048 $members[] = $row['mrealname'];
\r
4050 if ( count($members) )
\r
4052 self::error(_ERROR_SKINDEFDELETE . implode(' ' . _AND . ' ', $members));
\r
4056 self::$skin->parse('adminskindelete');
\r
4061 * Admin::action_adminskindeleteconfirm()
\r
4066 static private function action_adminskindeleteconfirm()
\r
4068 global $member, $CONF;
\r
4070 $member->isAdmin() or self::disallow();
\r
4072 $skinid = intRequestVar('skinid');
\r
4074 // don't allow default skin to be deleted
\r
4075 if ( $skinid == $CONF['AdminSkin'] || $skinid == $CONF['BookmarkletSkin'] )
\r
4077 self::error(_ERROR_DEFAULTSKIN);
\r
4081 /* don't allow if someone use it as a default*/
\r
4082 $query = 'SELECT * FROM %s WHERE madminskin = %d or mbkmklt = %d;';
\r
4083 $res = DB::getResult(sprintf($query, sql_table('member'), $skinid, $skinid));
\r
4085 $members = array();
\r
4086 while ( $row = $res->fetch() ) {
\r
4087 $members[] = $row['mrealname'];
\r
4089 if ( count($members) )
\r
4091 self::error(_ERROR_SKINDEFDELETE . implode(' ' . _AND . ' ', $members));
\r
4095 self::skindeleteconfirm($skinid);
\r
4097 self::action_adminskinoverview();
\r
4102 * Admin::action_adminskinremovetype()
\r
4107 static private function action_adminskinremovetype()
\r
4109 global $member, $CONF;
\r
4111 $member->isAdmin() or self::disallow();
\r
4113 $skinid = intRequestVar('skinid');
\r
4114 $skintype = requestVar('type');
\r
4116 if ( !isValidShortName($skintype) )
\r
4118 self::error(_ERROR_SKIN_PARTS_SPECIAL_DELETE);
\r
4122 self::$skin->parse('adminskinremovetype');
\r
4127 * Admin::action_adminskinremovetypeconfirm()
\r
4132 static private function action_adminskinremovetypeconfirm()
\r
4136 $member->isAdmin() or self::disallow();
\r
4138 $skinid = intRequestVar('skinid');
\r
4139 $skintype = requestVar('type');
\r
4141 $error = self::skinremovetypeconfirm($skinid, $skintype);
\r
4144 self::error($error);
\r
4148 self::action_adminskinedit();
\r
4153 * Admin::action_adminskinclone()
\r
4158 static private function action_adminskinclone()
\r
4162 $member->isAdmin() or self::disallow();
\r
4164 $skinid = intRequestVar('skinid');
\r
4166 self::skinclone($skinid, 'AdminActions');
\r
4168 self::action_adminskinoverview();
\r
4173 * Admin::action_adminskinieoverview()
\r
4178 static private function action_adminskinieoverview()
\r
4182 $member->isAdmin() or self::disallow();
\r
4184 self::$skin->parse('adminskinieoverview');
\r
4189 * Admin::action_adminskinieimport()
\r
4194 static private function action_adminskinieimport()
\r
4198 $member->isAdmin() or self::disallow();
\r
4200 $skinFileRaw = postVar('skinfile');
\r
4201 $mode = postVar('mode');
\r
4203 $error = self::skinieimport($mode, $skinFileRaw);
\r
4206 self::error($error);
\r
4210 if ( !is_object(self::$skin) )
\r
4212 self::action_adminskiniedoimport();
\r
4216 self::$skin->parse('adminskinieimport');
\r
4222 * Admin::action_adminskiniedoimport()
\r
4227 static private function action_adminskiniedoimport()
\r
4229 global $DIR_SKINS, $member;
\r
4231 $member->isAdmin() or self::disallow();
\r
4233 $mode = postVar('mode');
\r
4234 $skinFileRaw = postVar('skinfile');
\r
4235 $allowOverwrite = intPostVar('overwrite');
\r
4237 $error = self::skiniedoimport($mode, $skinFileRaw, $allowOverwrite);
\r
4240 self::error($error);
\r
4244 if ( !is_object(self::$skin) )
\r
4246 global $DIR_SKINS;
\r
4247 $query = "SELECT min(sdnumber) FROM %s WHERE sdname != 'admin/bookmarklet' AND sdname LIKE 'admin/%%'";
\r
4248 $query = sprintf($query, sql_table('skin_desc'));
\r
4249 $res = intval(DB::getValue($query));
\r
4250 $query = "UPDATE %s SET value = %d WHERE name = 'AdminSkin'";
\r
4251 $query = sprintf($query, sql_table('config'), $res);
\r
4252 DB::execute($query);
\r
4253 $skin = new Skin(0, 'AdminActions', 'AdminSkin');
\r
4254 $skin->parse('importAdmin', $DIR_SKINS . 'admin/defaultimporter.skn');
\r
4258 self::$skin->parse('adminskiniedoimport');
\r
4264 * Admin::action_adminskinieexport()
\r
4269 static private function action_adminskinieexport()
\r
4273 $member->isAdmin() or self::disallow();
\r
4275 // load skinie class
\r
4276 $aSkins = requestIntArray('skin');
\r
4277 $aTemplates = requestIntArray('template');
\r
4278 $info = postVar('info');
\r
4280 self::skinieexport($aSkins, $aTemplates, $info);
\r
4286 * Admin::action_settingsedit()
\r
4291 static private function action_settingsedit()
\r
4293 global $member, $manager, $CONF, $DIR_NUCLEUS, $DIR_MEDIA;
\r
4295 $member->isAdmin() or self::disallow();
\r
4297 self::$skin->parse('settingsedit');
\r
4302 * Admin::action_settingsupdate()
\r
4303 * Update $CONFIG and redirect
\r
4308 static private function action_settingsupdate()
\r
4310 global $member, $CONF;
\r
4312 $member->isAdmin() or self::disallow();
\r
4314 // check if email address for admin is valid
\r
4315 if ( !NOTIFICATION::address_validation(postVar('AdminEmail')) )
\r
4317 self::error(_ERROR_BADMAILADDRESS);
\r
4322 self::updateConfig('DefaultBlog', postVar('DefaultBlog'));
\r
4323 self::updateConfig('BaseSkin', postVar('BaseSkin'));
\r
4324 self::updateConfig('IndexURL', postVar('IndexURL'));
\r
4325 self::updateConfig('AdminURL', postVar('AdminURL'));
\r
4326 self::updateConfig('PluginURL', postVar('PluginURL'));
\r
4327 self::updateConfig('SkinsURL', postVar('SkinsURL'));
\r
4328 self::updateConfig('ActionURL', postVar('ActionURL'));
\r
4329 self::updateConfig('Locale', postVar('Locale'));
\r
4330 self::updateConfig('AdminEmail', postVar('AdminEmail'));
\r
4331 self::updateConfig('SessionCookie', postVar('SessionCookie'));
\r
4332 self::updateConfig('AllowMemberCreate', postVar('AllowMemberCreate'));
\r
4333 self::updateConfig('AllowMemberMail', postVar('AllowMemberMail'));
\r
4334 self::updateConfig('NonmemberMail', postVar('NonmemberMail'));
\r
4335 self::updateConfig('ProtectMemNames', postVar('ProtectMemNames'));
\r
4336 self::updateConfig('SiteName', postVar('SiteName'));
\r
4337 self::updateConfig('NewMemberCanLogon', postVar('NewMemberCanLogon'));
\r
4338 self::updateConfig('DisableSite', postVar('DisableSite'));
\r
4339 self::updateConfig('DisableSiteURL', postVar('DisableSiteURL'));
\r
4340 self::updateConfig('LastVisit', postVar('LastVisit'));
\r
4341 self::updateConfig('MediaURL', postVar('MediaURL'));
\r
4342 self::updateConfig('AllowedTypes', postVar('AllowedTypes'));
\r
4343 self::updateConfig('AllowUpload', postVar('AllowUpload'));
\r
4344 self::updateConfig('MaxUploadSize', postVar('MaxUploadSize'));
\r
4345 self::updateConfig('MediaPrefix', postVar('MediaPrefix'));
\r
4346 self::updateConfig('AllowLoginEdit', postVar('AllowLoginEdit'));
\r
4347 self::updateConfig('DisableJsTools', postVar('DisableJsTools'));
\r
4348 self::updateConfig('CookieDomain', postVar('CookieDomain'));
\r
4349 self::updateConfig('CookiePath', postVar('CookiePath'));
\r
4350 self::updateConfig('CookieSecure', postVar('CookieSecure'));
\r
4351 self::updateConfig('URLMode', postVar('URLMode'));
\r
4352 self::updateConfig('CookiePrefix', postVar('CookiePrefix'));
\r
4353 self::updateConfig('DebugVars', postVar('DebugVars'));
\r
4354 self::updateConfig('DefaultListSize', postVar('DefaultListSize'));
\r
4355 self::updateConfig('AdminCSS', postVar('AdminCSS'));
\r
4356 self::updateConfig('AdminSkin', postVar('adminskin'));
\r
4357 self::updateConfig('BookmarkletSkin', postVar('bookmarklet'));
\r
4359 // load new config and redirect (this way, the new locale will be used is necessary)
\r
4360 // note that when changing cookie settings, this redirect might cause the user
\r
4361 // to have to log in again.
\r
4363 redirect($CONF['AdminURL'] . '?action=manage');
\r
4368 * Admin::action_systemoverview()
\r
4369 * Output system overview
\r
4374 static private function action_systemoverview()
\r
4376 self::$skin->parse('systemoverview');
\r
4381 * Admin::updateConfig()
\r
4383 * @param string $name
\r
4384 * @param string $val
\r
4385 * @return integer return the ID in which the latest query posted
\r
4387 static private function updateConfig($name, $val)
\r
4389 $query = "UPDATE %s SET value=%s WHERE name=%s";
\r
4390 $query = sprintf($query, sql_table('config'), DB::quoteValue($val), DB::quoteValue($name));
\r
4391 if ( DB::execute($query) === FALSE )
\r
4393 $err = DB::getError();
\r
4394 die(_ADMIN_SQLDIE_QUERYERROR . $err[2]);
\r
4396 return DB::getInsertId();
\r
4403 * @param string $msg message that will be shown
\r
4406 static public function error($msg)
\r
4408 self::$headMess = $msg;
\r
4409 self::$skin->parse('adminerrorpage');
\r
4414 * Admin::disallow()
\r
4415 * add error log and show error page
\r
4420 static public function disallow()
\r
4422 ActionLog::add(WARNING, _ACTIONLOG_DISALLOWED . serverVar('REQUEST_URI'));
\r
4423 self::error(_ERROR_DISALLOWED);
\r
4428 * Admin::action_PluginAdmin()
\r
4429 * Output pluginadmin
\r
4431 * @param string $skinContents
\r
4432 * @param string $extrahead
\r
4435 static public function action_PluginAdmin($skinContents, $extrahead = '')
\r
4437 self::$extrahead .= $extrahead;
\r
4438 self::$skin->parse('pluginadmin', $skinContents);
\r
4443 * Admin::action_bookmarklet()
\r
4448 static private function action_bookmarklet()
\r
4450 global $member, $manager;
\r
4452 $blogid = intRequestVar('blogid');
\r
4453 $member->teamRights($blogid) or self::disallow();
\r
4455 self::$skin->parse('bookmarklet');
\r
4460 * Admin::action_actionlog()
\r
4465 static private function action_actionlog()
\r
4467 global $member, $manager;
\r
4469 $member->isAdmin() or self::disallow();
\r
4471 self::$skin->parse('actionlog');
\r
4476 * Admin::action_banlist()
\r
4481 static private function action_banlist()
\r
4483 global $member, $manager;
\r
4485 $blogid = intRequestVar('blogid');
\r
4486 $member->blogAdminRights($blogid) or self::disallow();
\r
4488 self::$skin->parse('banlist');
\r
4493 * Admin::action_banlistdelete()
\r
4498 static private function action_banlistdelete()
\r
4500 global $member, $manager;
\r
4502 $blogid = intRequestVar('blogid');
\r
4503 $member->blogAdminRights($blogid) or self::disallow();
\r
4505 self::$skin->parse('banlistdelete');
\r
4510 * Admin::action_banlistdeleteconfirm()
\r
4515 static private function action_banlistdeleteconfirm()
\r
4517 global $member, $manager;
\r
4519 $blogid = intPostVar('blogid');
\r
4520 $allblogs = postVar('allblogs');
\r
4521 $iprange = postVar('iprange');
\r
4523 $member->blogAdminRights($blogid) or self::disallow();
\r
4525 $deleted = array();
\r
4529 if ( Ban::removeBan($blogid, $iprange) )
\r
4531 $deleted[] = $blogid;
\r
4536 // get blogs fot which member has admin rights
\r
4537 $adminblogs = $member->getAdminBlogs();
\r
4538 foreach ($adminblogs as $blogje)
\r
4540 if ( Ban::removeBan($blogje, $iprange) )
\r
4542 $deleted[] = $blogje;
\r
4547 if ( sizeof($deleted) == 0 )
\r
4549 self::error(_ERROR_DELETEBAN);
\r
4553 /* TODO: we should use other ways */
\r
4554 $_REQUEST['delblogs'] = $deleted;
\r
4556 self::$skin->parse('banlistdeleteconfirm');
\r
4561 * Admin::action_banlistnewfromitem()
\r
4566 static private function action_banlistnewfromitem()
\r
4570 $itemid = intRequestVar('itemid');
\r
4571 $item =& $manager->getItem($itemid, 1, 1);
\r
4572 self::action_banlistnew($item['blogid']);
\r
4577 * Admin::action_banlistnew()
\r
4579 * @param integer $blogid ID for weblog
\r
4582 static private function action_banlistnew($blogid = '')
\r
4584 global $member, $manager;
\r
4586 if ( $blogid == '' )
\r
4588 $blogid = intRequestVar('blogid');
\r
4591 $ip = requestVar('ip');
\r
4593 $member->blogAdminRights($blogid) or self::disallow();
\r
4595 /* TODO: we should consider to use the other way instead of this */
\r
4596 $_REQUEST['blogid'] = $blogid;
\r
4598 self::$skin->parse('banlistnew');
\r
4604 * Admin::action_banlistadd()
\r
4609 static private function action_banlistadd()
\r
4613 $blogid = intPostVar('blogid');
\r
4614 $allblogs = postVar('allblogs');
\r
4615 $iprange = postVar('iprange');
\r
4617 if ( $iprange == "custom" )
\r
4619 $iprange = postVar('customiprange');
\r
4621 $reason = postVar('reason');
\r
4623 $member->blogAdminRights($blogid) or self::disallow();
\r
4625 // TODO: check IP range validity
\r
4629 if ( !Ban::addBan($blogid, $iprange, $reason) )
\r
4631 self::error(_ERROR_ADDBAN);
\r
4637 // get blogs fot which member has admin rights
\r
4638 $adminblogs = $member->getAdminBlogs();
\r
4640 foreach ($adminblogs as $blogje)
\r
4642 if ( !Ban::addBan($blogje, $iprange, $reason) )
\r
4649 self::error(_ERROR_ADDBAN);
\r
4653 self::action_banlist();
\r
4658 * Admin::action_clearactionlog()
\r
4663 static private function action_clearactionlog()
\r
4667 $member->isAdmin() or self::disallow();
\r
4669 ActionLog::clear();
\r
4671 self::action_manage(_MSG_ACTIONLOGCLEARED);
\r
4676 * Admin::action_backupoverview()
\r
4681 static private function action_backupoverview()
\r
4683 global $member, $manager;
\r
4685 $member->isAdmin() or self::disallow();
\r
4687 self::$skin->parse('backupoverview');
\r
4692 * Admin::action_backupcreate()
\r
4693 * create file for backup
\r
4699 static private function action_backupcreate()
\r
4701 global $member, $DIR_LIBS;
\r
4703 $member->isAdmin() or self::disallow();
\r
4705 // use compression ?
\r
4706 $useGzip = (integer) postVar('gzip');
\r
4708 include($DIR_LIBS . 'backup.php');
\r
4710 // try to extend time limit
\r
4711 // (creating/restoring dumps might take a while)
\r
4712 @set_time_limit(1200);
\r
4714 Backup::do_backup($useGzip);
\r
4719 * Admin::action_backuprestore()
\r
4720 * restoring from uploaded file
\r
4725 static private function action_backuprestore()
\r
4727 global $member, $DIR_LIBS;
\r
4729 $member->isAdmin() or self::disallow();
\r
4731 if ( intPostVar('letsgo') != 1 )
\r
4733 self::error(_ERROR_BACKUP_NOTSURE);
\r
4737 include($DIR_LIBS . 'backup.php');
\r
4739 // try to extend time limit
\r
4740 // (creating/restoring dumps might take a while)
\r
4741 @set_time_limit(1200);
\r
4743 $message = Backup::do_restore();
\r
4744 if ( $message != '' )
\r
4746 self::error($message);
\r
4749 self::$skin->parse('backuprestore');
\r
4754 * Admin::action_pluginlist()
\r
4755 * output the list of installed plugins
\r
4761 static private function action_pluginlist()
\r
4763 global $DIR_PLUGINS, $member, $manager;
\r
4765 // check if allowed
\r
4766 $member->isAdmin() or self::disallow();
\r
4768 self::$skin->parse('pluginlist');
\r
4773 * Admin::action_pluginhelp()
\r
4778 static private function action_pluginhelp()
\r
4780 global $member, $manager, $DIR_PLUGINS, $CONF;
\r
4782 // check if allowed
\r
4783 $member->isAdmin() or self::disallow();
\r
4785 $plugid = intGetVar('plugid');
\r
4787 if ( !$manager->pidInstalled($plugid) )
\r
4789 self::error(_ERROR_NOSUCHPLUGIN);
\r
4793 self::$skin->parse('pluginhelp');
\r
4798 * Admin::action_pluginadd()
\r
4804 static private function action_pluginadd()
\r
4806 global $member, $manager, $DIR_PLUGINS;
\r
4808 // check if allowed
\r
4809 $member->isAdmin() or self::disallow();
\r
4811 $name = postVar('filename');
\r
4813 if ( $manager->pluginInstalled($name) )
\r
4815 self::error(_ERROR_DUPPLUGIN);
\r
4819 if ( !checkPlugin($name) )
\r
4821 self::error(_ERROR_PLUGFILEERROR . ' (' . Entity::hsc($name) . ')');
\r
4825 // get number of currently installed plugins
\r
4826 $res = DB::getResult('SELECT * FROM ' . sql_table('plugin'));
\r
4827 $numCurrent = $res->rowCount();
\r
4829 // plugin will be added as last one in the list
\r
4830 $newOrder = $numCurrent + 1;
\r
4832 $data = array('file' => &$name);
\r
4833 $manager->notify('PreAddPlugin', $data);
\r
4835 // do this before calling getPlugin (in case the plugin id is used there)
\r
4836 $query = "INSERT INTO %s (porder, pfile) VALUES (%d, %s);";
\r
4837 $query = sprintf($query, sql_table('plugin'), (integer) $newOrder, DB::quoteValue($name));
\r
4838 DB::execute($query);
\r
4839 $iPid = DB::getInsertId();
\r
4841 $manager->clearCachedInfo('installedPlugins');
\r
4843 // Load the plugin for condition checking and instalation
\r
4844 $plugin =& $manager->getPlugin($name);
\r
4846 // check if it got loaded (could have failed)
\r
4849 $query = "DELETE FROM %s WHERE pid=%d;";
\r
4850 $query = sprintf($query, sql_table('plugin'), (integer) $iPid);
\r
4852 DB::execute($query);
\r
4854 $manager->clearCachedInfo('installedPlugins');
\r
4855 self::error(_ERROR_PLUGIN_LOAD);
\r
4859 // check if plugin needs a newer Nucleus version
\r
4860 if ( getNucleusVersion() < $plugin->getMinNucleusVersion() )
\r
4862 // uninstall plugin again...
\r
4863 self::deleteOnePlugin($plugin->getID());
\r
4865 // ...and show error
\r
4866 self::error(_ERROR_NUCLEUSVERSIONREQ . Entity::hsc($plugin->getMinNucleusVersion()));
\r
4870 // check if plugin needs a newer Nucleus version
\r
4871 if ( (getNucleusVersion() == $plugin->getMinNucleusVersion()) && (getNucleusPatchLevel() < $plugin->getMinNucleusPatchLevel()) )
\r
4873 // uninstall plugin again...
\r
4874 self::deleteOnePlugin($plugin->getID());
\r
4876 // ...and show error
\r
4877 self::error(_ERROR_NUCLEUSVERSIONREQ . Entity::hsc( $plugin->getMinNucleusVersion() . ' patch ' . $plugin->getMinNucleusPatchLevel() ) );
\r
4881 $pluginList = $plugin->getPluginDep();
\r
4882 foreach ( $pluginList as $pluginName )
\r
4884 $res = DB::getResult('SELECT * FROM '.sql_table('plugin') . ' WHERE pfile=' . DB::quoteValue($pluginName));
\r
4885 if ($res->rowCount() == 0)
\r
4887 // uninstall plugin again...
\r
4888 self::deleteOnePlugin($plugin->getID());
\r
4889 self::error(sprintf(_ERROR_INSREQPLUGIN, Entity::hsc($pluginName)));
\r
4894 // call the install method of the plugin
\r
4895 $plugin->install();
\r
4897 $data = array('plugin' => &$plugin);
\r
4898 $manager->notify('PostAddPlugin', $data);
\r
4900 // update all events
\r
4901 self::action_pluginupdate();
\r
4906 * ADMIN:action_pluginupdate():
\r
4912 static private function action_pluginupdate()
\r
4914 global $member, $manager, $CONF;
\r
4916 // check if allowed
\r
4917 $member->isAdmin() or self::disallow();
\r
4919 // delete everything from plugin_events
\r
4920 DB::execute('DELETE FROM '.sql_table('plugin_event'));
\r
4922 // loop over all installed plugins
\r
4923 $res = DB::getResult('SELECT pid, pfile FROM '.sql_table('plugin'));
\r
4924 foreach ( $res as $row )
\r
4926 $pid = $row['pid'];
\r
4927 $plug =& $manager->getPlugin($row['pfile']);
\r
4930 $eventList = $plug->getEventList();
\r
4931 foreach ( $eventList as $eventName )
\r
4933 $query = "INSERT INTO %s (pid, event) VALUES (%d, %s)";
\r
4934 $query = sprintf($query, sql_table('plugin_event'), (integer) $pid, DB::quoteValue($eventName));
\r
4935 DB::execute($query);
\r
4939 redirect($CONF['AdminURL'] . '?action=pluginlist');
\r
4944 * Admin::action_plugindelete()
\r
4949 static private function action_plugindelete()
\r
4951 global $member, $manager;
\r
4953 // check if allowed
\r
4954 $member->isAdmin() or self::disallow();
\r
4956 $pid = intGetVar('plugid');
\r
4958 if ( !$manager->pidInstalled($pid) )
\r
4960 self::error(_ERROR_NOSUCHPLUGIN);
\r
4964 self::$skin->parse('plugindelete');
\r
4969 * Admin::action_plugindeleteconfirm()
\r
4974 static private function action_plugindeleteconfirm()
\r
4976 global $member, $manager, $CONF;
\r
4978 // check if allowed
\r
4979 $member->isAdmin() or self::disallow();
\r
4981 $pid = intPostVar('plugid');
\r
4983 $error = self::deleteOnePlugin($pid, 1);
\r
4986 self::error($error);
\r
4990 redirect($CONF['AdminURL'] . '?action=pluginlist');
\r
5000 static public function deleteOnePlugin($pid, $callUninstall = 0)
\r
5004 $pid = intval($pid);
\r
5006 if ( !$manager->pidInstalled($pid) )
\r
5008 return _ERROR_NOSUCHPLUGIN;
\r
5011 $query = "SELECT pfile as result FROM %s WHERE pid=%d;";
\r
5012 $query = sprintf($query, sql_table('plugin'), (integer) $pid);
\r
5013 $name = DB::getValue($query);
\r
5015 // check dependency before delete
\r
5016 $res = DB::getResult('SELECT pfile FROM ' . sql_table('plugin'));
\r
5017 foreach ( $res as $row )
\r
5019 $plug =& $manager->getPlugin($row['pfile']);
\r
5022 $depList = $plug->getPluginDep();
\r
5023 foreach ( $depList as $depName )
\r
5025 if ( $name == $depName )
\r
5027 return sprintf(_ERROR_DELREQPLUGIN, $row['pfile']);
\r
5033 $data = array('plugid' => $pid);
\r
5034 $manager->notify('PreDeletePlugin', $data);
\r
5036 // call the unInstall method of the plugin
\r
5037 if ( $callUninstall )
\r
5039 $plugin =& $manager->getPlugin($name);
\r
5042 $plugin->unInstall();
\r
5046 // delete all subscriptions
\r
5047 DB::execute('DELETE FROM ' . sql_table('plugin_event') . ' WHERE pid=' . $pid);
\r
5049 // delete all options
\r
5050 // get OIDs from plugin_option_desc
\r
5051 $res = DB::getResult('SELECT oid FROM ' . sql_table('plugin_option_desc') . ' WHERE opid=' . $pid);
\r
5053 foreach ( $res as $row )
\r
5055 array_push($aOIDs, $row['oid']);
\r
5058 // delete from plugin_option and plugin_option_desc
\r
5059 DB::execute('DELETE FROM ' . sql_table('plugin_option_desc') . ' WHERE opid=' . $pid);
\r
5060 if (count($aOIDs) > 0)
\r
5062 DB::execute('DELETE FROM ' . sql_table('plugin_option') . ' WHERE oid in (' . implode(',', $aOIDs) . ')');
\r
5065 // update order numbers
\r
5066 $res = DB::getValue('SELECT porder FROM ' . sql_table('plugin') . ' WHERE pid=' . $pid);
\r
5067 DB::execute('UPDATE ' . sql_table('plugin') . ' SET porder=(porder - 1) WHERE porder>' . $res);
\r
5070 DB::execute('DELETE FROM ' . sql_table('plugin') . ' WHERE pid=' . $pid);
\r
5072 $manager->clearCachedInfo('installedPlugins');
\r
5073 $data = array('plugid' => $pid);
\r
5074 $manager->notify('PostDeletePlugin', $data);
\r
5080 * Admin::action_pluginup()
\r
5085 static private function action_pluginup()
\r
5087 global $member, $manager, $CONF;
\r
5089 // check if allowed
\r
5090 $member->isAdmin() or self::disallow();
\r
5092 $plugid = intGetVar('plugid');
\r
5094 if ( !$manager->pidInstalled($plugid) )
\r
5096 self::error(_ERROR_NOSUCHPLUGIN);
\r
5100 // 1. get old order number
\r
5101 $oldOrder = DB::getValue('SELECT porder FROM ' . sql_table('plugin') . ' WHERE pid=' . $plugid);
\r
5103 // 2. calculate new order number
\r
5104 $newOrder = ($oldOrder > 1) ? ($oldOrder - 1) : 1;
\r
5106 // 3. update plug numbers
\r
5107 DB::execute('UPDATE ' . sql_table('plugin') . ' SET porder=' . $oldOrder . ' WHERE porder=' . $newOrder);
\r
5108 DB::execute('UPDATE ' . sql_table('plugin') . ' SET porder=' . $newOrder . ' WHERE pid=' . $plugid);
\r
5110 //self::action_pluginlist();
\r
5111 // To avoid showing ticket in the URL, redirect to pluginlist, instead.
\r
5112 redirect($CONF['AdminURL'] . '?action=pluginlist');
\r
5117 * Admin::action_plugindown()
\r
5122 static private function action_plugindown()
\r
5124 global $member, $manager, $CONF;
\r
5126 // check if allowed
\r
5127 $member->isAdmin() or self::disallow();
\r
5129 $plugid = intGetVar('plugid');
\r
5130 if ( !$manager->pidInstalled($plugid) )
\r
5132 self::error(_ERROR_NOSUCHPLUGIN);
\r
5136 // 1. get old order number
\r
5137 $oldOrder = DB::getValue('SELECT porder FROM ' . sql_table('plugin') . ' WHERE pid=' . $plugid);
\r
5139 $res = DB::getResult('SELECT * FROM ' . sql_table('plugin'));
\r
5140 $maxOrder = $res->rowCount();
\r
5142 // 2. calculate new order number
\r
5143 $newOrder = ($oldOrder < $maxOrder) ? ($oldOrder + 1) : $maxOrder;
\r
5145 // 3. update plug numbers
\r
5146 DB::execute('UPDATE ' . sql_table('plugin') . ' SET porder=' . $oldOrder . ' WHERE porder=' . $newOrder);
\r
5147 DB::execute('UPDATE ' . sql_table('plugin') . ' SET porder=' . $newOrder . ' WHERE pid=' . $plugid);
\r
5149 //self::action_pluginlist();
\r
5150 // To avoid showing ticket in the URL, redirect to pluginlist, instead.
\r
5151 redirect($CONF['AdminURL'] . '?action=pluginlist');
\r
5156 * Admin::action_pluginoptions()
\r
5158 * Output Plugin option page
\r
5161 * @param string $message message when fallbacked
\r
5165 static private function action_pluginoptions($message = '')
\r
5167 global $member, $manager;
\r
5169 // check if allowed
\r
5170 $member->isAdmin() or self::disallow();
\r
5172 $pid = intRequestVar('plugid');
\r
5173 if ( !$manager->pidInstalled($pid) )
\r
5175 self::error(_ERROR_NOSUCHPLUGIN);
\r
5179 if ( isset($message) )
\r
5181 self::$headMess = $message;
\r
5183 $plugname = $manager->getPluginNameFromPid($pid);
\r
5184 $plugin = $manager->getPlugin($plugname);
\r
5185 Admin::$extrahead .= "<script type=\"text/javascript\" src=\"<%skinfile(/javascripts/numbercheck.js)%>\"></script>\n";
\r
5187 self::$skin->parse('pluginoptions');
\r
5192 * Admin::action_pluginoptionsupdate()
\r
5194 * Update plugin options and fallback to plugin option page
\r
5200 static private function action_pluginoptionsupdate()
\r
5202 global $member, $manager;
\r
5204 // check if allowed
\r
5205 $member->isAdmin() or self::disallow();
\r
5207 $pid = intRequestVar('plugid');
\r
5209 if ( !$manager->pidInstalled($pid) )
\r
5211 self::error(_ERROR_NOSUCHPLUGIN);
\r
5215 $aOptions = requestArray('plugoption');
\r
5216 NucleusPlugin::apply_plugin_options($aOptions);
\r
5219 'context' => 'global',
\r
5222 $manager->notify('PostPluginOptionsUpdate', $data);
\r
5224 self::action_pluginoptions(_PLUGS_OPTIONS_UPDATED);
\r
5229 * Admin::skineditgeneral()
\r
5231 * @param integer $skinid
\r
5232 * @param string $handler
\r
5233 * @return string empty or message if failed
\r
5235 static private function skineditgeneral($skinid, $handler='')
\r
5239 $name = postVar('name');
\r
5240 $desc = postVar('desc');
\r
5241 $type = postVar('type');
\r
5242 $inc_mode = postVar('inc_mode');
\r
5243 $inc_prefix = postVar('inc_prefix');
\r
5245 $skin =& $manager->getSkin($skinid, $handler);
\r
5248 if ( !isValidSkinName($name) )
\r
5250 return _ERROR_BADSKINNAME;
\r
5253 if ( ($skin->getName() != $name) && SKIN::exists($name) )
\r
5255 return _ERROR_DUPSKINNAME;
\r
5260 $type = 'text/html';
\r
5265 $inc_mode = 'normal';
\r
5268 // 2. Update description
\r
5269 $skin->updateGeneralInfo($name, $desc, $type, $inc_mode, $inc_prefix);
\r
5274 * Admin::skindeleteconfirm()
\r
5276 * @param integer $skinid
\r
5279 static private function skindeleteconfirm($skinid)
\r
5283 if ( !preg_match('#^admin/#', self::$action) )
\r
5285 $event_identifier = 'Skin';
\r
5289 $event_identifier = 'AdminSkin';
\r
5292 $manager->notify("PreDelete{$event_identifier}", array('skinid' => $skinid));
\r
5294 // 1. delete description
\r
5295 $query = "DELETE FROM %s WHERE sdnumber=%d;";
\r
5296 $query = sprintf($query, sql_table('skin_desc'), (integer) $skinid);
\r
5297 DB::execute($query);
\r
5299 // 2. delete parts
\r
5300 $query = "DELETE FROM %s WHERE sdesc=%d;";
\r
5301 $query = sprintf($query, sql_table('skin'), (integer) $skinid);
\r
5302 DB::execute($query);
\r
5304 $manager->notify("PostDelete{$event_identifier}", array('skinid' => $skinid));
\r
5310 * Admin::skinremovetypeconfirm()
\r
5312 * @param integer $skinid
\r
5313 * @param string $skintype
\r
5314 * @return string empty or message if failed
\r
5316 static private function skinremovetypeconfirm($skinid, $skintype)
\r
5320 if ( !preg_match('#^admin/#', self::$action) )
\r
5322 $event_identifier = 'Skin';
\r
5326 $event_identifier = 'AdminSkin';
\r
5329 if ( !isValidShortName($skintype) )
\r
5331 return _ERROR_SKIN_PARTS_SPECIAL_DELETE;
\r
5335 'skinid' => $skinid,
\r
5336 'skintype' => $skintype
\r
5338 $manager->notify("PreDelete{$event_identifier}Part", $data);
\r
5341 $query = 'DELETE FROM %s WHERE sdesc = %d AND stype = %s;';
\r
5342 $query = sprintf($query, sql_table('skin'), (integer) $skinid, DB::quoteValue($skintype) );
\r
5343 DB::execute($query);
\r
5346 'skinid' => $skinid,
\r
5347 'skintype' => $skintype
\r
5349 $manager->notify("PostDelete{$event_identifier}Part", $data);
\r
5355 * Admin::skinclone()
\r
5357 * @param integer $skinid
\r
5358 * @param string $handler
\r
5361 static private function skinclone($skinid, $handler='')
\r
5365 // 1. read skin to clone
\r
5366 $skin =& $manager->getSkin($skinid, $handler);
\r
5367 $name = "{$skin->getName()}_clone";
\r
5369 // if a skin with that name already exists:
\r
5370 if ( Skin::exists($name) )
\r
5373 while ( Skin::exists($name . $i) )
\r
5380 // 2. create skin desc
\r
5381 $newid = Skin::createNew(
\r
5383 $skin->getDescription(),
\r
5384 $skin->getContentType(),
\r
5385 $skin->getIncludeMode(),
\r
5386 $skin->getIncludePrefix()
\r
5390 $query = "SELECT stype FROM %s WHERE sdesc=%d;";
\r
5391 $query = sprintf($query, sql_table('skin'), (integer) $skinid);
\r
5393 $res = DB::getResult($query);
\r
5394 foreach ( $res as $row )
\r
5396 $content = $skin->getContentFromDB($row['stype']);
\r
5399 $query = "INSERT INTO %s (sdesc, scontent, stype) VALUES (%d, %s, %s)";
\r
5400 $query = sprintf($query, sql_table('skin'), (integer) $newid, DB::quoteValue($content), DB::quoteValue($row['stype']));
\r
5401 DB::execute($query);
\r
5408 * Admin::skinieimport()
\r
5410 * @param string $mode
\r
5411 * @param string $skinFileRaw
\r
5412 * @return string empty or message if failed
\r
5414 static private function skinieimport($mode, $skinFileRaw)
\r
5416 global $DIR_LIBS, $DIR_SKINS;
\r
5418 // load skinie class
\r
5419 include_once($DIR_LIBS . 'skinie.php');
\r
5421 $importer = new SkinImport();
\r
5423 // get full filename
\r
5424 if ( $mode == 'file' )
\r
5426 $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml';
\r
5430 $skinFile = $skinFileRaw;
\r
5433 // read only metadata
\r
5434 $error = $importer->readFile($skinFile, 1);
\r
5441 /* TODO: we should consider to use the other way insterad of this */
\r
5442 $_REQUEST['skininfo'] = $importer->getInfo();
\r
5443 $_REQUEST['skinnames'] = $importer->getSkinNames();
\r
5444 $_REQUEST['tpltnames'] = $importer->getTemplateNames();
\r
5447 $skinNameClashes = $importer->checkSkinNameClashes();
\r
5448 $templateNameClashes = $importer->checkTemplateNameClashes();
\r
5449 $hasNameClashes = (count($skinNameClashes) > 0) || (count($templateNameClashes) > 0);
\r
5451 /* TODO: we should consider to use the other way insterad of this */
\r
5452 $_REQUEST['skinclashes'] = $skinNameClashes;
\r
5453 $_REQUEST['tpltclashes'] = $templateNameClashes;
\r
5454 $_REQUEST['nameclashes'] = $hasNameClashes ? 1 : 0;
\r
5461 * Admin::skinieedoimport()
\r
5463 * @param string $mode
\r
5464 * @param string $skinFileRaw
\r
5465 * @param boolean $allowOverwrite
\r
5466 * @return string empty or message if failed
\r
5468 static private function skiniedoimport($mode, $skinFileRaw, $allowOverwrite)
\r
5470 global $DIR_LIBS, $DIR_SKINS;
\r
5472 // load skinie class
\r
5473 include_once($DIR_LIBS . 'skinie.php');
\r
5475 $importer = new SkinImport();
\r
5477 // get full filename
\r
5478 if ( $mode == 'file' )
\r
5480 $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml';
\r
5484 $skinFile = $skinFileRaw;
\r
5487 $error = $importer->readFile($skinFile);
\r
5494 $error = $importer->writeToDatabase($allowOverwrite);
\r
5501 /* TODO: we should consider to use the other way insterad of this */
\r
5502 $_REQUEST['skininfo'] = $importer->getInfo();
\r
5503 $_REQUEST['skinnames'] = $importer->getSkinNames();
\r
5504 $_REQUEST['tpltnames'] = $importer->getTemplateNames();
\r
5511 * Admin::skinieexport()
\r
5513 * @param array $aSkins
\r
5514 * @param array $aTemplates
\r
5515 * @param string $info
\r
5518 static private function skinieexport($aSkins, $aTemplates, $info)
\r
5522 // load skinie class
\r
5523 include_once($DIR_LIBS . 'skinie.php');
\r
5525 if ( !is_array($aSkins) )
\r
5527 $aSkins = array();
\r
5530 if (!is_array($aTemplates))
\r
5532 $aTemplates = array();
\r
5535 $skinList = array_keys($aSkins);
\r
5536 $templateList = array_keys($aTemplates);
\r
5538 $exporter = new SkinExport();
\r
5539 foreach ( $skinList as $skinId )
\r
5541 $exporter->addSkin($skinId);
\r
5543 foreach ( $templateList as $templateId )
\r
5545 $exporter->addTemplate($templateId);
\r
5547 $exporter->setInfo($info);
\r
5548 $exporter->export();
\r
5554 * Admin::action_parseSpecialskin()
\r
5559 static private function action_parseSpecialskin()
\r
5561 self::$skin->parse(self::$action);
\r
5566 * Admin::getAdminskinIDFromName()
\r
5568 * @param string $skinname name of skin
\r
5569 * @return integer ID for skin
\r
5571 static private function getAdminskinIDFromName($skinname)
\r
5573 $query = "SELECT 'sdnumber' as result FROM %s WHERE sdname = %s;";
\r
5574 $query = sprintf($query, sql_table('skin_desc'), DB::quoteValue($skinname));
\r
5575 $admnSknID = DB::getValue($query);
\r
5576 return (integer) $adminSkinID;
\r
5580 * Admin::getAdminskinNameFromID()
\r
5582 * @param integer $skinid ID for skin
\r
5583 * @return integer ID for skin
\r
5585 static private function getAdminskinNameFromID($skinid)
\r
5587 $query = "SELECT sdname as result FROM %s WHERE sdnumber = %d;";
\r
5588 $query = sprintf($query, sql_table('skin_desc'), (integer) $skinid);
\r
5589 $admnSknID = DB::getValue($query);
\r
5590 return (integer) $adminSkinID;
\r
5594 * Admin::getAdminextrahead()
\r
5596 static public function getAdminextrahead()
\r
5598 return self::$extrahead;
\r
5602 * Admin::getAdminpassvar()
\r
5604 static public function getAdminpassvar()
\r
5606 return self::$passvar;
\r
5610 * Admin::getAdminAction()
\r
5612 static public function getAdminAction()
\r
5614 return self::$action;
\r
5618 * Admin::getAdminaOption()
\r
5620 static public function getAdminaOption()
\r
5622 return self::$aOptions;
\r
5626 * Admin::action_importAdmin()
\r
5631 static private function action_importAdmin()
\r
5633 global $DIR_ADMINSKINS, $action;
\r
5634 if ( $action == 'adminskinieimport' )
\r
5636 self::doAdminskinimport();
\r
5639 if ( $action == 'showlogin' )
\r
5641 $skinName = 'showlogin';
\r
5642 $actnName = 'showlogin';
\r
5646 $skinName = 'defaultimporter';
\r
5647 $actnName = 'importAdmin';
\r
5650 /* TODO: why??? */
\r
5651 $contents = file_get_contents($DIR_ADMINSKINS . $skinName . '.skn');
\r
5653 $skn['description'] = $skinName;
\r
5654 $skn['contentType'] = 'importAdmin';
\r
5655 $skn['includeMode'] = 'normal';
\r
5656 $skn['includePrefix'] = '';
\r
5657 $skn['name'] = 'defaultinporter';
\r
5659 self::$skin = (object) $skn;
\r
5660 $handler = new AdminActions($actnName, self::$skin, $this);
\r
5662 $parser = new PARSER($handler);
\r
5663 $parser->setSkin(self::$skin);
\r
5664 $parser->parse($contents);
\r
5670 * Admin::doAdminskinimport()
\r
5675 static private function doAdminskinimport()
\r
5677 global $DIR_LIBS, $DIR_ADMINSKINS, $CONF, $member;
\r
5679 $member->isAdmin() or self::disallow();
\r
5681 include_once($DIR_LIBS . 'Skinie.php');
\r
5682 $skinFileRaw = postVar('skinfile');
\r
5683 $mode = postVar('mode');
\r
5684 $allowOverwrite = intPostVar('overwrite');
\r
5686 if ( $mode == 'file' )
\r
5688 $skinFile = $DIR_ADMINSKINS . $skinFileRaw . '/skinbackup.xml';
\r
5692 $skinFile = $skinFileRaw;
\r
5695 $importer = new SKINIMPORT();
\r
5696 $error = $importer->readFile($skinFile);
\r
5699 self::error($error);
\r
5702 $error = $importer->writeToDatabase($allowOverwrite);
\r
5705 self::error($error);
\r
5709 $_REQUEST['skininfo'] = $importer->getInfo();
\r
5710 $_REQUEST['skinnames'] = $importer->getSkinNames();
\r
5711 $_REQUEST['tpltnames'] = $importer->getTemplateNames();
\r
5713 header('Location: ' . $CONF['AdminURL']);
\r