action_xxxx method) var $action; function ADMIN() { } /** * Executes an action * * @param $action * action to be performed */ function action($action) { global $CONF, $manager; // list of action aliases $alias = array( 'login' => 'overview', '' => 'overview' ); if ($alias[$action]) $action = $alias[$action]; $methodName = 'action_' . $action; $this->action = strtolower($action); // check ticket. All actions need a ticket, unless they are considered to be safe (a safe action // is an action that requires user interaction before something is actually done) // all safe actions are in this array: $aActionsNotToCheck = array('showlogin', 'login', 'overview', 'itemlist', 'blogcommentlist', 'bookmarklet', 'blogsettings', 'banlist', 'deleteblog', 'editmembersettings', 'browseownitems', 'browseowncomments', 'createitem', 'itemedit', 'itemmove', 'categoryedit', 'categorydelete', 'manage', 'actionlog', 'settingsedit', 'backupoverview', 'pluginlist', 'createnewlog', 'usermanagement', 'skinoverview', 'templateoverview', 'skinieoverview', 'itemcommentlist', 'commentedit', 'commentdelete', 'banlistnewfromitem', 'banlistdelete', 'itemdelete', 'manageteam', 'teamdelete', 'banlistnew', 'memberedit', 'memberdelete', 'pluginhelp', 'pluginoptions', 'plugindelete', 'skinedittype', 'skindelete', 'skinedit', 'templateedit', 'templatedelete', 'activate'); /* // the rest of the actions needs to be checked $aActionsToCheck = array('additem', 'itemupdate', 'itemmoveto', 'categoryupdate', 'categorydeleteconfirm', 'itemdeleteconfirm', 'commentdeleteconfirm', 'teamdeleteconfirm', 'memberdeleteconfirm', 'templatedeleteconfirm', 'skindeleteconfirm', 'banlistdeleteconfirm', 'plugindeleteconfirm', 'batchitem', 'batchcomment', 'batchmember', 'batchcategory', 'batchteam', 'regfile', 'commentupdate', 'banlistadd', 'changemembersettings', 'clearactionlog', 'settingsupdate', 'blogsettingsupdate', 'categorynew', 'teamchangeadmin', 'teamaddmember', 'memberadd', 'addnewlog', 'addnewlog2', 'backupcreate', 'backuprestore', 'pluginup', 'plugindown', 'pluginupdate', 'pluginadd', 'pluginoptionsupdate', 'skinupdate', 'skinclone', 'skineditgeneral', 'templateclone', 'templatenew', 'templateupdate', 'skinieimport', 'skinieexport', 'skiniedoimport', 'skinnew', 'deleteblogconfirm', 'sendping', 'rawping', 'activatesetpwd'); */ if (!in_array($this->action, $aActionsNotToCheck)) { if (!$manager->checkTicket()) $this->error(_ERROR_BADTICKET); } if (method_exists($this, $methodName)) call_user_func(array(&$this, $methodName)); else $this->error(_BADACTION . " ($action)"); } function action_showlogin() { global $error; $this->action_login($error); } function action_login($msg = '', $passvars = 1) { global $member; // skip to overview when allowed if ($member->isLoggedIn() && $member->canLogin()) { $this->action_overview(); exit; } $this->pagehead(); echo '

', _LOGIN ,'

'; if ($msg) echo _MESSAGE , ': ', htmlspecialchars($msg); ?>

:

:




pagefoot(); } /** * provides a screen with the overview of the actions available */ function action_overview($msg = '') { global $member; $this->pagehead(); if ($msg) echo _MESSAGE , ': ', $msg; /* ---- add items ---- */ echo '

' . _OVERVIEW_YRBLOGS . '

'; $showAll = requestVar('showall'); if (($member->isAdmin()) && ($showAll == 'yes')) { // Super-Admins have access to all blogs! (no add item support though) $query = 'SELECT bnumber, bname, 1 as tadmin, burl, bshortname' . ' FROM ' . sql_table('blog') . ' ORDER BY bname'; } else { $query = 'SELECT bnumber, bname, tadmin, burl, bshortname' . ' FROM ' . sql_table('blog') . ', ' . sql_table('team') . ' WHERE tblog=bnumber and tmember=' . $member->getID() . ' ORDER BY bname'; } $template['content'] = 'bloglist'; $template['superadmin'] = $member->isAdmin(); $amount = showlist($query,'table',$template); if (($showAll != 'yes') && ($member->isAdmin())) { $total = quickQuery('SELECT COUNT(*) as result FROM ' . sql_table('blog')); if ($total > $amount) echo '

Show all blogs

'; } if ($amount == 0) echo _OVERVIEW_NOBLOGS; if ($amount != 0) { echo '

' . _OVERVIEW_YRDRAFTS . '

'; $query = 'SELECT ititle, inumber, bshortname' . ' FROM ' . sql_table('item'). ', ' . sql_table('blog') . ' WHERE iauthor='.$member->getID().' and iblog=bnumber and idraft=1'; $template['content'] = 'draftlist'; $amountdrafts = showlist($query, 'table', $template); if ($amountdrafts == 0) echo _OVERVIEW_NODRAFTS; } /* ---- user settings ---- */ echo '

' . _OVERVIEW_YRSETTINGS . '

'; echo ''; /* ---- general settings ---- */ if ($member->isAdmin()) { echo '

' . _OVERVIEW_MANAGEMENT. '

'; echo ''; } $this->pagefoot(); } // returns a link to a weblog (takes BLOG object as parameter) function bloglink(&$blog) { return ''.$blog->getName() .''; } function action_manage($msg = '') { global $member; $member->isAdmin() or $this->disallow(); $this->pagehead(); echo '

(',_BACKHOME,')

'; if ($msg) echo '

' , _MESSAGE , ': ', $msg , '

'; echo '

' . _MANAGE_GENERAL. '

'; echo ''; echo '

' . _MANAGE_SKINS . '

'; echo ''; echo '

' . _MANAGE_EXTRA . '

'; echo ''; $this->pagefoot(); } function action_itemlist($blogid = '') { global $member, $manager; if ($blogid == '') $blogid = intRequestVar('blogid'); $member->teamRights($blogid) or $member->isAdmin() or $this->disallow(); $this->pagehead(); $blog =& $manager->getBlog($blogid); echo '

(',_BACKHOME,')

'; echo '

' . _ITEMLIST_BLOG . ' ' . $this->bloglink($blog) . '

'; // start index if (postVar('start')) $start = intPostVar('start'); else $start = 0; if ($start == 0) echo '

',_ITEMLIST_ADDNEW,'

'; // amount of items to show if (postVar('amount')) $amount = intPostVar('amount'); else $amount = 10; $search = postVar('search'); // search through items $query = 'SELECT bshortname, cname, mname, ititle, ibody, inumber, idraft, itime' . ' FROM ' . sql_table('item') . ', ' . sql_table('blog') . ', ' . sql_table('member') . ', ' . sql_table('category') . ' WHERE iblog=bnumber and iauthor=mnumber and icat=catid and iblog=' . $blogid; if ($search) $query .= ' and ((ititle LIKE "%' . addslashes($search) . '%") or (ibody LIKE "%' . addslashes($search) . '%") or (imore LIKE "%' . addslashes($search) . '%"))'; // non-blog-admins can only edit/delete their own items if (!$member->blogAdminRights($blogid)) $query .= ' and iauthor=' . $member->getID(); $query .= ' ORDER BY itime DESC' . " LIMIT $start,$amount"; $template['content'] = 'itemlist'; $template['now'] = $blog->getCorrectTime(time()); $navList =& new NAVLIST('itemlist', $start, $amount, 0, 1000, $blogid, $search, 0); $navList->showBatchList('item',$query,'table',$template); $this->pagefoot(); } function action_batchitem() { global $member, $manager; // check if logged in $member->isLoggedIn() or $this->disallow(); // more precise check will be done for each performed operation // get array of itemids from request $selected = requestIntArray('batch'); $action = requestVar('batchaction'); // Show error when no items were selected if (!is_array($selected) || sizeof($selected) == 0) $this->error(_BATCH_NOSELECTION); // On move: when no destination blog/category chosen, show choice now $destCatid = intRequestVar('destcatid'); if (($action == 'move') && (!$manager->existsCategory($destCatid))) $this->batchMoveSelectDestination('item',$selected); // On delete: check if confirmation has been given if (($action == 'delete') && (requestVar('confirmation') != 'yes')) $this->batchAskDeleteConfirmation('item',$selected); $this->pagehead(); echo '(',_BACKHOME,')'; echo '

',_BATCH_ITEMS,'

'; echo '

',_BATCH_EXECUTING,' ',htmlspecialchars($action),'

'; echo ''; echo '',_BATCH_DONE,''; $this->pagefoot(); } function action_batchcomment() { global $member; // check if logged in $member->isLoggedIn() or $this->disallow(); // more precise check will be done for each performed operation // get array of itemids from request $selected = requestIntArray('batch'); $action = requestVar('batchaction'); // Show error when no items were selected if (!is_array($selected) || sizeof($selected) == 0) $this->error(_BATCH_NOSELECTION); // On delete: check if confirmation has been given if (($action == 'delete') && (requestVar('confirmation') != 'yes')) $this->batchAskDeleteConfirmation('comment',$selected); $this->pagehead(); echo '(',_BACKHOME,')'; echo '

',_BATCH_COMMENTS,'

'; echo '

',_BATCH_EXECUTING,' ',htmlspecialchars($action),'

'; echo ''; echo '',_BATCH_DONE,''; $this->pagefoot(); } function action_batchmember() { global $member; // check if logged in and admin ($member->isLoggedIn() && $member->isAdmin()) or $this->disallow(); // get array of itemids from request $selected = requestIntArray('batch'); $action = requestVar('batchaction'); // Show error when no members selected if (!is_array($selected) || sizeof($selected) == 0) $this->error(_BATCH_NOSELECTION); // On delete: check if confirmation has been given if (($action == 'delete') && (requestVar('confirmation') != 'yes')) $this->batchAskDeleteConfirmation('member',$selected); $this->pagehead(); echo '(',_MEMBERS_BACKTOOVERVIEW,')'; echo '

',_BATCH_MEMBERS,'

'; echo '

',_BATCH_EXECUTING,' ',htmlspecialchars($action),'

'; echo ''; echo '',_BATCH_DONE,''; $this->pagefoot(); } function action_batchteam() { global $member; $blogid = intRequestVar('blogid'); // check if logged in and admin ($member->isLoggedIn() && $member->blogAdminRights($blogid)) or $this->disallow(); // get array of itemids from request $selected = requestIntArray('batch'); $action = requestVar('batchaction'); // Show error when no members selected if (!is_array($selected) || sizeof($selected) == 0) $this->error(_BATCH_NOSELECTION); // On delete: check if confirmation has been given if (($action == 'delete') && (requestVar('confirmation') != 'yes')) $this->batchAskDeleteConfirmation('team',$selected); $this->pagehead(); echo '

(',_BACK,')

'; echo '

',_BATCH_TEAM,'

'; echo '

',_BATCH_EXECUTING,' ',htmlspecialchars($action),'

'; echo ''; echo '',_BATCH_DONE,''; $this->pagefoot(); } function action_batchcategory() { global $member, $manager; // check if logged in $member->isLoggedIn() or $this->disallow(); // more precise check will be done for each performed operation // get array of itemids from request $selected = requestIntArray('batch'); $action = requestVar('batchaction'); // Show error when no items were selected if (!is_array($selected) || sizeof($selected) == 0) $this->error(_BATCH_NOSELECTION); // On move: when no destination blog chosen, show choice now $destBlogId = intRequestVar('destblogid'); if (($action == 'move') && (!$manager->existsBlogID($destBlogId))) $this->batchMoveCategorySelectDestination('category',$selected); // On delete: check if confirmation has been given if (($action == 'delete') && (requestVar('confirmation') != 'yes')) $this->batchAskDeleteConfirmation('category',$selected); $this->pagehead(); echo '(',_BACKHOME,')'; echo '

',BATCH_CATEGORIES,'

'; echo '

',_BATCH_EXECUTING,' ',htmlspecialchars($action),'

'; echo ''; echo '',_BATCH_DONE,''; $this->pagefoot(); } function batchMoveSelectDestination($type, $ids) { global $manager; $this->pagehead(); ?>

addTicketHidden(); // insert selected item numbers $idx = 0; foreach ($ids as $id) echo ''; // show blog/category selection list $this->selectBlogCategory('destcatid'); ?>
pagefoot(); exit; } function batchMoveCategorySelectDestination($type, $ids) { global $manager; $this->pagehead(); ?>

addTicketHidden(); // insert selected item numbers $idx = 0; foreach ($ids as $id) echo ''; // show blog/category selection list $this->selectBlog('destblogid'); ?>
pagefoot(); exit; } function batchAskDeleteConfirmation($type, $ids) { global $manager; $this->pagehead(); ?>

addTicketHidden() ?> '; // add hidden vars for team & comment if ($type == 'team') { echo ''; } if ($type == 'comment') { echo ''; } ?>
pagefoot(); exit; } /** * Inserts a HTML select element with choices for all categories to which the current * member has access */ function selectBlogCategory($name, $selected = 0, $tabindex = 0, $showNewCat = 0, $iForcedBlogInclude = -1) { ADMIN::selectBlog($name, 'category', $selected, $tabindex, $showNewCat, $iForcedBlogInclude); } /** * Inserts a HTML select element with choices for all blogs to which the user has access * mode = 'blog' => shows blognames and values are blogids * mode = 'category' => show category names and values are catids * * @param $iForcedBlogInclude * ID of a blog that always needs to be included, without checking if the member is on the blog team (-1 = none) */ function selectBlog($name, $mode='blog', $selected = 0, $tabindex = 0, $showNewCat = 0, $iForcedBlogInclude = -1) { global $member, $CONF; // 0. get IDs of blogs to which member can post items (+ forced blog) $aBlogIds = array(); if ($iForcedBlogInclude != -1) $aBlogIds[] = intval($iForcedBlogInclude); if (($member->isAdmin()) && ($CONF['ShowAllBlogs'])) $queryBlogs = 'SELECT bnumber FROM '.sql_table('blog').' ORDER BY bname'; else $queryBlogs = 'SELECT bnumber FROM '.sql_table('blog').', '.sql_table('team').' WHERE tblog=bnumber and tmember=' . $member->getID(); $rblogids = sql_query($queryBlogs); while ($o = mysql_fetch_object($rblogids)) if ($o->bnumber != $iForcedBlogInclude) $aBlogIds[] = intval($o->bnumber); if (count($aBlogIds) == 0) return; echo ''; } function action_browseownitems() { global $member; $this->pagehead(); echo '

(',_BACKHOME,')

'; echo '

' . _ITEMLIST_YOUR. '

'; // start index if (postVar('start')) $start = postVar('start'); else $start = 0; // amount of items to show if (postVar('amount')) $amount = postVar('amount'); else $amount = 10; $search = postVar('search'); // search through items $query = 'SELECT bshortname, cname, mname, ititle, ibody, idraft, inumber, itime' . ' FROM '.sql_table('item').', '.sql_table('blog') . ', '.sql_table('member') . ', '.sql_table('category') . ' WHERE iauthor='. $member->getID() .' and iauthor=mnumber and iblog=bnumber and icat=catid'; if ($search) $query .= ' and ((ititle LIKE "%' . addslashes($search) . '%") or (ibody LIKE "%' . addslashes($search) . '%") or (imore LIKE "%' . addslashes($search) . '%"))'; $query .= ' ORDER BY itime DESC' . " LIMIT $start,$amount"; $template['content'] = 'itemlist'; $template['now'] = time(); $navList =& new NAVLIST('browseownitems', $start, $amount, 0, 1000, $blogid, $search, 0); $navList->showBatchList('item',$query,'table',$template); $this->pagefoot(); } /** * Show all the comments for a given item */ function action_itemcommentlist($itemid = '') { global $member; if ($itemid == '') $itemid = intRequestVar('itemid'); // only allow if user is allowed to alter item $member->canAlterItem($itemid) or $this->disallow(); $blogid = getBlogIdFromItemId($itemid); $this->pagehead(); // start index if (postVar('start')) $start = postVar('start'); else $start = 0; // amount of items to show if (postVar('amount')) $amount = postVar('amount'); else $amount = 10; $search = postVar('search'); echo '

(',_BACKTOOVERVIEW,')

'; echo '

',_COMMENTS,'

'; $query = 'SELECT cbody, cuser, cmail, mname, ctime, chost, cnumber, cip, citem FROM '.sql_table('comment').' LEFT OUTER JOIN '.sql_table('member').' ON mnumber=cmember WHERE citem=' . $itemid; if ($search) $query .= ' and cbody LIKE "%' . addslashes($search) . '%"'; $query .= ' ORDER BY ctime ASC' . " LIMIT $start,$amount"; $template['content'] = 'commentlist'; $template['canAddBan'] = $member->blogAdminRights(getBlogIDFromItemID($itemid)); $navList =& new NAVLIST('itemcommentlist', $start, $amount, 0, 1000, 0, $search, $itemid); $navList->showBatchList('comment',$query,'table',$template,_NOCOMMENTS); $this->pagefoot(); } /** * Browse own comments */ function action_browseowncomments() { global $member; // start index if (postVar('start')) $start = postVar('start'); else $start = 0; // amount of items to show if (postVar('amount')) $amount = postVar('amount'); else $amount = 10; $search = postVar('search'); $query = 'SELECT cbody, cuser, cmail, mname, ctime, chost, cnumber, cip, citem FROM '.sql_table('comment').' LEFT OUTER JOIN '.sql_table('member').' ON mnumber=cmember WHERE cmember=' . $member->getID(); if ($search) $query .= ' and cbody LIKE "%' . addslashes($search) . '%"'; $query .= ' ORDER BY ctime DESC' . " LIMIT $start,$amount"; $this->pagehead(); echo '

(',_BACKHOME,')

'; echo '

', _COMMENTS_YOUR ,'

'; $template['content'] = 'commentlist'; $template['canAddBan'] = 0; // doesn't make sense to allow banning yourself $navList =& new NAVLIST('browseowncomments', $start, $amount, 0, 1000, 0, $search, 0); $navList->showBatchList('comment',$query,'table',$template,_NOCOMMENTS_YOUR); $this->pagefoot(); } /** * Browse all comments for a weblog */ function action_blogcommentlist($blogid = '') { global $member, $manager; if ($blogid == '') $blogid = intRequestVar('blogid'); else $blogid = intval($blogid); $member->teamRights($blogid) or $member->isAdmin() or $this->disallow(); // start index if (postVar('start')) $start = postVar('start'); else $start = 0; // amount of items to show if (postVar('amount')) $amount = postVar('amount'); else $amount = 10; $search = postVar('search'); // search through comments $query = 'SELECT cbody, cuser, cmail, mname, ctime, chost, cnumber, cip, citem FROM '.sql_table('comment').' LEFT OUTER JOIN '.sql_table('member').' ON mnumber=cmember WHERE cblog=' . intval($blogid); if ($search != '') $query .= ' and cbody LIKE "%' . addslashes($search) . '%"'; $query .= ' ORDER BY ctime DESC' . " LIMIT $start,$amount"; $blog =& $manager->getBlog($blogid); $this->pagehead(); echo '

(',_BACKHOME,')

'; echo '

', _COMMENTS_BLOG , ' ' , $this->bloglink($blog), '

'; $template['content'] = 'commentlist'; $template['canAddBan'] = $member->blogAdminRights($blogid); $navList =& new NAVLIST('blogcommentlist', $start, $amount, 0, 1000, $blogid, $search, 0); $navList->showBatchList('comment',$query,'table',$template, _NOCOMMENTS_BLOG); $this->pagefoot(); } /** * Provide a page to item a new item to the given blog */ function action_createitem() { global $member, $manager; $blogid = intRequestVar('blogid'); // check if allowed $member->teamRights($blogid) or $this->disallow(); $memberid = $member->getID(); $blog =& $manager->getBlog($blogid); $this->pagehead(); // generate the add-item form $formfactory =& new PAGEFACTORY($blogid); $formfactory->createAddForm('admin'); $this->pagefoot(); } function action_itemedit() { global $member, $manager; $itemid = intRequestVar('itemid'); // only allow if user is allowed to alter item $member->canAlterItem($itemid) or $this->disallow(); $item =& $manager->getItem($itemid,1,1); $blog =& $manager->getBlog(getBlogIDFromItemID($itemid)); $manager->notify('PrepareItemForEdit', array('item' => &$item)); if ($blog->convertBreaks()) { $item['body'] = removeBreaks($item['body']); $item['more'] = removeBreaks($item['more']); } // form to edit blog items $this->pagehead(); $formfactory =& new PAGEFACTORY($blog->getID()); $formfactory->createEditForm('admin',$item); $this->pagefoot(); } function action_itemupdate() { global $member, $manager, $CONF; $itemid = intRequestVar('itemid'); $catid = postVar('catid'); // only allow if user is allowed to alter item $member->canUpdateItem($itemid, $catid) or $this->disallow(); $actiontype = postVar('actiontype'); // delete actions are handled by itemdelete (which has confirmation) if ($actiontype == 'delete') { $this->action_itemdelete(); return; } $body = postVar('body'); $title = postVar('title'); $more = postVar('more'); $closed = intPostVar('closed'); // default action = add now if (!$actiontype) $actiontype='addnow'; // create new category if needed if (strstr($catid,'newcat')) { // get blogid list($blogid) = sscanf($catid,"newcat-%d"); // create $blog =& $manager->getBlog($blogid); $catid = $blog->createNewCategory(); // show error when sth goes wrong if (!$catid) $this->doError(_ERROR_CATCREATEFAIL); } /* set some variables based on actiontype actiontypes: draft items -> addnow, addfuture, adddraft, delete non-draft items -> edit, changedate, delete variables set: $timestamp: set to a nonzero value for future dates or date changes $wasdraft: set to 1 when the item used to be a draft item $publish: set to 1 when the edited item is not a draft */ switch ($actiontype) { case 'adddraft': $publish = 0; $wasdraft = 1; $timestamp = 0; break; case 'addfuture': $wasdraft = 1; $publish = 1; $timestamp = mktime(postVar('hour'), postVar('minutes'), 0, postVar('month'), postVar('day'), postVar('year')); break; case 'addnow': $wasdraft = 1; $publish = 1; $timestamp = 0; break; case 'changedate': $timestamp = mktime(postVar('hour'), postVar('minutes'), 0, postVar('month'), postVar('day'), postVar('year')); $publish = 1; $wasdraft = 0; break; case 'edit': default: $publish = 1; $wasdraft = 0; $timestamp = 0; } // edit the item for real ITEM::update($itemid, $catid, $title, $body, $more, $closed, $wasdraft, $publish, $timestamp); $blogid = getBlogIDFromItemID($itemid); $blog =& $manager->getBlog($blogid); if (!$closed && $publish && $wasdraft && $blog->pingUserland()) { $this->action_sendping($blogid); return; } // show category edit window when we created a new category // ($catid will then be a new category ID, while postVar('catid') will be 'newcat-x') if ($catid != intPostVar('catid')) { $this->action_categoryedit( $catid, $blog->getID(), $CONF['AdminURL'] . 'index.php?action=itemlist&blogid=' . getBlogIDFromItemID($itemid) ); } else { // TODO: set start item correctly for itemlist $this->action_itemlist(getBlogIDFromItemID($itemid)); } } function action_itemdelete() { global $member, $manager; $itemid = intRequestVar('itemid'); // only allow if user is allowed to alter item $member->canAlterItem($itemid) or $this->disallow(); if (!$manager->existsItem($itemid,1,1)) $this->error(_ERROR_NOSUCHITEM); $item =& $manager->getItem($itemid,1,1); $title = htmlspecialchars(strip_tags($item['title'])); $body = strip_tags($item['body']); $body = htmlspecialchars(shorten($body,300,'...')); $this->pagehead(); ?>

""
addTicketHidden() ?>
pagefoot(); } function action_itemdeleteconfirm() { global $member; $itemid = intRequestVar('itemid'); // only allow if user is allowed to alter item $member->canAlterItem($itemid) or $this->disallow(); // get blogid first $blogid = getBlogIdFromItemId($itemid); // delete item (note: some checks will be performed twice) $this->deleteOneItem($itemid); $this->action_itemlist($blogid); } // deletes one item and returns error if something goes wrong function deleteOneItem($itemid) { global $member, $manager; // only allow if user is allowed to alter item (also checks if itemid exists) if (!$member->canAlterItem($itemid)) return _ERROR_DISALLOWED; $manager->loadClass('ITEM'); ITEM::delete($itemid); } function action_itemmove() { global $member, $manager; $itemid = intRequestVar('itemid'); // only allow if user is allowed to alter item $member->canAlterItem($itemid) or $this->disallow(); $item =& $manager->getItem($itemid,1,1); $this->pagehead(); ?>

addTicketHidden(); $this->selectBlogCategory('catid',$item['catid'],10,1); ?>
pagefoot(); } function action_itemmoveto() { global $member, $manager; $itemid = intRequestVar('itemid'); $catid = requestVar('catid'); // create new category if needed if (strstr($catid,'newcat')) { // get blogid list($blogid) = sscanf($catid,'newcat-%d'); // create $blog =& $manager->getBlog($blogid); $catid = $blog->createNewCategory(); // show error when sth goes wrong if (!$catid) $this->doError(_ERROR_CATCREATEFAIL); } // only allow if user is allowed to alter item $member->canUpdateItem($itemid, $catid) or $this->disallow(); ITEM::move($itemid, $catid); if ($catid != intRequestVar('catid')) $this->action_categoryedit($catid, $blog->getID()); else $this->action_itemlist(getBlogIDFromCatID($catid)); } /** * Moves one item to a given category (category existance should be checked by caller) * errors are returned */ function moveOneItem($itemid, $destCatid) { global $member; // only allow if user is allowed to move item if (!$member->canUpdateItem($itemid, $destCatid)) return _ERROR_DISALLOWED; ITEM::move($itemid, $destCatid); } /** * Adds a item to the chosen blog */ function action_additem() { global $member, $manager, $CONF; $manager->loadClass('ITEM'); $result = ITEM::createFromRequest(); if ($result['status'] == 'error') $this->error($result['message']); $blogid = getBlogIDFromItemID($result['itemid']); $blog =& $manager->getBlog($blogid); $pingUrl = $manager->addTicketToUrl($CONF['AdminURL'] . 'index.php?action=sendping&blogid=' . intval($blogid)); if ($result['status'] == 'newcategory') $this->action_categoryedit( $result['catid'], $blogid, $blog->pingUserland() ? $pingUrl : '' ); elseif ((postVar('actiontype') == 'addnow') && $blog->pingUserland()) $this->action_sendping($blogid); else $this->action_itemlist($blogid); } /** * Shows a window that says we're about to ping weblogs.com. * immediately refresh to the real pinging page, which will * show an error, or redirect to the blog. * * @param $blogid ID of blog for which ping needs to be sent out */ function action_sendping($blogid = -1) { global $member, $manager; if ($blogid == -1) $blogid = intRequestVar('blogid'); $member->isLoggedIn() or $this->disallow(); $rawPingUrl = $manager->addTicketToUrl('index.php?action=rawping&blogid=' . intval($blogid)); $this->pagehead(''); ?>

Site Updated, Now pinging weblogs.com

Pinging weblogs.com! This can a while...
When the ping is complete (and successfull), your weblog will show up in the weblogs.com updates list.

If you aren't automatically passed through, try again

pagefoot(); } // ping to Weblogs.com // sends the real ping (can take up to 10 seconds!) function action_rawping() { global $manager; // TODO: checks? $blogid = intRequestVar('blogid'); $blog =& $manager->getBlog($blogid); $result = $blog->sendUserlandPing(); $this->pagehead(); ?>

