2 if ( !class_exists('BaseActions') )
4 include $DIR_LIBS . 'BaseActions.php';
8 class AdminActions extends BaseActions
12 /* NOTE: list of whole available action names for tags
22 'adminskineditallowedlist',
25 'adminskinselectoptions',
26 'adminspecialskinlist',
27 'admintemplateoverview',
28 'allowedadminskinactions',
50 'configsettingsyesno',
52 'createaccountsuccess',
53 'createaccountdisable',
56 'defaultadminskintypes',
66 'editadmintemplateinfo',
72 'editplugoptionslist',
92 'listplugplugoptionrow',
93 'localeselectoptions',
110 'selectlocaladminskinfiles',
111 'selectlocalskinfiles',
112 'skineditallowedlist',
129 * AdminActions::$default_actions
130 * list of whole action names with which this class can deal
132 static private $default_actions = array(
156 * AdminActions::$skin_type_friendly_names
157 * friendly name for wrapped page types
159 static private $default_skin_types = array(
160 'actionlog' => _ADM_SKPRT_ACTIONLOG,
161 'activate' => _ADM_SKPRT_ACTIVATE,
162 'activatesetpwd' => _ADM_SKPRT_ACTIVATESETPWD,
163 'addnewlog' => _ADM_SKPRT_ADDNEWLOG,
164 'adminerrorpage' => _ADM_SKPRT_ADMINERRORPAGE,
165 'adminskindelete' => _ADM_SKPRT_ADMINSKINDELETE,
166 'adminskinedit' => _ADM_SKPRT_ADMINSKINEDIT,
167 'adminskinedittype' => _ADM_SKPRT_ADMINSKINEDITTYPE,
168 'adminskiniedoimport' => _ADM_SKPRT_ADMINSKINIEDOIMPORT,
169 'adminskinieimport' => _ADM_SKPRT_ADMINSKINIEIMPORT,
170 'adminskinieoverview' => _ADM_SKPRT_ADMINSKINIEOVERVIEW,
171 'adminskinoverview' => _ADM_SKPRT_ADMINSKINOVERVIEW,
172 'adminskinremovetype' => _ADM_SKPRT_ADMINSKINREMOVETYPE,
173 'admintemplatedelete' => _ADM_SKPRT_ADMINTEMPLATEDELETE,
174 'admintemplateedit' => _ADM_SKPRT_ADMINTEMPLATEEDIT,
175 'admntemplateoverview' => _ADM_SKPRT_ADMINTEMPLATEOVERVIEW,
176 'backupoverview' => _ADM_SKPRT_BACKUPOVERVIEW,
177 'backuprestore' => _ADM_SKPRT_BACKUPRESTORE,
178 'banlist' => _ADM_SKPRT_BANLIST,
179 'banlistdelete' => _ADM_SKPRT_BANLISTDELETE,
180 'banlistdeleteconfirm' => _ADM_SKPRT_BANLISTDELETECONFIRM,
181 'banlistnew' => _ADM_SKPRT_BANLISTNEW,
182 'batchcategory' => _ADM_SKPRT_BATCHCATEGORY,
183 'batchcomment' => _ADM_SKPRT_BATCHCOMMENT,
184 'batchdelete' => _ADM_SKPRT_BATCHDELETE,
185 'batchitem' => _ADM_SKPRT_BATCHITEM,
186 'batchmember' => _ADM_SKPRT_BATCHMEMBER,
187 'batchmove' => _ADM_SKPRT_BATCHMOVE,
188 'batchmovecat' => _ADM_SKPRT_BATCHMOVECAT,
189 'batchteam' => _ADM_SKPRT_BATCHTEAM,
190 'blogcommentlist' => _ADM_SKPRT_BLOGCOMMENTLIST,
191 'blogsettings' => _ADM_SKPRT_BLOGSETTINGS,
192 'bookmarklet' => _ADM_SKPRT_BOOKMARKLET,
193 'browseowncomments' => _ADM_SKPRT_BROWSEOWNCOMMENTS,
194 'browseownitems' => _ADM_SKPRT_BROWSEOWNITEMS,
195 'categorydelete' => _ADM_SKPRT_CATEGORYDELETE,
196 'categoryedit' => _ADM_SKPRT_CATEGORYEDIT,
197 'commentdelete' => _ADM_SKPRT_COMMENTDELETE,
198 'commentedit' => _ADM_SKPRT_COMMENTEDIT,
199 'createitem' => _ADM_SKPRT_CREATEITEM,
200 'createnewlog' => _ADM_SKPRT_CREATENEWLOG,
201 'createaccountinput' => _ADM_SKPRT_CREATEACCOUNTINPUT, /* not yet */
202 'createaccountsuccess' => _ADM_SKPRT_CREATEACCOUNTSUCCESS, /* not yet */
203 'createaccountdisable' => _ADM_SKPRT_CREATEACCOUNTDISALLOWED, /* not yet */
204 'deleteblog' => _ADM_SKPRT_DELETEBLOG,
205 'editmembersettings' => _ADM_SKPRT_EDITMEMBERSETTINGS,
206 'forgotpassword' => _ADM_SKPRT_FORGOTPASSWORD, /* not yet */
207 'itemcommentlist' => _ADM_SKPRT_ITEMCOMMENTLIST,
208 'itemdelete' => _ADM_SKPRT_ITEMDELETE,
209 'itemedit' => _ADM_SKPRT_ITEMEDIT,
210 'itemlist' => _ADM_SKPRT_ITEMLIST,
211 'itemmove' => _ADM_SKPRT_ITEMMOVE,
212 'login' => FALSE, //missing
213 'manage' => _ADM_SKPRT_MANAGE,
214 'manageteam' => _ADM_SKPRT_MANAGETEAM,
215 'memberdelete' => _ADM_SKPRT_MEMBERDELETE,
216 'memberedit' => FALSE, //missing
217 'overview' => _ADM_SKPRT_OVERVIEW,
218 'pagefoot' => _ADM_SKPRT_PAGEFOOT,
219 'pagehead' => _ADM_SKPRT_PAGEHEAD,
220 'plugindelete' => _ADM_SKPRT_PLUGINDELETE,
221 'pluginhelp' => _ADM_SKPRT_PLUGINHELP,
222 'pluginlist' => _ADM_SKPRT_PLUGINLIST,
223 'pluginoptions' => _ADM_SKPRT_PLUGINOPTIONS,
224 'settingsedit' => _ADM_SKPRT_SETTINGSEDIT,
225 'showlogin' => _ADM_SKPRT_SHOWLOGIN,
226 'skindelete' => _ADM_SKPRT_SKINDELETE,
227 'skinedit' => _ADM_SKPRT_SKINEDIT,
228 'skinedittype' => _ADM_SKPRT_SKINEDITTYPE,
229 'skiniedoimport' => _ADM_SKPRT_SKINIEDOIMPORT,
230 'skinieimport' => _ADM_SKPRT_SKINIEIMPORT,
231 'skinieoverview' => _ADM_SKPRT_SKINIEOVERVIEW,
232 'skinoverview' => _ADM_SKPRT_SKINOVERVIEW,
233 'skinremovetype' => _ADM_SKPRT_SKINREMOVETYPE,
234 'systemoverview' => _ADM_SKPRT_SYSTEMOVERVIEW,
235 'teamdelete' => _ADM_SKPRT_TEAMDELETE,
236 'templatedelete' => _ADM_SKPRT_TEMPLATEDELETE,
237 'templateedit' => _ADM_SKPRT_TEMPLATEEDIT,
238 'templateoverview' => _ADM_SKPRT_TEMPLATEOVERVIEW,
239 'usermanagement' => _ADM_SKPRT_USERMANAGEMENT,
243 * AdminActions::getAvailableSkinTypes()
247 * @return array list of friendly names for page actions
249 static public function getAvailableSkinTypes()
251 return self::$default_skin_types;
255 * AdminActions::getDefaultTypes()
259 * @return array list of friendly names for page actions
261 static public function getDefaultTypes()
263 return self::$default_skin_types;
267 * AdminActions::__construct()
268 * Constructor for a new Actions object
270 * @param string $type
273 public function __construct($type)
275 // call constructor of superclass first
276 parent::__construct();
277 $this->skintype = $type;
278 if ( !class_exists('Navlist') || !class_exists('Batch') )
281 include $DIR_LIBS . 'ENCAPSULATE.php';
287 * AdminActions::getAvailableActions()
290 * @return array allowed actions for the page type
292 public function getAvailableActions()
294 $extra_actions = array();
296 switch ( $this->skintype )
299 $extra_actions = array(
304 $extra_actions = array(
309 case 'activatesetpwd':
310 $extra_actions = array(
314 $extra_actions = array(
320 case 'adminerrorpage':
321 $extra_actions = array(
324 case 'adminskindelete':
325 $extra_actions = array(
329 case 'adminskinedit':
330 $extra_actions = array(
332 'defaultadminskintypes',
333 'adminspecialskinlist',
336 case 'adminskinedittype':
337 $extra_actions = array(
340 'allowedadminskinactions',
341 'adminskineditallowedlist',
344 case 'adminskiniedoimport':
345 $extra_actions = array(
349 case 'adminskinieimport':
350 $extra_actions = array(
354 case 'adminskinieoverview':
355 $extra_actions = array(
356 'selectlocaladminskinfiles',
360 case 'adminskinoverview':
361 $extra_actions = array(
365 case 'adminskinremovetype':
366 $extra_actions = array(
370 case 'admintemplatedelete':
371 $extra_actions = array(
372 'editadmintemplateinfo',
374 case 'admintemplateedit':
375 $extra_actions = array(
376 'editadmintemplateinfo',
379 case 'admntemplateoverview':
380 $extra_actions = array(
381 'admintemplateoverview',
384 case 'backupoverview':
385 $extra_actions = array(
388 case 'backuprestore':
389 $extra_actions = array(
393 $extra_actions = array(
399 case 'banlistdelete':
400 $extra_actions = array(
405 case 'banlistdeleteconfirm':
406 $extra_actions = array(
407 'banlistdeletedlist',
412 $extra_actions = array(
418 case 'batchcategory':
419 $extra_actions = array(
425 $extra_actions = array(
431 $extra_actions = array(
437 $extra_actions = array(
443 $extra_actions = array(
449 $extra_actions = array(
458 $extra_actions = array(
467 $extra_actions = array(
473 case 'blogcommentlist':
474 $extra_actions = array(
481 $extra_actions = array(
497 $extra_actions = array(
501 case 'browseowncomments':
502 $extra_actions = array(
506 case 'browseownitems':
507 $extra_actions = array(
511 case 'categorydelete':
512 $extra_actions = array(
518 $extra_actions = array(
525 case 'commentdelete':
526 $extra_actions = array(
531 $extra_actions = array(
535 case 'createaccountinput':
536 $extra_actions = array(
542 case 'createaccountsuccess':
543 $extra_actions = array(
\r
547 case 'createaccountdisable':
548 $extra_actions = array(
553 $extra_actions = array(
565 $extra_actions = array(
571 $extra_actions = array(
576 case 'editmembersettings':
577 $extra_actions = array(
578 'adminskinselectoptions',
580 'localeselectoptions',
584 case 'forgotpassword':
585 $extra_actions = array(
589 case 'itemcommentlist':
590 $extra_actions = array(
596 $extra_actions = array(
603 $extra_actions = array(
615 $extra_actions = array(
622 $extra_actions = array(
628 $extra_actions = array(
632 $extra_actions = array(
641 $extra_actions = array(
646 $extra_actions = array(
651 $extra_actions = array(
656 $extra_actions = array(
662 $extra_actions = array(
667 case 'pluginoptions':
668 $extra_actions = array(
670 'editplugoptionslist',
674 $extra_actions = array(
677 'configsettingsedit',
678 'configsettingsyesno',
681 'localeselectoptions',
687 $extra_actions = array(
692 $extra_actions = array(
697 $extra_actions = array(
703 $extra_actions = array(
706 'allowedskinactions',
707 'skineditallowedlist',
708 'skineditallowedlist',
711 case 'skiniedoimport':
712 $extra_actions = array(
717 $extra_actions = array(
721 case 'skinieoverview':
722 $extra_actions = array(
723 'selectlocalskinfiles',
728 $extra_actions = array(
732 case 'skinremovetype':
733 $extra_actions = array(
737 case 'systemoverview':
738 $extra_actions = array(
743 $extra_actions = array(
749 case 'templatedelete':
750 $extra_actions = array(
755 $extra_actions = array(
759 case 'templateoverview':
760 $extra_actions = array(
764 case 'usermanagement':
765 $extra_actions = array(
771 $extra_actions = array(
780 'selectlocaladminskinfiles',
788 $defined_actions = array_merge(self::$default_actions, $extra_actions);
790 return array_merge($defined_actions, parent::getAvailableActions());
794 * AdminActions::parse_actionloglist()
795 * Parse skinvar actionloglist
797 * @param string $templateName name of template to use
800 public function parse_actionloglist($templateName = '')
802 $query = "SELECT * FROM %s ORDER BY timestamp DESC";
803 $query = sprintf($query, sql_table('actionlog'));
805 $template['content'] = 'actionlist';
806 $amount = showlist($query, 'table', $template, $templateName);
812 * AdminActions::parse_activationmessage()
813 * Parse skinvar activationmessage
815 * @param string $type type of message
816 * @param string $templateName name of template to use
819 public function parse_activationmessage($type, $templateName = '')
821 global $CONF, $manager;
825 if ( !empty($templateName))
827 $template =& $manager->getTemplate($templateName);
830 $key = postVar('ackey');
833 Admin::error(_ERROR_ACTIVATE);
836 $info = MEMBER::getActivationInfo($key);
839 Admin::error(_ERROR_ACTIVATE);
842 $mem =& $manager->getMember($info->vmember);
845 Admin::error(_ERROR_ACTIVATE);
847 switch ( $info->vtype )
850 if ( array_key_exists('ACTIVATE_FORGOT_TITLE', $template) && !empty($template['ACTIVATE_FORGOT_TITLE']) )
852 $title = $template['ACTIVATE_FORGOT_TITLE'];
856 $title = _ACTIVATE_FORGOT_TITLE;
858 if ( array_key_exists('ACTIVATE_FORGOT_TEXT', $template) && !empty($template['ACTIVATE_FORGOT_TEXT']) )
860 $text = $template['ACTIVATE_FORGOT_TEXT'];
864 $text = _ACTIVATE_FORGOT_TEXT;
868 if ( array_key_exists('ACTIVATE_REGISTER_TITLE', $template) && !empty($template['ACTIVATE_REGISTER_TITLE']) )
870 $title = $template['ACTIVATE_REGISTER_TITLE'];
874 $title = _ACTIVATE_REGISTER_TITLE;
876 if ( array_key_exists('ACTIVATE_REGISTER_TEXT', $template) && !empty($template['ACTIVATE_REGISTER_TEXT']) )
878 $text = $template['ACTIVATE_REGISTER_TEXT'];
882 $text = _ACTIVATE_REGISTER_TEXT;
885 case 'addresschange':
886 if ( array_key_exists('ACTIVATE_CHANGE_TITLE', $template) && !empty($template['ACTIVATE_CHANGE_TITLE']) )
888 $title = $template['ACTIVATE_CHANGE_TITLE'];
892 $title = _ACTIVATE_CHANGE_TITLE;
894 if (array_key_exists('ACTIVATE_CHANGE_TEXT', $template) && !empty($template['ACTIVATE_CHANGE_TEXT']))
896 $text = $template['ACTIVATE_CHANGE_TEXT'];
900 $text = _ACTIVATE_CHANGE_TEXT;
905 'memberName' => Entity::hsc($mem->getDisplayName()),
906 'realName' => Entity::hsc($mem->getRealName()),
911 echo Template::fill($title, $aVars);
914 echo Template::fill($text, $aVars);
917 echo Entity::hsc($key);
924 * AdminActions::parse_addtickettourl()
925 * Parse skinvar addtickettourl
927 * @param string $url URI for ticket
930 public function parse_addtickettourl($url)
933 $url = $manager->addTicketToUrl($url);
934 echo Entity::hsc($url);
939 * AdminActions::parse_adminbanlist()
940 * Parse skinvar adminbanlist
942 * @param string $templateName name of template to use
945 public function parse_adminbanlist($templateName = '')
947 $blogid = intRequestVar('blogid');
949 $query = "SELECT * FROM %s WHERE blogid=%d ORDER BY iprange;";
950 $query = sprintf($query, sql_table('ban'), (integer) $blogid);
952 $template['content'] = 'banlist';
954 $amount = Showlist($query, 'table', $template, $templateName);
964 * AdminActions::parse_adminbatchaction()
965 * Parse skinvar adminbatchaction
970 public function parse_adminbatchaction()
972 echo Entity::hsc(requestVar('batchaction'));
977 * AdminActions::parse_adminbatchlist()
978 * Parse skinvar adminbatchlist
980 * @param string $templateName name of template to use
983 public function parse_adminbatchlist($templateName = '')
986 $templates = array();
988 if ( !empty($templateName) )
990 $templates =& $manager->getTemplate($templateName);
993 if ( !array_key_exists('ADMIN_BATCHLIST', $templates) || empty($templates['ADMIN_BATCHLIST']) )
995 $template = '<li><%text(_BATCH_EXECUTING)%> '
996 . '<b><%adminbatchaction%></b> '
997 . '<%batchlisttype%> '
998 . '<b><%batchid%></b>... '
999 . '<b><%batchlistmsg%></b>'
1004 $template = $templates['ADMIN_BATCHLIST'];
1007 $selected = requestIntArray('batch');
1008 $action = requestVar('batchaction');
1010 switch ( $this->skintype )
1013 $batchlisttype = _BATCH_ONITEM;
1014 $deleteaction = 'deleteOneItem';
1015 $moveaction = 'moveOneItem';
1016 $destid = intRequestVar('destcatid');
1018 case 'batchcomment':
1019 $batchlisttype = _BATCH_ONCOMMENT;
1020 $deleteaction = 'deleteOneComment';
1023 $batchlisttype = _BATCH_ONMEMBER;
1024 $deleteaction = 'deleteOneMember';
1025 $setadminsql = sql_table('member') . ' SET madmin = 1 WHERE mnumber = ';
1026 $unsetchksql = 'SELECT * FROM ' . sql_table('member') . ' WHERE madmin = 1 AND mcanlogin = 1';
1027 $unsetupsql = sql_table('member') . ' SET madmin = 0 WHERE mnumber = ';
1028 $unseterrmsg = _ERROR_ATLEASTONEADMIN;
1031 $blogid = intRequestVar('blogid');
1032 $batchlisttype = _BATCH_ONTEAM;
1033 $deleteaction = 'deleteOneTeamMember';
1034 $setadminsql = sql_table('team') . ' SET tadmin = 1 WHERE tblog = ' . $blogid . ' AND tmember = ';
1035 $unsetchksql = 'SELECT * FROM ' . sql_table('team') . ' WHERE tadmin = 1 AND tblog = ' . $blogid;
1036 $unseterrmsg = _ERROR_ATLEASTONEBLOGADMIN;
1037 $unsetupsql = sql_table('team') . ' SET tadmin = 0 WHERE tblog = ' . $blogid . ' AND tmember = ';
1039 case 'batchcategory':
1040 $batchlisttype = _BATCH_ONCATEGORY;
1041 $deleteaction = 'deleteOneCategory';
1042 $moveaction = 'moveOneCategory';
1043 $destid = intRequestVar('destblogid');
1047 // walk over all selectedids and perform action
1048 foreach ( $selected as $selectedid )
1051 $selectedid = intval($selectedid);
1055 if ( $this->skintype != 'batchteam' )
1057 $error = call_user_func_array(array('Admin', $deleteaction), array($selectedid));
1061 $error = Admin::deleteOneTeamMember($blogid, $selectedid);
1065 $error = call_user_func_array(array('Admin', $moveaction), array($selectedid, $destid));
1069 DB::execute("UPDATE {$setadminsql} {$selectedid};");
1073 // there should always remain at least one super-admin
1074 $r = DB::getResult($unsetchksql);
1075 if ( $r->rowCount() < 2 )
1077 $error = $unseterrmsg;
1081 DB::execute("UPDATE {$unsetupsql} {$selectedid};");
1085 $error = _BATCH_UNKNOWN . Entity::hsc($action);
1089 'batchid' => $selectedid,
1090 'batchlisttype' => Entity::hsc($batchlisttype),
1091 'adminbatchaction' => Entity::hsc($action),
1092 'batchlistmsg' => $error ? $error : _BATCH_SUCCESS,
1095 $handler = new AdminActions('template');
1096 $parser = new Parser($handler);
1098 $output = Template::fill($template, $data);
1100 $parser->parse($output);
1101 $output = ob_get_contents();
1103 echo "{$output}<br />";
1109 * AdminActions::parse_adminbloglink()
1110 * Parse skinvar adminbloglink
1112 * @param string $templateName name of template to use
1115 public function parse_adminbloglink($templateName = '')
1118 $blogid = intRequestVar('blogid');
1119 $blog =& $manager->getBlog($blogid);
1120 $templates = array();
1122 if ( !empty($templateName) )
1124 $templates =& $manager->getTemplate($templateName);
1127 if ( !array_key_exists('ADMIN_BLOGLINK', $templates) || empty($templates['ADMIN_BLOGLINK']) )
1129 $template = '<a href="<%url%>" title="<%adminbloglinktitle%>"><%blogname%></a>';
1133 $template = $templates['ADMIN_BLOGLINK'];
1137 'url' => Entity::hsc($blog->getURL()),
1138 'adminbloglinktitle' => _BLOGLIST_TT_VISIT,
1139 'blogname' => Entity::hsc($blog->getName())
1142 echo Template::fill($template, $data);
1147 * AdminActions::parse_adminerrormesg()
1148 * Parse skinvar adminerrormesg
1153 public function parse_adminerrormesg()
1158 if ( requestVar('errormessage') )
1160 $message = requestVar('errormessage');
1162 elseif ( cookieVar($CONF['CookiePrefix'] . 'errormessage') )
1164 $message = cookieVar($CONF['CookiePrefix'] . 'errormessage');
1166 elseif ( Admin::sessionVar($CONF['CookiePrefix'] . 'errormessage') )
1168 $message = Admin::sessionVar($CONF['CookiePrefix'] . 'errormessage');
1170 echo Entity::hsc($message);
1175 * AdminActions::parse_adminskineditallowedlist()
1176 * Parse skinvar adminskineditallowedlist
1178 * @param string $type template/blog
1179 * @param string $templateName name of template to use
1182 public function parse_adminskineditallowedlist($type = 'template', $templateName = '')
1186 /* TODO: blog seems not to be used */
1188 $query = "SELECT bshortname, bname FROM %s";
1189 $query = sprintf($query, sql_table('blog'));
1191 'content' => 'shortblognames'
1193 Showlist($query, 'table', $show, $templateName);
1196 $query = "SELECT tdname as name, tddesc as description FROM %s WHERE tdname LIKE 'admin/%%'";
1197 $query = sprintf($query, sql_table('template_desc'));
1199 'content' => 'shortnames'
1201 Showlist($query, 'table', $show, $templateName);
1208 * AdminActions::parse_adminskinielist()
1209 * Parse skinvar adminskinielist
1211 * @param string $type skin/template
1212 * @param string $templateName name of template to use
1215 public function parse_adminskinielist($type, $templateName = '')
1219 $templates = array();
1220 if ( $templateName )
1222 $templates =& $manager->getTemplate($templateName);
1225 if ( !array_key_exists('SKINIE_EXPORT_LIST', $templates) || empty($templates['SKINIE_EXPORT_LIST']) )
1228 . "<input type=\"checkbox\" name=\"<%typeid%>\" id=\"<%expid%>\" />\n"
1229 . "<label for=\"<%expid%>\"><%expname%></label>"
1231 . "<td><%expdesc%></td>\n"
1237 $template = $templates['SKINIE_EXPORT_LIST'];
1243 $query = "SELECT * FROM %s WHERE sdname LIKE 'admin/%%';";
1244 $query = sprintf($query, sql_table('skin_desc'));
1245 $res = DB::getResult($query);
1247 foreach ( $res as $row )
1250 'typeid' => 'skin[' . $row['sdnumber'] . ']',
1251 'expid' => 'skinexp' . $row['sdnumber'],
1252 'expname' => Entity::hsc($row['sdname']),
1253 'expdesc' => Entity::hsc($row['sddesc']),
1255 echo Template::fill($template, $data);
1259 $query = "SELECT * FROM %s WHERE tdname LIKE 'admin/%%';";
1260 $query = sprintf($query, sql_table('template_desc'));
1261 $res = DB::getResult($query);
1262 foreach ( $res as $row )
1265 'typeid' => 'template[' . $row['tdnumber'] . ']',
1266 'expid' => 'templateexp' . $row['tdnumber'],
1267 'expname' => Entity::hsc($row['tdname']),
1268 'expdesc' => Entity::hsc($row['tddesc']),
1270 echo Template::fill($template, $data);
1278 * AdminActions::parse_adminskinoverview()
1279 * Parse skinvar adminskinoverview
1281 * @param string $templateName name of template to use
1284 public function parse_adminskinoverview($templateName = '')
1286 $query = "SELECT * FROM %s WHERE sdname LIKE 'admin/%%' ORDER BY sdname;";
1287 $query = sprintf($query, sql_table('skin_desc'));
1289 $template['content'] = 'adminskinlist';
1290 $template['tabindex'] = 10;
1291 $template['friendly_names'] = $this->parser->skin->getAvailableTypes();
1292 Showlist($query, 'table', $template, $templateName);
1297 * AdminActions::parse_adminskinselectoptions()
1298 * Parse skinvar adminskinselectoptions
1303 public function parse_adminskinselectoptions($templateName = '')
1306 $query = "SELECT sdname as text, sdnumber as value FROM %s WHERE sdname LIKE 'admin/%%';";
1307 $query = sprintf($query, sql_table('skin_desc'));
1309 $template['name'] = 'adminskin';
1310 $template['selected'] = $CONF['AdminSkin'];
1311 $template['tabindex'] = 110;
1312 Showlist($query, 'select', $template, $templateName);
1317 * AdminActions::parse_adminspecialskinlist()
1318 * Parse skinvar adminspecialskinlist
1320 * @param string $templateName name of template to use
1322 public function parse_adminspecialskinlist($templateName = '')
1326 $templates = array();
1327 if ( $templateName )
1329 $templates =& $manager->getTemplate($templateName);
1332 $nType = $this->parser->skin->getAvailableTypes();
1333 $skinid = intRequestVar('skinid');
1335 $query = "SELECT stype FROM %s WHERE stype NOT IN (%s) AND sdesc=%d;";
1336 $query = sprintf($query, sql_table('skin'), "'" . implode("', '", $nType) . "'", (integer) $skinid);
1338 $res = DB::getResult($query);
1339 if ( $res && $res->rowCount() > 0 )
1341 /* NOTE: set templates for HEAD/BODY/FOOT */
1342 if ( !array_key_exists('ADMIN_SPECIALSKINLIST_HEAD', $templates) || empty($templates['ADMIN_SPECIALSKINLIST_HEAD']) )
1344 $template['head'] = "<ul>\n";
1348 $template['head'] = $templates['ADMIN_SPECIALSKINLIST_HEAD'];
1350 if ( !array_key_exists('ADMIN_SPECIALSKINLIST_BODY', $templates) || empty($templates['ADMIN_SPECIALSKINLIST_BODY']) )
1352 $template['body'] = '<li>'
1353 . '<a tabindex="<%tabindex%>" href="index.php?action=adminskinedittype&skinid=<%skinid%>&type=<%skintype%>">'
1356 . '(<a tabindex="<%tabindex%>" href="index.php?action=adminskinremovetype&skinid=<%skinid%>&type=<%skintype%>">'
1363 $template['body'] = $templates['ADMIN_SPECIALSKINLIST_BODY'];
1365 if ( !array_key_exists('ADMIN_SPECIALSKINLIST_FOOT', $templates) || empty($templates['ADMIN_SPECIALSKINLIST_FOOT']) )
1367 $template['foot'] = "</ul>\n";
1371 $template['foot'] = $templates['ADMIN_SPECIALSKINLIST_FOOT'];
1378 echo $template['head'];
1379 foreach ( $res as $row )
1382 'tabindex' => $tabstart++,
1383 'skinid' => $skinid,
1384 'skintype' => Entity::hsc(strtolower($row['stype']))
1386 echo Template::fill($template['body'], $data);
1389 echo $template['foot'];
1395 * AdminActions::parse_admintemplateoverview()
1396 * Parse skinvar admintemplateoverview
1398 * @param string $templateName name of template to use
1401 public function parse_admintemplateoverview($templateName = '')
1403 $query = "SELECT * FROM %s WHERE tdname LIKE 'admin/%%' ORDER BY tdname;";
1404 $query = sprintf($query, sql_table('template_desc'));
1406 $template['content'] = 'admintemplatelist';
1407 $template['tabindex'] = 10;
1409 Showlist($query, 'table', $template, $templateName);
1414 * AdminActions::parse_allowedadminskinactions()
1415 * Parse skinvar allowedadminskinactions
1420 public function parse_allowedadminskinactions()
1422 global $DIR_ADMINSKINS;
1423 $skinType = strtolower(trim(requestVar('type')));
1424 $actions = $this->parser->skin->getAllowedActionsForType($skinType);
1427 while ( $current = array_shift($actions) )
1429 // TODO: remove this
1430 // skip deprecated vars
1431 if ($current == 'ifcat' || $current == 'imagetext' || $current == 'vars')
1436 echo helplink("adminskinvar-{$current}") . "$current</a>\n";
1438 if ( count($actions) != 0 )
1447 * AdminActions::parse_allowedskinactions()
1448 * Parse skinvar allowedskinactions
1453 public function parse_allowedskinactions()
1455 $skinType = strtolower(trim(requestVar('type')));
1456 $skinid = intRequestVar('skinid');
1458 $skin = new Skin($skinid);
1459 $actions = $skin->getAllowedActionsForType($skinType);
1462 while ( $current = array_shift($actions) )
1464 // TODO: remove this
1465 // skip deprecated vars
1466 if ( $current == 'ifcat' || $current == 'imagetext' || $current == 'vars' )
1471 /* TODO: alternative function should be used or not? */
1472 echo helplink("skinvar-{$current}") . "$current</a>\n";
1474 if ( count($actions) != 0 )
1483 * AdminActions::parse_banlistdeletedlist()
1484 * Parse skinvar banlistdeletedlist
1486 * @param string $templateName name of template to use
1489 public function parse_banlistdeletedlist($templateName = '')
1493 $templates = array();
1494 if ( $templateName )
1496 $templates =& $manager->getTemplate($templateName);
1499 if ( !array_key_exists('BANLIST_DELETED_LIST', $templates) || empty($templates['BANLIST_DELETED_LIST']) )
1501 $template = "<li><%blogname%></li>\n";
1505 $template = $templates['BANLIST_DELETED_LIST'];
1508 $deleted = requestArray('delblogs');
1509 foreach ( $deleted as $delblog )
1511 $blog =& $manager->getBlog($delblog);
1513 'blogname' => Entity::hsc($blog->getName())
1515 echo Template::fill($template, $data);
1522 * AdminActions::parse_batchdeletelist()
1523 * Parse skinvar batchdeletelist
1528 public function parse_batchdeletelist()
1530 $selected = requestIntArray('batch');
1533 foreach ( $selected as $select )
1535 echo '<input type="hidden" name="batch[' . ($index++) . ']" value="' . intval($select) . "\" />\n";
1537 // add hidden vars for team & comment
1538 if ( requestVar('action') == 'batchteam' )
1540 echo '<input type="hidden" name="blogid" value="' . intRequestVar('blogid') . "\" />\n";
1542 if ( requestVar('action') == 'batchcomment' )
1544 echo '<input type="hidden" name="itemid" value="' . intRequestVar('itemid') . "\" />\n";
1550 * AdminActions::parse_batchdeletetype()
1551 * Parse skinvar batchdeletetype
1556 public function parse_batchdeletetype()
1558 echo Entity::hsc(requestVar('action'));
1563 * AdminActions::parse_batchmovebtn()
1564 * Parse skinvar batchmovebtn
1569 public function parse_batchmovebtn()
1571 $actionType = requestVar('action');
1572 switch ( $actionType )
1577 case 'batchcategory':
1585 * AdminActions::parse_batchmovelist()
1586 * Parse skinvar batchmovelist
1591 public function parse_batchmovelist()
1593 $selected = requestIntArray('batch');
1595 foreach ( $selected as $select )
1597 echo '<input type="hidden" name="batch[' . ($count) . ']" value="' . intval($select) . "\" />\n";
1604 * AdminActions::parse_batchmovetitle()
1605 * Parse skinvar batchmovetitle
1610 public function parse_batchmovetitle()
1612 $actionType = requestVar('action');
1613 switch ( $actionType )
1618 case 'batchcategory':
1619 echo _MOVECAT_TITLE;
1626 * AdminActions::parse_batchmovetype()
1627 * Parse skinvar batchmovetype
1632 public function parse_batchmovetype()
1634 echo Entity::hsc(requestVar('action'));
1639 * AdminActions::parse_blogcatlist()
1640 * Parse skinvar blogcatlist
1645 public function parse_blogcatlist($templateName = '')
1648 $blogid = intRequestVar('blogid');
1649 $query = "SELECT * FROM %s WHERE cblog = %d ORDER BY cname;";
1650 $query = sprintf($query, sql_table('category'), (integer) $blogid);
1652 $template['content'] = 'categorylist';
1653 $template['tabindex'] = 200;
1655 $batch = new Batch('category');
1656 $batch->showlist($query, 'table', $template, $templateName);
1661 * AdminActions::parse_blogid()
1662 * Parse skinvar blogid
1667 public function parse_blogid()
1669 echo intRequestVar('blogid');
1674 * AdminActions::parse_blognotifysetting()
1675 * Parse skinvar blognotifysetting
1680 public function parse_blognotifysetting($type)
1683 $blogid = intRequestVar('blogid');
1684 $blog =& $manager->getBlog($blogid);
1689 if ( !$blog->notifyOnComment() )
1695 if ( !$blog->notifyOnVote() )
1701 if ( !$blog->notifyOnNewItem() )
1707 echo ' checked="checked"';
1712 * AdminActions::parse_blogsetting()
1713 * Parse skinvar blogsetting
1715 * @param string $which name of weblog setting
1718 public function parse_blogsetting($which)
1720 echo $this->parse_getblogsetting($which);
1725 * AdminActions::parse_blogsettingyesno()
1726 * Parse skinvar blogsettingyesno
1728 * @param string $type type of weblog setting
1729 * @param string $templateName name of template to use
1732 public function parse_blogsettingyesno($type, $templateName = '')
1736 $blogid = intRequestVar('blogid');
1737 $blog =& $manager->getBlog($blogid);
1741 case 'convertbreaks':
1742 $checkedval = $blog->convertBreaks();
1745 case 'allowpastposting':
1746 $checkedval = $blog->allowPastPosting();
1750 $checkedval = $blog->commentsEnabled();
1754 $checkedval = $blog->isPublic();
1758 $checkedval = $blog->emailRequired();
1762 $checkedval = $blog->getSearchable();
1766 $this->parse_inputyesno($type, $checkedval, $tabindex, 1, 0, _YES, _NO, 0, $templateName);
1771 * AdminActions::parse_blogteamlist()
1772 * Parse skinvar blogteamlist
1774 * @param string $templateName name of template to use
1777 public function parse_blogteamlist($templateName = '')
1780 $blogid = intRequestVar('blogid');
1781 $query = "SELECT tblog, tmember, mname, mrealname, memail, tadmin "
1783 . "WHERE tmember=mnumber AND tblog= %d";
1784 $query = sprintf($query, sql_table('member'), sql_table('team'), (integer) $blogid);
1786 $template['content'] = 'teamlist';
1787 $template['tabindex'] = 10;
1789 $batch = new Batch('team');
1790 $batch->showList($query, 'table', $template, $templateName, _LISTS_NOMORE);
1795 * AdminActions::parse_blogteammembers()
1796 * Parse skinvar blogteammembers
1801 public function parse_blogteammembers()
1803 $blogid = intRequestVar('blogid');
1804 $query = "SELECT mname, mrealname "
1806 . "WHERE mnumber=tmember AND tblog=%d;";
1807 $query = sprintf($query, sql_table('member'), sql_table('team'), (integer) $blogid);
1808 $res = DB::getResult($query);
1809 $memberNames = array();
1810 foreach ( $res as $row )
1812 $memberNames[] = Entity::hsc($row['mname']) . ' (' . Entity::hsc($row['mrealname']). ')';
1814 echo implode(',', $memberNames);
1818 * AdminActions::parse_blogtime()
1819 * Parse skinvar blogtime
1821 * @param string $type type of time
1822 * @param string $format format for time expression
1823 * @param integer $offset offset of time
1826 public function parse_blogtime($type, $format = '%H:%M', $offset = 0)
1830 if ( $type != 'blogtime' )
1832 /* return server time */
1833 $timestamp = time() + $offset;
1837 $bid = intRequestVar('blogid');
1838 $b =& $manager->getBlog($bid);
1839 $timestamp = $b->getCorrectTime() + $offset;
1842 echo i18n::formatted_datetime($format, $timestamp);
1847 * AdminActions::parse_bookmarkletadmin()
1848 * Parse skinvar bookmarkletadmin
1853 public function parse_bookmarkletadmin()
1857 $blogid = intRequestVar('blogid');
1859 echo Entity::hsc('javascript:' . getBookmarklet($blogid));
1864 * AdminActions::parse_categories()
1865 * Parse skinvar categories
1867 * create category dropdown box
1869 * @param string $type name of setting for category
1872 public function parse_categories($startidx = 0)
1877 $itemid = intRequestVar('itemid');
1878 $item = &$manager->getItem($itemid, 1, 1);
1883 $blogid = intRequestVar('blogid');
1887 $blogid = $item['blogid'];
1889 $blog = &$manager->getBlog($blogid);
1891 if ( $item && $blog->convertBreaks() && requestVar('action') == 'itemedit' )
1893 $item['body'] = removeBreaks($item['body']);
1894 $item['more'] = removeBreaks($item['more']);
1897 $contents = array();
1898 if ( requestVar('action') == 'itemedit' )
1903 if ( !array_key_exists('catid', $contents) || empty($contents['catid']) )
1906 $catid = $blog->getDefaultCategory();
1911 $catid = $contents['catid'];
1914 $this->selectBlog('catid', 'category', $catid, $startidx, 1, $blog->getID());
1920 * AdminActions::parse_category()
1921 * Parse skinvar category
1923 * @param string $type name of setting for category
1926 public function parse_category($type = 'name')
1928 echo $this->parse_getcategory($type);
1933 * AdminActions::parse_categorysetting()
1934 * Parse skinvar categorysetting
1936 * @param string $type type in category setting
1939 public function parse_categorysetting($type)
1941 $catid = intRequestVar('catid');
1942 if ( $type == 'id' )
1947 $blogid = intRequestVar('blogid');
1948 $query = "SELECT * FROM %s WHERE cblog = %d AND catid = %d;";
1949 $query = sprintf($query, sql_table('category'), (integer) $blogid, (integer) $catid);
1950 $row = DB::getRow($query);
1952 if ( $type != 'name' )
1954 echo Entity::hsc($row['cdesc']);
1958 echo Entity::hsc($row['cname']);
1965 * AdminActions::parse_codename()
1966 * Parse templatevar codename
1972 public function parse_checkedonval($value, $name)
1977 $itemid = intRequestVar('itemid');
1978 $item =& $manager->getItem($itemid, 1, 1);
1980 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
1982 if ( $item && $blog->convertBreaks() && requestVar('action') == 'itemedit' )
1984 $item['body'] = removeBreaks($item['body']);
1985 $item['more'] = removeBreaks($item['more']);
1988 $contents = array();
1989 if ( requestVar('action') == 'itemedit' )
1993 if ( !isset($contents[$name]) )
1995 $contents[$name] = '';
1997 if ($contents[$name] == $value)
1999 echo 'checked="checked"';
2005 * AdminActions::parse_codename()
2006 * Parse templatevar codename
2011 * TODO: is this need???
2013 public function parse_codename()
2016 echo $nucleus['codename'];
2021 * AdminActions::parse_commentnavlist()
2022 * Parse skinvar commentnavlist
2027 public function parse_commentnavlist()
2029 global $CONF, $manager, $member;
2032 if ( postVar('start') )
2034 $start = intPostVar('start');
2041 // amount of items to show
2042 if ( postVar('amount') )
2044 $amount = intPostVar('amount');
2048 $amount = (integer) $CONF['DefaultListSize'];
2054 $query = 'SELECT cbody, cuser, cmail, cemail, mname, ctime, chost, cnumber, cip, citem '
2056 . 'LEFT OUTER JOIN %s ON mnumber=cmember '
2058 $query = sprintf($query, sql_table('comment'), sql_table('member'));
2060 if ( $this->skintype == 'itemcommentlist' )
2062 $itemid = intRequestVar('itemid');
2063 $query .= " citem={$itemid}";
2064 $template['canAddBan'] = $member->blogAdminRights(intRequestVar('blogid'));
2066 $nonComments = _NOCOMMENTS;
2068 elseif ( $this->skintype == 'browseowncomments' )
2071 $query .= ' cmember=' . $member->getID();
2072 $template['canAddBan'] = 0;
2074 $nonComments = _NOCOMMENTS_YOUR;
2076 elseif ( $this->skintype == 'blogcommentlist' )
2079 $query .= ' cblog=' . intRequestVar('blogid');
2080 $template['canAddBan'] = $member->blogAdminRights(intRequestVar('blogid'));
2081 $bid = intRequestVar('blogid');
2082 $nonComments = _NOCOMMENTS_BLOG;
2085 $search = postVar('search');
2086 if ( !empty($search) )
2088 $query .= ' and cbody LIKE ' . DB::quoteValue('%'.$search.'%');
2091 $query .= " ORDER BY ctime ASC LIMIT {$start},{$amount}";
2093 $template['content'] = 'commentlist';
2095 $navList = new Navlist($this->skintype, $start, $amount, 0, 1000, $bid, $search, $itemid);
2096 $navList->showBatchList('comment', $query, 'table', $template, $nonComments);
2101 * AdminActions::parse_configsettingsedit()
2102 * Parse skinvar configsettingsedit
2104 * @param string $type type of global configuration
2107 public function parse_configsettingsedit($type)
2112 case 'DefaultListSize':
2113 if ( !array_key_exists('DefaultListSize', $CONF) )
2115 $query = "INSERT INTO %s VALUES (DefaultListSize, 10);";
2116 $query = sprintf($query, sql_table('config'));
2117 DB::execute($query);
2118 $CONF['DefaultListSize'] = 10;
2120 elseif ( intval($CONF['DefaultListSize']) < 1 )
2122 $CONF['DefaultListSize'] = 10;
2124 echo intval($CONF['DefaultListSize']);
2126 case 'SessionCookie':
2127 $value = $CONF['SessionCookie'];
2128 $txt1 = _SETTINGS_COOKIESESSION;
2129 $txt2 = _SETTINGS_COOKIEMONTH;
2130 $this->parse_inputyesno('SessionCookie', $value, 10190, 1, 0, $txt1, $txt2);
2133 $value = $CONF['URLMode'];
2134 $txt1 = _SETTINGS_URLMODE_NORMAL;
2135 $txt2 = _SETTINGS_URLMODE_PATHINFO;
2136 $this->parse_inputyesno('URLMode', $value, 10077, 'normal', 'pathinfo', $txt1, $txt2);
2139 if ( array_key_exists($type, $CONF) && is_string($CONF[$type]) )
2141 echo Entity::hsc($CONF[$type]);
2149 * AdminActions::parse_configsettingsyesno()
2150 * Parse skinvar configsettingsyesno
2152 * @param string $type type of global setting
2153 * @param integer $tabindex tabindex attribute of input element
2156 public function parse_configsettingsyesno($type, $tabindex)
2159 if ( array_key_exists($type, $CONF) )
2161 $this->parse_inputyesno($type, $CONF[$type], $tabindex);
2167 * AdminActions::parse_contents()
2168 * Parse skinvar contents
2170 * @param string $which part for item
2173 public function parse_contents($which)
2175 if ( !array_key_exists($which, Admin::$contents) )
2177 Admin::$contents[$which] = '';
2179 echo Entity::hsc(Admin::$contents[$which]);
2183 * AdminActions::parse_currenttime()
2184 * Parse skinvar currenttime
2186 * @param string $what
2189 public function parse_currenttime($what)
2191 $nu = getdate(Admin::$blog->getCorrectTime());
2196 * AdminActions::parse_customhelplink()
2197 * Parse skinvar customhelplink
2199 * @param string $topic name of topic
2200 * @param string $tplName name of template
2201 * @param string $url string as URI
2202 * @param string $iconURL string as URI for icon
2203 * @param string $alt alternative text for image element
2204 * @param string $title title for anchor element
2207 public function parse_customhelplink($topic, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
2209 $this->customHelp($topic, $url, $iconURL);
2214 * AdminActions::parse_date()
2215 * Parse skinvar date
2217 public function parse_date($format = 'c')
2219 global $CONF, $manager;
2220 echo i18n::formatted_datetime($format, time(), 'iso8601', $manager->getBlog((integer) $CONF['DefaultBlog']));
2225 * AdminActions::parse_defaultadminskintypes()
2226 * Parse skinvar defaultadminskintypes
2228 * @param string $tabindex index number for tabindex attribute of input element
2229 * @param string $templateName name of template
2232 public function parse_defaultadminskintypes($tabindex, $templateName = '')
2236 $templates = array();
2238 if ( $templateName )
2240 $templates =& $manager->getTemplate($templateName);
2243 $types = $this->parser->skin->getAvailableTypes();
2246 /* NOTE: set templates for HEAD/BODY/FOOT */
2247 if ( !array_key_exists('ADMINSKINTYPELIST_HEAD', $templates) || empty($templates['ADMINSKINTYPELIST_HEAD']) )
2249 $template['head'] = "<ul>\n";
2253 $template['head'] = $templates['ADMINSKINTYPELIST_HEAD'];
2255 if ( !array_key_exists('ADMINSKINTYPELIST_BODY', $templates) || empty($templates['ADMINSKINTYPELIST_BODY']) )
2257 $template['body'] = "<li>"
2258 . "<a tabindex=\"<%tabindex%>\" href=\"index.php?action=adminskinedittype&skinid=<%skinid%>&type=<%skintype%>\"><%name%></a> <%help%>"
2263 $template['body'] = $templates['ADMINSKINTYPELIST_BODY'];
2265 if ( !array_key_exists('ADMINSKINTYPELIST_FOOT', $templates) || empty($templates['ADMINSKINTYPELIST_FOOT']) )
2267 $template['foot'] = "</ul>\n";
2271 $template['foot'] = $templates['ADMINSKINTYPELIST_FOOT'];
2274 $handler = new AdminActions('template');
2275 $parser = new PARSER($handler);
2277 /* NOTE: do output */
2278 echo $template['head'];
2279 foreach ( $types as $type => $fName )
2281 $helplink = $this->customHelpHtml("skinpart{$type}{$templateName}");
2283 'tabindex' => $tabindex,
2284 'skintype' => $type,
2286 'help' => $helplink,
2287 'skinid' => intrequestVar('skinid'),
2289 $parser->parse(Template::fill($template['body'], $data));
2292 echo $template['foot'];
2298 * AdminActions::parse_defblogselect()
2299 * Parse skinvar defblogselect
2301 * @param string $templateName name of template
2304 public function parse_defblogselect($templateName = '')
2308 $query = "SELECT bname as text, bnumber as value FROM %s;";
2309 $query = sprintf($query, sql_table('blog'));
2311 $template['name'] = 'DefaultBlog';
2312 $template['selected'] = $CONF['DefaultBlog'];
2313 $template['tabindex'] = 10;
2315 Showlist($query, 'select', $template, $templateName);
2321 * AdminActions::parse_defcatselect()
2322 * Parse skinvar defcatselect
2324 * @param string $templateName name of template
2327 public function parse_defcatselect($templateName = '')
2331 $blogid = intRequestVar('blogid');
2332 $blog =& $manager->getBlog($blogid);
2334 $query = "SELECT cname as text, catid as value FROM %s WHERE cblog=%d;";
2335 $query = sprintf($query, sql_table('category'), (integer) $blog->getID());
2337 $template['name'] = 'defcat';
2338 $template['selected'] = $blog->getDefaultCategory();
2339 $template['tabindex'] = 110;
2341 Showlist($query, 'select', $template, $templateName);
2347 * AdminActions::parse_defskinselect()
2348 * Parse skinvar defskinselect
2350 * @param string $type type of skin
2351 * @param string $templateName name of template
2354 public function parse_defskinselect($type = 'blog', $templateName = '')
2356 global $CONF, $manager;
2358 $query = "SELECT sdname as text, sdnumber as value FROM %s WHERE sdname NOT LIKE 'admin/%%';";
2359 $query = sprintf($query, sql_table('skin_desc'));
2361 $blogid = intRequestVar('blogid');
2365 $template['selected'] = $CONF['BaseSkin'];
2369 $blog =& $manager->getBlog($blogid);
2370 $template['selected'] = $blog->getDefaultSkin();
2373 if ( $type != 'blog' )
2375 $nname = 'BaseSkin';
2382 $template['name'] = $nname;
2383 $template['tabindex'] = 50;
2385 Showlist($query, 'select', $template, $templateName);
2391 * AdminActions::parse_deletecomment()
2392 * Parse skinvar deletecomment
2394 * @param string $type type of infomation for comment
2397 public function parse_deletecomment($type = 'id')
2399 $commentid = intRequestVar('commentid');
2400 $comment = COMMENT::getComment($commentid);
2405 echo intRequestVar('commentid');
2408 if ( array_key_exists('member', $comment) && !empty($comment['member']) )
2410 echo $comment['member'];
2414 echo $comment['user'];
2418 $body = strip_tags($comment['body']);
2419 echo Entity::hsc(shorten($body, 300, '...'));
2425 * AdminActions::parse_deleteitembody()
2426 * Parse skinvar deleteitembody
2431 public function parse_deleteitembody()
2435 $itemid = intRequestVar('itemid');
2436 $item =& $manager->getItem($itemid, 1, 1);
2438 $body = strip_tags($item['body']);
2440 echo Entity::hsc(shorten($body, 300, '...'));
2446 * AdminActions::parse_deleteitemid()
2447 * Parse skinvar deleteitemid
2452 public function parse_deleteitemid()
2454 echo (integer) intRequestVar('itemid');
2459 * AdminActions::parse_deleteitemtitle()
2460 * Parse skinvar deleteitemtitle
2465 public function parse_deleteitemtitle()
2469 $itemid = intRequestVar('itemid');
2470 $item =& $manager->getItem($itemid, 1, 1);
2472 echo Entity::hsc(strip_tags($item['title']));
2478 * AdminActions::parse_editadminskin()
2479 * Parse skinvar editadminskin
2481 * @param string $type type of skin setting
2484 public function parse_editadminskin($type = 'id')
2486 $skinid = intRequestVar('skinid');
2487 $skin = new Skin($skinid);
2491 echo intRequestVar('skinid');
2494 echo Entity::hsc($skin->getName());
2497 echo Entity::hsc($skin->getDescription());
2500 echo Entity::hsc($skin->getContentType());
2503 echo Entity::hsc($skin->getIncludePrefix());
2506 $this->parse_inputyesno('inc_mode', $skin->getIncludeMode(), 120, 'skindir', 'normal', _PARSER_INCMODE_SKINDIR, _PARSER_INCMODE_NORMAL);
2514 * AdminActions::parse_editadminskintype()
2515 * Parse skinvar editadminskintype
2517 * @param string $type name of skin type
2520 public function parse_editadminskintype($type = 'id')
2522 global $CONF, $manager, $member;
2524 $fNames = $this->parser->skin->getAvailableTypes();
2525 $sType = strtolower(trim(requestVar('type')));
2530 echo intRequestVar('skinid');
2533 echo Entity::hsc($this->parser->skin->getName());
2536 echo Entity::hsc($this->parser->skin->getDescription());
2539 echo Entity::hsc($this->parser->skin->getContentType());
2542 echo Entity::hsc($this->parser->skin->getContentFromDB($sType));
2545 $skinType = !array_key_exists($sType, $fNames) ? ucfirst($sType) : $fNames[$sType];
2546 echo Entity::hsc($skinType);
2549 echo Entity::hsc($sType);
2552 echo Entity::hsc($this->parser->skin->getIncludePrefix());
2555 $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;
2556 echo Entity::hsc($incMode);
2565 * AdminActions::parse_editcomment()
2566 * Parse skinvar editcomment
2568 * @param string $type type of comment setting
2571 public function parse_editcomment($type = 'id')
2575 $commentid = intRequestVar('commentid');
2576 $comment = COMMENT::getComment($commentid);
2578 $manager->notify('PrepareCommentForEdit', array('comment' => &$comment));
2583 echo intRequestVar('commentid');
2586 if ( !array_key_exists('member', $comment) || empty($comment['member']) )
2588 echo $comment['user'] . " (" . _EDITC_NONMEMBER . ")";
2592 echo $comment['member'] . " (" . _EDITC_MEMBER . ")";
2596 echo date("Y-m-d @ H:i", $comment['timestamp']);
2599 $comment['body'] = str_replace('<br />', '', $comment['body']);
2600 $comment['body'] = preg_replace("#<a href=['\"]([^'\"]+)['\"]( rel=\"nofollow\")?>[^<]*</a>#", "\\1", $comment['body']);
2601 echo $comment['body'];
2604 echo $comment['userid'];
2607 echo $comment['userid'];
2610 echo $comment[$type];
2617 * AdminActions::parse_editdesturl()
2618 * Parse skinvar editdesturl
2620 public function parse_editdesturl()
2622 if ( requestVar('desturl') )
2624 echo Entity::hsc(requestVar('desturl'));
2630 * AdminActions::parse_editmemberlist()
2631 * Parse skinvar editmemberlist
2633 * @param string $templateName name of template
2636 public function parse_editmemberlist($templateName = '')
2639 // show list of members with actions
2640 $query = 'SELECT * FROM '.sql_table('member');
2641 $template['content'] = 'memberlist';
2642 $template['tabindex'] = 10;
2644 $batch = new Batch('member');
2645 $batch->showList($query, 'table', $template, $templateName, _LISTS_NOMORE);
2650 * AdminActions::parse_editmember()
2651 * Parse skinvar editmember
2653 * @param string $type type of information for member
2654 * @return string $tempateName name of template to use
2657 public function parse_editmember($type = 'id', $templateName = '')
2659 global $CONF, $manager, $member;
2661 $memberid = intRequestVar('memberid');
2662 $mem =& $manager->getMember($memberid);
2667 echo intRequestVar('memberid');
2670 if ( $this->skintype == 'teamdelete' || $this->skintype == 'memberdelete' )
2672 echo Entity::hsc($mem->getDisplayName());
2676 $dispName = Entity::hsc($mem->getDisplayName());
2677 if ( $CONF['AllowLoginEdit'] || $member->isAdmin() )
2679 echo '<input name="name" tabindex="10" maxlength="32" size="32" value="' . $dispName . "\" />\n";
2688 echo Entity::hsc($mem->getRealName());
2691 echo Entity::hsc($mem->getEmail());
2694 echo Entity::hsc($mem->getURL());
2697 $this->parse_inputyesno('admin', $mem->isAdmin(), 60, 1, 0, _YES, _NO, 0, $templateName);
2700 $this->parse_inputyesno('canlogin', $mem->canLogin(), 70, 1, 0, _YES, _NO, $mem->isAdmin(), $templateName);
2703 echo Entity::hsc($mem->getNotes());
2706 $this->parse_inputyesno('autosave', $mem->getAutosave(), 87, 1, 0, _YES, _NO, 0, $templateName);
2715 * AdminActions::parse_editpluginfo()
2716 * Parse skinvar editpluginfo
2718 * @param string $type type of plugin info
2721 public function parse_editpluginfo($type)
2725 $pid = intRequestVar('plugid');
2732 echo Entity::hsc($manager->getPluginNameFromPid($pid));
2739 * AdminActions::parse_editplugoptionslist()
2740 * Parse skinvar editplugoptionslist
2742 * @param string $templateName name of template
2745 public function parse_editplugoptionslist($templateName = '')
2749 $pid = intRequestVar('plugid');
2750 $aOptions = array();
2753 $query = "SELECT * FROM %s WHERE ocontext='global' AND opid=%d ORDER BY oid ASC;";
2754 $query = sprintf($query, sql_table('plugin_option_desc'), (integer) $pid);
2755 $resource = DB::getResult($query);
2757 foreach ( $resource as $row )
2759 array_push($aOIDs, $row['oid']);
2760 $aOptions[$row['oid']] = array(
2761 'oid' => $row['oid'],
2762 'value' => $row['odef'],
2763 'name' => $row['oname'],
2764 'description' => $row['odesc'],
2765 'type' => $row['otype'],
2766 'typeinfo' => $row['oextra'],
2771 // fill out actual values
2772 if ( count($aOIDs) > 0 )
2774 $query = 'SELECT oid, ovalue FROM %s WHERE oid in (%s)';
2775 $query = sprintf($query, sql_table('plugin_option'), implode(',', $aOIDs));
2777 $result = DB::getResult($query);
2779 foreach ( $result as $row )
2781 $aOptions[$row['oid']]['value'] = $row['ovalue'];
2787 'context' => 'global',
2789 'options' => &$aOptions
2791 $manager->notify('PrePluginOptionsEdit', $data);
2793 $template['content'] = 'plugoptionlist';
2795 $amount = Showlist($aOptions, 'table', $template, $templateName);
2799 echo '<p>' . _ERROR_NOPLUGOPTIONS . "</p>\n";
2805 * AdminActions::parse_editskin()
2806 * Parse skinvar editskin
2808 * @param string $type type of skin
2811 public function parse_editskin($type = 'id')
2813 $skinid = intRequestVar('skinid');
2814 $skin = new SKIN($skinid);
2818 echo intRequestVar('skinid');
2821 echo Entity::hsc($skin->getName());
2824 echo Entity::hsc($skin->getDescription());
2827 echo Entity::hsc($skin->getContentType());
2830 echo Entity::hsc($skin->getIncludePrefix());
2833 $this->parse_inputyesno('inc_mode', $skin->getIncludeMode(), 120, 'skindir', 'normal', _PARSER_INCMODE_SKINDIR, _PARSER_INCMODE_NORMAL);
2841 * AdminActions::parse_editskintype()
2842 * Parse skinvar editskintype
2844 * @param string $type name of type for skin type
2847 public function parse_editskintype($type = 'id')
2849 global $CONF, $manager, $member;
2850 $skinid = intRequestVar('skinid');
2851 $skin = new SKIN($skinid);
2852 $fNames = $skin->getAvailableTypes();
2853 $sType = strtolower(trim(requestVar('type')));
2858 echo intRequestVar('skinid');
2861 echo Entity::hsc($skin->getName());
2864 echo Entity::hsc($skin->getDescription());
2867 echo Entity::hsc($skin->getContentType());
2870 echo Entity::hsc($skin->getContentFromDB($sType));
2873 $skinType = !array_key_exists($sType, $fNames) ? ucfirst($sType) : $fNames[$sType];
2874 echo Entity::hsc($skinType);
2877 echo Entity::hsc($sType);
2880 echo Entity::hsc($skin->getIncludePrefix());
2883 $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;
2884 echo Entity::hsc($incMode);
2893 * AdminActions::parse_adminurl()
2894 * Parse skinvar adminurl
2895 * (shortcut for admin url)
2900 public function parse_adminurl()
2902 $this->parse_sitevar('adminurl');
2907 * AdminActions::parse_edittemplateinfo()
2908 * Parse skinvar edittemplateinfo
2910 * @param string $type name of type for skin
2911 * @param string $description description for skin
2912 * @param string $name name of skin
2913 * @param string $help
2914 * @param string $tabindex index value for tabindex attribute of input element
2915 * @param string $big
2916 * @param string $tplt name of template
2919 public function parse_edittemplateinfo($type, $desc = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')
2922 static $cache = array();
2924 if ( !array_key_exists('id', $cache) )
2926 $cache['id'] = intRequestVar('templateid');
2929 if ( !array_key_exists('name', $cache) )
2931 $cache['name'] = Template::getNameFromId($cache['id']);
2934 if ( !array_key_exists('desc', $cache) )
2936 $cache['desc'] = Template::getDesc($cache['id']);
2939 $template =& $manager->getTemplate($cache['name']);
2944 echo (integer) $cache['id'];
2947 echo Entity::hsc($cache['name']);
2950 echo Entity::hsc($cache['desc']);
2952 case 'extratemplate':
2954 $pluginfields = array();
2955 $manager->notify('TemplateExtraFields', array('fields' => &$pluginfields));
2960 $tmplt =& $manager->getTemplate($desc);
2962 if ( !array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) || empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )
2966 . '<th colspan="2"><%explugtplname%>' . "</th>\n";
2970 $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];
2973 foreach ( $pluginfields as $pfkey => $pfvalue )
2975 $data = array('explugtplname' => Entity::hsc($pfkey));
2977 echo Template::fill($base, $data);
2979 foreach ( $pfvalue as $pffield => $pfdesc )
2981 $this->templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);
2986 $desc = defined($desc) ? constant($desc) : $desc;
2987 $name = defined($name) ? constant($name) : $name;
2988 $this->templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);
2996 * AdminActions::parse_editadmintemplateinfo()
2997 * Parse skinvar editadmintemplateinfo
2999 * @param string $type type of skin template
3000 * @param string $description description of template
3001 * @param string $name name of stemplate
3002 * @param string $tabindex index number for tabindex attribute of input element
3003 * @param string $big
3004 * @param string $tplt
3006 public function parse_editadmintemplateinfo($type, $desc = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')
3009 static $cache = array();
3011 if ( !array_key_exists('id', $cache) )
3013 $cache['id'] = intRequestVar('templateid');
3016 if ( !array_key_exists('name', $cache) )
3018 $cache['name'] = Template::getNameFromId($cache['id']);
3021 if ( !array_key_exists('desc', $cache) )
3023 $cache['desc'] = Template::getDesc($cache['id']);
3026 $template =& $manager->getTemplate($cache['name']);
3031 echo (integer) $cache['id'];
3034 echo Entity::hsc($cache['name']);
3037 echo Entity::hsc($cache['desc']);
3039 case 'extratemplate':
3041 $pluginfields = array();
3042 $manager->notify('AdminTemplateExtraFields', array('fields' => &$pluginfields));
3047 $tmplt =& $manager->getTemplate($desc);
3049 if ( !array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) || empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )
3053 . '<th colspan="2"><%explugtplname%>' . "</th>\n";
3057 $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];
3060 foreach ( $pluginfields as $pfkey => $pfvalue )
3062 $data = array('explugtplname' => Entity::hsc($pfkey));
3064 echo Template::fill($base, $data);
3066 foreach ( $pfvalue as $pffield => $pfdesc )
3068 $this->templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);
3073 $desc = defined($desc) ? constant($desc) : $desc;
3074 $name = defined($name) ? constant($name) : $name;
3075 $this->templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);
3082 * AdminActions::parse_eventformextra()
3083 * Parse skinvar eventformextra
3085 * @param string $type name of type for event form extra
3088 public function parse_eventformextra($type = 'activation')
3097 $key = requestVar('ackey');
3100 Admin::error(_ERROR_ACTIVATE);
3102 $info = MEMBER::getActivationInfo($key);
3105 Admin::error(_ERROR_ACTIVATE);
3107 $mem =& $manager->getMember($info->vmember);
3110 Admin::error(_ERROR_ACTIVATE);
3113 'type' => 'activation',
3117 case 'membermailform-notloggedin':
3118 $data = array('type' => 'membermailform-notloggedin',);
3121 $manager->notify('FormExtra', $data);
3126 * AdminActions::parse_extrahead()
3127 * Parse skinvar extrahead
3129 public function parse_extrahead()
3133 $extrahead = Admin::getAdminextrahead();
3136 'extrahead' => &$extrahead,
3137 'action' => Admin::getAdminAction()
3140 $manager->notify('AdminPrePageHead', $data);
3146 * AdminActions::parse_member()
3147 * Parse skinvar member
3148 * (includes a member info thingie)
3150 * @param string $what which memberdata is needed
3153 public function parse_member($what)
3155 global $memberinfo, $member, $CONF;
3157 // 1. only allow the member-details-page specific variables on member pages
3158 if ( $this->skintype == 'member' )
3163 echo Entity::hsc($memberinfo->getDisplayName());
3166 echo Entity::hsc($memberinfo->getRealName());
3169 echo Entity::hsc($memberinfo->getNotes());
3172 echo Entity::hsc($memberinfo->getURL());
3175 echo Entity::hsc($memberinfo->getEmail());
3178 echo Entity::hsc($memberinfo->getID());
3183 // 2. the next bunch of options is available everywhere, as long as the user is logged in
3184 if ( $member->isLoggedIn() )
3189 echo $member->getDisplayName();
3191 case 'yourrealname':
3192 echo $member->getRealName();
3195 echo $member->getNotes();
3198 echo $member->getURL();
3201 echo $member->getEmail();
3204 echo $member->getID();
3206 case 'yourprofileurl':
3207 if ( $CONF['URLMode'] == 'pathinfo' )
3209 echo Link::create_member_link($member->getID());
3213 echo $CONF['IndexURL'] . Link::create_member_link($member->getID());
3222 * AdminActions::parse_version()
3223 * Parse skinvar version
3224 * (include nucleus versionnumber)
3229 public function parse_version()
3232 echo 'Nucleus CMS ' . $nucleus['version'];
3237 * AdminActions::parse_sitevar()
3238 * Parse skinvar sitevar
3239 * (include a sitevar)
3241 * @param string $which
3244 public function parse_sitevar($which)
3250 echo $CONF['IndexURL'];
3253 echo $CONF['SiteName'];
3256 echo $CONF['AdminEmail'];
3259 echo $CONF['AdminURL'];
3266 * AdminActions::parse_actionurl()
3272 public function parse_actionurl()
3275 echo Entity::hsc($CONF['ActionURL']);
3280 * AdminActions::parse_getblogsetting()
3281 * Parse skinvar getblogsetting
3283 public function parse_getblogsetting($which)
3285 global $blog, $manager;
3291 elseif ( $bid = intRequestVar('blogid') )
3293 $b =& $manager->getBlog($bid);
3303 return Entity::hsc($b->getID());
3306 return Entity::hsc($b->getURL());
3309 return Entity::hsc($b->getName());
3312 return Entity::hsc($b->getDescription());
3315 return Entity::hsc($b->getShortName());
3317 case 'notifyaddress':
3318 return Entity::hsc($b->getNotifyAddress());
3321 return Entity::hsc($b->getMaxComments());
3324 return Entity::hsc($b->getUpdateFile());
3327 return Entity::hsc($b->getTimeOffset());
3334 * AdminActions::parse_geteditpluginfo()
3335 * Parse skinvar geteditpluginfo
3337 * @param string $type name of setting for edit plugin info
3340 public function parse_geteditpluginfo($type)
3343 $pid = intRequestVar('plugid');
3350 return Entity::hsc($manager->getPluginNameFromPid($pid));
3357 * AdminActions::parse_getmember()
3358 * Parse skinvar getmember
3359 * (includes a member info thingie)
3361 * @param string $what name of setting for member
3364 public function parse_getmember($what)
3366 global $memberinfo, $member;
3367 // 1. only allow the member-details-page specific variables on member pages
3368 if ( $this->skintype == 'member' )
3373 return Entity::hsc($memberinfo->getDisplayName());
3376 return Entity::hsc($memberinfo->getRealName());
3379 return Entity::hsc($memberinfo->getNotes());
3382 return Entity::hsc($memberinfo->getURL());
3385 return Entity::hsc($memberinfo->getEmail());
3388 return Entity::hsc($memberinfo->getID());
3392 // 2. the next bunch of options is available everywhere, as long as the user is logged in
3393 if ( $member->isLoggedIn() )
3398 return $member->getDisplayName();
3400 case 'yourrealname':
3401 return $member->getRealName();
3404 return $member->getNotes();
3407 return $member->getURL();
3410 return $member->getEmail();
3413 return $member->getID();
3421 * AdminActions::parse_headmessage()
3422 * Parse skinvar headmessage
3427 public function parse_headmessage()
3429 if ( !empty(Admin::$headMess) )
3431 echo '<p>' . _MESSAGE . ': ' . Entity::hsc(Admin::$headMess) . "</p>\n";
3437 * AdminActions::parse_helplink()
3438 * Parse skinvar helplink
3440 * @param string $topic name of topic for help
3443 public function parse_helplink($topic = '')
3445 if ( !empty($topic) )
3453 * AdminActions::parse_helpplugname()
3454 * Parse skinvar helpplugname
3459 public function parse_helpplugname()
3461 $plugid = intGetVar('plugid');
3462 Entity::hsc($manager->getPluginNameFromPid($plugid));
3467 * AdminActions::parse_ilistaddnew()
3468 * Parse skinvar ilistaddnew
3473 public function parse_ilistaddnew()
3475 $blogid = intRequestVar('blogid');
3476 if ( intPostVar('start') == 0 )
3478 echo '<p><a href="index.php?action=createitem&blogid=' . $blogid . '">' . _ITEMLIST_ADDNEW . "</a></p>\n";
3484 * AdminActions::parse_importskininfo()
3485 * Parse skinvar importskininfo
3487 * @param string $type name of information for imported skin
3490 public function parse_importskininfo($type)
3495 echo Entity::hsc(requestVar('skininfo'));
3498 $dataArr = requestArray('skinnames');
3499 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3502 $dataArr = requestArray('tpltnames');
3503 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3506 $dataArr = requestArray('skinclashes');
3507 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3510 $dataArr = requestArray('tpltclashes');
3511 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3514 echo Entity::hsc(requestVar('skinfile'));
3517 echo Entity::hsc(requestVar('mode'));
3524 * AdminActions::parse_inputyesno()
3525 * Parse skinvar inputyesno
3527 * some init stuff for all forms
3532 public function parse_init()
3537 if ( requestVar('action') == 'itemedit' )
3539 $authorid = Admin::$contents['authorid'];
3542 Admin::$blog->insertJavaScriptInfo($authorid);
3547 * AdminActions::parse_inputyesno()
3548 * Parse skinvar inputyesno
3550 * @param string $name
3551 * @param string $checkedval
3552 * @param string $tabindex
3553 * @param string $value1
3554 * @param string $value2
3555 * @param string $yesval
3556 * @param string $noval
3557 * @param string $isAdmin
3558 * @param string $templateName
3561 public function parse_inputyesno($name, $checkedval, $tabindex = 0, $value1 = 1, $value2 = 0, $yesval = _YES, $noval = _NO, $isAdmin = 0, $templateName = '')
3563 self::input_yesno($name, $checkedval, $tabindex, $value1, $value2, $yesval, $noval, $isAdmin, $templateName );
3568 * AdminActions::parse_insertpluginfo()
3569 * Parse templatevar insertpluginfo
3571 public function parse_insertpluginfo($type)
3573 $option = Admin::getAdminaOption();
3577 return $option['pid'];
3580 return Entity::hsc($option['pfile']);
3587 * AdminActions::parse_insplugoptcontent()
3588 * Parse skinvar insplugoptcontent
3593 public function parse_insplugoptcontent()
3595 $option = Admin::getAdminaOption();
3597 $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);
3598 if ( array_key_exists('access', $meta) && $meta['access'] != 'hidden' )
3601 listplug_plugOptionRow($option);
3608 * AdminActions::parse_iprangeinput()
3609 * Parse skinvar iprangeinput
3614 public function parse_iprangeinput()
3616 if ( requestVar('ip') )
3618 $iprangeVal = Entity::hsc(requestVar('ip'));
3619 echo "<input name=\"iprange\" type=\"radio\" value=\"{$iprangeVal}\" checked=\"checked\" id=\"ip_fixed\" />\n";
3620 echo "<label for=\"ip_fixed\">{$iprangeVal}</label><br />\n";
3621 echo '<input name="iprange" type="radio" value="custom" id="ip_custom" />' . "\n";
3622 echo '<label for="ip_custom">' . _BAN_IP_CUSTOM . '</label>' . "\n";
3623 echo "<input name=\"customiprange\" value=\"{$iprangeVal}\" maxlength=\"15\" size=\"15\" />\n";
3627 echo '<input name="iprange" value="custom" type="hidden" />' . "\n";
3628 echo '<input name="customiprange" value="" maxlength="15" size="15" />' . "\n";
3634 * AdminActions::parse_itemnavlist()
3635 * Parse skinvar itemnavlist
3640 public function parse_itemnavlist($templateName)
3642 global $CONF, $manager, $member;
3644 $query = "SELECT bshortname, cname, mname, ititle, ibody, inumber, idraft, itime"
3645 . " FROM %s, %s, %s, %s"
3646 . " WHERE iblog=bnumber AND iauthor=mnumber AND icat=catid";
3648 $query = sprintf($query, sql_table('item'), sql_table('blog'), sql_table('member'), sql_table('category'));
3650 if ( $this->skintype == 'itemlist' )
3653 if ( array_key_exists('blogid', $_REQUEST) )
3655 $blogid = intRequestVar('blogid');
3657 else if ( array_key_exists('itemid', $_REQUEST) )
3659 $itemid = intRequestVar('itemid');
3660 $item = &$manager->getItem($itemid, 1, 1);
3661 $blogid = (integer) $item['blogid'];
3663 $blog =& $manager->getBlog($blogid);
3665 $query .= " AND iblog={$blogid}";
3666 $template['now'] = $blog->getCorrectTime(time());
3668 // non-blog-admins can only edit/delete their own items
3669 if ( !$member->blogAdminRights($blogid) )
3671 $query .= ' AND iauthor = ' . $member->getID();
3674 elseif ( $this->skintype == 'browseownitems' )
3676 $query .= ' AND iauthor = ' . $member->getID();
3678 $template['now'] = time();
3681 // search through items
3682 $search = postVar('search');
3684 if ( !empty($search) )
3686 $query .= ' AND ((ititle LIKE ' . DB::quoteValue('%'.$search.'%') . ') '
3687 . ' OR (ibody LIKE ' . DB::quoteValue('%'.$search.'%') . ') '
3688 . ' OR (imore LIKE ' . DB::quoteValue('%'.$search.'%') . '))';
3691 if ( postVar('start') )
3693 $start = intPostVar('start');
3700 // amount of items to show
3701 if ( postVar('amount') )
3703 $amount = intPostVar('amount');
3707 $amount = (integer) $CONF['DefaultListSize'];
3714 $query .= ' ORDER BY itime DESC'
3715 . " LIMIT {$start},{$amount}";
3717 $template['content'] = 'itemlist';
3719 $navList = new Navlist($this->skintype, $start, $amount, 0, 1000, $blogid, $search, 0);
3720 $navList->showBatchList('item', $query, 'table', $template, '', $templateName);
3725 * AdminActions::parse_itemtime()
3726 * date change on edit item
3728 * @param string $key key of PHP's getDate()
3731 public function parse_itemtime($key)
3736 $itemid = intRequestVar('itemid');
3737 $item =& $manager->getItem($itemid, 1, 1);
3739 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
3741 if ( $item && $blog->convertBreaks() && requestVar('action') == 'itemedit' )
3743 $item['body'] = removeBreaks($item['body']);
3744 $item['more'] = removeBreaks($item['more']);
3747 $contents = array();
3748 if ( requestVar('action') == 'itemedit' )
3752 elseif ( requestVar('action') == 'createitem' )
3755 'contents' => &$contents,
3756 'blog' => &$this->blog
3758 $manager->notify('PreAddItemForm', $data);
3760 $itemtime = getdate($contents['timestamp']);
3761 echo $itemtime[$key];
3766 * AdminActions::parse_jstoolbaroptions()
3767 * Parse skinvar jstoolbaroptions
3772 public function parse_jstoolbaroptions()
3776 _SETTINGS_JSTOOLBAR_NONE,
3777 _SETTINGS_JSTOOLBAR_SIMPLE,
3778 _SETTINGS_JSTOOLBAR_FULL
3782 foreach ( $options as $option )
3784 $text = "<option value=\"%d\"%s>%s</option>\n";
3785 $extra = ($CONF['DisableJsTools'] == $i) ? ' selected="selected"' : '';
3786 echo sprintf($text, $i, $extra, $option);
3792 * AdminActions::parse_localeselectoptions()
3793 * Parse skinvar localeselectoptions
3798 public function parse_localeselectoptions()
3802 $locales = i18n::get_available_locale_list();
3804 $memid = intRequestVar('memberid');
3807 $mem =& $manager->getMember($memid);
3808 if ( !$mem->getLocale() || !in_array($mem->getLocale(), $locales) )
3810 echo "<option value=\"\" selected=\"selected\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";
3814 echo "<option value=\"\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";
3819 if ( !i18n::get_current_locale() || !in_array(i18n::get_current_locale(), $locales) )
3821 echo "<option value=\"\" selected=\"selected\">en_Latn_US</option>\n";
3825 echo "<option value=\"\">en_Latn_US</option>\n";
3828 foreach ( $locales as $locale )
3830 if ( $locale == 'en_Latn_US' )
3836 if ( $locale == $mem->getLocale() )
3838 echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";
3842 echo "<option value=\"{$locale}\">{$locale}</option>\n";
3847 if ( $locale == i18n::get_current_locale() )
3849 echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";
3853 echo "<option value=\"{$locale}\">{$locale}</option>\n";
3861 * AdminActions::parse_listplugplugoptionrow()
3862 * Parse templatevar listplugplugoptionrow
3864 * @param string $templateName name of template
3867 public function parse_listplugplugoptionrow($templateName = '')
3869 echo listplug_plugOptionRow(Admin::getAdminaOption(), $templateName);
3874 * AdminActions::parse_mediadirwarning()
3875 * Parse skinvar mediadirwarning
3880 public function parse_mediadirwarning()
3883 if ( !is_dir($DIR_MEDIA) )
3885 echo "<br /><b>" . _WARNING_NOTADIR . "</b>\n";
3887 if ( !is_readable($DIR_MEDIA) )
3889 echo "<br /><b>" . _WARNING_NOTREADABLE . "</b>\n";
3891 if ( !is_writeable($DIR_MEDIA) )
3893 echo "<br /><b>" . _WARNING_NOTWRITABLE . "</b>\n";
3899 * AdminActions::parse_movedistselect()
3900 * Parse skinvar movedistselect
3902 public function parse_movedistselect()
3904 $actionType = requestVar('action');
3905 switch ( $actionType )
3908 $this->selectBlog('destcatid', 'category');
3910 case 'batchcategory':
3911 $this->selectBlog('destblogid');
3914 if ( $this->skintype == 'itemmove' )
3916 $query = "SELECT icat as result FROM %s WHERE inumber=%d;";
3917 $query = sprintf($query, sql_table('item'), intRequestVar('itemid'));
3918 $catid = DB::getValue(sprintf($query, intRequestVar('itemid')));
3919 $this->selectBlog('catid', 'category', $catid, 10, 1);
3927 * AdminActions::parse_moveitemid()
3928 * Parse skinvar moveitemid
3933 public function parse_moveitemid()
3935 echo intRequestVar('itemid');
3940 * AdminActions::parse_newestcompare()
3941 * Parse skinvar newestcompare
3946 public function parse_newestcompare()
3950 $newestVersion = getLatestVersion();
3951 $newestCompare = str_replace('/', '.', $newestVersion);
3952 $currentVersion = str_replace(array('/', 'v'), array('.', ''), $nucleus['version']);
3954 if ( $newestVersion && version_compare($newestCompare, $currentVersion, '>') )
3956 echo '<br /><a style="color:red" href="http://nucleuscms.org/upgrade.php" title="' . _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE . '">';
3957 echo _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT . $newestVersion . '</a>';
3963 * AdminActions::parse_newmemberselect()
3964 * Parse skinvar newmemberselect
3966 * @param string $templateName name of template to use
3969 public function parse_newmemberselect($templateName = '')
3971 $blogid = intRequestVar('blogid');
3973 $query = "SELECT tmember FROM %s WHERE tblog=%d;";
3974 $query = sprintf($query, sql_table('team'), (integer) $blogid);
3975 $res = DB::getResult($query);
3978 foreach ( $res as $row )
3980 $tmem[] = intval($row['tmember']);
3983 $query = "SELECT mname as text, mnumber as value FROM %s WHERE mnumber NOT IN (%s);";
3984 $query = sprintf($query, sql_table('member'), implode(', ', $tmem));
3987 'name' => 'memberid',
3988 'tabindex' => 10000,
3991 Showlist($query, 'select', $template, $templateName);
3996 * AdminActions::parse_newpluginlist()
3997 * Parse skinvar newpluginlist
4002 public function parse_newpluginlist()
4004 $candidates = $this->newPlugCandidates;
4005 foreach ( $candidates as $name )
4007 echo '<option value="NP_' . $name . '">' . Entity::hsc($name) . "</option>\n";
4013 * AdminActions::parse_outputspecialdirs()
4014 * Parse skinvar outputspecialdirs
4016 * @param string $type type of setting for directory
4019 public function parse_outputspecialdirs($type)
4021 global $DIR_MEDIA, $DIR_NUCLEUS;
4026 echo Entity::hsc($DIR_NUCLEUS);
4029 echo Entity::hsc($DIR_MEDIA);
4036 * AdminActions::parse_passrequestvars()
4037 * Parse skinvar passrequestvars
4042 public function parse_passrequestvars()
4044 $passvar = Admin::getAdminpassvar();
4045 $oldaction = postVar('oldaction');
4047 if ( ($oldaction != 'logout')
4048 && ($oldaction != 'login')
4050 && !postVar('customaction') )
4058 * AdminActions::parse_pluginextras()
4059 * Parse skinvar pluginextras
4061 * @param string $type type of plugin context
4064 public function parse_pluginextras($type = 'global')
4071 $id = intRequestVar('memberid');
4072 $mem =& $manager->getMember($id);
4073 $manager->notify('MemberSettingsFormExtras', array('member' => &$mem));
4076 $id = intRequestVar('blogid');
4077 $blg =& $manager->getBlog($id);
4078 $manager->notify('BlogSettingsFormExtras', array('member' => &$blg));
4080 case 'createaccount':
4082 'type' => 'createaccount.php',
4084 'postlabel' => '<br />',
4086 'postfield' => '<br /><br />'
4088 $manager->notify('RegistrationFormExtraFields', $data);
4091 $manager->notify('GeneralSettingsFormExtras', array());
4098 * AdminActions::parse_pluginhelp()
4099 * Parse skinvar pluginhelp
4104 public function parse_pluginhelp()
4106 global $manager, $DIR_PLUGINS;
4108 $plugid = intGetVar('plugid');
4109 $plugName = $manager->getPluginNameFromPid($plugid);
4110 $plug =& $manager->getPlugin($plugName);
4112 if ( $plug->supportsFeature('HelpPage') > 0 )
4114 $helpfile = $DIR_PLUGINS . $plug->getShortName() . '/help.';
4115 if ( @file_exists($helpfile . 'php') )
4117 @include($helpfile . 'php');
4120 elseif ( @file_exists($helpfile . 'html') )
4122 @include($helpfile . 'html');
4126 echo '<p>' . _ERROR . ': ' . _ERROR_PLUGNOHELPFILE . "</p>\n";
4127 echo '<p><a href="index.php?action=pluginlist">(' . _BACK . ")</a></p>\n";
4132 * AdminActions::parse_pluginlistlist()
4133 * Parse skinvar pluginlistlist
4135 * @param string $templateName name of template to use
4138 public function parse_pluginlistlist($templateName = '')
4140 $query = "SELECT * FROM %s ORDER BY porder ASC;";
4141 $query = sprintf($query, sql_table('plugin'));
4143 $template['content'] = 'pluginlist';
4144 $template['tabindex'] = 10;
4146 Showlist($query, 'table', $template, $templateName);
4152 * AdminActions::parse_pluginoptions()
4153 * Parse skinvar pluginoptions
4155 * @param string $type type of plugin option
4158 public function parse_pluginoptions($context='global', $templateName='')
4160 global $itemid, $manager;
4165 $contextid = intRequestVar('memberid');
4168 $contextid = intRequestVar('blogid');
4171 $contextid = intRequestVar('catid');
4174 $contextid = $itemid;
4178 /* Actually registererd plugin options */
4179 $aIdToValue = array();
4180 $query = "SELECT oid, ovalue FROM %s WHERE ocontextid=%d;";
4181 $query = sprintf($query, sql_table('plugin_option'), (integer) $contextid);
4182 $res = DB::getResult($query);
4183 foreach ( $res as $row )
4185 $aIdToValue[$row['oid']] = $row['ovalue'];
4188 /* Currently available plugin options */
4189 $query = "SELECT * FROM %s, %s WHERE opid=pid and ocontext= %s ORDER BY porder, oid ASC;";
4190 $query = sprintf($query, sql_table('plugin_option_desc'), sql_table('plugin'), DB::quoteValue($context));
4191 $res = DB::getResult($query);
4194 foreach ($res as $row )
4196 if ( !array_key_exists($row['oid'], $aIdToValue) )
4198 $value = $row['odef'];
4202 $value = $aIdToValue[$row['oid']];
4206 'pid' => $row['pid'],
4207 'pfile' => $row['pfile'],
4208 'oid' => $row['oid'],
4210 'name' => $row['oname'],
4211 'description' => $row['odesc'],
4212 'type' => $row['otype'],
4213 'typeinfo' => $row['oextra'],
4214 'contextid' => $contextid,
4220 'context' => $context,
4221 'contextid' => $contextid,
4222 'options' => &$options
4224 $manager->notify('PrePluginOptionsEdit', $data);
4226 $template = array();
4227 if ( $templateName )
4229 $templates =& $manager->getTemplate($templateName);
4230 if ( !array_key_exists('INSERT_PLUGOPTION_TITLE', $templates) || empty($templates['INSERT_PLUGOPTION_TITLE']) )
4232 $template['title'] = "<tr>"
4233 . "<th colspan=\"2\"><%sprinttext(_PLUGIN_OPTIONS_TITLE, <|%insertpluginfo(name)%|>)%></th>"
4238 $template['title'] = $templates['INSERT_PLUGOPTION_TITLE'];
4241 if ( !array_key_exists('INSERT_PLUGOPTION_BODY', $templates) || empty($templates['INSERT_PLUGOPTION_BODY']) )
4243 $template['body'] = "<tr>"
4244 . "<%listplugplugoptionrow%>"
4249 $template['body'] = $templates['INSERT_PLUGOPTION_BODY'];
4255 include_libs('ACTIONS.php');
4256 $handler = new Actions($this->skintype);
4257 $parser = new PARSER($handler);
4259 foreach ( $options as $option )
4262 if ( $prevPid != $option['pid'] )
4264 $prevPid = $option['pid'];
4265 $parser->parse($template['title']);
4268 $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);
4270 if ( @$meta['access'] != 'hidden' )
4272 $parsed = $parser->parse($template['body']);
4280 * AdminActions::parse_qmenuaddselect()
4281 * Parse skinvar qmanuaddselect
4283 * @param string $templateName name of template to use
4286 public function parse_qmenuaddselect($templateName = '')
4289 $showAll = requestVar('showall');
4290 if ( $member->isAdmin() && ($showAll == 'yes') )
4292 // Super-Admins have access to all blogs! (no add item support though)
4293 $query = 'SELECT bnumber as value, bname as text'
4294 . ' FROM ' . sql_table('blog')
4295 . ' ORDER BY bname';
4299 $query = 'SELECT bnumber as value, bname as text'
4300 . ' FROM ' . sql_table('blog') . ', ' . sql_table('team')
4301 . ' WHERE tblog=bnumber and tmember=' . $member->getID()
4302 . ' ORDER BY bname';
4305 $template['name'] = 'blogid';
4306 $template['tabindex'] = 15000;
4307 $template['extra'] = _QMENU_ADD_SELECT;
4308 $template['selected'] = -1;
4309 $template['shorten'] = 10;
4310 $template['shortenel'] = '';
4311 $template['javascript'] = 'onchange="return form.submit()"';
4313 Showlist($query, 'select', $template, $templateName);
4319 * AdminActions::parse_quickmenu()
4320 * Parse skinvar quickmenu
4322 * @param string $templateName name of template to use
4325 public function parse_quickmenu($templateName = '')
4328 $templates = array();
4329 $template = array();
4330 if ( !empty($templateName) )
4332 $templates = & $manager->getTemplate($templateName);
4334 $pluginExtras = array();
4338 'options' => &$pluginExtras
4341 if ( count($pluginExtras) > 0 )
4343 if ( !array_key_exists('PLUGIN_QUICKMENU_TITLE', $templates) || empty($templates['PLUGIN_QUICKMENU_TITLE']) )
4345 $template['title'] = "<h2><%text(_QMENU_PLUGINS)%></h2>\n";
4349 $template['title'] = $templates['PLUGIN_QUICKMENU_TITLE'];
4351 if ( !array_key_exists('PLUGIN_QUICKMENU_HEAD', $templates) || empty($templates['PLUGIN_QUICKMENU_HEAD']) )
4353 $template['head'] = "<ul>\n";
4357 $template['head'] = $templates['PLUGIN_QUICKMENU_HEAD'];
4359 if ( !array_key_exists('PLUGIN_QUICKMENU_BODY', $templates) && empty($templates['PLUGIN_QUICKMENU_BODY']) )
4361 $template['body'] = "<li><a href=\"<%plugadminurl%>\" title=\"<%plugadmintooltip%>\"><%plugadmintitle%></a></li>\n";
4365 $template['body'] = $templates['PLUGIN_QUICKMENU_BODY'];
4367 if ( !array_key_exists('PLUGIN_QUICKMENU_FOOT', $templates) || empty($templates['PLUGIN_QUICKMENU_FOOT']) )
4369 $template['foot'] = "</ul>\n";
4373 $template['foot'] = $templates['PLUGIN_QUICKMENU_FOOT'];
4376 $handler = new Actions($this->skintype);
4377 $parser = new PARSER($handler);
4379 $parser->parse($template['title']);
4380 echo $template['head'];
4381 foreach ( $pluginExtras as $aInfo )
4384 'plugadminurl' => Entity::hsc($aInfo['url']),
4385 'plugadmintooltip' => Entity::hsc($aInfo['tooltip']),
4386 'plugadmintitle' => Entity::hsc($aInfo['title']),
4388 echo Template::fill($template['body'], $data);
4390 echo $template['foot'];
4396 * AdminActions::parse_requestblogid()
4397 * Parse skinvar requestblogid
4402 public function parse_requestblogid()
4404 echo intRequestVar('blogid');
4409 * AdminActions::parse_requestiprange()
4410 * Parse skinvar requestiprange
4415 public function parse_requestiprange()
4417 if ( requestVar('iprange') )
4419 echo Entity::hsc(requestVar('iprange'));
4421 elseif ( requestVar('ip') )
4423 echo Entity::hsc(requestVar('ip'));
4429 * AdminActions::parse_selectlocaladminskinfiles()
4430 * Parse skinvar selectlocaladminskinfiles
4435 public function parse_selectlocaladminskinfiles()
4437 global $DIR_SKINS, $manager, $DIR_LIBS;
4439 if ( !class_exists('SkinImport', FALSE) )
4441 include_once("{$DIR_LIBS}skinie.php");
4443 $adminskindir = $DIR_SKINS . 'admin/';
4444 $candidates = SkinImport::searchForCandidates($adminskindir);
4446 foreach ( $candidates as $skinname => $skinfile )
4448 $html = Entity::hsc($skinfile);
4449 echo '<option value="' . $html . '">' . $skinname . "</option>\n";
4456 * AdminActions::parse_selectlocalskinfiles()
4457 * Parse skinvar selectlocalskinfiles
4462 public function parse_selectlocalskinfiles()
4466 $candidates = SkinImport::searchForCandidates($DIR_SKINS);
4468 foreach ( $candidates as $skinname => $skinfile )
4470 $html = Entity::hsc($skinfile);
4471 echo '<option value="' . $html . '">' . $skinname . "</option>\n";
4478 * AdminActions::parse_skineditallowedlist()
4479 * Parse skinvar skineditallowedlist
4481 * @param string $type type of skin
4482 * @param string $templateName name of template
4485 public function parse_skineditallowedlist($type, $templateName = '')
4490 $query = "SELECT bshortname, bname FROM %s;";
4492 'content' => 'shortblognames'
4494 $query = sprintf($query, sql_table('blog'));
4495 Showlist($query, 'table', $show, $templateName);
4498 $query = "SELECT tdname as name, tddesc as description FROM %s WHERE tdname NOT LIKE 'admin/%%';";
4500 'content' => 'shortnames'
4502 $query = sprintf($query, sql_table('template_desc'));
4503 Showlist($query, 'table', $show, $templateName);
4510 * AdminActions::parse_skinielist()
4511 * Parse skinvar skinielist
4513 * @param string $type type of skin
4514 * @param string $templateName name of template to use
4517 public function parse_skinielist($type, $templateName = '')
4521 $templates = array();
4522 if ( $templateName )
4524 $templates =& $manager->getTemplate($templateName);
4526 if ( array_key_exists('SKINIE_EXPORT_LIST', $templates) && !empty($templates['SKINIE_EXPORT_LIST']) )
4528 $template = $templates['SKINIE_EXPORT_LIST'];
4533 . "<input type=\"checkbox\" name=\"<%typeid%>\" id=\"<%expid%>\" />\n"
4534 . "<label for=\"<%expid%>\"><%expname%></label>\n"
4536 . "<td><%expdesc%></td>\n"
4543 $res = DB::getResult('SELECT * FROM ' . sql_table('skin_desc'). " WHERE sdname NOT LIKE 'admin/%%';");
4544 foreach ( $res as $row )
4547 'typeid' => 'skin[' . $row['sdnumber'] . ']',
4548 'expid' => 'skinexp' . $row['sdnumber'],
4549 'expname' => Entity::hsc($row['sdname']),
4550 'expdesc' => Entity::hsc($row['sddesc'])
4552 echo Template::fill($template, $data);
4556 $res = DB::getResult('SELECT * FROM '.sql_table('template_desc'). " WHERE tdname NOT LIKE 'admin/%%';");
4557 foreach ( $res as $row )
4560 'typeid' => 'template[' . $row['tdnumber'] . ']',
4561 'expid' => 'templateexp' . $row['tdnumber'],
4562 'expname' => Entity::hsc($row['tdname']),
4563 'expdesc' => Entity::hsc($row['tddesc'])
4565 echo Template::fill($template, $data);
4573 * AdminActions::parse_skinoverview()
4574 * Parse skinvar skinoverview
4576 * @param string $templateName name of template to use
4579 public function parse_skinoverview($templateName = '')
4582 $query = "SELECT * FROM %s WHERE sdname NOT LIKE 'admin/%%';";
4583 $query = sprintf($query, sql_table('skin_desc'));
4585 $template['content'] = 'skinlist';
4586 $template['tabindex'] = 10;
4588 Showlist($query, 'table', $template, $templateName);
4593 * AdminActions::parse_skintypehelp()
4594 * Check editing skintypehelp
4599 public function parse_skintypehelp()
4601 $nowSkinType = strtolower(trim(requestVar('type')));
4603 /* TODO: use Skin class */
4604 $regularType = array(
4615 if ( in_array($nowSkinType, $regularType) )
4617 help('skinpart' . $nowSkinType);
4621 help('skinpartspecial');
4627 * AdminActions::parse_specialskinlist()
4628 * Parse skinvar specialskinlist
4630 * @param string $templateName name of template to use
4633 public function parse_specialskinlist($templateName = '')
4637 $templates = array();
4638 if ( $templateName )
4640 $templates =& $manager->getTemplate($templateName);
4643 /* TODO: use Skin class */
4654 $skinid = intRequestVar('skinid');
4655 $query = "SELECT stype FROM %s WHERE stype NOT IN ('%s') AND sdesc = %d;";
4656 $query = sprintf($query, sql_table('skin'), implode("', '", $nType), $skinid);
4658 $res = DB::getResult($query);
4659 if ( $res && $res->rowCount() > 0 )
4662 if ( array_key_exists('SPECIALSKINLIST_HEAD', $templates) && !empty($templates['SPECIALSKINLIST_HEAD']) )
4664 $template['head'] = $templates['SPECIALSKINLIST_HEAD'];
4668 $template['head'] = "<ul>\n";
4670 echo Template::fill($template['head'], $data);
4671 if ( !array_key_exists('SPECIALSKINLIST_BODY', $templates) || empty($templates['SPECIALSKINLIST_BODY']) )
4673 $template['body'] = '<li><a tabindex="<%tabindex%>" href="index.php?action=skinedittype&skinid=<%skinid%>'
4674 . '&type=<%skintype%>"><%skintype%></a> (<a tabindex="<%tabindex%>" href="index.php?'
4675 . 'action=skinremovetype&skinid=<%skinid%>&type=<%skintype%>">remove</a>)</li>';
4679 $template['body'] = $templates['SPECIALSKINLIST_BODY'];
4683 foreach ( $res as $row )
4686 'tabindex' => $tabstart++,
4687 'skinid' => $skinid,
4688 'skintype' => Entity::hsc(strtolower($row['stype']))
4690 echo Template::fill($template['body'], $data);
4693 if (array_key_exists('SPECIALSKINLIST_FOOT', $templates) && !empty($templates['SPECIALSKINLIST_FOOT']) )
4695 $template['foot'] = $templates['SPECIALSKINLIST_FOOT'];
4699 $template['foot'] = "</ul>\n";
4701 echo Template::fill($template['foot'], $data);
4707 * AdminActions::parse_sprinttext()
4710 * @param string $which
4711 * @param string $val
4714 public function parse_sprinttext($which, $val)
4716 if ( !defined($which) )
4722 $base = constant($which);
4725 if ( preg_match('#[^<|%].*[^%|>]#', $val, $matchies) )
4727 if ( !preg_match('#[(].*[^)]#', $matchies[0], $args) )
4729 $met = 'parse_' . $matchies[0];
4733 $arg = trim($args[0], '()');
4734 $met = 'parse_' . substr($matchies[0], 0, strpos($matchies[0], '('));
4737 if ( method_exists($this, $met) )
4739 $value = call_user_func(array(&$this, $met), $arg);
4743 if ( !isset($value) || empty($value) )
4747 echo sprintf($base, $value);
4752 * AdminActions::parse_systemsettings()
4753 * Parse skinvar systemsettings
4755 * @param string $type type of settings for system
4756 * @param string $templateName name of template to use
4759 public function parse_systemsettings($type = 'phpinfo', $templateName = '')
4761 global $manager, $member, $CONF, $nucleus;
4763 $member->isAdmin() or Admin::disallow();
4765 $enable = _ADMIN_SYSTEMOVERVIEW_ENABLE;
4766 $disable = _ADMIN_SYSTEMOVERVIEW_DISABLE;
4773 case 'sqlserverinfo':
4774 echo DB::getAttribute(PDO::ATTR_SERVER_VERSION);
4776 case 'sqlclientinfo':
4777 echo DB::getAttribute(PDO::ATTR_CLIENT_VERSION);
4779 case 'magicquotesgpc':
4780 echo ini_get('magic_quotes_gpc') ? 'On' : 'Off';
4782 case 'magicquotesruntime':
4783 echo ini_get('magic_quotes_runtime') ? 'On' : 'Off';
4785 case 'registerglobals':
4786 echo ini_get('register_globals') ? 'On' : 'Off';
4789 $templates = array();
4790 if ( $templateName )
4792 $templates =& $manager->getTemplate($templateName);
4794 if ( !array_key_exists('SYSTEMINFO_GDSETTINGS', $templates) || empty($templates['SYSTEMINFO_GDSETTINGS']) )
4796 $template = "<tr>\n"
4797 . "<td><%key%></td>\n"
4798 . "<td><%value%></td>\n"
4803 $template = $templates['SYSTEMINFO_GDSETTINGS'];
4806 $gdinfo = gd_info();
4808 foreach ( $gdinfo as $key => $value )
4810 if ( is_bool($value) )
4812 $value = $value ? $enable : $disable;
4816 $value = Entity::hsc($value);
4822 echo Template::fill($template, $data);
4827 phpinfo(INFO_MODULES);
4828 $im = ob_get_contents();
4830 echo ( i18n::strpos($im, 'mod_rewrite') !== FALSE ) ? $enable : $disable;
4832 case 'nucleusversion':
4833 echo getNucleusVersion() / 100 . '(' . $nucleus['version'] . ')';
4835 case 'nucleuspatchlevel':
4836 echo getNucleusPatchLevel();
4842 echo $CONF['ItemURL'];
4844 case 'alertonheaderssent':
4845 echo $CONF['alertOnHeadersSent'] ? $enable : $disable;
4847 case 'nucleuscodename':
4848 if ( $nucleus['codename'] != '' )
4850 echo ' "' . $nucleus['codename'] . '"';
4853 case 'versioncheckurl':
4854 echo sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
4861 * AdminActions::parse_templateoverview()
4862 * Parse skinvar templateoverview
4864 * @param string $templateName name of template to use
4867 public function parse_templateoverview($templateName = '')
4869 $query = "SELECT * FROM %s WHERE tdname NOT LIKE 'admin/%%' ORDER BY tdname";
4870 $query = sprintf($query, sql_table('template_desc'));
4872 $template['content'] = 'templatelist';
4873 $template['tabindex'] = 10;
4875 Showlist($query, 'table', $template, $templateName);
4881 * AdminActions::parse_ticket()
4887 public function parse_ticket()
4890 $manager->addTicketHidden();
4895 * AdminActions::parse_versioncheckurl()
4896 * Parse skinvar versioncheckurl
4901 public function parse_versioncheckurl()
4903 echo sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
4908 * AdminActions::parse_yrbloglist()
4909 * Parse skinvar yrbloglist
4911 * @param string $templateName name of template to use
4914 public function parse_yrbloglist($templateName = '')
4917 $showAll = requestVar('showall');
4919 if ( $member->isAdmin() && ($showAll == 'yes') )
4921 // Super-Admins have access to all blogs! (no add item support though)
4922 $query = "SELECT bnumber, bname, 1 as tadmin, burl, bshortname"
4924 . " ORDER BY bnumber;";
4925 $query = sprintf($query, sql_table('blog'));
4929 $query = "SELECT bnumber, bname, tadmin, burl, bshortname"
4931 . " WHERE tblog=bnumber and tmember=%d"
4932 . " ORDER BY bnumber;";
4933 $query = sprintf($query, sql_table('blog'), sql_table('team'), (integer) $member->getID());
4936 $template['content'] = 'bloglist';
4937 $template['superadmin'] = $member->isAdmin();
4939 $amount = Showlist($query, 'table', $template, $templateName);
4941 if ( ($showAll != 'yes') && ($member->isAdmin()) )
4943 $query = 'SELECT COUNT(*) as result FROM ' . sql_table('blog');
4945 $total = DB::getValue($query);
4946 if ( $total > $amount )
4948 echo '<p><a href="index.php?action=overview&showall=yes">' . _OVERVIEW_SHOWALL . '</a></p>';
4954 echo _OVERVIEW_NOBLOGS;
4956 elseif( $amount != 0 )
4958 echo '<h2>' . _OVERVIEW_YRDRAFTS . '</h2>';
4960 $query = "SELECT ititle, inumber, bshortname"
4962 . ' WHERE iauthor=%d AND iblog=bnumber AND idraft=1;';
4963 $query = sprintf($query, sql_table('item'), sql_table('blog'), (integer) $member->getID());
4965 $template['content'] = 'draftlist';
4967 $amountdrafts = Showlist($query, 'table', $template, $templateName);
4968 if ( $amountdrafts == 0 )
4970 echo _OVERVIEW_NODRAFTS;
4977 * AdminActions::checkCondition()
4978 * Checks conditions for if statements
4980 * @param string $field type of <%if%>
4981 * @param string $name property of field
4982 * @param string $value value of property
4983 * @return boolean condition
4985 protected function checkCondition($field, $name='', $value = '')
4987 global $CONF, $archiveprevexists, $archivenextexists, $blog, $catid, $itemidnext, $itemidprev, $manager, $member;
4997 $blog =& $manager->getBlog($blogid);
5001 $blogid = getBlogIDFromCatID($catid);
5002 $blog =& $manager->getBlog($blogid);
5004 elseif ( intRequestVar('catid') )
5006 $catid = intRequestVar('catid');
5007 $blogid = getBlogIDFromCatID($catid);
5008 $blog =& $manager->getBlog($blogid);
5015 $condition = ($blog && $this->ifCategory($name, $value));
5018 $condition = $member->isLoggedIn();
5021 $condition = $member->isLoggedIn() && $this->ifOnTeam($name);
5024 $condition = $member->isLoggedIn() && $this->ifAdmin($name);
5027 $condition = $member->isLoggedIn() && $member->isAdmin();
5029 case 'allowloginedit':
5030 $condition = $member->isLoggedIn() && ($CONF['AllowLoginEdit'] || $member->isAdmin());
5033 $condition = ($itemidnext != '');
5036 $condition = ($itemidprev != '');
5038 case 'archiveprevexists':
5039 $condition = ($archiveprevexists == true);
5041 case 'archivenextexists':
5042 $condition = ($archivenextexists == true);
5045 $condition = (($name == $this->skintype) || ($name == requestVar('action')));
5048 $condition = $this->ifHasPlugin($name, $value);
5051 $condition = (Admin::getAdminAction() == $name);
5053 case 'adminoldaction':
5054 $condition = (Admin::getAdminAction() == $name);
5056 case 'addresschange':
5057 $condition = ($this->ifAddresscange());
5059 case 'bechangepass':
5060 $condition = ($this->beChangePassword());
5062 case 'skincandidates':
5063 $condition = ($this->ifSkincandidates());
5066 $condition = requestVar('nameclashes');
5068 case 'existsnewplugin':
5069 $condition = ($this->existsNewPlugin());
5076 $condition = (boolean) ($member->getAutosave() == $value);
5083 $condition = (Admin::$blog->getSetting($name) == $value);
5085 case 'itemproperty':
5090 if ( array_key_exists($name, Admin::$contents) )
5092 $condition = (boolean) (Admin::$contents[$name] == $value);
5096 $condition = $manager->pluginInstalled("NP_{$field}") && $this->ifPlugin($field, $name, $value);
5103 * AdminActions::_ifHasPlugin()
5104 * hasplugin,PlugName
5105 * -> checks if plugin exists
5106 * hasplugin,PlugName,OptionName
5107 * -> checks if the option OptionName from plugin PlugName is not set to 'no'
5108 * hasplugin,PlugName,OptionName=value
5109 * -> checks if the option OptionName from plugin PlugName is set to value
5111 * @param string $name name of plugin
5112 * @param string $value
5115 private function ifHasPlugin($name, $value)
5119 // (pluginInstalled method won't write a message in the actionlog on failure)
5120 if ( $manager->pluginInstalled("NP_{$name}") )
5122 $plugin =& $manager->getPlugin("NP_{$name}");
5123 if ( $plugin != NULL )
5131 list($name2, $value2) = preg_split('#=#', $value, 2);
5132 if ( $value2 == "" && $plugin->getOption($name2) != 'no' )
5136 else if ( $plugin->getOption($name2) == $value2 )
5147 * AdminActions::beChangePassword()
5152 private function beChangePassword()
5154 return intRequestVar('bNeedsPasswordChange');
5158 * AdminActions::ifSkincandidates()
5159 * Checks if a plugin exists and call its doIf function
5165 private function ifSkincandidates()
5168 $candidates = SKINIMPORT::searchForCandidates($DIR_SKINS);
5169 return (count($candidates) > 0);
5173 * AdminActions::ifPlugin()
5174 * Checks if a plugin exists and call its doIf function
5176 * @param string $name name of plugin
5177 * @param string $key
5178 * @param string $value
5181 private function ifPlugin($name, $key = '', $value = '')
5185 $plugin =& $manager->getPlugin("NP_{$name}");
5191 $params = func_get_args();
5192 array_shift($params);
5194 return call_user_func_array(array(&$plugin, 'doIf'), $params);
5198 * AdminActions::ifCategory()
5199 * Different checks for a category
5201 * @param string $key key for information of category
5202 * @param string $value value for information of category
5205 private function ifCategory($key = '', $value='')
5207 global $blog, $catid;
5209 // when no parameter is defined, just check if a category is selected
5210 if (($key != 'catname' && $key != 'catid') || ($value == ''))
5212 return $blog->isValidCategory($catid);
5215 // check category name
5216 if ( $key == 'catname' )
5218 $value = $blog->getCategoryIdFromName($value);
5219 if ($value == $catid)
5221 return $blog->isValidCategory($catid);
5225 // check category id
5226 if (($key == 'catid') && ($value == $catid))
5228 return $blog->isValidCategory($catid);
5235 * AdminActions::ifOnTeam()
5236 * Checks if a member is on the team of a blog and return his rights
5238 * @param string $blogName name of weblog
5241 private function ifOnTeam($blogName = '')
5243 global $blog, $member, $manager;
5245 // when no blog found
5246 if ( ($blogName == '') && !is_object($blog) )
5251 // explicit blog selection
5252 if ($blogName != '')
5254 $blogid = getBlogIDFromName($blogName);
5257 if (($blogName == '') || !$manager->existsBlogID($blogid))
5260 $blogid = $blog->getID();
5262 return $member->teamRights($blogid);
5266 * AdminActions::ifAdmin()
5267 * Checks if a member is admin of a blog
5269 * @param string $blogName name of weblog
5272 private function ifAdmin($blogName = '')
5274 global $blog, $member, $manager;
5276 // when no blog found
5277 if (($blogName == '') && (!is_object($blog)))
5282 // explicit blog selection
5283 if ($blogName != '')
5285 $blogid = getBlogIDFromName($blogName);
5288 if (($blogName == '') || !$manager->existsBlogID($blogid))
5291 $blogid = $blog->getID();
5294 return $member->isBlogAdmin($blogid);
5298 * AdminActions::ifAddresscange()
5299 * Check e-Mail address is changed
5304 private function ifAddresscange()
5308 $key = $this->objAdmin->sessionVar("{$CONF['CookiePrefix']}ackey");
5313 $info = MEMBER::getActivationInfo($key);
5318 $mem =& $manager->getMember($info->vmember);
5323 if ( $info->vtype == 'addresschange' )
5331 * AdminActions::templateEditRow()
5334 * @param array $template
5335 * @param string $desc
5336 * @param string $name
5337 * @param string $help
5338 * @param integer $tabindex
5339 * @param boolean $big
5340 * @param array $tmplt
5343 private function templateEditRow(&$template, $desc, $name, $help = '', $tabindex = 0, $big = 0, $tplt = '')
5349 if ( !array_key_exists($name, $template) )
5351 $template[$name] = '';
5359 $tmplt =& $manager->getTemplate($tplt);
5363 'description' => $desc,
5364 'help' => empty($help) ? '' : helpHtml('template' . $help),
5367 'tabindex' => $tabindex,
5368 'rows' => $big ? 10 : 5,
5371 if ( !array_key_exists('TEMPLATE_EDIT_ROW_HEAD', $tmplt) || empty($tmplt['TEMPLATE_EDIT_ROW_HEAD']) )
5373 $base['head'] = "</tr>"
5375 . "<td><%description%><%help%></td>\n"
5376 . "<td id=\"td<%count%>\">\n"
5377 . "<textarea class=\"templateedit\" name=\"<%name%>\" tabindex=\"<%tabindex%>\" cols=\"50\" rows=\"<%rows%>\" id=\"textarea<%count%>\">\n";
5381 $base['head'] = $tmplt['TEMPLATE_EDIT_ROW_HEAD'];
5384 if ( !array_key_exists('TEMPLATE_EDIT_ROW_TAIL', $tmplt) || empty($tmplt['TEMPLATE_EDIT_ROW_TAIL']) )
5386 $base['tail'] = "</textarea>\n"
5391 $base['tail'] = $tmplt['TEMPLATE_EDIT_ROW_TAIL'];
5394 echo TEMPLATE::fill($base['head'], $data);
5395 echo ENTITY::hsc($template[$name]);
5396 echo TEMPLATE::fill($base['tail'], $data);
5404 * AdminActions::customHelp()
5405 * shows a link to custom help file
5408 * @param string $tplName
5409 * @param string $url
5410 * @param string $iconURL
5411 * @param string $alt
5412 * @param string $title
5416 private function customHelp($id, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
5418 echo self::customHelpHtml($id, $tplName, $url, $iconURL, $alt, $title, $onclick);
5422 * AdminActions::customHelp()
5423 * shows a link to custom help file
5426 * @param string $tplName
5427 * @param string $url
5428 * @param string $iconURL
5429 * @param string $alt
5430 * @param string $title
5434 static function customHelplink($id, $tplName = '', $url = '', $title = '', $onclick = '')
5436 global $CONF, $manager;
5438 $templates = array();
5442 $templates =& $manager->getTemplate($tplName);
5445 if ( !array_key_exists('ADMIN_CUSTOMHELPLINK_ANCHOR', $templates) || empty($templates['ADMIN_CUSTOMHELPLINK_ANCHOR']) )
5447 $template = "<a href=\"<%helpurl%>#<%helptarget%>\" title=\"<%title%>\" <%onclick%>>\n";
5451 $template = $templates['ADMIN_CUSTOMHELPLINK_ANCHOR'];
5456 $url = $CONF['AdminURL'] . 'documentation/customHelp.html';
5459 if ( empty($onclick) )
5461 $onclick = 'onclick="if (event && event.preventDefault) event.preventDefault(); return help(this.href);"';
5463 elseif ( preg_match('#^onclick#', $onclick) )
5465 $onclick = $onclick;
5469 $onclick = 'onclick="' . $onclick . '"';
5474 'helptarget' => $id,
5475 'onclick' => $onclick,
5476 'title' => (isset($title) && !empty($title)) ? $title : _HELP_TT,
5478 return Template::fill($template, $data);
5482 * AdminActions::customHelpHtml()
5485 * @param string $tplName
5486 * @param string $url
5487 * @param string $iconURL
5488 * @param string $alt
5489 * @param string $title
5490 * @param string $onclick
5491 * @return string anchor element with help uri
5493 private function customHelpHtml($id, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
5495 global $CONF, $manager;
5497 $templates = array();
5501 $templates =& $manager->getTemplate($tplName);
5503 if ( !array_key_exists('ADMIN_CUSTOMHELPLINK_ICON', $templates) || !empty($templates['ADMIN_CUSTOMHELPLINK_ICON']) )
5505 $template = "<img src=\"<%iconurl%>\" <%width%><%height%>alt=\"<%alt%>\" title=\"<%title%>\" /></a>\n";
5509 $template = $templates['ADMIN_CUSTOMHELPLINK_ICON'];
5512 if ( empty($iconURL) )
5514 $iconURL = $CONF['AdminURL'] . 'documentation/icon-help.gif';
5517 if ( function_exists('getimagesize') )
5519 $size = getimagesize($iconURL);
5520 $width = 'width="' . $size[0] . '" ';
5521 $height = 'height="' . $size[1] . '" ';
5525 'iconurl' => $iconURL,
5527 'height' => $height,
5528 'alt' => (isset($alt) && !empty($alt)) ? $alt : _HELP_TT,
5529 'title' => (isset($title) && !empty($title)) ? $title : _HELP_TT,
5532 $icon = Template::fill($template, $data);
5533 $help = self::customHelplink($id, $tplName, $url, $title, $onclick);
5535 return $help . $icon;
5539 * AdminActions::input_yesno
5542 * @param $checkedval
5549 * @param $templateName
5552 public function input_yesno($name,
5565 $templates = array();
5566 if ( $templateName )
5568 $templates =& $manager->getTemplate($templateName);
5571 if ( $name == 'admin' )
5573 if ( !array_key_exists('INPUTYESNO_TEMPLATE_ADMIN', $templates) || empty($templates['INPUTYESNO_TEMPLATE_ADMIN']) )
5575 $template = '<input onclick="selectCanLogin(true);" type="radio" name="<%name%>" value="<%yesval%>" <%yescheckedval%> id="<%yesid%>" />' . "\n"
5576 . '<label for="<%yesid%>"><%yesvaltext%></label>' . "\n"
5577 . '<input onclick="selectCanLogin(false);" type="radio" name="<%name%>" value="<%noval%>" <%nocheckedval%> id="<%noid%>"<%disabled%> />' . "\n"
5578 . '<label for="<%noid%>"><%novaltext%></label>' . "\n";
5582 $template = $templates['INPUTYESNO_TEMPLATE_ADMIN'];
5587 if ( array_key_exists('INPUTYESNO_TEMPLATE_NORMAL', $templates) && !empty($templates['INPUTYESNO_TEMPLATE_NORMAL']) )
5589 $template = $templates['INPUTYESNO_TEMPLATE_NORMAL'];
5593 if ( array_key_exists('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO', $templates) && !empty($templates['SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO']) )
5595 $template = $templates['SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO'];
5598 if ( !isset($template) )
5600 $template = '<input type="radio" name="<%name%>" value="<%yesval%>" <%yescheckedval%> id="<%yesid%>" />' . "\n"
5601 . '<label for="<%yesid%>"><%yesvaltext%></label>' . "\n"
5602 . '<input type="radio" name="<%name%>" value="<%noval%>" <%nocheckedval%> id="<%noid%>"<%disabled%> />' . "\n"
5603 . '<label for="<%noid%>"><%novaltext%></label>' . "\n";
5608 $id = Entity::hsc($name);
5609 $id = str_replace('[', '-', $id);
5610 $id = str_replace(']', '-', $id);
5611 $id1 = $id . Entity::hsc($value1);
5612 $id2 = $id . Entity::hsc($value2);
5614 'name' => Entity::hsc($name),
5615 'yesval' => Entity::hsc($value1),
5616 'noval' => Entity::hsc($value2),
5619 'yesvaltext' => $yesval,
5620 'novaltext' => $noval,
5621 'yescheckedval' => ($checkedval == $value1) ? ' checked="checked" tabindex="' . $tabindex . '"': '',
5622 'nocheckedval' => ($checkedval != $value1) ? ' checked="checked" tabindex="' . $tabindex . '"': '',
5623 'disabled' => ($isAdmin && $name == 'canlogin') ? ' disabled="disabled"' : '',
5628 return Template::fill($template, $dat);
5632 echo Template::fill($template, $dat);
5638 * AdminActions::existsNewPlugin()
5639 * Check exists new plugin
5642 * @return boolean exists or not
5644 private function existsNewPlugin()
5646 global $DIR_PLUGINS;
5648 $query = "SELECT * FROM %s;";
5649 $query = sprintf($query, sql_table('plugin'));
5650 $res = DB::getResult($query);
5652 $installed = array();
5653 foreach( $res as $row )
5655 $installed[] = $row['pfile'];
5658 $files = scandir($DIR_PLUGINS);
5660 $candidates = array();
5661 foreach ( $files as $file )
5663 if ( preg_match("#^(NP_.*)\.php$#", $file, $matches) )
5665 if ( !in_array($matches[1], $installed) )
5667 $candidates[] = preg_replace("#^NP_#", "", $matches[1]);
5671 $this->newPlugCandidates = $candidates;
5672 return (count($candidates) > 0);
5676 * AdminActions::pagehead()
5677 * Output admin page head
5682 public function parse_pagehead()
5684 global $member, $nucleus, $CONF, $manager;
5686 $extrahead = Admin::getAdminextrahead();
5688 'extrahead' => &$extrahead,
5689 'action' => Admin::getAdminAction()
5691 $manager->notify('AdminPrePageHead', $data);
5693 $content = $this->parser->skin->getContentFromDB('pagehead');
5696 $baseUrl = Entity::hsc($CONF['SkinsURL']);
5700 if ( !array_key_exists('AdminCSS', $CONF) )
5702 DB::execute("INSERT INTO " . sql_table('config') . " VALUES ('AdminCSS', 'original')");
5703 $CONF['AdminCSS'] = 'original';
5707 /* HTTP 1.1 application for no caching */
5708 header("Cache-Control: no-cache, must-revalidate");
5709 header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
5711 $root_element = 'html';
5712 $charset = i18n::get_current_charset();
5713 $locale = preg_replace('#_#', '-', i18n::get_current_locale());
5714 $xml_version_info = self::$xml_version_info;
5715 $formal_public_identifier = self::$formal_public_identifier;
5716 $system_identifier = self::$system_identifier;
5717 $xhtml_namespace = self::$xhtml_namespace;
5719 echo "<?xml version=\"{$xml_version_info}\" encoding=\"{$charset}\" ?>\n";
5720 echo "<!DOCTYPE {$root_element} PUBLIC \"{$formal_public_identifier}\" \"{$system_identifier}\">\n";
5721 echo "<{$root_element} xmlns=\"{$xhtml_namespace}\" xml:lang=\"{$locale}\" lang=\"{$locale}\">\n";
5723 echo '<title>' . Entity::hsc($CONF['SiteName']) . " - Admin</title>\n";
5726 echo "<link rel=\"stylesheet\" title=\"Nucleus Admin Default\" type=\"text/css\" href=\"{$baseUrl}admin/defaultadmin/styles/admin_{$CONF["AdminCSS"]}.css\" />\n";
5728 echo "<link rel=\"stylesheet\" title=\"Nucleus Admin Default\" type=\"text/css\" href=\"{$baseUrl}admin/defaultadmin/styles/addedit.css\" />\n";
5729 echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/edit.js\"></script>\n";
5730 echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/admin.js\"></script>\n";
5731 echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/compatibility.js\"></script>\n";
5732 echo "{$extrahead}\n";
5735 echo "<div id=\"adminwrapper\">\n";
5736 echo "<div class=\"header\">\n";
5737 echo '<h1>' . Entity::hsc($CONF['SiteName']) . "</h1>\n";
5739 echo "<div id=\"container\">\n";
5740 echo "<div id=\"content\">\n";
5741 echo "<div class=\"loginname\">\n";
5743 if ( !$member->isLoggedIn() )
5745 echo '<a href="index.php?action=showlogin" title="Log in">' . _NOTLOGGEDIN . "</a><br />\n";
5749 echo _LOGGEDINAS . ' ' . $member->getDisplayName() ." - <a href='index.php?action=logout'>" . _LOGOUT. "</a><br />\n";
5750 echo "<a href='index.php?action=overview'>" . _ADMINHOME . "</a> - ";
5753 echo "<a href='".$CONF['IndexURL']."'>"._YOURSITE."</a><br />\n";
5756 if ( !array_key_exists('codename', $nucleus) || empty($nucleus['codename']) )
5758 $codenamestring = '';
5762 $codenamestring = ' "' . $nucleus['codename'].'"';
5765 if ( $member->isLoggedIn() && $member->isAdmin() )
5767 $checkURL = sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
5768 echo '<a href="' . $checkURL . '" title="' . _ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TITLE . '">Nucleus CMS ' . $nucleus['version'] . $codenamestring . '</a>';
5770 $newestVersion = getLatestVersion();
5771 $newestCompare = str_replace('/', '.', $newestVersion);
5772 $currentVersion = str_replace(array('/','v'), array('.',''), $nucleus['version']);
5774 if ( $newestVersion && version_compare($newestCompare, $currentVersion) > 0 )
5777 echo '<a style="color:red" href="http://nucleuscms.org/upgrade.php" title="' . _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE . '">';
5778 echo _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT . $newestVersion;
5784 echo "Nucleus CMS {$nucleus['version']}{$codenamestring}";
5791 $this->parser->parse($content);
5798 * AdminActionss::pagefoot()
5799 * Output admin page foot include quickmenu
5804 public function parse_pagefoot()
5806 global $action, $member, $manager;
5809 'action' => Admin::getAdminAction()
5811 $manager->notify('AdminPrePageFoot', $data);
5813 $content = $this->parser->skin->getContentFromDB('pagefoot');
5816 if ( $member->isLoggedIn() && ($action != 'showlogin') )
5818 echo '<h2>' . _LOGOUT . "</h2>\n";
5820 echo '<li><a href="index.php?action=overview">' . _BACKHOME . "</a></li>\n";
5821 echo '<li><a href="index.php?action=logout">' . _LOGOUT . "</a></li>\n";
5825 echo "<div class=\"foot\">\n";
5826 echo '<a href="' . _ADMINPAGEFOOT_OFFICIALURL . '">Nucleus CMS</a> © 2002-' . date('Y') . ' ' . _ADMINPAGEFOOT_COPYRIGHT;
5828 echo '<a href="' . _ADMINPAGEFOOT_DONATEURL . '">' . _ADMINPAGEFOOT_DONATE . "</a>\n";
5831 echo "<div id=\"quickmenu\">\n";
5833 if ( ($action != 'showlogin') && ($member->isLoggedIn()) )
5836 echo '<li><a href="index.php?action=overview">' . _QMENU_HOME . "</a></li>\n";
5839 echo '<h2>' . _QMENU_ADD . "</h2>\n";
5840 echo "<form method=\"get\" action=\"index.php\">\n";
5842 echo "<input type=\"hidden\" name=\"action\" value=\"createitem\" />\n";
5844 $showAll = requestVar('showall');
5846 if ( ($member->isAdmin()) && ($showAll == 'yes') )
5848 // Super-Admins have access to all blogs! (no add item support though)
5849 $query = "SELECT bnumber as value, bname as text FROM %s ORDER BY bname;";
5850 $query = sprintf($query, sql_table('blog'));
5854 $query = "SELECT bnumber as value, bname as text FROM %s, %s WHERE tblog=bnumber and tmember=%d ORDER BY bname;";
5855 $query = sprintf($query, sql_table('blog'), sql_table('team'), (integer) $member->getID());
5857 $template['name'] = 'blogid';
5858 $template['tabindex'] = 15000;
5859 $template['extra'] = _QMENU_ADD_SELECT;
5860 $template['selected'] = -1;
5861 $template['shorten'] = 10;
5862 $template['shortenel'] = '';
5863 $template['javascript'] = 'onchange="return form.submit()"';
5864 showlist($query, 'select', $template);
5869 echo "<h2>{$member->getDisplayName()}</h2>\n";
5871 echo '<li><a href="index.php?action=editmembersettings">' . _QMENU_USER_SETTINGS . "</a></li>\n";
5872 echo '<li><a href="index.php?action=browseownitems">' . _QMENU_USER_ITEMS . "</a></li>\n";
5873 echo '<li><a href="index.php?action=browseowncomments">' . _QMENU_USER_COMMENTS . "</a></li>\n";
5876 if ( $member->isAdmin() )
5878 echo '<h2>' . _QMENU_MANAGE . "</h2>\n";
5880 echo '<li><a href="index.php?action=actionlog">' . _QMENU_MANAGE_LOG . "</a></li>\n";
5881 echo '<li><a href="index.php?action=settingsedit">' . _QMENU_MANAGE_SETTINGS . "</a></li>\n";
5882 echo '<li><a href="index.php?action=systemoverview">' . _QMENU_MANAGE_SYSTEM . "</a></li>\n";
5883 echo '<li><a href="index.php?action=usermanagement">' . _QMENU_MANAGE_MEMBERS . "</a></li>\n";
5884 echo '<li><a href="index.php?action=createnewlog">' . _QMENU_MANAGE_NEWBLOG . "</a></li>\n";
5885 echo '<li><a href="index.php?action=backupoverview">' . _QMENU_MANAGE_BACKUPS . "</a></li>\n";
5886 echo '<li><a href="index.php?action=pluginlist">' . _QMENU_MANAGE_PLUGINS . "</a></li>\n";
5889 echo "<h2>" . _QMENU_LAYOUT . "</h2>\n";
5891 echo '<li><a href="index.php?action=skinoverview">' . _QMENU_LAYOUT_SKINS . "</a></li>\n";
5892 echo '<li><a href="index.php?action=templateoverview">' . _QMENU_LAYOUT_TEMPL . "</a></li>\n";
5893 echo '<li><a href="index.php?action=skinieoverview">' . _QMENU_LAYOUT_IEXPORT . "</a></li>\n";
5897 $data = array('options' => array());
5899 $manager->notify('QuickMenu', $data);
5901 if ( count($data['options']) > 0 )
5903 echo "<h2>" . _QMENU_PLUGINS . "</h2>\n";
5905 foreach ( $data['options'] as $option )
5907 echo '<li><a href="' . Entity::hsc($option['url']) . '" title="' . Entity::hsc($option['tooltip']) . '">' . Entity::hsc($option['title']) . "</a></li>\n";
5912 else if ( ($action == 'activate') || ($action == 'activatesetpwd') )
5915 echo '<h2>' . _QMENU_ACTIVATE . '</h2>' . _QMENU_ACTIVATE_TEXT;
5919 echo '<h2>' . _QMENU_INTRO . '</h2>' . _QMENU_INTRO_TEXT;
5922 echo "<!-- quickmenu -->\n";
5925 echo "<!-- content -->\n";
5928 echo "<!-- container -->\n";
5931 echo "<!-- adminwrapper -->\n";
5939 $this->parser->skin->parse('pagefoot');
5946 * AdminActions::selectBlog()
5947 * Inserts a HTML select element with choices for all blogs to which the user has access
5948 * mode = 'blog' => shows blognames and values are blogids
5949 * mode = 'category' => show category names and values are catids
5951 * @param string $name
5952 * @param string $mode
5953 * @param integer $selected
5954 * @param integer $tabindex
5955 * @param integer $showNewCat
5956 * @param integer $iForcedBlogInclude ID for weblog always included
5957 * @param $iForcedBlogInclude
5958 * ID of a blog that always needs to be included, without checking if the
5959 * member is on the blog team (-1 = none)
5962 private function selectBlog($name, $mode='blog', $selected = 0, $tabindex = 0, $showNewCat = 0, $iForcedBlogInclude = -1)
5964 global $member, $CONF;
5966 // 0. get IDs of blogs to which member can post items (+ forced blog)
5967 $aBlogIds = array();
5968 if ( $iForcedBlogInclude != -1 )
5970 $aBlogIds[] = intval($iForcedBlogInclude);
5973 if ( $member->isAdmin() && array_key_exists('ShowAllBlogs', $CONF) && $CONF['ShowAllBlogs'] )
5975 $query = "SELECT bnumber FROM %s ORDER BY bname;";
5976 $query = sprintf($query, sql_table('blog'));
5980 $query = "SELECT bnumber FROM %s, %s WHERE tblog=bnumber AND tmember=%d;";
5981 $query = sprintf($query, sql_table('blog'), sql_table('team'), (integer) $member->getID());
5984 $rblogids = DB::getResult($query);
5985 foreach ( $rblogids as $row )
5987 if ( $row['bnumber'] != $iForcedBlogInclude )
5989 $aBlogIds[] = intval($row['bnumber']);
5993 if ( count($aBlogIds) == 0 )
5998 echo "<select name=\"{$name}\" tabindex=\"{$tabindex}\">\n";
6000 // 1. select blogs (we'll create optiongroups)
6001 // (only select those blogs that have the user on the team)
6002 $queryBlogs = "SELECT bnumber, bname FROM %s WHERE bnumber in (%s) ORDER BY bname;";
6003 $queryBlogs = sprintf($queryBlogs, sql_table('blog'), implode(',', $aBlogIds));
6004 $blogs = DB::getResult($queryBlogs);
6006 if ( $mode == 'category' )
6008 if ( $blogs->rowCount() > 1 )
6012 foreach ( $blogs as $rBlog )
6014 if ( isset($multipleBlogs) && !empty($multipleBlogs) )
6016 echo '<optgroup label="' . Entity::hsc($rBlog['bname']) . "\">\n";
6019 // show selection to create new category when allowed/wanted
6022 // check if allowed to do so
6023 if ( $member->blogAdminRights($rBlog['bnumber']) )
6025 echo '<option value="newcat-' . $rBlog['bnumber'] . '">' . _ADD_NEWCAT . "</option>\n";
6029 // 2. for each category in that blog
6030 $catQuery = "SELECT cname, catid FROM %s WHERE cblog=%d ORDER BY cname ASC;";
6031 $catQuery = sprintf($catQuery, sql_table('category'), (integer) $rBlog['bnumber']);
6032 $categories = DB::getResult($catQuery);
6033 foreach ( $categories as $rCat )
6035 if ( $rCat['catid'] == $selected )
6037 $selectText = ' selected="selected" ';
6043 echo '<option value="' . $rCat['catid'] . '" ' . $selectText . '>' . Entity::hsc($rCat['cname']) . "</option>\n";
6046 if ( isset($multipleBlogs) && !empty($multipleBlogs) )
6054 foreach ( $blogs as $rBlog )
6056 echo '<option value="' . $rBlog['bnumber'] . '"';
6057 if ( $rBlog['bnumber'] == $selected )
6059 echo '<option value="' . $rBlog['bnumber'] . '" selected="selected">' . Entity::hsc($rBlog['bname']) . "</option>\n";
6063 echo '<option value="' . $rBlog['bnumber'] . '">' . Entity::hsc($rBlog['bname']) . "</option>\n";