Ping Results

The following message was returned by weblogs.com:

pagefoot(); } /** * Allows to edit previously made comments */ function action_commentedit() { global $member, $manager; $commentid = intRequestVar('commentid'); $member->canAlterComment($commentid) or $this->disallow(); $comment = COMMENT::getComment($commentid); $manager->notify('PrepareCommentForEdit',array('comment' => &$comment)); // change
to \n $comment['body'] = str_replace('
','',$comment['body']); $comment['body'] = eregi_replace("[^<]*","\\1",$comment['body']); $this->pagehead(); ?>

addTicketHidden(); ?>
pagefoot(); } function action_commentupdate() { global $member, $manager; $commentid = intRequestVar('commentid'); $member->canAlterComment($commentid) or $this->disallow(); $body = postVar('body'); // intercept words that are too long if (eregi("[a-zA-Z0-9|\.,;:!\?=\/\\]{90,90}",$body) != false) $this->error(_ERROR_COMMENT_LONGWORD); // check length if (strlen($body)<3) $this->error(_ERROR_COMMENT_NOCOMMENT); if (strlen($body)>5000) $this->error(_ERROR_COMMENT_TOOLONG); // prepare body $body = COMMENT::prepareBody($body); // call plugins $manager->notify('PreUpdateComment',array('body' => &$body)); $query = 'UPDATE '.sql_table('comment') . " SET cbody='" .addslashes($body). "'" . " WHERE cnumber=" . $commentid; sql_query($query); // get itemid $res = sql_query('SELECT citem FROM '.sql_table('comment').' WHERE cnumber=' . $commentid); $o = mysql_fetch_object($res); $itemid = $o->citem; if ($member->canAlterItem($itemid)) $this->action_itemcommentlist($itemid); else $this->action_browseowncomments(); } function action_commentdelete() { global $member, $manager; $commentid = intRequestVar('commentid'); $member->canAlterComment($commentid) or $this->disallow(); $comment = COMMENT::getComment($commentid); $body = strip_tags($comment['body']); $body = htmlspecialchars(shorten($body, 300, '...')); if ($comment['member']) $author = $comment['member']; else $author = $comment['user']; $this->pagehead(); ?>

:
:
addTicketHidden() ?>
pagefoot(); } function action_commentdeleteconfirm() { global $member; $commentid = intRequestVar('commentid'); // get item id first $res = sql_query('SELECT citem FROM '.sql_table('comment') .' WHERE cnumber=' . $commentid); $o = mysql_fetch_object($res); $itemid = $o->citem; $error = $this->deleteOneComment($commentid); if ($error) $this->doError($error); if ($member->canAlterItem($itemid)) $this->action_itemcommentlist($itemid); else $this->action_browseowncomments(); } function deleteOneComment($commentid) { global $member, $manager; $commentid = intval($commentid); if (!$member->canAlterComment($commentid)) return _ERROR_DISALLOWED; $manager->notify('PreDeleteComment', array('commentid' => $commentid)); // delete the comments associated with the item $query = 'DELETE FROM '.sql_table('comment').' WHERE cnumber=' . $commentid; sql_query($query); $manager->notify('PostDeleteComment', array('commentid' => $commentid)); return ''; } /** * Usermanagement main */ function action_usermanagement() { global $member, $manager; // check if allowed $member->isAdmin() or $this->disallow(); $this->pagehead(); echo '

(',_BACKTOMANAGE,')

'; echo '

' . _MEMBERS_TITLE .'

'; echo '

' . _MEMBERS_CURRENT .'

'; // show list of members with actions $query = 'SELECT *' . ' FROM '.sql_table('member'); $template['content'] = 'memberlist'; $template['tabindex'] = 10; $batch =& new BATCH('member'); $batch->showlist($query,'table',$template); echo '

' . _MEMBERS_NEW .'

'; ?>
addTicketHidden() ?>

(This is the name used to logon)
input_yesno('admin',0,10060); ?>
input_yesno('canlogin',1,10070); ?>
pagefoot(); } /** * Edit member settings */ function action_memberedit() { $this->action_editmembersettings(intRequestVar('memberid')); } function action_editmembersettings($memberid = '') { global $member, $manager, $CONF; if ($memberid == '') $memberid = $member->getID(); // check if allowed ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow(); $extrahead = ''; $this->pagehead($extrahead); // show message to go back to member overview (only for admins) if ($member->isAdmin()) echo '(' ._MEMBERS_BACKTOOVERVIEW. ')'; else echo '(' ._BACKHOME. ')'; echo '

' . _MEMBERS_EDIT . '

'; $mem = MEMBER::createFromID($memberid); ?>
addTicketHidden() ?> isAdmin()) { ?> isAdmin()) { ?> _insertPluginOptions('member',$memberid); ?>

isAdmin()) { ?> getDisplayName()); } ?>

input_yesno('admin',$mem->isAdmin(),60); ?>
input_yesno('canlogin',$mem->canLogin(),70); ?>
',_PLUGINS_EXTRA,''; $manager->notify( 'MemberSettingsFormExtras', array( 'member' => &$mem ) ); $this->pagefoot(); } function action_changemembersettings() { global $member, $CONF, $manager; $memberid = intRequestVar('memberid'); // check if allowed ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow(); $name = trim(postVar('name')); $realname = trim(postVar('realname')); $password = postVar('password'); $repeatpassword = postVar('repeatpassword'); $email = postVar('email'); $url = postVar('url'); // Sometimes user didn't prefix the URL with http://, this cause a malformed URL. Let's fix it. if (!eregi("^https?://", $url)) $url = "http://".$url; $admin = postVar('admin'); $canlogin = postVar('canlogin'); $notes = postVar('notes'); $deflang = postVar('deflang'); $mem = MEMBER::createFromID($memberid); if ($CONF['AllowLoginEdit'] || $member->isAdmin()) { if (!isValidDisplayName($name)) $this->error(_ERROR_BADNAME); if (($name != $mem->getDisplayName()) && MEMBER::exists($name)) $this->error(_ERROR_NICKNAMEINUSE); if ($password != $repeatpassword) $this->error(_ERROR_PASSWORDMISMATCH); if ($password && (strlen($password) < 6)) $this->error(_ERROR_PASSWORDTOOSHORT); } if (!isValidMailAddress($email)) $this->error(_ERROR_BADMAILADDRESS); if (!$realname) $this->error(_ERROR_REALNAMEMISSING); if (($deflang != '') && (!checkLanguage($deflang))) $this->error(_ERROR_NOSUCHLANGUAGE); // check if there will remain at least one site member with both the logon and admin rights // (check occurs when taking away one of these rights from such a member) if ( (!$admin && $mem->isAdmin() && $mem->canLogin()) || (!$canlogin && $mem->isAdmin() && $mem->canLogin()) ) { $r = sql_query('SELECT * FROM '.sql_table('member').' WHERE madmin=1 and mcanlogin=1'); if (mysql_num_rows($r) < 2) $this->error(_ERROR_ATLEASTONEADMIN); } if ($CONF['AllowLoginEdit'] || $member->isAdmin()) { $mem->setDisplayName($name); if ($password) $mem->setPassword($password); } if ($newpass) $mem->setPassword($password); $oldEmail = $mem->getEmail(); $mem->setRealName($realname); $mem->setEmail($email); $mem->setURL($url); $mem->setNotes($notes); $mem->setLanguage($deflang); // only allow super-admins to make changes to the admin status if ($member->isAdmin()) { $mem->setAdmin($admin); $mem->setCanLogin($canlogin); } $mem->write(); // if email changed, generate new password if ($oldEmail != $mem->getEmail()) { $mem->sendActivationLink('addresschange', $oldEmail); // logout member $mem->newCookieKey(); $member->logout(); $this->action_login(_MSG_ACTIVATION_SENT, 0); return; } // store plugin options $aOptions = requestArray('plugoption'); NucleusPlugin::_applyPluginOptions($aOptions); $manager->notify('PostPluginOptionsUpdate',array('context' => 'member', 'memberid' => $memberid, 'member' => &$mem)); if ( ( $mem->getID() == $member->getID() ) && ( $newpass || ( $mem->getDisplayName() != $member->getDisplayName() ) ) ) { $mem->newCookieKey(); $member->logout(); $this->action_login(_MSG_LOGINAGAIN, 0); } else { $this->action_overview(_MSG_SETTINGSCHANGED); } } function action_memberadd() { global $member; // check if allowed $member->isAdmin() or $this->disallow(); if (postVar('password') != postVar('repeatpassword')) $this->error(_ERROR_PASSWORDMISMATCH); if (strlen(postVar('password')) < 6) $this->error(_ERROR_PASSWORDTOOSHORT); $res = MEMBER::create(postVar('name'), postVar('realname'), postVar('password'), postVar('email'), postVar('url'), postVar('admin'), postVar('canlogin'), postVar('notes')); if ($res != 1) $this->error($res); $this->action_usermanagement(); } /** * Account activation * * @author dekarma */ function action_activate() { $key = getVar('key'); $this->_showActivationPage($key); } function _showActivationPage($key, $message = '') { global $manager; // clean up old activation keys MEMBER::cleanupActivationTable(); // get activation info $info = MEMBER::getActivationInfo($key); if (!$info) $this->error(_ERROR_ACTIVATE); $mem = MEMBER::createFromId($info->vmember); if (!$mem) $this->error(_ERROR_ACTIVATE); $text = ''; $title = ''; $bNeedsPasswordChange = true; switch ($info->vtype) { case 'forgot': $title = _ACTIVATE_FORGOT_TITLE; $text = _ACTIVATE_FORGOT_TEXT; break; case 'register': $title = _ACTIVATE_REGISTER_TITLE; $text = _ACTIVATE_REGISTER_TEXT; break; case 'addresschange': $title = _ACTIVATE_CHANGE_TITLE; $text = _ACTIVATE_CHANGE_TEXT; $bNeedsPasswordChange = false; MEMBER::activate($key); break; } $aVars = array( 'memberName' => htmlspecialchars($mem->getDisplayName()) ); $title = TEMPLATE::fill($title, $aVars); $text = TEMPLATE::fill($text, $aVars); $this->pagehead(); echo '

' , $title, '

'; echo '

' , $text, '

'; if ($message != '') { echo '

',$message,'

'; } if ($bNeedsPasswordChange) { ?>
addTicketHidden() ?> notify('FormExtra', array('type' => 'activation', 'member' => $mem)); ?>
pagefoot(); } /** * Account activation - set password part * * @author dekarma */ function action_activatesetpwd() { $key = postVar('key'); // clean up old activation keys MEMBER::cleanupActivationTable(); // get activation info $info = MEMBER::getActivationInfo($key); if (!$info || ($info->type == 'addresschange')) return $this->_showActivationPage($key, _ERROR_ACTIVATE); $mem = MEMBER::createFromId($info->vmember); if (!$mem) return $this->_showActivationPage($key, _ERROR_ACTIVATE); $password = postVar('password'); $repeatpassword = postVar('repeatpassword'); if ($password != $repeatpassword) return $this->_showActivationPage($key, _ERROR_PASSWORDMISMATCH); if ($password && (strlen($password) < 6)) return $this->_showActivationPage($key, _ERROR_PASSWORDTOOSHORT); $error = ''; global $manager; $manager->notify('ValidateForm', array('type' => 'activation', 'member' => $mem, 'error' => &$error)); if ($error != '') return $this->_showActivationPage($key, $error); // set password $mem->setPassword($password); $mem->write(); // do the activation MEMBER::activate($key); $this->pagehead(); echo '

',_ACTIVATE_SUCCESS_TITLE,'

'; echo '

',_ACTIVATE_SUCCESS_TEXT,'

'; $this->pagefoot(); } /** * Manage team */ function action_manageteam() { global $member, $manager; $blogid = intRequestVar('blogid'); // check if allowed $member->blogAdminRights($blogid) or $this->disallow(); $this->pagehead(); echo "

(",_BACK_TO_BLOGSETTINGS,")

"; echo '

' . _TEAM_TITLE . getBlogNameFromID($blogid) . '

'; echo '

' . _TEAM_CURRENT . '

'; $query = 'SELECT tblog, tmember, mname, mrealname, memail, tadmin' . ' FROM '.sql_table('member').', '.sql_table('team') . ' WHERE tmember=mnumber and tblog=' . $blogid; $template['content'] = 'teamlist'; $template['tabindex'] = 10; $batch =& new BATCH('team'); $batch->showlist($query, 'table', $template); ?>

addTicketHidden() ?>
input_yesno('admin',0,10020); ?>
pagefoot(); } /** * Add member tot tram */ function action_teamaddmember() { global $member, $manager; $memberid = intPostVar('memberid'); $blogid = intPostVar('blogid'); $admin = intPostVar('admin'); // check if allowed $member->blogAdminRights($blogid) or $this->disallow(); $blog =& $manager->getBlog($blogid); if (!$blog->addTeamMember($memberid, $admin)) $this->error(_ERROR_ALREADYONTEAM); $this->action_manageteam(); } function action_teamdelete() { global $member, $manager; $memberid = intRequestVar('memberid'); $blogid = intRequestVar('blogid'); // check if allowed $member->blogAdminRights($blogid) or $this->disallow(); $teammem = MEMBER::createFromID($memberid); $blog =& $manager->getBlog($blogid); $this->pagehead(); ?>

getDisplayName() ?>getName())) ?>

addTicketHidden() ?>
pagefoot(); } function action_teamdeleteconfirm() { global $member; $memberid = intRequestVar('memberid'); $blogid = intRequestVar('blogid'); $error = $this->deleteOneTeamMember($blogid, $memberid); if ($error) $this->error($error); $this->action_manageteam(); } function deleteOneTeamMember($blogid, $memberid) { global $member, $manager; $blogid = intval($blogid); $memberid = intval($memberid); // check if allowed if (!$member->blogAdminRights($blogid)) return _ERROR_DISALLOWED; // check if: - there remains at least one blog admin // - (there remains at least one team member) $tmem = MEMBER::createFromID($memberid); $manager->notify('PreDeleteTeamMember', array('member' => &$mem, 'blogid' => $blogid)); if ($tmem->isBlogAdmin($blogid)) { // check if there are more blog members left and at least one admin // (check for at least two admins before deletion) $query = 'SELECT * FROM '.sql_table('team') . ' WHERE tblog='.$blogid.' and tadmin=1'; $r = sql_query($query); if (mysql_num_rows($r) < 2) return _ERROR_ATLEASTONEBLOGADMIN; } $query = 'DELETE FROM '.sql_table('team')." WHERE tblog=$blogid and tmember=$memberid"; sql_query($query); $manager->notify('PostDeleteTeamMember', array('member' => &$mem, 'blogid' => $blogid)); return ''; } function action_teamchangeadmin() { global $member; $blogid = intRequestVar('blogid'); $memberid = intRequestVar('memberid'); // check if allowed $member->blogAdminRights($blogid) or $this->disallow(); $mem = MEMBER::createFromID($memberid); // don't allow when there is only one admin at this moment if ($mem->isBlogAdmin($blogid)) { $r = sql_query('SELECT * FROM '.sql_table('team') . " WHERE tblog=$blogid and tadmin=1"); if (mysql_num_rows($r) == 1) $this->error(_ERROR_ATLEASTONEBLOGADMIN); } if ($mem->isBlogAdmin($blogid)) $newval = 0; else $newval = 1; $query = 'UPDATE '.sql_table('team') ." SET tadmin=$newval WHERE tblog=$blogid and tmember=$memberid"; sql_query($query); // only show manageteam if member did not change its own admin privileges if ($member->isBlogAdmin($blogid)) $this->action_manageteam(); else $this->action_overview(_MSG_ADMINCHANGED); } function action_blogsettings() { global $member, $manager; $blogid = intRequestVar('blogid'); // check if allowed $member->blogAdminRights($blogid) or $this->disallow(); $blog =& $manager->getBlog($blogid); $extrahead = ''; $this->pagehead($extrahead); echo '

(',_BACKHOME,')

'; ?>

: 'bloglink($blog)?>'

Members currently on your team: mname) . ' (' . htmlspecialchars($o->mrealname). ')'); echo implode(',', $aMemberNames); ?>

addTicketHidden() ?> _insertPluginOptions('blog',$blogid); ?>
getDefaultSkin(); $template['tabindex'] = 50; showlist($query,'select',$template); ?>
input_yesno('convertbreaks',$blog->convertBreaks(),55); ?>
input_yesno('allowpastposting',$blog->allowPastPosting(),57); ?>
input_yesno('comments',$blog->commentsEnabled(),60); ?>
input_yesno('public',$blog->isPublic(),70); ?>
notifyOnComment()) echo "checked='checked'" ?> />
notifyOnVote()) echo "checked='checked'" ?> />
notifyOnNewItem()) echo "checked='checked'" ?> />
input_yesno('pinguserland',$blog->pingUserland(),85); ?>
getID(); $template['name'] = 'defcat'; $template['selected'] = $blog->getDefaultCategory(); $template['tabindex'] = 110; showlist($query,'select',$template); ?>


getCorrectTime()); ?>
input_yesno('searchable',$blog->getSearchable(),122); ?>

getID().' ORDER BY cname'; $template['content'] = 'categorylist'; $template['tabindex'] = 200; $batch =& new BATCH('category'); $batch->showlist($query,'table',$template); ?>
addTicketHidden() ?>
',_PLUGINS_EXTRA,''; $manager->notify( 'BlogSettingsFormExtras', array( 'blog' => &$blog ) ); $this->pagefoot(); } function action_categorynew() { global $member, $manager; $blogid = intRequestVar('blogid'); $member->blogAdminRights($blogid) or $this->disallow(); $cname = postVar('cname'); $cdesc = postVar('cdesc'); if (!isValidCategoryName($cname)) $this->error(_ERROR_BADCATEGORYNAME); $query = 'SELECT * FROM '.sql_table('category') . ' WHERE cname=\'' . addslashes($cname).'\' and cblog=' . intval($blogid); $res = sql_query($query); if (mysql_num_rows($res) > 0) $this->error(_ERROR_DUPCATEGORYNAME); $blog =& $manager->getBlog($blogid); $newCatID = $blog->createNewCategory($cname, $cdesc); $this->action_blogsettings(); } function action_categoryedit($catid = '', $blogid = '', $desturl = '') { global $member, $manager; if ($blogid == '') $blogid = intGetVar('blogid'); else $blogid = intval($blogid); if ($catid == '') $catid = intGetVar('catid'); else $catid = intval($catid); $member->blogAdminRights($blogid) or $this->disallow(); $res = sql_query('SELECT * FROM '.sql_table('category')." WHERE cblog=$blogid AND catid=$catid"); $obj = mysql_fetch_object($res); $cname = $obj->cname; $cdesc = $obj->cdesc; $extrahead = ''; $this->pagehead($extrahead); ?>

''

addTicketHidden(); ?> _insertPluginOptions('category',$catid); ?>
pagefoot(); } function action_categoryupdate() { global $member, $manager; $blogid = intPostVar('blogid'); $catid = intPostVar('catid'); $cname = postVar('cname'); $cdesc = postVar('cdesc'); $desturl = postVar('desturl'); $member->blogAdminRights($blogid) or $this->disallow(); if (!isValidCategoryName($cname)) $this->error(_ERROR_BADCATEGORYNAME); $query = 'SELECT * FROM '.sql_table('category').' WHERE cname=\'' . addslashes($cname).'\' and cblog=' . intval($blogid) . " and not(catid=$catid)"; $res = sql_query($query); if (mysql_num_rows($res) > 0) $this->error(_ERROR_DUPCATEGORYNAME); $query = 'UPDATE '.sql_table('category').' SET' . " cname='" . addslashes($cname) . "'," . " cdesc='" . addslashes($cdesc) . "'" . " WHERE catid=" . $catid; sql_query($query); // store plugin options $aOptions = requestArray('plugoption'); NucleusPlugin::_applyPluginOptions($aOptions); $manager->notify('PostPluginOptionsUpdate',array('context' => 'category', 'catid' => $catid)); if ($desturl) { redirect($desturl); exit; } else { $this->action_blogsettings(); } } function action_categorydelete() { global $member, $manager; $blogid = intRequestVar('blogid'); $catid = intRequestVar('catid'); $member->blogAdminRights($blogid) or $this->disallow(); $blog =& $manager->getBlog($blogid); // check if the category is valid if (!$blog->isValidCategory($catid)) $this->error(_ERROR_NOSUCHCATEGORY); // don't allow deletion of default category if ($blog->getDefaultCategory() == $catid) $this->error(_ERROR_DELETEDEFCATEGORY); // check if catid is the only category left for blogid $query = 'SELECT catid FROM '.sql_table('category').' WHERE cblog=' . $blogid; $res = sql_query($query); if (mysql_num_rows($res) == 1) $this->error(_ERROR_DELETELASTCATEGORY); $this->pagehead(); ?>

getCategoryName($catid)?>
addTicketHidden() ?>
pagefoot(); } function action_categorydeleteconfirm() { global $member, $manager; $blogid = intRequestVar('blogid'); $catid = intRequestVar('catid'); $member->blogAdminRights($blogid) or $this->disallow(); $error = $this->deleteOneCategory($catid); if ($error) $this->error($error); $this->action_blogsettings(); } function deleteOneCategory($catid) { global $manager, $member; $catid = intval($catid); $manager->notify('PreDeleteCategory', array('catid' => $catid)); $blogid = getBlogIDFromCatID($catid); if (!$member->blogAdminRights($blogid)) return ERROR_DISALLOWED; // get blog $blog =& $manager->getBlog($blogid); // check if the category is valid if (!$blog || !$blog->isValidCategory($catid)) return _ERROR_NOSUCHCATEGORY; $destcatid = $blog->getDefaultCategory(); // don't allow deletion of default category if ($blog->getDefaultCategory() == $catid) return _ERROR_DELETEDEFCATEGORY; // check if catid is the only category left for blogid $query = 'SELECT catid FROM '.sql_table('category').' WHERE cblog=' . $blogid; $res = sql_query($query); if (mysql_num_rows($res) == 1) return _ERROR_DELETELASTCATEGORY; // change category for all items to the default category $query = 'UPDATE '.sql_table('item')." SET icat=$destcatid WHERE icat=$catid"; sql_query($query); // delete all associated plugin options NucleusPlugin::_deleteOptionValues('category', $catid); // delete category $query = 'DELETE FROM '.sql_table('category').' WHERE catid=' .$catid; sql_query($query); $manager->notify('PostDeleteCategory', array('catid' => $catid)); } function moveOneCategory($catid, $destblogid) { global $manager, $member; $catid = intval($catid); $destblogid = intval($destblogid); $blogid = getBlogIDFromCatID($catid); // mover should have admin rights on both blogs if (!$member->blogAdminRights($blogid)) return _ERROR_DISALLOWED; if (!$member->blogAdminRights($destblogid)) return _ERROR_DISALLOWED; // cannot move to self if ($blogid == $destblogid) return _ERROR_MOVETOSELF; // get blogs $blog =& $manager->getBlog($blogid); $destblog =& $manager->getBlog($destblogid); // check if the category is valid if (!$blog || !$blog->isValidCategory($catid)) return _ERROR_NOSUCHCATEGORY; // don't allow default category to be moved if ($blog->getDefaultCategory() == $catid) return _ERROR_MOVEDEFCATEGORY; $manager->notify( 'PreMoveCategory', array( 'catid' => &$catid, 'sourceblog' => &$blog, 'destblog' => &$destblog ) ); // update comments table (cblog) $query = 'SELECT inumber FROM '.sql_table('item').' WHERE icat='.$catid; $items = sql_query($query); while ($oItem = mysql_fetch_object($items)) { sql_query('UPDATE '.sql_table('comment').' SET cblog='.$destblogid.' WHERE citem='.$oItem->inumber); } // update items (iblog) $query = 'UPDATE '.sql_table('item').' SET iblog='.$destblogid.' WHERE icat='.$catid; sql_query($query); // move category $query = 'UPDATE '.sql_table('category').' SET cblog='.$destblogid.' WHERE catid='.$catid; sql_query($query); $manager->notify( 'PostMoveCategory', array( 'catid' => &$catid, 'sourceblog' => &$blog, 'destblog' => $destblog ) ); } function action_blogsettingsupdate() { global $member, $manager; $blogid = intRequestVar('blogid'); $member->blogAdminRights($blogid) or $this->disallow(); $blog =& $manager->getBlog($blogid); $notify = trim(postVar('notify')); $shortname = trim(postVar('shortname')); $updatefile = trim(postVar('update')); $notifyComment = intPostVar('notifyComment'); $notifyVote = intPostVar('notifyVote'); $notifyNewItem = intPostVar('notifyNewItem'); if ($notifyComment == 0) $notifyComment = 1; if ($notifyVote == 0) $notifyVote = 1; if ($notifyNewItem == 0) $notifyNewItem = 1; $notifyType = $notifyComment * $notifyVote * $notifyNewItem; if ($notify) { $not =& new NOTIFICATION($notify); if (!$not->validAddresses()) $this->error(_ERROR_BADNOTIFY); } if (!isValidShortName($shortname)) $this->error(_ERROR_BADSHORTBLOGNAME); if (($blog->getShortName() != $shortname) && $manager->existsBlog($shortname)) $this->error(_ERROR_DUPSHORTBLOGNAME); // check if update file is writable if ($updatefile && !is_writeable($updatefile)) $this->error(_ERROR_UPDATEFILE); $blog->setName(trim(postVar('name'))); $blog->setShortName($shortname); $blog->setNotifyAddress($notify); $blog->setNotifyType($notifyType); $blog->setMaxComments(postVar('maxcomments')); $blog->setCommentsEnabled(postVar('comments')); $blog->setTimeOffset(postVar('timeoffset')); $blog->setUpdateFile($updatefile); $blog->setURL(trim(postVar('url'))); $blog->setDefaultSkin(intPostVar('defskin')); $blog->setDescription(trim(postVar('desc'))); $blog->setPublic(postVar('public')); $blog->setPingUserland(postVar('pinguserland')); $blog->setConvertBreaks(intPostVar('convertbreaks')); $blog->setAllowPastPosting(intPostVar('allowpastposting')); $blog->setDefaultCategory(intPostVar('defcat')); $blog->setSearchable(intPostVar('searchable')); $blog->writeSettings(); // store plugin options $aOptions = requestArray('plugoption'); NucleusPlugin::_applyPluginOptions($aOptions); $manager->notify('PostPluginOptionsUpdate',array('context' => 'blog', 'blogid' => $blogid, 'blog' => &$blog)); $this->action_overview(_MSG_SETTINGSCHANGED); } function action_deleteblog() { global $member, $CONF, $manager; $blogid = intRequestVar('blogid'); $member->blogAdminRights($blogid) or $this->disallow(); // check if blog is default blog if ($CONF['DefaultBlog'] == $blogid) $this->error(_ERROR_DELDEFBLOG); $blog =& $manager->getBlog($blogid); $this->pagehead(); ?>

getName())?>
addTicketHidden() ?>
pagefoot(); } function action_deleteblogconfirm() { global $member, $CONF, $manager; $blogid = intRequestVar('blogid'); $manager->notify('PreDeleteBlog', array('blogid' => $blogid)); $member->blogAdminRights($blogid) or $this->disallow(); // check if blog is default blog if ($CONF['DefaultBlog'] == $blogid) $this->error(_ERROR_DELDEFBLOG); // delete all comments $query = 'DELETE FROM '.sql_table('comment').' WHERE cblog='.$blogid; sql_query($query); // delete all items $query = 'DELETE FROM '.sql_table('item').' WHERE iblog='.$blogid; sql_query($query); // delete all team members $query = 'DELETE FROM '.sql_table('team').' WHERE tblog='.$blogid; sql_query($query); // delete all bans $query = 'DELETE FROM '.sql_table('ban').' WHERE blogid='.$blogid; sql_query($query); // delete all categories $query = 'DELETE FROM '.sql_table('category').' WHERE cblog='.$blogid; sql_query($query); // delete all associated plugin options NucleusPlugin::_deleteOptionValues('blog', $blogid); // delete the blog itself $query = 'DELETE FROM '.sql_table('blog').' WHERE bnumber='.$blogid; sql_query($query); $manager->notify('PostDeleteBlog', array('blogid' => $blogid)); $this->action_overview(_DELETED_BLOG); } function action_memberdelete() { global $member, $manager; $memberid = intRequestVar('memberid'); ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow(); $mem = MEMBER::createFromID($memberid); $this->pagehead(); ?>

getDisplayName() ?>

Please note that media files will NOT be deleted. (At least not in this Nucleus version)

addTicketHidden() ?>
pagefoot(); } function action_memberdeleteconfirm() { global $member; $memberid = intRequestVar('memberid'); ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow(); $error = $this->deleteOneMember($memberid); if ($error) $this->error($error); if ($member->isAdmin()) $this->action_usermanagement(); else $this->action_overview(_DELETED_MEMBER); } // (static) function deleteOneMember($memberid) { global $manager; $memberid = intval($memberid); $mem = MEMBER::createFromID($memberid); if (!$mem->canBeDeleted()) return _ERROR_DELETEMEMBER; $manager->notify('PreDeleteMember', array('member' => &$mem)); $query = 'DELETE FROM '.sql_table('member').' WHERE mnumber='.$memberid; sql_query($query); $query = 'DELETE FROM '.sql_table('team').' WHERE tmember='.$memberid; sql_query($query); $query = 'DELETE FROM '.sql_table('activation').' WHERE vmember='.$memberid; sql_query($query); // delete all associated plugin options NucleusPlugin::_deleteOptionValues('member', $memberid); $manager->notify('PostDeleteMember', array('member' => &$mem)); return ''; } function action_createnewlog() { global $member, $CONF, $manager; // Only Super-Admins can do this $member->isAdmin() or $this->disallow(); $this->pagehead(); echo '

(',_BACKTOMANAGE,')

'; ?>

注意事項

作成にあたって、下記の注意事項 をまずお読み下さい

新しいweblogを作成した後に、このblogにアクセスするための方法を紹介しておきます。方法は2つあります:

  1. 簡単な方法: index.phpの複製を作り、新しいblogを表示するように変更を加えます。 この変更の詳細は、作成後に表示されます。
  2. 高度な方法: 現在のblogで使用しているスキンにotherblogというコードを使った記述を加えます。この方法では、同じページ内で複数のblogを展開することが可能となります。

Weblogの作成

addTicketHidden() ?>

pagefoot(); } function action_addnewlog() { global $member, $manager, $CONF; // Only Super-Admins can do this $member->isAdmin() or $this->disallow(); $bname = trim(postVar('name')); $bshortname = trim(postVar('shortname')); $btimeoffset = postVar('timeoffset'); $bdesc = trim(postVar('desc')); $bdefskin = postVar('defskin'); if (!isValidShortName($bshortname)) $this->error(_ERROR_BADSHORTBLOGNAME); if ($manager->existsBlog($bshortname)) $this->error(_ERROR_DUPSHORTBLOGNAME); $manager->notify( 'PreAddBlog', array( 'name' => &$bname, 'shortname' => &$bshortname, 'timeoffset' => &$btimeoffset, 'description' => &$bdescription, 'defaultskin' => &$bdefskin ) ); // add slashes for sql queries $bname = addslashes($bname); $bshortname = addslashes($bshortname); $btimeoffset = addslashes($btimeoffset); $bdesc = addslashes($bdesc); $bdefskin = addslashes($bdefskin); // create blog $query = 'INSERT INTO '.sql_table('blog')." (bname, bshortname, bdesc, btimeoffset, bdefskin) VALUES ('$bname', '$bshortname', '$bdesc', '$btimeoffset', '$bdefskin')"; sql_query($query); $blogid = mysql_insert_id(); $blog =& $manager->getBlog($blogid); // create new category sql_query('INSERT INTO '.sql_table('category')." (cblog, cname, cdesc) VALUES ($blogid, 'General','Items that do not fit in other categories')"); $catid = mysql_insert_id(); // set as default category $blog->setDefaultCategory($catid); $blog->writeSettings(); // create team member $memberid = $member->getID(); $query = 'INSERT INTO '.sql_table('team')." (tmember, tblog, tadmin) VALUES ($memberid, $blogid, 1)"; sql_query($query); $blog->additem($blog->getDefaultCategory(),'First Item','これはあなたのweblogにおける最初のアイテムです。自由に削除していただいてかまいません。','',$blogid, $memberid,$blog->getCorrectTime(),0,0,0); $manager->notify( 'PostAddBlog', array( 'blog' => &$blog ) ); $manager->notify( 'PostAddCategory', array( 'catid' => $catid ) ); $this->pagehead(); ?>

新しいweblogが作成されました

新しいweblog 「」が作成されました。続けて、これにアクセスするために以下のどちらかの手順に進んでください。

  1. 簡単な方法: 下のコードを貼付けた .php というファイルを作成する
  2. 高度な方法: 現在使用しているスキンに新しいweblogを展開させるための記述を加える

方法 1: .php というファイルを作成

.php というファイルを作成して、中身に以下のコードを貼り付ける:

<?php

$CONF['Self'] = '.php';

include('./config.php');

selectBlog('');
selector();

?>

すでにあるindex.phpと同じディレクトリにアップロードします。

新しいweblogの作成を完了するためには、下にこのファイルのURLを入力してください。 (すでに用意した値で合っているとは思いますが保証はしません):

addTicketHidden() ?>

方法 2: 現在使用しているスキンに新しいweblogを展開する記述を加える

新しいweblogの作成を完了するためには、下にURLを入力してください。 (大抵は既存blogと同じURL)

addTicketHidden() ?>
pagefoot(); } function action_addnewlog2() { global $member, $manager; $member->blogAdminRights($blogid) or $this->disallow(); $burl = requestVar('url'); $blogid = intRequestVar('blogid'); $blog =& $manager->getBlog($blogid); $blog->setURL(trim($burl)); $blog->writeSettings(); $this->action_overview(_MSG_NEWBLOG); } function action_skinieoverview() { global $member, $DIR_LIBS, $manager; $member->isAdmin() or $this->disallow(); // load skinie class include_once($DIR_LIBS . 'skinie.php'); $this->pagehead(); echo '

(',_BACKTOMANAGE,')

'; ?>

0) { ?>

addTicketHidden() ?>

addTicketHidden() ?>

addTicketHidden() ?>

sdnumber; echo ''; echo ''; echo ''; } echo ''; // show list of templates $res = sql_query('SELECT * FROM '.sql_table('template_desc')); while ($templateObj = mysql_fetch_object($res)) { $id = 'templateexp' . $templateObj->tdnumber; echo ''; echo ''; echo ''; } ?>
'; echo '',htmlspecialchars($skinObj->sddesc),'
',_SKINIE_EXPORT_TEMPLATES,'
'; echo '',htmlspecialchars($templateObj->tddesc),'
pagefoot(); } function action_skinieimport() { global $member, $DIR_LIBS, $DIR_SKINS, $manager; $member->isAdmin() or $this->disallow(); // load skinie class include_once($DIR_LIBS . 'skinie.php'); $skinFileRaw= postVar('skinfile'); $mode = postVar('mode'); $importer =& new SKINIMPORT(); // get full filename if ($mode == 'file') { $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml'; // backwards compatibilty (in v2.0, exports were saved as skindata.xml) if (!file_exists($skinFile)) $skinFile = $DIR_SKINS . $skinFileRaw . '/skindata.xml'; } else { $skinFile = $skinFileRaw; } // read only metadata $error = $importer->readFile($skinFile, 1); if ($error) $this->error($error); $this->pagehead(); echo '

(',_BACK,')

'; ?>

addTicketHidden() ?>
pagefoot(); } function action_skiniedoimport() { global $member, $DIR_LIBS, $DIR_SKINS; $member->isAdmin() or $this->disallow(); // load skinie class include_once($DIR_LIBS . 'skinie.php'); $skinFileRaw= postVar('skinfile'); $mode = postVar('mode'); $allowOverwrite = intPostVar('overwrite'); // get full filename if ($mode == 'file') { $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml'; // backwards compatibilty (in v2.0, exports were saved as skindata.xml) if (!file_exists($skinFile)) $skinFile = $DIR_SKINS . $skinFileRaw . '/skindata.xml'; } else { $skinFile = $skinFileRaw; } $importer =& new SKINIMPORT(); $error = $importer->readFile($skinFile); if ($error) $this->error($error); $error = $importer->writeToDatabase($allowOverwrite); if ($error) $this->error($error); $this->pagehead(); echo '

(',_BACKTOMANAGE,')

'; ?>

pagefoot(); } function action_skinieexport() { global $member, $DIR_LIBS; $member->isAdmin() or $this->disallow(); // load skinie class include_once($DIR_LIBS . 'skinie.php'); $aSkins = requestIntArray('skin'); $aTemplates = requestIntArray('template'); if (!is_array($aTemplates)) $aTemplates = array(); if (!is_array($aSkins)) $aSkins = array(); $skinList = array_keys($aSkins); $templateList = array_keys($aTemplates); $info = postVar('info'); $exporter =& new SKINEXPORT(); foreach ($skinList as $skinId) { $exporter->addSkin($skinId); } foreach ($templateList as $templateId) { $exporter->addTemplate($templateId); } $exporter->setInfo($info); $exporter->export(); } function action_templateoverview() { global $member, $manager; $member->isAdmin() or $this->disallow(); $this->pagehead(); echo '

(',_BACKTOMANAGE,')

'; echo '

' . _TEMPLATE_TITLE . '

'; echo '

' . _TEMPLATE_AVAILABLE_TITLE . '

'; $query = 'SELECT * FROM '.sql_table('template_desc').' ORDER BY tdname'; $template['content'] = 'templatelist'; $template['tabindex'] = 10; showlist($query,'table',$template); echo '

' . _TEMPLATE_NEW_TITLE . '

'; ?>
addTicketHidden() ?>
pagefoot(); } function action_templateedit($msg = '') { global $member, $manager; $templateid = intRequestVar('templateid'); $member->isAdmin() or $this->disallow(); $extrahead = ''; $extrahead .= ''; $this->pagehead($extrahead); $templatename = TEMPLATE::getNameFromId($templateid); $templatedescription = TEMPLATE::getDesc($templateid); $template =& $manager->getTemplate($templatename); ?>

()

''

"._MESSAGE.": $msg

"; ?>

addTicketHidden() ?> _templateEditRow($template, _TEMPLATE_ITEMHEADER, 'ITEM_HEADER', '', 8); $this->_templateEditRow($template, _TEMPLATE_ITEMBODY, 'ITEM', '', 9, 1); $this->_templateEditRow($template, _TEMPLATE_ITEMFOOTER, 'ITEM_FOOTER', '', 10); $this->_templateEditRow($template, _TEMPLATE_MORELINK, 'MORELINK', 'morelink', 20); $this->_templateEditRow($template, _TEMPLATE_EDITLINK, 'EDITLINK', 'editlink', 25); $this->_templateEditRow($template, _TEMPLATE_NEW, 'NEW', 'new', 30); ?> _templateEditRow($template, _TEMPLATE_CHEADER, 'COMMENTS_HEADER', 'commentheaders', 40); $this->_templateEditRow($template, _TEMPLATE_CBODY, 'COMMENTS_BODY', 'commentbody', 50, 1); $this->_templateEditRow($template, _TEMPLATE_CFOOTER, 'COMMENTS_FOOTER', 'commentheaders', 60); $this->_templateEditRow($template, _TEMPLATE_CONE, 'COMMENTS_ONE', 'commentwords', 70); $this->_templateEditRow($template, _TEMPLATE_CMANY, 'COMMENTS_MANY', 'commentwords', 80); $this->_templateEditRow($template, _TEMPLATE_CMORE, 'COMMENTS_CONTINUED', 'commentcontinued', 90); $this->_templateEditRow($template, _TEMPLATE_CMEXTRA, 'COMMENTS_AUTH', 'memberextra', 100); ?> _templateEditRow($template, _TEMPLATE_CNONE, 'COMMENTS_NONE', '', 110); ?> _templateEditRow($template, _TEMPLATE_CTOOMUCH, 'COMMENTS_TOOMUCH', '', 120); ?> _templateEditRow($template, _TEMPLATE_AHEADER, 'ARCHIVELIST_HEADER', '', 130); $this->_templateEditRow($template, _TEMPLATE_AITEM, 'ARCHIVELIST_LISTITEM', '', 140); $this->_templateEditRow($template, _TEMPLATE_AFOOTER, 'ARCHIVELIST_FOOTER', '', 150); ?> _templateEditRow($template, _TEMPLATE_CATHEADER, 'CATLIST_HEADER', '', 160); $this->_templateEditRow($template, _TEMPLATE_CATITEM, 'CATLIST_LISTITEM', '', 170); $this->_templateEditRow($template, _TEMPLATE_CATFOOTER, 'CATLIST_FOOTER', '', 180); ?> _templateEditRow($template, _TEMPLATE_DHEADER, 'DATE_HEADER', 'dateheads', 190); $this->_templateEditRow($template, _TEMPLATE_DFOOTER, 'DATE_FOOTER', 'dateheads', 200); $this->_templateEditRow($template, _TEMPLATE_DFORMAT, 'FORMAT_DATE', 'datetime', 210); $this->_templateEditRow($template, _TEMPLATE_TFORMAT, 'FORMAT_TIME', 'datetime', 220); $this->_templateEditRow($template, _TEMPLATE_LOCALE, 'LOCALE', 'locale', 230); ?> _templateEditRow($template, _TEMPLATE_PCODE, 'POPUP_CODE', '', 240); $this->_templateEditRow($template, _TEMPLATE_ICODE, 'IMAGE_CODE', '', 250); $this->_templateEditRow($template, _TEMPLATE_MCODE, 'MEDIA_CODE', '', 260); ?> _templateEditRow($template, _TEMPLATE_SHIGHLIGHT, 'SEARCH_HIGHLIGHT', 'highlight',270); $this->_templateEditRow($template, _TEMPLATE_SNOTFOUND, 'SEARCH_NOTHINGFOUND', 'nothingfound',280); ?>
pagefoot(); } function _templateEditRow(&$template, $description, $name, $help = '', $tabindex = 0, $big = 0) { static $count = 1; ?> isAdmin() or $this->disallow(); $name = postVar('tname'); $desc = postVar('tdesc'); if (!isValidTemplateName($name)) $this->error(_ERROR_BADTEMPLATENAME); if ((TEMPLATE::getNameFromId($templateid) != $name) && TEMPLATE::exists($name)) $this->error(_ERROR_DUPTEMPLATENAME); $name = addslashes($name); $desc = addslashes($desc); // 1. Remove all template parts $query = 'DELETE FROM '.sql_table('template').' WHERE tdesc=' . $templateid; sql_query($query); // 2. Update description $query = 'UPDATE '.sql_table('template_desc').' SET' . " tdname='" . $name . "'," . " tddesc='" . $desc . "'" . " WHERE tdnumber=" . $templateid; sql_query($query); // 3. Add non-empty template parts $this->addToTemplate($templateid, 'ITEM_HEADER', postVar('ITEM_HEADER')); $this->addToTemplate($templateid, 'ITEM', postVar('ITEM')); $this->addToTemplate($templateid, 'ITEM_FOOTER', postVar('ITEM_FOOTER')); $this->addToTemplate($templateid, 'MORELINK', postVar('MORELINK')); $this->addToTemplate($templateid, 'EDITLINK', postVar('EDITLINK')); $this->addToTemplate($templateid, 'NEW', postVar('NEW')); $this->addToTemplate($templateid, 'COMMENTS_HEADER', postVar('COMMENTS_HEADER')); $this->addToTemplate($templateid, 'COMMENTS_BODY', postVar('COMMENTS_BODY')); $this->addToTemplate($templateid, 'COMMENTS_FOOTER', postVar('COMMENTS_FOOTER')); $this->addToTemplate($templateid, 'COMMENTS_CONTINUED', postVar('COMMENTS_CONTINUED')); $this->addToTemplate($templateid, 'COMMENTS_TOOMUCH', postVar('COMMENTS_TOOMUCH')); $this->addToTemplate($templateid, 'COMMENTS_AUTH', postVar('COMMENTS_AUTH')); $this->addToTemplate($templateid, 'COMMENTS_ONE', postVar('COMMENTS_ONE')); $this->addToTemplate($templateid, 'COMMENTS_MANY', postVar('COMMENTS_MANY')); $this->addToTemplate($templateid, 'COMMENTS_NONE', postVar('COMMENTS_NONE')); $this->addToTemplate($templateid, 'ARCHIVELIST_HEADER', postVar('ARCHIVELIST_HEADER')); $this->addToTemplate($templateid, 'ARCHIVELIST_LISTITEM', postVar('ARCHIVELIST_LISTITEM')); $this->addToTemplate($templateid, 'ARCHIVELIST_FOOTER', postVar('ARCHIVELIST_FOOTER')); $this->addToTemplate($templateid, 'CATLIST_HEADER', postVar('CATLIST_HEADER')); $this->addToTemplate($templateid, 'CATLIST_LISTITEM', postVar('CATLIST_LISTITEM')); $this->addToTemplate($templateid, 'CATLIST_FOOTER', postVar('CATLIST_FOOTER')); $this->addToTemplate($templateid, 'DATE_HEADER', postVar('DATE_HEADER')); $this->addToTemplate($templateid, 'DATE_FOOTER', postVar('DATE_FOOTER')); $this->addToTemplate($templateid, 'FORMAT_DATE', postVar('FORMAT_DATE')); $this->addToTemplate($templateid, 'FORMAT_TIME', postVar('FORMAT_TIME')); $this->addToTemplate($templateid, 'LOCALE', postVar('LOCALE')); $this->addToTemplate($templateid, 'SEARCH_HIGHLIGHT', postVar('SEARCH_HIGHLIGHT')); $this->addToTemplate($templateid, 'SEARCH_NOTHINGFOUND', postVar('SEARCH_NOTHINGFOUND')); $this->addToTemplate($templateid, 'POPUP_CODE', postVar('POPUP_CODE')); $this->addToTemplate($templateid, 'MEDIA_CODE', postVar('MEDIA_CODE')); $this->addToTemplate($templateid, 'IMAGE_CODE', postVar('IMAGE_CODE')); // jump back to template edit $this->action_templateedit(_TEMPLATE_UPDATED); } function addToTemplate($id, $partname, $content) { $partname = addslashes($partname); $content = addslashes($content); $id = intval($id); // don't add empty parts: if (!trim($content)) return -1; $query = 'INSERT INTO '.sql_table('template')." (tdesc, tpartname, tcontent) " . "VALUES ($id, '$partname', '$content')"; mysql_query($query) or die("Query error: " . mysql_error()); return mysql_insert_id(); } function action_templatedelete() { global $member, $manager; $member->isAdmin() or $this->disallow(); $templateid = intRequestVar('templateid'); // TODO: check if template can be deleted $this->pagehead(); $name = TEMPLATE::getNameFromId($templateid); $desc = TEMPLATE::getDesc($templateid); ?>

()

addTicketHidden() ?>
pagefoot(); } function action_templatedeleteconfirm() { global $member, $manager; $templateid = intRequestVar('templateid'); $member->isAdmin() or $this->disallow(); $manager->notify('PreDeleteTemplate', array('templateid' => $templateid)); // 1. delete description sql_query('DELETE FROM '.sql_table('template_desc').' WHERE tdnumber=' . $templateid); // 2. delete parts sql_query('DELETE FROM '.sql_table('template').' WHERE tdesc=' . $templateid); $manager->notify('PostDeleteTemplate', array('templateid' => $templateid)); $this->action_templateoverview(); } function action_templatenew() { global $member; $member->isAdmin() or $this->disallow(); $name = postVar('name'); $desc = postVar('desc'); if (!isValidTemplateName($name)) $this->error(_ERROR_BADTEMPLATENAME); if (TEMPLATE::exists($name)) $this->error(_ERROR_DUPTEMPLATENAME); $newTemplateId = TEMPLATE::createNew($name, $desc); $this->action_templateoverview(); } function action_templateclone() { global $member; $templateid = intRequestVar('templateid'); $member->isAdmin() or $this->disallow(); // 1. read old template $name = TEMPLATE::getNameFromId($templateid); $desc = TEMPLATE::getDesc($templateid); // 2. create desc thing $name = "cloned" . $name; // if a template with that name already exists: if (TEMPLATE::exists($name)) { $i = 1; while (TEMPLATE::exists($name . $i)) $i++; $name .= $i; } $newid = TEMPLATE::createNew($name, $desc); // 3. create clone // go through parts of old template and add them to the new one $res = sql_query('SELECT tpartname, tcontent FROM '.sql_table('template').' WHERE tdesc=' . $templateid); while ($o = mysql_fetch_object($res)) { $this->addToTemplate($newid, $o->tpartname, $o->tcontent); } $this->action_templateoverview(); } function action_skinoverview() { global $member, $manager; $member->isAdmin() or $this->disallow(); $this->pagehead(); echo '

(',_BACKTOMANAGE,')

'; echo '

' . _SKIN_EDIT_TITLE . '

'; echo '

' . _SKIN_AVAILABLE_TITLE . '

'; $query = 'SELECT * FROM '.sql_table('skin_desc').' ORDER BY sdname'; $template['content'] = 'skinlist'; $template['tabindex'] = 10; showlist($query,'table',$template); echo '

' . _SKIN_NEW_TITLE . '

'; ?>
addTicketHidden() ?>
pagefoot(); } function action_skinnew() { global $member; $member->isAdmin() or $this->disallow(); $name = trim(postVar('name')); $desc = trim(postVar('desc')); if (!isValidSkinName($name)) $this->error(_ERROR_BADSKINNAME); if (SKIN::exists($name)) $this->error(_ERROR_DUPSKINNAME); $newId = SKIN::createNew($name, $desc); $this->action_skinoverview(); } function action_skinedit() { global $member, $manager; $skinid = intRequestVar('skinid'); $member->isAdmin() or $this->disallow(); $skin =& new SKIN($skinid); $this->pagehead(); ?>

()

'getName() ?>'

addTicketHidden() ?>
input_yesno('inc_mode',$skin->getIncludeMode(),120,'skindir','normal',_PARSER_INCMODE_SKINDIR,_PARSER_INCMODE_NORMAL);?>
pagefoot(); } function action_skineditgeneral() { global $member; $skinid = intRequestVar('skinid'); $member->isAdmin() or $this->disallow(); $name = postVar('name'); $desc = postVar('desc'); $type = postVar('type'); $inc_mode = postVar('inc_mode'); $inc_prefix = postVar('inc_prefix'); $skin =& new SKIN($skinid); // 1. Some checks if (!isValidSkinName($name)) $this->error(_ERROR_BADSKINNAME); if (($skin->getName() != $name) && SKIN::exists($name)) $this->error(_ERROR_DUPSKINNAME); if (!$type) $type = 'text/html'; if (!$inc_mode) $inc_mode = 'normal'; // 2. Update description $skin->updateGeneralInfo($name, $desc, $type, $inc_mode, $inc_prefix); $this->action_skinedit(); } function action_skinedittype($msg = '') { global $member, $manager; $skinid = intRequestVar('skinid'); $type = requestVar('type'); $member->isAdmin() or $this->disallow(); $skin =& new SKIN($skinid); $friendlyNames = SKIN::getFriendlyNames(); $this->pagehead(); ?>

()

'getName() ?>':

"._MESSAGE.": $msg

"; ?>
addTicketHidden() ?> (skin type: )

(skin type: )

"; if (count($actions) != 0) echo ", "; } ?>

Short blog names: 'shortblognames')); ?>
Template names: 'shortnames')); ?>
pagefoot(); } function action_skinupdate() { global $member; $skinid = intRequestVar('skinid'); $content = trim(postVar('content')); $type = postVar('type'); $member->isAdmin() or $this->disallow(); $skin =& new SKIN($skinid); $skin->update($type, $content); $this->action_skinedittype(_SKIN_UPDATED); } function action_skindelete() { global $member, $manager, $CONF; $skinid = intRequestVar('skinid'); $member->isAdmin() or $this->disallow(); // don't allow default skin to be deleted if ($skinid == $CONF['BaseSkin']) $this->error(_ERROR_DEFAULTSKIN); // don't allow deletion of default skins for blogs $query = 'SELECT bname FROM '.sql_table('blog').' WHERE bdefskin=' . $skinid; $r = sql_query($query); if ($o = mysql_fetch_object($r)) $this->error(_ERROR_SKINDEFDELETE . $o->bname); $this->pagehead(); $skin =& new SKIN($skinid); $name = $skin->getName(); $desc = $skin->getDescription(); ?>

()

addTicketHidden() ?>
pagefoot(); } function action_skindeleteconfirm() { global $member, $CONF, $manager; $skinid = intRequestVar('skinid'); $member->isAdmin() or $this->disallow(); // don't allow default skin to be deleted if ($skinid == $CONF['BaseSkin']) $this->error(_ERROR_DEFAULTSKIN); // don't allow deletion of default skins for blogs $query = 'SELECT bname FROM '.sql_table('blog').' WHERE bdefskin=' . $skinid; $r = sql_query($query); if ($o = mysql_fetch_object($r)) $this->error(_ERROR_SKINDEFDELETE .$o->bname); $manager->notify('PreDeleteSkin', array('skinid' => $skinid)); // 1. delete description sql_query('DELETE FROM '.sql_table('skin_desc').' WHERE sdnumber=' . $skinid); // 2. delete parts sql_query('DELETE FROM '.sql_table('skin').' WHERE sdesc=' . $skinid); $manager->notify('PostDeleteSkin', array('skinid' => $skinid)); $this->action_skinoverview(); } function action_skinclone() { global $member; $skinid = intRequestVar('skinid'); $member->isAdmin() or $this->disallow(); // 1. read skin to clone $skin =& new SKIN($skinid); $name = "clone_" . $skin->getName(); // if a skin with that name already exists: if (SKIN::exists($name)) { $i = 1; while (SKIN::exists($name . $i)) $i++; $name .= $i; } // 2. create skin desc $newid = SKIN::createNew( $name, $skin->getDescription(), $skin->getContentType(), $skin->getIncludeMode(), $skin->getIncludePrefix() ); // 3. clone $this->skinclonetype($skin, $newid, 'index'); $this->skinclonetype($skin, $newid, 'item'); $this->skinclonetype($skin, $newid, 'archivelist'); $this->skinclonetype($skin, $newid, 'archive'); $this->skinclonetype($skin, $newid, 'search'); $this->skinclonetype($skin, $newid, 'error'); $this->skinclonetype($skin, $newid, 'member'); $this->skinclonetype($skin, $newid, 'imagepopup'); $this->action_skinoverview(); } function skinclonetype($skin, $newid, $type) { $newid = intval($newid); $content = $skin->getContent($type); if ($content) { $query = 'INSERT INTO '.sql_table('skin')." (sdesc, scontent, stype) VALUES ($newid,'". addslashes($content)."', '". addslashes($type)."')"; sql_query($query); } } function action_settingsedit() { global $member, $manager, $CONF, $DIR_NUCLEUS, $DIR_MEDIA; $member->isAdmin() or $this->disallow(); $this->pagehead(); echo '

(',_BACKTOMANAGE,')

'; ?>

addTicketHidden() ?>
input_yesno('DisableSite',$CONF['DisableSite'],10060); ?>
URL:
input_yesno('DisableJsTools',$CONF['DisableJsTools'],10075); */?>
input_yesno('URLMode',$CONF['URLMode'],10077, 'normal','pathinfo',_SETTINGS_URLMODE_NORMAL,_SETTINGS_URLMODE_PATHINFO); echo ' ', _SETTINGS_URLMODE_HELP; ?>
" . _WARNING_NOTADIR . ""; if (!is_readable($DIR_MEDIA)) echo "
" . _WARNING_NOTREADABLE . ""; if (!is_writeable($DIR_MEDIA)) echo "
" . _WARNING_NOTWRITABLE . ""; ?>
input_yesno('AllowUpload',$CONF['AllowUpload'],10090); ?>
input_yesno('MediaPrefix',$CONF['MediaPrefix'],10110); ?>
input_yesno('AllowLoginEdit',$CONF['AllowLoginEdit'],10120); ?>
input_yesno('AllowMemberCreate',$CONF['AllowMemberCreate'],10130); ?>

input_yesno('NewMemberCanLogon',$CONF['NewMemberCanLogon'],10140); ?>
input_yesno('AllowMemberMail',$CONF['AllowMemberMail'],10150); ?>
input_yesno('NonmemberMail',$CONF['NonmemberMail'],10155); ?>
input_yesno('ProtectMemNames',$CONF['ProtectMemNames'],10156); ?>
input_yesno('CookieSecure',$CONF['CookieSecure'],10180); ?>
input_yesno('SessionCookie',$CONF['SessionCookie'],10190, 1,0,_SETTINGS_COOKIESESSION,_SETTINGS_COOKIEMONTH); ?>
input_yesno('LastVisit',$CONF['LastVisit'],10200); ?>
',_PLUGINS_EXTRA,''; $manager->notify( 'GeneralSettingsFormExtras', array() ); $this->pagefoot(); } function action_settingsupdate() { global $member, $CONF; $member->isAdmin() or $this->disallow(); // check if email address for admin is valid if (!isValidMailAddress(postVar('AdminEmail'))) $this->error(_ERROR_BADMAILADDRESS); // save settings $this->updateConfig('DefaultBlog', postVar('DefaultBlog')); $this->updateConfig('BaseSkin', postVar('BaseSkin')); $this->updateConfig('IndexURL', postVar('IndexURL')); $this->updateConfig('AdminURL', postVar('AdminURL')); $this->updateConfig('PluginURL', postVar('PluginURL')); $this->updateConfig('SkinsURL', postVar('SkinsURL')); $this->updateConfig('ActionURL', postVar('ActionURL')); $this->updateConfig('Language', postVar('Language')); $this->updateConfig('AdminEmail', postVar('AdminEmail')); $this->updateConfig('SessionCookie', postVar('SessionCookie')); $this->updateConfig('AllowMemberCreate',postVar('AllowMemberCreate')); $this->updateConfig('AllowMemberMail', postVar('AllowMemberMail')); $this->updateConfig('NonmemberMail', postVar('NonmemberMail')); $this->updateConfig('ProtectMemNames', postVar('ProtectMemNames')); $this->updateConfig('SiteName', postVar('SiteName')); $this->updateConfig('NewMemberCanLogon',postVar('NewMemberCanLogon')); $this->updateConfig('DisableSite', postVar('DisableSite')); $this->updateConfig('DisableSiteURL', postVar('DisableSiteURL')); $this->updateConfig('LastVisit', postVar('LastVisit')); $this->updateConfig('MediaURL', postVar('MediaURL')); $this->updateConfig('AllowedTypes', postVar('AllowedTypes')); $this->updateConfig('AllowUpload', postVar('AllowUpload')); $this->updateConfig('MaxUploadSize', postVar('MaxUploadSize')); $this->updateConfig('MediaPrefix', postVar('MediaPrefix')); $this->updateConfig('AllowLoginEdit', postVar('AllowLoginEdit')); $this->updateConfig('DisableJsTools', postVar('DisableJsTools')); $this->updateConfig('CookieDomain', postVar('CookieDomain')); $this->updateConfig('CookiePath', postVar('CookiePath')); $this->updateConfig('CookieSecure', postVar('CookieSecure')); $this->updateConfig('URLMode', postVar('URLMode')); $this->updateConfig('CookiePrefix', postVar('CookiePrefix')); // load new config and redirect (this way, the new language will be used is necessary) // note that when changing cookie settings, this redirect might cause the user // to have to log in again. getConfig(); redirect($CONF['AdminURL'] . '?action=manage'); exit; } function updateConfig($name, $val) { $name = addslashes($name); $val = trim(addslashes($val)); $query = 'UPDATE '.sql_table('config') . " SET value='$val'" . " WHERE name='$name'"; mysql_query($query) or die("Query error: " . mysql_error()); return mysql_insert_id(); } /** * Error message */ function error($msg) { $this->pagehead(); ?>

Error!

"; echo ""._BACK.""; $this->pagefoot(); exit; } function disallow() { ACTIONLOG::add(WARNING, _ACTIONLOG_DISALLOWED . serverVar('REQUEST_URI')); $this->error(_ERROR_DISALLOWED); } function pagehead($extrahead = '') { global $member, $nucleus, $CONF, $manager; $manager->notify( 'AdminPrePageHead', array( 'extrahead' => &$extrahead, 'action' => $this->action ) ); $baseUrl = htmlspecialchars($CONF['AdminURL']); ?> <?php echo htmlspecialchars($CONF['SiteName'])?> - Admin

isLoggedIn()) echo _LOGGEDINAS . ' ' . $member->getDisplayName() ." - " . _LOGOUT. "" . "
" . _ADMINHOME . " - "; else echo '' , _NOTLOGGEDIN , '
'; echo ""._YOURSITE.""; echo '
('; if ($member->isLoggedIn() && $member->isAdmin()) echo 'Nucleus CMS ', $nucleus['version'], ''; else echo 'Nucleus CMS ' , $nucleus['version']; echo ')'; echo '
'; } function pagefoot() { global $action, $member, $manager; $manager->notify( 'AdminPrePageFoot', array( 'action' => $this->action ) ); if ($member->isLoggedIn() && ($action != 'showlogin')) { ?>

Nucleus CMS © 2002-2005 The Nucleus Group - Donate!
isLoggedIn())) { echo ''; echo '

',_QMENU_ADD,'

'; echo '
'; echo ''; $showAll = requestVar('showall'); if (($member->isAdmin()) && ($showAll == 'yes')) { // Super-Admins have access to all blogs! (no add item support though) $query = 'SELECT bnumber as value, bname as text' . ' FROM ' . sql_table('blog') . ' ORDER BY bname'; } else { $query = 'SELECT bnumber as value, bname as text' . ' FROM ' . sql_table('blog') . ', ' . sql_table('team') . ' WHERE tblog=bnumber and tmember=' . $member->getID() . ' ORDER BY bname'; } $template['name'] = 'blogid'; $template['tabindex'] = 15000; $template['extra'] = _QMENU_ADD_SELECT; $template['selected'] = -1; $template['shorten'] = 10; $template['shortenel'] = ''; $template['javascript'] = 'onchange="return form.submit()"'; showlist($query,'select',$template); echo '
'; echo '

' . $member->getDisplayName(). '

'; echo ''; // ---- general settings ---- if ($member->isAdmin()) { echo '

',_QMENU_MANAGE,'

'; echo ''; echo '

',_QMENU_LAYOUT,'

'; echo ''; } $aPluginExtras = array(); $manager->notify( 'QuickMenu', array( 'options' => &$aPluginExtras ) ); if (count($aPluginExtras) > 0) { echo '

', _QMENU_PLUGINS, '

'; echo ''; } } else if (($action == 'activate') || ($action == 'activatesetpwd')) { echo '

', _QMENU_ACTIVATE, '

', _QMENU_ACTIVATE_TEXT; } else { // introduction text on login screen echo '

', _QMENU_INTRO, '

', _QMENU_INTRO_TEXT; } ?>
teamRights($blogid) or $this->disallow(); // header-code stolen from phpMyAdmin // REGEDIT and bookmarklet code stolen from GreyMatter $sjisBlogName = getBlogNameFromID($blogid); $sjisBlogName = mb_convert_encoding($sjisBlogName, "SJIS", "auto"); header('Content-Type: application/octetstream'); header('Content-Disposition: filename="nucleus.reg"'); header('Pragma: no-cache'); header('Expires: 0'); echo "REGEDIT4\n"; echo "[HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\MenuExt\\Post To &Nucleus (".$sjisBlogName.")]\n"; echo '@="' . $CONF['AdminURL'] . "bookmarklet.php?action=contextmenucode&blogid=".intval($blogid)."\"\n"; echo '"contexts"=hex:31'; } function action_bookmarklet() { global $member, $manager; $blogid = intRequestVar('blogid'); $member->teamRights($blogid) or $this->disallow(); $blog =& $manager->getBlog($blogid); $bm = getBookmarklet($blogid); $this->pagehead(); echo '

(',_BACKHOME,')

'; ?>

Bookmarklet

Bookmarklet とは、クリック1回で記事の投稿ができるシステムです。 この Bookmarklet をインストールすると、ブラウザのツールバーの'add to weblog'ボタンが利用可能となり、Nucleusの新規アイテムの追加ウィンドウがポップアップします。任意のWebページを開いた状態でこのボタンを押せば、そのWebページのタイトルと、そのページへのリンクタグがすでに埋め込まれた状態でアイテム追加ウィンドウが開き、さらに、そのページ内に引用したい文を選択した状態であればその引用文も自動的に引用します。

Bookmarklet

下のリンク部分を「お気に入り」もしくはツールバーにドラッグできます。(その前にテストしてみたい場合は単純に下のリンクをクリックしてみてください)

Add to getShortName()?> (ほとんどのブラウザで動作します)

右クリックメニューにインストール (WindowsでIE使用時)

addTicketToUrl($url); ?> あるいは右クリックメニューにインストールすることもできます (「開く」を選択すれば直接レジストリに登録します)

このインストールした右クリックメニューを表示するためにはIEの再起動が必要です。

アンインストール

「お気に入り」もしくはツールバーから消すには、単に削除するだけです。

右クリックメニューから消したい時は、以下の手順を踏んでください:

  1. スタートメニューから「ファイルを指定して実行...」を選択
  2. "regedit" と入力
  3. "OK" ボタンを押す
  4. "\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt" をツリーの中から検索
  5. "add to weblog" エントリを削除
pagefoot(); } function action_actionlog() { global $member, $manager; $member->isAdmin() or $this->disallow(); $this->pagehead(); echo '

(',_BACKTOMANAGE,')

'; $url = $manager->addTicketToUrl('index.php?action=clearactionlog'); ?>

' . _ACTIONLOG_TITLE . ''; $query = 'SELECT * FROM '.sql_table('actionlog').' ORDER BY timestamp DESC'; $template['content'] = 'actionlist'; $amount = showlist($query,'table',$template); $this->pagefoot(); } function action_banlist() { global $member, $manager; $blogid = intRequestVar('blogid'); $member->blogAdminRights($blogid) or $this->disallow(); $blog =& $manager->getBlog($blogid); $this->pagehead(); echo '

(',_BACKHOME,')

'; echo '

' . _BAN_TITLE . " '". $this->bloglink($blog) ."'

"; $query = 'SELECT * FROM '.sql_table('ban').' WHERE blogid='.$blogid.' ORDER BY iprange'; $template['content'] = 'banlist'; $amount = showlist($query,'table',$template); if ($amount == 0) echo _BAN_NONE; echo '

'._BAN_NEW_TITLE.'

'; echo "

"._BAN_NEW_TEXT."

"; $this->pagefoot(); } function action_banlistdelete() { global $member, $manager; $blogid = intRequestVar('blogid'); $iprange = requestVar('iprange'); $member->blogAdminRights($blogid) or $this->disallow(); $blog =& $manager->getBlog($blogid); $this->pagehead(); ?>


addTicketHidden() ?>
pagefoot(); } function action_banlistdeleteconfirm() { global $member, $manager; $blogid = intPostVar('blogid'); $allblogs = postVar('allblogs'); $iprange = postVar('iprange'); $member->blogAdminRights($blogid) or $this->disallow(); $deleted = array(); if (!$allblogs) { if (BAN::removeBan($blogid, $iprange)) array_push($deleted, $blogid); } else { // get blogs fot which member has admin rights $adminblogs = $member->getAdminBlogs(); foreach ($adminblogs as $blogje) { if (BAN::removeBan($blogje, $iprange)) array_push($deleted, $blogje); } } if (sizeof($deleted) == 0) $this->error(_ERROR_DELETEBAN); $this->pagehead(); echo '(',_BACK,')'; echo '

'._BAN_REMOVED_TITLE.'

'; echo "

"._BAN_REMOVED_TEXT."

"; echo ""; $this->pagefoot(); } function action_banlistnewfromitem() { $this->action_banlistnew(getBlogIDFromItemID(intRequestVar('itemid'))); } function action_banlistnew($blogid = '') { global $member, $manager; if ($blogid == '') $blogid = intRequestVar('blogid'); $ip = requestVar('ip'); $member->blogAdminRights($blogid) or $this->disallow(); $blog =& $manager->getBlog($blogid); $this->pagehead(); ?>

An example: "134.58.253.193" will only block one computer, while "134.58.253" will block 256 IP addresses, including the one from the first example.

"; echo ""; } ?>


addTicketHidden() ?>
pagefoot(); } function action_banlistadd() { global $member; $blogid = intPostVar('blogid'); $allblogs = postVar('allblogs'); $iprange = postVar('iprange'); if ($iprange == "custom") $iprange = postVar('customiprange'); $reason = postVar('reason'); $member->blogAdminRights($blogid) or $this->disallow(); // TODO: check IP range validity if (!$allblogs) { if (!BAN::addBan($blogid, $iprange, $reason)) $this->error(_ERROR_ADDBAN); } else { // get blogs fot which member has admin rights $adminblogs = $member->getAdminBlogs(); $failed = 0; foreach ($adminblogs as $blogje) { if (!BAN::addBan($blogje, $iprange, $reason)) $failed = 1; } if ($failed) $this->error(_ERROR_ADDBAN); } $this->action_banlist(); } function action_clearactionlog() { global $member; $member->isAdmin() or $this->disallow(); ACTIONLOG::clear(); $this->action_manage(_MSG_ACTIONLOGCLEARED); } function action_backupoverview() { global $member, $manager; $member->isAdmin() or $this->disallow(); $this->pagehead(); echo '

(',_BACKTOMANAGE,')

'; ?>

addTicketHidden() ?>


addTicketHidden() ?>



pagefoot(); } function action_backupcreate() { global $member, $DIR_LIBS; $member->isAdmin() or $this->disallow(); // use compression ? $useGzip = intval(postVar('gzip')); include($DIR_LIBS . 'backup.php'); // try to extend time limit // (creating/restoring dumps might take a while) @set_time_limit(1200); do_backup($useGzip); exit; } function action_backuprestore() { global $member, $DIR_LIBS; $member->isAdmin() or $this->disallow(); if (intPostVar('letsgo') != 1) $this->error(_ERROR_BACKUP_NOTSURE); include($DIR_LIBS . 'backup.php'); // try to extend time limit // (creating/restoring dumps might take a while) @set_time_limit(1200); $message = do_restore(); if ($message != '') $this->error($message); $this->pagehead(); ?>

pagefoot(); } function action_pluginlist() { global $member, $manager; // check if allowed $member->isAdmin() or $this->disallow(); $this->pagehead(); echo '

(',_BACKTOMANAGE,')

'; echo '

' , _PLUGS_TITLE_MANAGE , ' ', help('plugins'), '

'; echo '

' , _PLUGS_TITLE_INSTALLED , '

'; $query = 'SELECT * FROM '.sql_table('plugin').' ORDER BY porder ASC'; $template['content'] = 'pluginlist'; $template['tabindex'] = 10; showlist($query, 'table', $template); ?>

addTicketHidden() ?>

0) { ?>

addTicketHidden() ?>
',_PLUGS_NOCANDIDATES,'

'; } $this->pagefoot(); } function action_pluginhelp() { global $member, $manager, $DIR_PLUGINS, $CONF; // check if allowed $member->isAdmin() or $this->disallow(); $plugid = intGetVar('plugid'); if (!$manager->pidInstalled($plugid)) $this->error(_ERROR_NOSUCHPLUGIN); $plugName = getPluginNameFromPid($plugid); $this->pagehead(); echo '

(',_PLUGS_BACK,')

'; echo '

',_PLUGS_HELP_TITLE,': ',htmlspecialchars($plugName),'

'; $plug =& $manager->getPlugin($plugName); $helpFile = $DIR_PLUGINS.$plug->getShortName().'/help.html'; if (($plug->supportsFeature('HelpPage') > 0) && (@file_exists($helpFile))) { @readfile($helpFile); } else { echo '

Error: ', _ERROR_PLUGNOHELPFILE,'

'; echo '

(',_BACK,')

'; } $this->pagefoot(); } function action_pluginadd() { global $member, $manager, $DIR_PLUGINS; // check if allowed $member->isAdmin() or $this->disallow(); $name = postVar('filename'); if ($manager->pluginInstalled($name)) $this->error(_ERROR_DUPPLUGIN); if (!checkPlugin($name)) $this->error(_ERROR_PLUGFILEERROR . ' (' . $name . ')'); // check if the plugin dependency is met $plugin =& $manager->getPlugin($name); $pluginList = $plugin->getPluginDep(); foreach ($pluginList as $pluginName) { $res = sql_query('SELECT * FROM '.sql_table('plugin') . ' WHERE pfile="' . $pluginName . '"'); if (mysql_num_rows($res) == 0) { // uninstall plugin again... $this->deleteOnePlugin($plugin->getID()); $this->error(_ERROR_INSREQPLUGIN . $pluginName); } } // get number of currently installed plugins $numCurrent = mysql_num_rows(sql_query('SELECT * FROM '.sql_table('plugin'))); // plugin will be added as last one in the list $newOrder = $numCurrent + 1; $manager->notify( 'PreAddPlugin', array( 'file' => &$name ) ); // do this before calling getPlugin (in case the plugin id is used there) $query = 'INSERT INTO '.sql_table('plugin').' (porder, pfile) VALUES ('.$newOrder.',"'.addslashes($name).'")'; sql_query($query); $iPid = mysql_insert_id(); // need to update the plugin object's pid since we didn't have it above when it's first create.... $plugin->plugid = $iPid; $manager->clearCachedInfo('installedPlugins'); // call the install method of the plugin if (!$plugin) { sql_query('DELETE FROM ' . sql_table('plugin') . ' WHERE pid='. intval($iPid)); $manager->clearCachedInfo('installedPlugins'); $this->error('Plugin could not be loaded, or does not support certain features that are required for it to run on your Nucleus installation (you might want to check the actionlog for more info)'); } // check if plugin needs a newer Nucleus version if (getNucleusVersion() < $plugin->getMinNucleusVersion()) { // uninstall plugin again... $this->deleteOnePlugin($plugin->getID()); // ...and show error $this->error(_ERROR_NUCLEUSVERSIONREQ . $plugin->getMinNucleusVersion()); } // check if plugin needs a newer Nucleus version if ((getNucleusVersion() == $plugin->getMinNucleusVersion()) && (getNucleusPatchLevel() < $plugin->getMinNucleusPatchLevel())) { // uninstall plugin again... $this->deleteOnePlugin($plugin->getID()); // ...and show error $this->error(_ERROR_NUCLEUSVERSIONREQ . $plugin->getMinNucleusVersion() . ' patch ' . $plugin->getMinNucleusPatchLevel()); } $plugin->install(); $manager->notify( 'PostAddPlugin', array( 'plugin' => &$plugin ) ); // update all events $this->action_pluginupdate(); } function action_pluginupdate() { global $member, $manager; // check if allowed $member->isAdmin() or $this->disallow(); // delete everything from plugin_events sql_query('DELETE FROM '.sql_table('plugin_event')); // loop over all installed plugins $res = sql_query('SELECT pid, pfile FROM '.sql_table('plugin')); while($o = mysql_fetch_object($res)) { $pid = $o->pid; $plug =& $manager->getPlugin($o->pfile); if ($plug) { $eventList = $plug->getEventList(); foreach ($eventList as $eventName) sql_query('INSERT INTO '.sql_table('plugin_event').' (pid, event) VALUES ('.$pid.', \''.addslashes($eventName).'\')'); } } $this->action_pluginlist(); } function action_plugindelete() { global $member, $manager; // check if allowed $member->isAdmin() or $this->disallow(); $pid = intGetVar('plugid'); if (!$manager->pidInstalled($pid)) $this->error(_ERROR_NOSUCHPLUGIN); $this->pagehead(); ?>

?

addTicketHidden() ?>
pagefoot(); } function action_plugindeleteconfirm() { global $member, $manager; // check if allowed $member->isAdmin() or $this->disallow(); $pid = intPostVar('plugid'); $error = $this->deleteOnePlugin($pid, 1); if ($error) { $this->error($error); } $this->action_pluginlist(); } function deleteOnePlugin($pid, $callUninstall = 0) { global $manager; $pid = intval($pid); if (!$manager->pidInstalled($pid)) return _ERROR_NOSUCHPLUGIN; $name = quickQuery('SELECT pfile as result FROM '.sql_table('plugin').' WHERE pid='.$pid); // call the unInstall method of the plugin if ($callUninstall) { $plugin =& $manager->getPlugin($name); if ($plugin) $plugin->unInstall(); } // check dependency before delete $res = sql_query('SELECT pfile FROM '.sql_table('plugin')); while($o = mysql_fetch_object($res)) { $plug =& $manager->getPlugin($o->pfile); if ($plug) { $depList = $plug->getPluginDep(); foreach ($depList as $depName) { if ($name == $depName) { return _ERROR_DELREQPLUGIN . $o->pfile; } } } } $manager->notify('PreDeletePlugin', array('plugid' => $pid)); // delete all subscriptions sql_query('DELETE FROM '.sql_table('plugin_event').' WHERE pid=' . $pid); // delete all options // get OIDs from plugin_option_desc $res = sql_query('SELECT oid FROM ' . sql_table('plugin_option_desc') . ' WHERE opid=' . $pid); $aOIDs = array(); while ($o = mysql_fetch_object($res)) { array_push($aOIDs, $o->oid); } // delete from plugin_option and plugin_option_desc sql_query('DELETE FROM '.sql_table('plugin_option_desc').' WHERE opid=' . $pid); if (count($aOIDs) > 0) sql_query('DELETE FROM '.sql_table('plugin_option').' WHERE oid in ('.implode(',',$aOIDs).')'); // update order numbers $o = mysql_fetch_object(sql_query('SELECT porder FROM '.sql_table('plugin').' WHERE pid=' . $pid)); sql_query('UPDATE '.sql_table('plugin').' SET porder=(porder - 1) WHERE porder>'.$o->porder); // delete row sql_query('DELETE FROM '.sql_table('plugin').' WHERE pid='.$pid); $manager->clearCachedInfo('installedPlugins'); $manager->notify('PostDeletePlugin', array('plugid' => $pid)); return ''; } function action_pluginup() { global $member, $manager; // check if allowed $member->isAdmin() or $this->disallow(); $plugid = intGetVar('plugid'); if (!$manager->pidInstalled($plugid)) $this->error(_ERROR_NOSUCHPLUGIN); // 1. get old order number $o = mysql_fetch_object(sql_query('SELECT porder FROM '.sql_table('plugin').' WHERE pid='.$plugid)); $oldOrder = $o->porder; // 2. calculate new order number $newOrder = ($oldOrder > 1) ? ($oldOrder - 1) : 1; // 3. update plug numbers sql_query('UPDATE '.sql_table('plugin').' SET porder='.$oldOrder.' WHERE porder='.$newOrder); sql_query('UPDATE '.sql_table('plugin').' SET porder='.$newOrder.' WHERE pid='.$plugid); $this->action_pluginlist(); } function action_plugindown() { global $member, $manager; // check if allowed $member->isAdmin() or $this->disallow(); $plugid = intGetVar('plugid'); if (!$manager->pidInstalled($plugid)) $this->error(_ERROR_NOSUCHPLUGIN); // 1. get old order number $o = mysql_fetch_object(sql_query('SELECT porder FROM '.sql_table('plugin').' WHERE pid='.$plugid)); $oldOrder = $o->porder; $maxOrder = mysql_num_rows(sql_query('SELECT * FROM '.sql_table('plugin'))); // 2. calculate new order number $newOrder = ($oldOrder < $maxOrder) ? ($oldOrder + 1) : $maxOrder; // 3. update plug numbers sql_query('UPDATE '.sql_table('plugin').' SET porder='.$oldOrder.' WHERE porder='.$newOrder); sql_query('UPDATE '.sql_table('plugin').' SET porder='.$newOrder.' WHERE pid='.$plugid); $this->action_pluginlist(); } function action_pluginoptions($message = '') { global $member, $manager; // check if allowed $member->isAdmin() or $this->disallow(); $pid = intRequestVar('plugid'); if (!$manager->pidInstalled($pid)) $this->error(_ERROR_NOSUCHPLUGIN); $extrahead = ''; $this->pagehead($extrahead); ?>

()

Options for

addTicketHidden(); $aOptions = array(); $aOIDs = array(); $query = 'SELECT * FROM ' . sql_table('plugin_option_desc') . ' WHERE ocontext=\'global\' and opid=' . $pid . ' ORDER BY oid ASC'; $r = sql_query($query); while ($o = mysql_fetch_object($r)) { array_push($aOIDs, $o->oid); $aOptions[$o->oid] = array( 'oid' => $o->oid, 'value' => $o->odef, 'name' => $o->oname, 'description' => $o->odesc, 'type' => $o->otype, 'typeinfo' => $o->oextra, 'contextid' => 0 ); } // fill out actual values if (count($aOIDs) > 0) { $r = sql_query('SELECT oid, ovalue FROM ' . sql_table('plugin_option') . ' WHERE oid in ('.implode(',',$aOIDs).')'); while ($o = mysql_fetch_object($r)) $aOptions[$o->oid]['value'] = $o->ovalue; } // call plugins $manager->notify('PrePluginOptionsEdit',array('context' => 'global', 'plugid' => $pid, 'options'=>&$aOptions)); $template['content'] = 'plugoptionlist'; $amount = showlist($aOptions,'table',$template); if ($amount == 0) echo '

',_ERROR_NOPLUGOPTIONS,'

'; ?>
pagefoot(); } function action_pluginoptionsupdate() { global $member, $manager; // check if allowed $member->isAdmin() or $this->disallow(); $pid = intRequestVar('plugid'); if (!$manager->pidInstalled($pid)) $this->error(_ERROR_NOSUCHPLUGIN); $aOptions = requestArray('plugoption'); NucleusPlugin::_applyPluginOptions($aOptions); $manager->notify('PostPluginOptionsUpdate',array('context' => 'global', 'plugid' => $pid)); $this->action_pluginoptions(_PLUGS_OPTIONS_UPDATED); } /** * @static */ function _insertPluginOptions($context, $contextid = 0) { // get all current values for this contextid // (note: this might contain doubles for overlapping contextids) $aIdToValue = array(); $res = sql_query('SELECT oid, ovalue FROM ' . sql_table('plugin_option') . ' WHERE ocontextid=' . intval($contextid)); while ($o = mysql_fetch_object($res)) { $aIdToValue[$o->oid] = $o->ovalue; } // get list of oids per pid $query = 'SELECT * FROM ' . sql_table('plugin_option_desc') . ',' . sql_table('plugin') . ' WHERE opid=pid and ocontext=\''.addslashes($context).'\' ORDER BY porder, oid ASC'; $res = sql_query($query); $aOptions = array(); while ($o = mysql_fetch_object($res)) { if (in_array($o->oid, array_keys($aIdToValue))) $value = $aIdToValue[$o->oid]; else $value = $o->odef; array_push($aOptions, array( 'pid' => $o->pid, 'pfile' => $o->pfile, 'oid' => $o->oid, 'value' => $value, 'name' => $o->oname, 'description' => $o->odesc, 'type' => $o->otype, 'typeinfo' => $o->oextra, 'contextid' => $contextid, 'extra' => '' )); } global $manager; $manager->notify('PrePluginOptionsEdit',array('context' => $context, 'contextid' => $contextid, 'options'=>&$aOptions)); $iPrevPid = -1; foreach ($aOptions as $aOption) { // new plugin? if ($iPrevPid != $aOption['pid']) { $iPrevPid = $aOption['pid']; echo 'Options for ', htmlspecialchars($aOption['pfile']),''; } echo ''; listplug_plugOptionRow($aOption); echo ''; } } /* helper functions to create option forms etc. */ function input_yesno($name, $checkedval,$tabindex = 0, $value1 = 1, $value2 = 0, $yesval = _YES, $noval = _NO) { $id = htmlspecialchars($name); $id = str_replace('[','-',$id); $id = str_replace(']','-',$id); $id1 = $id . htmlspecialchars($value1); $id2 = $id . htmlspecialchars($value2); echo ''; echo ' '; echo ''; } } // class ADMIN class ENCAPSULATE { /** * Uses $call to call a function using parameters $params * This function should return the amount of entries shown. * When entries are show, batch operation handlers are shown too. * When no entries were shown, $errormsg is used to display an error * * Passes on the amount of results found (for further encapsulation) */ function doEncapsulate($call, $params, $errorMessage = 'No entries') { // start output buffering ob_start(); $nbOfRows = call_user_func_array($call, $params); // get list contents and stop buffering $list = ob_get_contents(); ob_end_clean(); if ($nbOfRows > 0) { $this->showHead(); echo $list; $this->showFoot(); } else { echo $errorMessage; } return $nbOfRows; } } /** * A class used to encapsulate a list of some sort inside next/prev buttons */ class NAVLIST extends ENCAPSULATE { function NAVLIST($action, $start, $amount, $minamount, $maxamount, $blogid, $search, $itemid) { $this->action = $action; $this->start = $start; $this->amount = $amount; $this->minamount = $minamount; $this->maxamount = $maxamount; $this->blogid = $blogid; $this->search = $search; $this->itemid = $itemid; } function showBatchList($batchtype, $query, $type, $template, $errorMessage = _LISTS_NOMORE) { $batch =& new BATCH($batchtype); $this->doEncapsulate( array(&$batch, 'showlist'), array(&$query, $type, $template), $errorMessage ); } function showHead() { $this->showNavigation(); } function showFoot() { $this->showNavigation(); } /** * Displays a next/prev bar for long tables */ function showNavigation() { $action = $this->action; $start = $this->start; $amount = $this->amount; $minamount = $this->minamount; $maxamount = $this->maxamount; $blogid = $this->blogid; $search = $this->search; $itemid = $this->itemid; $prev = $start - $amount; if ($prev < $minamount) $prev=$minamount; // maxamount not used yet // if ($start + $amount <= $maxamount) $next = $start + $amount; // else // $next = $start; ?> type = $type; } function showHead() { ?>
showOperationList(); } function showFoot() { $this->showOperationList(); ?>
addTicketHidden(); // add hidden fields for 'team' and 'comment' batchlists if ($this->type == 'team') { echo ''; } if ($this->type == 'comment') { echo ''; } echo ''; ?>( - )
doEncapsulate( 'showlist', array($query, $type, $template), $errorMessage ); } } // can take either an array of objects, or an SQL query function showlist($query, $type, $template) { if (is_array($query)) { if (sizeof($query) == 0) return 0; call_user_func('listplug_' . $type, $template, 'HEAD'); foreach ($query as $currentObj) { $template['current'] = $currentObj; call_user_func('listplug_' . $type, $template, 'BODY'); } call_user_func('listplug_' . $type, $template, 'FOOT'); return sizeof($query); } else { $res = sql_query($query); // don't do anything if there are no results $numrows = mysql_num_rows($res); if ($numrows == 0) return 0; call_user_func('listplug_' . $type, $template, 'HEAD'); while($template['current'] = mysql_fetch_object($res)) call_user_func('listplug_' . $type, $template, 'BODY'); call_user_func('listplug_' . $type, $template, 'FOOT'); mysql_free_result($res); // return amount of results return $numrows; } } function listplug_select($template, $type) { switch($type) { case 'HEAD': echo ''; break; } } function listplug_table($template, $type) { switch($type) { case 'HEAD': echo ""; echo ""; // print head call_user_func("listplug_table_" . $template['content'] , $template, 'HEAD'); echo ""; break; case 'BODY': // print tabletype specific thingies echo ""; call_user_func("listplug_table_" . $template['content'] , $template, 'BODY'); echo ""; break; case 'FOOT': call_user_func("listplug_table_" . $template['content'] , $template, 'FOOT'); echo "
"; break; } } function listplug_table_memberlist($template, $type) { switch($type) { case 'HEAD': echo '' . _LIST_MEMBER_NAME . '' . _LIST_MEMBER_RNAME . '' . _LIST_MEMBER_URL . '' . _LIST_MEMBER_ADMIN; help('superadmin'); echo "" . _LIST_MEMBER_LOGIN; help('canlogin'); echo "" . _LISTS_ACTIONS. ""; break; case 'BODY': $current = $template['current']; echo ''; $id = listplug_nextBatchId(); echo ''; echo ''; echo ''; echo '', htmlspecialchars($current->mrealname), ''; echo "$current->murl"; echo '', ($current->madmin ? _YES : _NO),''; echo '', ($current->mcanlogin ? _YES : _NO), ''; echo ""._LISTS_EDIT.""; echo ""._LISTS_DELETE.""; break; } } function listplug_table_teamlist($template, $type) { global $manager; switch($type) { case 'HEAD': echo ""._LIST_MEMBER_NAME.""._LIST_MEMBER_RNAME.""._LIST_TEAM_ADMIN; help('teamadmin'); echo ""._LISTS_ACTIONS.""; break; case 'BODY': $current = $template['current']; echo ''; $id = listplug_nextBatchId(); echo ''; echo ''; echo ''; echo '', htmlspecialchars($current->mrealname), ''; echo '', ($current->tadmin ? _YES : _NO) , ''; echo ""._LISTS_DELETE.""; $url = 'index.php?action=teamchangeadmin&memberid=' . intval($current->tmember) . '&blogid=' . intval($current->tblog); $url = $manager->addTicketToUrl($url); echo ""._LIST_TEAM_CHADMIN.""; break; } } function encode_desc(&$data) { //_$to_entities = get_html_translation_table(HTML_ENTITIES); $to_entities = get_html_translation_table(HTML_SPECIALCHARS); $from_entities = array_flip($to_entities); $data = str_replace('
','\n',$data); //hack $data = strtr($data,$from_entities); $data = strtr($data,$to_entities); $data = str_replace('\n','
',$data); //hack return $data; } function listplug_table_pluginlist($template, $type) { global $manager; switch($type) { case 'HEAD': echo ''._LISTS_INFO.''._LISTS_DESC.''; echo ''._LISTS_ACTIONS.''; break; case 'BODY': $current = $template['current']; $plug =& $manager->getPlugin($current->pfile); if ($plug) { echo ''; echo '' , htmlspecialchars($plug->getName()) , '
'; echo _LIST_PLUGS_AUTHOR, ' ' , htmlspecialchars($plug->getAuthor()) , '
'; echo _LIST_PLUGS_VER, ' ' , htmlspecialchars($plug->getVersion()) , '
'; if ($plug->getURL()) echo '',_LIST_PLUGS_SITE,'
'; echo ''; echo ''; echo _LIST_PLUGS_DESC .'
'. encode_desc($plug->getDescription()); if (sizeof($plug->getEventList()) > 0) { echo '

',_LIST_PLUGS_SUBS,'
',htmlspecialchars(implode($plug->getEventList(),', ')); // check the database to see if it is up-to-date and notice the user if not } if (!$plug->subscribtionListIsUptodate()) { echo '

',_LIST_PLUG_SUBS_NEEDUPDATE,''; } if (sizeof($plug->getPluginDep()) > 0) echo '

',_LIST_PLUGS_DEP,'
',htmlspecialchars(implode($plug->getPluginDep(),', ')); echo ''; } else { echo 'Error: plugin file ',htmlspecialchars($current->pfile),'.php could not be loaded, or it has been set inactive because it does not support some features (check the actionlog for more info)'; } echo ''; $baseUrl = 'index.php?plugid=' . intval($current->pid) . '&action='; $url = $manager->addTicketToUrl($baseUrl . 'pluginup'); echo "",_LIST_PLUGS_UP,""; $url = $manager->addTicketToUrl($baseUrl . 'plugindown'); echo "
",_LIST_PLUGS_DOWN,""; echo "
",_LIST_PLUGS_UNINSTALL,""; if ($plug && ($plug->hasAdminArea() > 0)) echo "
",_LIST_PLUGS_ADMIN,""; if ($plug && ($plug->supportsFeature('HelpPage') > 0)) echo "
",_LIST_PLUGS_HELP,""; if (quickQuery('SELECT COUNT(*) AS result FROM '.sql_table('plugin_option_desc').' WHERE ocontext=\'global\' and opid='.$current->pid) > 0) echo "
",_LIST_PLUGS_OPTIONS,""; echo ''; break; } } function listplug_table_plugoptionlist($template, $type) { global $manager; switch($type) { case 'HEAD': echo ''._LISTS_INFO.''._LISTS_VALUE.''; break; case 'BODY': $current = $template['current']; listplug_plugOptionRow($current); break; case 'FOOT': ?> ',htmlspecialchars($current['description']?$current['description']:$current['name']),''; echo ''; switch($current['type']) { case 'yesno': ADMIN::input_yesno($varname, $current['value'], 0, 'yes', 'no'); break; case 'password': echo ''; break; case 'select': echo ''; break; case 'textarea': //$meta = NucleusPlugin::getOptionMeta($current['typeinfo']); echo ''; break; case 'text': default: //$meta = NucleusPlugin::getOptionMeta($current['typeinfo']); echo ''; } echo $current['extra']; echo ''; } } function listplug_table_itemlist($template, $type) { switch($type) { case 'HEAD': echo ""._LIST_ITEM_INFO.""._LIST_ITEM_CONTENT.""._LISTS_ACTIONS.""; break; case 'BODY': $current = $template['current']; $current->itime = strtotime($current->itime); // string -> unix timestamp if ($current->idraft == 1) $cssclass = "class='draft'"; // (can't use offset time since offsets might vary between blogs) if ($current->itime > $template['now']) $cssclass = "class='future'"; echo "",_LIST_ITEM_BLOG,' ', htmlspecialchars($current->bshortname); echo "
",_LIST_ITEM_CAT,' ', htmlspecialchars($current->cname); echo "
",_LIST_ITEM_AUTHOR, ' ', htmlspecialchars($current->mname); echo "
",_LIST_ITEM_DATE," " . date("Y-m-d",$current->itime); echo "
",_LIST_ITEM_TIME," " . date("H:i",$current->itime); echo ""; echo ""; $id = listplug_nextBatchId(); echo ''; echo ''; echo "
"; $current->ibody = strip_tags($current->ibody); $current->ibody = htmlspecialchars(shorten($current->ibody,300,'...')); echo "$current->ibody"; echo ""; echo ""._LISTS_EDIT.""; echo "
"._LISTS_COMMENTS.""; echo "
"._LISTS_MOVE.""; echo "
"._LISTS_DELETE.""; echo ""; break; } } // for batch operations: generates the index numbers for checkboxes function listplug_nextBatchId() { static $id = 0; return $id++; } function listplug_table_commentlist($template, $type) { switch($type) { case 'HEAD': echo ""._LISTS_INFO.""._LIST_COMMENT.""._LISTS_ACTIONS.""; break; case 'BODY': $current = $template['current']; $current->ctime = strtotime($current->ctime); // string -> unix timestamp echo ''; echo date("Y-m-d@H:i",$current->ctime); echo '
'; if ($current->mname) echo htmlspecialchars($current->mname) ,' ', _LIST_COMMENTS_MEMBER; else echo htmlspecialchars($current->cuser); echo ''; $current->cbody = strip_tags($current->cbody); $current->cbody = htmlspecialchars(shorten($current->cbody, 300, '...')); echo ''; $id = listplug_nextBatchId(); echo ''; echo ''; echo ''; echo ""._LISTS_EDIT.""; echo ""._LISTS_DELETE.""; if ($template['canAddBan']) echo ""._LIST_COMMENT_BANIP.""; break; } } function listplug_table_bloglist($template, $type) { switch($type) { case 'HEAD': echo "" . _NAME . "" ._LISTS_ACTIONS. ""; break; case 'BODY': $current = $template['current']; echo "". _BLOGLIST_TT_VISIT." " . htmlspecialchars($current->bname) . ""; echo "" . _BLOGLIST_ADD . ""; echo "". _BLOGLIST_EDIT.""; echo "". _BLOGLIST_COMMENTS.""; echo "". _BLOGLIST_BMLET . ""; if ($current->tadmin == 1) { echo "" ._BLOGLIST_SETTINGS. ""; echo "". _BLOGLIST_BANS.""; } if ($template['superadmin']) { echo "" ._BLOGLIST_DELETE. ""; } break; } } function listplug_table_shortblognames($template, $type) { switch($type) { case 'HEAD': echo "" . _NAME . "" . _NAME. ""; break; case 'BODY': $current = $template['current']; echo '' , htmlspecialchars($current->bshortname) , ''; echo '' , htmlspecialchars($current->bname) , ''; break; } } function listplug_table_shortnames($template, $type) { switch($type) { case 'HEAD': echo "" . _NAME . "" . _LISTS_DESC. ""; break; case 'BODY': $current = $template['current']; echo '' , htmlspecialchars($current->name) , ''; echo '' , htmlspecialchars($current->description) , ''; break; } } function listplug_table_categorylist($template, $type) { switch($type) { case 'HEAD': echo ""._LISTS_NAME.""._LISTS_DESC.""._LISTS_ACTIONS.""; break; case 'BODY': $current = $template['current']; echo ''; $id = listplug_nextBatchId(); echo ''; echo ''; echo ''; echo '', htmlspecialchars($current->cdesc), ''; echo ""._LISTS_DELETE.""; echo ""._LISTS_EDIT.""; break; } } function listplug_table_templatelist($template, $type) { global $manager; switch($type) { case 'HEAD': echo ""._LISTS_NAME.""._LISTS_DESC.""._LISTS_ACTIONS.""; break; case 'BODY': $current = $template['current']; echo "" , htmlspecialchars($current->tdname), ""; echo "" , htmlspecialchars($current->tddesc), ""; echo ""._LISTS_EDIT.""; $url = $manager->addTicketToUrl('index.php?action=templateclone&templateid=' . intval($current->tdnumber)); echo ""._LISTS_CLONE.""; echo ""._LISTS_DELETE.""; break; } } function listplug_table_skinlist($template, $type) { global $CONF, $DIR_SKINS, $manager; switch($type) { case 'HEAD': echo ""._LISTS_NAME.""._LISTS_DESC.""._LISTS_ACTIONS.""; break; case 'BODY': $current = $template['current']; echo ''; // use a special style for the default skin if ($current->sdnumber == $CONF['BaseSkin']) { echo '',htmlspecialchars($current->sdname),''; } else { echo htmlspecialchars($current->sdname); } echo '

'; echo _LISTS_TYPE ,': ' , htmlspecialchars($current->sdtype); echo '
', _LIST_SKINS_INCMODE , ' ' , (($current->sdincmode=='skindir') ?_PARSER_INCMODE_SKINDIR:_PARSER_INCMODE_NORMAL); if ($current->sdincpref) echo '
' , _LIST_SKINS_INCPREFIX , ' ', htmlspecialchars($current->sdincpref); // add preview image when present if ($current->sdincpref && @file_exists($DIR_SKINS . $current->sdincpref . 'preview.png')) { echo '

'; $hasEnlargement = @file_exists($DIR_SKINS . $current->sdincpref . 'preview-large.png'); if ($hasEnlargement) echo ''; echo 'Preview for \'',htmlspecialchars($current->sdname),'\' skin'; if ($hasEnlargement) echo ''; if (@file_exists($DIR_SKINS . $current->sdincpref . 'readme.html')) { echo '
Readme'; } } echo ""; echo "" , htmlspecialchars($current->sddesc); // show list of defined parts $r = sql_query('SELECT stype FROM '.sql_table('skin').' WHERE sdesc='.$current->sdnumber . ' ORDER BY stype'); $types = array(); while ($o = mysql_fetch_object($r)) array_push($types,$o->stype); if (sizeof($types) > 0) { $friendlyNames = SKIN::getFriendlyNames(); for ($i=0;$i' . htmlspecialchars($friendlyNames[$type]) . ""; } echo '

',_LIST_SKINS_DEFINED,' '; } echo ""; echo ""._LISTS_EDIT.""; $url = $manager->addTicketToUrl('index.php?action=skinclone&skinid=' . intval($current->sdnumber)); echo ""._LISTS_CLONE.""; echo ""._LISTS_DELETE.""; break; } } function listplug_table_draftlist($template, $type) { switch($type) { case 'HEAD': echo ""._LISTS_BLOG.""._LISTS_TITLE.""._LISTS_ACTIONS.""; break; case 'BODY': $current = $template['current']; echo '', htmlspecialchars($current->bshortname) , ''; echo '', htmlspecialchars(strip_tags($current->ititle)) , ''; echo ""._LISTS_EDIT.""; echo ""._LISTS_DELETE.""; break; } } function listplug_table_actionlist($template, $type) { switch($type) { case 'HEAD': echo ''._LISTS_TIME.''._LIST_ACTION_MSG.''; break; case 'BODY': $current = $template['current']; echo '' , htmlspecialchars($current->timestamp), ''; echo '' , htmlspecialchars($current->message), ''; break; } } function listplug_table_banlist($template, $type) { switch($type) { case 'HEAD': echo ''._LIST_BAN_IPRANGE.''. _LIST_BAN_REASON.''._LISTS_ACTIONS.''; break; case 'BODY': $current = $template['current']; echo '' , htmlspecialchars($current->iprange) , ''; echo '' , htmlspecialchars($current->reason) , ''; echo "",_LISTS_DELETE,""; break; } } /** * Returns the Javascript code for a bookmarklet that works on most modern browsers * * @param blogid */ function getBookmarklet($blogid) { global $CONF; // normal $document = 'document'; $bookmarkletline = "javascript:Q='';x=".$document.";y=window;if(x.selection){Q=x.selection.createRange().text;}else if(y.getSelection){Q=y.getSelection();}else if(x.getSelection){Q=x.getSelection();}wingm=window.open('"; $bookmarkletline .= $CONF['AdminURL'] . "bookmarklet.php?blogid=$blogid"; $bookmarkletline .="&logtext='+escape(Q)+'&loglink='+escape(x.location.href)+'&loglinktitle='+escape(x.title),'nucleusbm','scrollbars=yes,width=600,height=500,left=10,top=10,status=yes,resizable=yes');wingm.focus();"; return $bookmarkletline; } ?>