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->getDefaultTypes();
1333 $types = self::$default_skin_types;
1334 unset($types['memberedit']);
1335 unset($types['login']);
1336 $nType = array_keys($types);
1337 $skinid = intRequestVar('skinid');
1339 $query = "SELECT stype FROM %s WHERE stype NOT IN (%s) AND sdesc=%d;";
1340 $query = sprintf($query, sql_table('skin'), "'" . implode("', '", $nType) . "'", (integer) $skinid);
1342 $res = DB::getResult($query);
1343 if ( $res && $res->rowCount() > 0 )
1345 /* NOTE: set templates for HEAD/BODY/FOOT */
1346 if ( !array_key_exists('ADMIN_SPECIALSKINLIST_HEAD', $templates) || empty($templates['ADMIN_SPECIALSKINLIST_HEAD']) )
1348 $template['head'] = "<ul>\n";
1352 $template['head'] = $templates['ADMIN_SPECIALSKINLIST_HEAD'];
1354 if ( !array_key_exists('ADMIN_SPECIALSKINLIST_BODY', $templates) || empty($templates['ADMIN_SPECIALSKINLIST_BODY']) )
1356 $template['body'] = '<li>'
1357 . '<a tabindex="<%tabindex%>" href="index.php?action=adminskinedittype&skinid=<%skinid%>&type=<%skintype%>">'
1360 . '(<a tabindex="<%tabindex%>" href="index.php?action=adminskinremovetype&skinid=<%skinid%>&type=<%skintype%>">'
1367 $template['body'] = $templates['ADMIN_SPECIALSKINLIST_BODY'];
1369 if ( !array_key_exists('ADMIN_SPECIALSKINLIST_FOOT', $templates) || empty($templates['ADMIN_SPECIALSKINLIST_FOOT']) )
1371 $template['foot'] = "</ul>\n";
1375 $template['foot'] = $templates['ADMIN_SPECIALSKINLIST_FOOT'];
1382 echo $template['head'];
1383 foreach ( $res as $row )
1386 'tabindex' => $tabstart++,
1387 'skinid' => $skinid,
1388 'skintype' => Entity::hsc(strtolower($row['stype']))
1390 echo Template::fill($template['body'], $data);
1393 echo $template['foot'];
1399 * AdminActions::parse_admintemplateoverview()
1400 * Parse skinvar admintemplateoverview
1402 * @param string $templateName name of template to use
1405 public function parse_admintemplateoverview($templateName = '')
1407 $query = "SELECT * FROM %s WHERE tdname LIKE 'admin/%%' ORDER BY tdname;";
1408 $query = sprintf($query, sql_table('template_desc'));
1410 $template['content'] = 'admintemplatelist';
1411 $template['tabindex'] = 10;
1413 Showlist($query, 'table', $template, $templateName);
1418 * AdminActions::parse_allowedadminskinactions()
1419 * Parse skinvar allowedadminskinactions
1424 public function parse_allowedadminskinactions()
1426 global $DIR_ADMINSKINS;
1427 $skinType = strtolower(trim(requestVar('type')));
1428 $actions = $this->parser->skin->getAllowedActionsForType($skinType);
1431 while ( $current = array_shift($actions) )
1433 // TODO: remove this
1434 // skip deprecated vars
1435 if ($current == 'ifcat' || $current == 'imagetext' || $current == 'vars')
1440 echo helplink("adminskinvar-{$current}") . "$current</a>\n";
1442 if ( count($actions) != 0 )
1451 * AdminActions::parse_allowedskinactions()
1452 * Parse skinvar allowedskinactions
1457 public function parse_allowedskinactions()
1459 $skinType = strtolower(trim(requestVar('type')));
1460 $skinid = intRequestVar('skinid');
1462 $skin = new Skin($skinid);
1463 $actions = $skin->getAllowedActionsForType($skinType);
1466 while ( $current = array_shift($actions) )
1468 // TODO: remove this
1469 // skip deprecated vars
1470 if ( $current == 'ifcat' || $current == 'imagetext' || $current == 'vars' )
1475 /* TODO: alternative function should be used or not? */
1476 echo helplink("skinvar-{$current}") . "$current</a>\n";
1478 if ( count($actions) != 0 )
1487 * AdminActions::parse_banlistdeletedlist()
1488 * Parse skinvar banlistdeletedlist
1490 * @param string $templateName name of template to use
1493 public function parse_banlistdeletedlist($templateName = '')
1497 $templates = array();
1498 if ( $templateName )
1500 $templates =& $manager->getTemplate($templateName);
1503 if ( !array_key_exists('BANLIST_DELETED_LIST', $templates) || empty($templates['BANLIST_DELETED_LIST']) )
1505 $template = "<li><%blogname%></li>\n";
1509 $template = $templates['BANLIST_DELETED_LIST'];
1512 $deleted = requestArray('delblogs');
1513 foreach ( $deleted as $delblog )
1515 $blog =& $manager->getBlog($delblog);
1517 'blogname' => Entity::hsc($blog->getName())
1519 echo Template::fill($template, $data);
1526 * AdminActions::parse_batchdeletelist()
1527 * Parse skinvar batchdeletelist
1532 public function parse_batchdeletelist()
1534 $selected = requestIntArray('batch');
1537 foreach ( $selected as $select )
1539 echo '<input type="hidden" name="batch[' . ($index++) . ']" value="' . intval($select) . "\" />\n";
1541 // add hidden vars for team & comment
1542 if ( requestVar('action') == 'batchteam' )
1544 echo '<input type="hidden" name="blogid" value="' . intRequestVar('blogid') . "\" />\n";
1546 if ( requestVar('action') == 'batchcomment' )
1548 echo '<input type="hidden" name="itemid" value="' . intRequestVar('itemid') . "\" />\n";
1554 * AdminActions::parse_batchdeletetype()
1555 * Parse skinvar batchdeletetype
1560 public function parse_batchdeletetype()
1562 echo Entity::hsc(requestVar('action'));
1567 * AdminActions::parse_batchmovebtn()
1568 * Parse skinvar batchmovebtn
1573 public function parse_batchmovebtn()
1575 $actionType = requestVar('action');
1576 switch ( $actionType )
1581 case 'batchcategory':
1589 * AdminActions::parse_batchmovelist()
1590 * Parse skinvar batchmovelist
1595 public function parse_batchmovelist()
1597 $selected = requestIntArray('batch');
1599 foreach ( $selected as $select )
1601 echo '<input type="hidden" name="batch[' . ($count) . ']" value="' . intval($select) . "\" />\n";
1608 * AdminActions::parse_batchmovetitle()
1609 * Parse skinvar batchmovetitle
1614 public function parse_batchmovetitle()
1616 $actionType = requestVar('action');
1617 switch ( $actionType )
1622 case 'batchcategory':
1623 echo _MOVECAT_TITLE;
1630 * AdminActions::parse_batchmovetype()
1631 * Parse skinvar batchmovetype
1636 public function parse_batchmovetype()
1638 echo Entity::hsc(requestVar('action'));
1643 * AdminActions::parse_blogcatlist()
1644 * Parse skinvar blogcatlist
1649 public function parse_blogcatlist($templateName = '')
1652 $blogid = intRequestVar('blogid');
1653 $query = "SELECT * FROM %s WHERE cblog = %d ORDER BY cname;";
1654 $query = sprintf($query, sql_table('category'), (integer) $blogid);
1656 $template['content'] = 'categorylist';
1657 $template['tabindex'] = 200;
1659 $batch = new Batch('category');
1660 $batch->showlist($query, 'table', $template, $templateName);
1665 * AdminActions::parse_blogid()
1666 * Parse skinvar blogid
1671 public function parse_blogid()
1673 echo intRequestVar('blogid');
1678 * AdminActions::parse_blognotifysetting()
1679 * Parse skinvar blognotifysetting
1684 public function parse_blognotifysetting($type)
1687 $blogid = intRequestVar('blogid');
1688 $blog =& $manager->getBlog($blogid);
1693 if ( !$blog->notifyOnComment() )
1699 if ( !$blog->notifyOnVote() )
1705 if ( !$blog->notifyOnNewItem() )
1711 echo ' checked="checked"';
1716 * AdminActions::parse_blogsetting()
1717 * Parse skinvar blogsetting
1719 * @param string $which name of weblog setting
1722 public function parse_blogsetting($which)
1724 echo $this->parse_getblogsetting($which);
1729 * AdminActions::parse_blogsettingyesno()
1730 * Parse skinvar blogsettingyesno
1732 * @param string $type type of weblog setting
1733 * @param string $templateName name of template to use
1736 public function parse_blogsettingyesno($type, $templateName = '')
1740 $blogid = intRequestVar('blogid');
1741 $blog =& $manager->getBlog($blogid);
1745 case 'convertbreaks':
1746 $checkedval = $blog->convertBreaks();
1749 case 'allowpastposting':
1750 $checkedval = $blog->allowPastPosting();
1754 $checkedval = $blog->commentsEnabled();
1758 $checkedval = $blog->isPublic();
1762 $checkedval = $blog->emailRequired();
1766 $checkedval = $blog->getSearchable();
1770 $this->parse_inputyesno($type, $checkedval, $tabindex, 1, 0, _YES, _NO, 0, $templateName);
1775 * AdminActions::parse_blogteamlist()
1776 * Parse skinvar blogteamlist
1778 * @param string $templateName name of template to use
1781 public function parse_blogteamlist($templateName = '')
1784 $blogid = intRequestVar('blogid');
1785 $query = "SELECT tblog, tmember, mname, mrealname, memail, tadmin "
1787 . "WHERE tmember=mnumber AND tblog= %d";
1788 $query = sprintf($query, sql_table('member'), sql_table('team'), (integer) $blogid);
1790 $template['content'] = 'teamlist';
1791 $template['tabindex'] = 10;
1793 $batch = new Batch('team');
1794 $batch->showList($query, 'table', $template, $templateName, _LISTS_NOMORE);
1799 * AdminActions::parse_blogteammembers()
1800 * Parse skinvar blogteammembers
1805 public function parse_blogteammembers()
1807 $blogid = intRequestVar('blogid');
1808 $query = "SELECT mname, mrealname "
1810 . "WHERE mnumber=tmember AND tblog=%d;";
1811 $query = sprintf($query, sql_table('member'), sql_table('team'), (integer) $blogid);
1812 $res = DB::getResult($query);
1813 $memberNames = array();
1814 foreach ( $res as $row )
1816 $memberNames[] = Entity::hsc($row['mname']) . ' (' . Entity::hsc($row['mrealname']). ')';
1818 echo implode(',', $memberNames);
1822 * AdminActions::parse_blogtime()
1823 * Parse skinvar blogtime
1825 * @param string $type type of time
1826 * @param string $format format for time expression
1827 * @param integer $offset offset of time
1830 public function parse_blogtime($type, $format = '%H:%M', $offset = 0)
1834 if ( $type != 'blogtime' )
1836 /* return server time */
1837 $timestamp = time() + $offset;
1841 $bid = intRequestVar('blogid');
1842 $b =& $manager->getBlog($bid);
1843 $timestamp = $b->getCorrectTime() + $offset;
1846 echo i18n::formatted_datetime($format, $timestamp);
1851 * AdminActions::parse_bookmarkletadmin()
1852 * Parse skinvar bookmarkletadmin
1857 public function parse_bookmarkletadmin()
1861 $blogid = intRequestVar('blogid');
1863 echo Entity::hsc('javascript:' . getBookmarklet($blogid));
1868 * AdminActions::parse_categories()
1869 * Parse skinvar categories
1871 * create category dropdown box
1873 * @param string $type name of setting for category
1876 public function parse_categories($startidx = 0)
1881 $itemid = intRequestVar('itemid');
1882 $item = &$manager->getItem($itemid, 1, 1);
1887 $blogid = intRequestVar('blogid');
1891 $blogid = $item['blogid'];
1893 $blog = &$manager->getBlog($blogid);
1895 if ( $item && $blog->convertBreaks() && requestVar('action') == 'itemedit' )
1897 $item['body'] = removeBreaks($item['body']);
1898 $item['more'] = removeBreaks($item['more']);
1901 $contents = array();
1902 if ( requestVar('action') == 'itemedit' )
1907 if ( !array_key_exists('catid', $contents) || empty($contents['catid']) )
1910 $catid = $blog->getDefaultCategory();
1915 $catid = $contents['catid'];
1918 $this->selectBlog('catid', 'category', $catid, $startidx, 1, $blog->getID());
1924 * AdminActions::parse_category()
1925 * Parse skinvar category
1927 * @param string $type name of setting for category
1930 public function parse_category($type = 'name')
1932 echo $this->parse_getcategory($type);
1937 * AdminActions::parse_categorysetting()
1938 * Parse skinvar categorysetting
1940 * @param string $type type in category setting
1943 public function parse_categorysetting($type)
1945 $catid = intRequestVar('catid');
1946 if ( $type == 'id' )
1951 $blogid = intRequestVar('blogid');
1952 $query = "SELECT * FROM %s WHERE cblog = %d AND catid = %d;";
1953 $query = sprintf($query, sql_table('category'), (integer) $blogid, (integer) $catid);
1954 $row = DB::getRow($query);
1956 if ( $type != 'name' )
1958 echo Entity::hsc($row['cdesc']);
1962 echo Entity::hsc($row['cname']);
1969 * AdminActions::parse_codename()
1970 * Parse templatevar codename
1976 public function parse_checkedonval($value, $name)
1981 $itemid = intRequestVar('itemid');
1982 $item =& $manager->getItem($itemid, 1, 1);
1984 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
1986 if ( $item && $blog->convertBreaks() && requestVar('action') == 'itemedit' )
1988 $item['body'] = removeBreaks($item['body']);
1989 $item['more'] = removeBreaks($item['more']);
1992 $contents = array();
1993 if ( requestVar('action') == 'itemedit' )
1997 if ( !isset($contents[$name]) )
1999 $contents[$name] = '';
2001 if ($contents[$name] == $value)
2003 echo 'checked="checked"';
2009 * AdminActions::parse_codename()
2010 * Parse templatevar codename
2015 * TODO: is this need???
2017 public function parse_codename()
2020 echo $nucleus['codename'];
2025 * AdminActions::parse_commentnavlist()
2026 * Parse skinvar commentnavlist
2031 public function parse_commentnavlist()
2033 global $CONF, $manager, $member;
2036 if ( postVar('start') )
2038 $start = intPostVar('start');
2045 // amount of items to show
2046 if ( postVar('amount') )
2048 $amount = intPostVar('amount');
2052 $amount = (integer) $CONF['DefaultListSize'];
2058 $query = 'SELECT cbody, cuser, cmail, cemail, mname, ctime, chost, cnumber, cip, citem '
2060 . 'LEFT OUTER JOIN %s ON mnumber=cmember '
2062 $query = sprintf($query, sql_table('comment'), sql_table('member'));
2064 if ( $this->skintype == 'itemcommentlist' )
2066 $itemid = intRequestVar('itemid');
2067 $query .= " citem={$itemid}";
2068 $template['canAddBan'] = $member->blogAdminRights(intRequestVar('blogid'));
2070 $nonComments = _NOCOMMENTS;
2072 elseif ( $this->skintype == 'browseowncomments' )
2075 $query .= ' cmember=' . $member->getID();
2076 $template['canAddBan'] = 0;
2078 $nonComments = _NOCOMMENTS_YOUR;
2080 elseif ( $this->skintype == 'blogcommentlist' )
2083 $query .= ' cblog=' . intRequestVar('blogid');
2084 $template['canAddBan'] = $member->blogAdminRights(intRequestVar('blogid'));
2085 $bid = intRequestVar('blogid');
2086 $nonComments = _NOCOMMENTS_BLOG;
2089 $search = postVar('search');
2090 if ( !empty($search) )
2092 $query .= ' and cbody LIKE ' . DB::quoteValue('%'.$search.'%');
2095 $query .= " ORDER BY ctime ASC LIMIT {$start},{$amount}";
2097 $template['content'] = 'commentlist';
2099 $navList = new Navlist($this->skintype, $start, $amount, 0, 1000, $bid, $search, $itemid);
2100 $navList->showBatchList('comment', $query, 'table', $template, $nonComments);
2105 * AdminActions::parse_configsettingsedit()
2106 * Parse skinvar configsettingsedit
2108 * @param string $type type of global configuration
2111 public function parse_configsettingsedit($type)
2116 case 'DefaultListSize':
2117 if ( !array_key_exists('DefaultListSize', $CONF) )
2119 $query = "INSERT INTO %s VALUES (DefaultListSize, 10);";
2120 $query = sprintf($query, sql_table('config'));
2121 DB::execute($query);
2122 $CONF['DefaultListSize'] = 10;
2124 elseif ( intval($CONF['DefaultListSize']) < 1 )
2126 $CONF['DefaultListSize'] = 10;
2128 echo intval($CONF['DefaultListSize']);
2130 case 'SessionCookie':
2131 $value = $CONF['SessionCookie'];
2132 $txt1 = _SETTINGS_COOKIESESSION;
2133 $txt2 = _SETTINGS_COOKIEMONTH;
2134 $this->parse_inputyesno('SessionCookie', $value, 10190, 1, 0, $txt1, $txt2);
2137 $value = $CONF['URLMode'];
2138 $txt1 = _SETTINGS_URLMODE_NORMAL;
2139 $txt2 = _SETTINGS_URLMODE_PATHINFO;
2140 $this->parse_inputyesno('URLMode', $value, 10077, 'normal', 'pathinfo', $txt1, $txt2);
2143 if ( array_key_exists($type, $CONF) && is_string($CONF[$type]) )
2145 echo Entity::hsc($CONF[$type]);
2153 * AdminActions::parse_configsettingsyesno()
2154 * Parse skinvar configsettingsyesno
2156 * @param string $type type of global setting
2157 * @param integer $tabindex tabindex attribute of input element
2160 public function parse_configsettingsyesno($type, $tabindex)
2163 if ( array_key_exists($type, $CONF) )
2165 $this->parse_inputyesno($type, $CONF[$type], $tabindex);
2171 * AdminActions::parse_contents()
2172 * Parse skinvar contents
2174 * @param string $which part for item
2177 public function parse_contents($which)
2179 if ( !array_key_exists($which, Admin::$contents) )
2181 Admin::$contents[$which] = '';
2183 echo Entity::hsc(Admin::$contents[$which]);
2187 * AdminActions::parse_currenttime()
2188 * Parse skinvar currenttime
2190 * @param string $what
2193 public function parse_currenttime($what)
2195 $nu = getdate(Admin::$blog->getCorrectTime());
2200 * AdminActions::parse_customhelplink()
2201 * Parse skinvar customhelplink
2203 * @param string $topic name of topic
2204 * @param string $tplName name of template
2205 * @param string $url string as URI
2206 * @param string $iconURL string as URI for icon
2207 * @param string $alt alternative text for image element
2208 * @param string $title title for anchor element
2211 public function parse_customhelplink($topic, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
2213 $this->customHelp($topic, $url, $iconURL);
2218 * AdminActions::parse_date()
2219 * Parse skinvar date
2221 public function parse_date($format = 'c')
2223 global $CONF, $manager;
2224 /* TODO: offset is based on i18n::get_current_locale()? */
2225 echo i18n::formatted_datetime($format, time());
2230 * AdminActions::parse_defaultadminskintypes()
2231 * Parse skinvar defaultadminskintypes
2233 * @param string $tabindex index number for tabindex attribute of input element
2234 * @param string $templateName name of template
2237 public function parse_defaultadminskintypes($tabindex, $templateName = '')
2241 $templates = array();
2243 if ( $templateName )
2245 $templates =& $manager->getTemplate($templateName);
2248 $types = self::$default_skin_types;
2249 unset($types['memberedit']);
2250 unset($types['login']);
2253 /* NOTE: set templates for HEAD/BODY/FOOT */
2254 if ( !array_key_exists('ADMINSKINTYPELIST_HEAD', $templates) || empty($templates['ADMINSKINTYPELIST_HEAD']) )
2256 $template['head'] = "<ul>\n";
2260 $template['head'] = $templates['ADMINSKINTYPELIST_HEAD'];
2262 if ( !array_key_exists('ADMINSKINTYPELIST_BODY', $templates) || empty($templates['ADMINSKINTYPELIST_BODY']) )
2264 $template['body'] = "<li>"
2265 . "<a tabindex=\"<%tabindex%>\" href=\"index.php?action=adminskinedittype&skinid=<%skinid%>&type=<%skintype%>\"><%name%></a> <%help%>"
2270 $template['body'] = $templates['ADMINSKINTYPELIST_BODY'];
2272 if ( !array_key_exists('ADMINSKINTYPELIST_FOOT', $templates) || empty($templates['ADMINSKINTYPELIST_FOOT']) )
2274 $template['foot'] = "</ul>\n";
2278 $template['foot'] = $templates['ADMINSKINTYPELIST_FOOT'];
2281 $handler = new AdminActions('template');
2282 $parser = new PARSER($handler);
2284 /* NOTE: do output */
2285 echo $template['head'];
2286 foreach ( $types as $type => $fName )
2288 $helplink = $this->customHelpHtml("skinpart{$type}{$templateName}");
2290 'tabindex' => $tabindex,
2291 'skintype' => $type,
2293 'help' => $helplink,
2294 'skinid' => intrequestVar('skinid'),
2296 $parser->parse(Template::fill($template['body'], $data));
2299 echo $template['foot'];
2305 * AdminActions::parse_defblogselect()
2306 * Parse skinvar defblogselect
2308 * @param string $templateName name of template
2311 public function parse_defblogselect($templateName = '')
2315 $query = "SELECT bname as text, bnumber as value FROM %s;";
2316 $query = sprintf($query, sql_table('blog'));
2318 $template['name'] = 'DefaultBlog';
2319 $template['selected'] = $CONF['DefaultBlog'];
2320 $template['tabindex'] = 10;
2322 Showlist($query, 'select', $template, $templateName);
2328 * AdminActions::parse_defcatselect()
2329 * Parse skinvar defcatselect
2331 * @param string $templateName name of template
2334 public function parse_defcatselect($templateName = '')
2338 $blogid = intRequestVar('blogid');
2339 $blog =& $manager->getBlog($blogid);
2341 $query = "SELECT cname as text, catid as value FROM %s WHERE cblog=%d;";
2342 $query = sprintf($query, sql_table('category'), (integer) $blog->getID());
2344 $template['name'] = 'defcat';
2345 $template['selected'] = $blog->getDefaultCategory();
2346 $template['tabindex'] = 110;
2348 Showlist($query, 'select', $template, $templateName);
2354 * AdminActions::parse_defskinselect()
2355 * Parse skinvar defskinselect
2357 * @param string $type type of skin
2358 * @param string $templateName name of template
2361 public function parse_defskinselect($type = 'blog', $templateName = '')
2363 global $CONF, $manager;
2365 $query = "SELECT sdname as text, sdnumber as value FROM %s WHERE sdname NOT LIKE 'admin/%%';";
2366 $query = sprintf($query, sql_table('skin_desc'));
2368 $blogid = intRequestVar('blogid');
2372 $template['selected'] = $CONF['BaseSkin'];
2376 $blog =& $manager->getBlog($blogid);
2377 $template['selected'] = $blog->getDefaultSkin();
2380 if ( $type != 'blog' )
2382 $nname = 'BaseSkin';
2389 $template['name'] = $nname;
2390 $template['tabindex'] = 50;
2392 Showlist($query, 'select', $template, $templateName);
2398 * AdminActions::parse_deletecomment()
2399 * Parse skinvar deletecomment
2401 * @param string $type type of infomation for comment
2404 public function parse_deletecomment($type = 'id')
2406 $commentid = intRequestVar('commentid');
2407 $comment = COMMENT::getComment($commentid);
2412 echo intRequestVar('commentid');
2415 if ( array_key_exists('member', $comment) && !empty($comment['member']) )
2417 echo $comment['member'];
2421 echo $comment['user'];
2425 $body = strip_tags($comment['body']);
2426 echo Entity::hsc(shorten($body, 300, '...'));
2432 * AdminActions::parse_deleteitembody()
2433 * Parse skinvar deleteitembody
2438 public function parse_deleteitembody()
2442 $itemid = intRequestVar('itemid');
2443 $item =& $manager->getItem($itemid, 1, 1);
2445 $body = strip_tags($item['body']);
2447 echo Entity::hsc(shorten($body, 300, '...'));
2453 * AdminActions::parse_deleteitemid()
2454 * Parse skinvar deleteitemid
2459 public function parse_deleteitemid()
2461 echo (integer) intRequestVar('itemid');
2466 * AdminActions::parse_deleteitemtitle()
2467 * Parse skinvar deleteitemtitle
2472 public function parse_deleteitemtitle()
2476 $itemid = intRequestVar('itemid');
2477 $item =& $manager->getItem($itemid, 1, 1);
2479 echo Entity::hsc(strip_tags($item['title']));
2485 * AdminActions::parse_editadminskin()
2486 * Parse skinvar editadminskin
2488 * @param string $type type of skin setting
2491 public function parse_editadminskin($type = 'id')
2493 $skinid = intRequestVar('skinid');
2494 $skin = new Skin($skinid);
2498 echo intRequestVar('skinid');
2501 echo Entity::hsc($skin->getName());
2504 echo Entity::hsc($skin->getDescription());
2507 echo Entity::hsc($skin->getContentType());
2510 echo Entity::hsc($skin->getIncludePrefix());
2513 $this->parse_inputyesno('inc_mode', $skin->getIncludeMode(), 120, 'skindir', 'normal', _PARSER_INCMODE_SKINDIR, _PARSER_INCMODE_NORMAL);
2521 * AdminActions::parse_editadminskintype()
2522 * Parse skinvar editadminskintype
2524 * @param string $type name of skin type
2527 public function parse_editadminskintype($type = 'id')
2529 global $CONF, $manager, $member;
2531 static $skin = NULL;
2532 static $types = array();
2534 if ( $skin == NULL )
2536 $skinid = intRequestVar('skinid');
2537 $skin = new Skin($skinid, 'AdminActions');
2538 $types = $skin->getAvailableTypes();
2541 $stype = strtolower(trim(requestVar('type')));
2542 if ( empty($stype) )
2550 echo $skin->getID();
2553 echo Entity::hsc($skin->getName());
2556 echo Entity::hsc($skin->getDescription());
2559 echo Entity::hsc($skin->getContentType());
2562 echo Entity::hsc($skin->getContentFromDB($stype));
2565 $friendly_name = !array_key_exists($stype, $types) ? ucfirst($stype) : $types[$stype];
2566 echo Entity::hsc($friendly_name);
2569 echo Entity::hsc($stype);
2572 echo Entity::hsc($skin->getIncludePrefix());
2575 $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;
2576 echo Entity::hsc($incMode);
2585 * AdminActions::parse_editcomment()
2586 * Parse skinvar editcomment
2588 * @param string $type type of comment setting
2591 public function parse_editcomment($type = 'id')
2595 $commentid = intRequestVar('commentid');
2596 $comment = COMMENT::getComment($commentid);
2598 $manager->notify('PrepareCommentForEdit', array('comment' => &$comment));
2603 echo intRequestVar('commentid');
2606 if ( !array_key_exists('member', $comment) || empty($comment['member']) )
2608 echo $comment['user'] . " (" . _EDITC_NONMEMBER . ")";
2612 echo $comment['member'] . " (" . _EDITC_MEMBER . ")";
2616 echo date("Y-m-d @ H:i", $comment['timestamp']);
2619 $comment['body'] = str_replace('<br />', '', $comment['body']);
2620 $comment['body'] = preg_replace("#<a href=['\"]([^'\"]+)['\"]( rel=\"nofollow\")?>[^<]*</a>#", "\\1", $comment['body']);
2621 echo $comment['body'];
2624 echo $comment['userid'];
2627 echo $comment['userid'];
2630 echo $comment[$type];
2637 * AdminActions::parse_editdesturl()
2638 * Parse skinvar editdesturl
2640 public function parse_editdesturl()
2642 if ( requestVar('desturl') )
2644 echo Entity::hsc(requestVar('desturl'));
2650 * AdminActions::parse_editmemberlist()
2651 * Parse skinvar editmemberlist
2653 * @param string $templateName name of template
2656 public function parse_editmemberlist($templateName = '')
2659 // show list of members with actions
2660 $query = 'SELECT * FROM '.sql_table('member');
2661 $template['content'] = 'memberlist';
2662 $template['tabindex'] = 10;
2664 $batch = new Batch('member');
2665 $batch->showList($query, 'table', $template, $templateName, _LISTS_NOMORE);
2670 * AdminActions::parse_editmember()
2671 * Parse skinvar editmember
2673 * @param string $type type of information for member
2674 * @return string $tempateName name of template to use
2677 public function parse_editmember($type = 'id', $templateName = '')
2679 global $CONF, $manager, $member;
2681 $memberid = intRequestVar('memberid');
2682 $mem =& $manager->getMember($memberid);
2687 echo intRequestVar('memberid');
2690 if ( $this->skintype == 'teamdelete' || $this->skintype == 'memberdelete' )
2692 echo Entity::hsc($mem->getDisplayName());
2696 $dispName = Entity::hsc($mem->getDisplayName());
2697 if ( $CONF['AllowLoginEdit'] || $member->isAdmin() )
2699 echo '<input name="name" tabindex="10" maxlength="32" size="32" value="' . $dispName . "\" />\n";
2708 echo Entity::hsc($mem->getRealName());
2711 echo Entity::hsc($mem->getEmail());
2714 echo Entity::hsc($mem->getURL());
2717 $this->parse_inputyesno('admin', $mem->isAdmin(), 60, 1, 0, _YES, _NO, 0, $templateName);
2720 $this->parse_inputyesno('canlogin', $mem->canLogin(), 70, 1, 0, _YES, _NO, $mem->isAdmin(), $templateName);
2723 echo Entity::hsc($mem->getNotes());
2726 $this->parse_inputyesno('autosave', $mem->getAutosave(), 87, 1, 0, _YES, _NO, 0, $templateName);
2735 * AdminActions::parse_editpluginfo()
2736 * Parse skinvar editpluginfo
2738 * @param string $type type of plugin info
2741 public function parse_editpluginfo($type)
2745 $pid = intRequestVar('plugid');
2752 echo Entity::hsc($manager->getPluginNameFromPid($pid));
2759 * AdminActions::parse_editplugoptionslist()
2760 * Parse skinvar editplugoptionslist
2762 * @param string $templateName name of template
2765 public function parse_editplugoptionslist($templateName = '')
2769 $pid = intRequestVar('plugid');
2770 $aOptions = array();
2773 $query = "SELECT * FROM %s WHERE ocontext='global' AND opid=%d ORDER BY oid ASC;";
2774 $query = sprintf($query, sql_table('plugin_option_desc'), (integer) $pid);
2775 $resource = DB::getResult($query);
2777 foreach ( $resource as $row )
2779 array_push($aOIDs, $row['oid']);
2780 $aOptions[$row['oid']] = array(
2781 'oid' => $row['oid'],
2782 'value' => $row['odef'],
2783 'name' => $row['oname'],
2784 'description' => $row['odesc'],
2785 'type' => $row['otype'],
2786 'typeinfo' => $row['oextra'],
2791 // fill out actual values
2792 if ( count($aOIDs) > 0 )
2794 $query = 'SELECT oid, ovalue FROM %s WHERE oid in (%s)';
2795 $query = sprintf($query, sql_table('plugin_option'), implode(',', $aOIDs));
2797 $result = DB::getResult($query);
2799 foreach ( $result as $row )
2801 $aOptions[$row['oid']]['value'] = $row['ovalue'];
2807 'context' => 'global',
2809 'options' => &$aOptions
2811 $manager->notify('PrePluginOptionsEdit', $data);
2813 $template['content'] = 'plugoptionlist';
2815 $amount = Showlist($aOptions, 'table', $template, $templateName);
2819 echo '<p>' . _ERROR_NOPLUGOPTIONS . "</p>\n";
2825 * AdminActions::parse_editskin()
2826 * Parse skinvar editskin
2828 * @param string $type type of skin
2831 public function parse_editskin($type = 'id')
2833 $skinid = intRequestVar('skinid');
2834 $skin = new SKIN($skinid);
2838 echo intRequestVar('skinid');
2841 echo Entity::hsc($skin->getName());
2844 echo Entity::hsc($skin->getDescription());
2847 echo Entity::hsc($skin->getContentType());
2850 echo Entity::hsc($skin->getIncludePrefix());
2853 $this->parse_inputyesno('inc_mode', $skin->getIncludeMode(), 120, 'skindir', 'normal', _PARSER_INCMODE_SKINDIR, _PARSER_INCMODE_NORMAL);
2861 * AdminActions::parse_editskintype()
2862 * Parse skinvar editskintype
2864 * @param string $type name of type for skin type
2867 public function parse_editskintype($type = 'id')
2869 global $CONF, $manager, $member;
2870 $skinid = intRequestVar('skinid');
2871 $skin = new SKIN($skinid);
2872 $fNames = $skin->getAvailableTypes();
2873 $sType = strtolower(trim(requestVar('type')));
2878 echo intRequestVar('skinid');
2881 echo Entity::hsc($skin->getName());
2884 echo Entity::hsc($skin->getDescription());
2887 echo Entity::hsc($skin->getContentType());
2890 echo Entity::hsc($skin->getContentFromDB($sType));
2893 $skinType = !array_key_exists($sType, $fNames) ? ucfirst($sType) : $fNames[$sType];
2894 echo Entity::hsc($skinType);
2897 echo Entity::hsc($sType);
2900 echo Entity::hsc($skin->getIncludePrefix());
2903 $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;
2904 echo Entity::hsc($incMode);
2913 * AdminActions::parse_adminurl()
2914 * Parse skinvar adminurl
2915 * (shortcut for admin url)
2920 public function parse_adminurl()
2922 $this->parse_sitevar('adminurl');
2927 * AdminActions::parse_edittemplateinfo()
2928 * Parse skinvar edittemplateinfo
2930 * @param string $type name of type for skin
2931 * @param string $description description for skin
2932 * @param string $name name of skin
2933 * @param string $help
2934 * @param string $tabindex index value for tabindex attribute of input element
2935 * @param string $big
2936 * @param string $tplt name of template
2939 public function parse_edittemplateinfo($type, $desc = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')
2942 static $cache = array();
2944 if ( !array_key_exists('id', $cache) )
2946 $cache['id'] = intRequestVar('templateid');
2949 if ( !array_key_exists('name', $cache) )
2951 $cache['name'] = Template::getNameFromId($cache['id']);
2954 if ( !array_key_exists('desc', $cache) )
2956 $cache['desc'] = Template::getDesc($cache['id']);
2959 $template =& $manager->getTemplate($cache['name']);
2964 echo (integer) $cache['id'];
2967 echo Entity::hsc($cache['name']);
2970 echo Entity::hsc($cache['desc']);
2972 case 'extratemplate':
2974 $pluginfields = array();
2975 $manager->notify('TemplateExtraFields', array('fields' => &$pluginfields));
2980 $tmplt =& $manager->getTemplate($desc);
2982 if ( !array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) || empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )
2986 . '<th colspan="2"><%explugtplname%>' . "</th>\n";
2990 $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];
2993 foreach ( $pluginfields as $pfkey => $pfvalue )
2995 $data = array('explugtplname' => Entity::hsc($pfkey));
2997 echo Template::fill($base, $data);
2999 foreach ( $pfvalue as $pffield => $pfdesc )
3001 $this->templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);
3006 $desc = defined($desc) ? constant($desc) : $desc;
3007 $name = defined($name) ? constant($name) : $name;
3008 $this->templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);
3016 * AdminActions::parse_editadmintemplateinfo()
3017 * Parse skinvar editadmintemplateinfo
3019 * @param string $type type of skin template
3020 * @param string $description description of template
3021 * @param string $name name of stemplate
3022 * @param string $tabindex index number for tabindex attribute of input element
3023 * @param string $big
3024 * @param string $tplt
3026 public function parse_editadmintemplateinfo($type, $desc = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')
3029 static $cache = array();
3031 if ( !array_key_exists('id', $cache) )
3033 $cache['id'] = intRequestVar('templateid');
3036 if ( !array_key_exists('name', $cache) )
3038 $cache['name'] = Template::getNameFromId($cache['id']);
3041 if ( !array_key_exists('desc', $cache) )
3043 $cache['desc'] = Template::getDesc($cache['id']);
3046 $template =& $manager->getTemplate($cache['name']);
3051 echo (integer) $cache['id'];
3054 echo Entity::hsc($cache['name']);
3057 echo Entity::hsc($cache['desc']);
3059 case 'extratemplate':
3061 $pluginfields = array();
3062 $manager->notify('AdminTemplateExtraFields', array('fields' => &$pluginfields));
3067 $tmplt =& $manager->getTemplate($desc);
3069 if ( !array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) || empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )
3073 . '<th colspan="2"><%explugtplname%>' . "</th>\n";
3077 $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];
3080 foreach ( $pluginfields as $pfkey => $pfvalue )
3082 $data = array('explugtplname' => Entity::hsc($pfkey));
3084 echo Template::fill($base, $data);
3086 foreach ( $pfvalue as $pffield => $pfdesc )
3088 $this->templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);
3093 $desc = defined($desc) ? constant($desc) : $desc;
3094 $name = defined($name) ? constant($name) : $name;
3095 $this->templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);
3102 * AdminActions::parse_eventformextra()
3103 * Parse skinvar eventformextra
3105 * @param string $type name of type for event form extra
3108 public function parse_eventformextra($type = 'activation')
3117 $key = requestVar('ackey');
3120 Admin::error(_ERROR_ACTIVATE);
3122 $info = MEMBER::getActivationInfo($key);
3125 Admin::error(_ERROR_ACTIVATE);
3127 $mem =& $manager->getMember($info->vmember);
3130 Admin::error(_ERROR_ACTIVATE);
3133 'type' => 'activation',
3137 case 'membermailform-notloggedin':
3138 $data = array('type' => 'membermailform-notloggedin',);
3141 $manager->notify('FormExtra', $data);
3146 * AdminActions::parse_extrahead()
3147 * Parse skinvar extrahead
3149 public function parse_extrahead()
3153 $extrahead = Admin::getAdminextrahead();
3156 'extrahead' => &$extrahead,
3157 'action' => Admin::getAdminAction()
3160 $manager->notify('AdminPrePageHead', $data);
3166 * AdminActions::parse_member()
3167 * Parse skinvar member
3168 * (includes a member info thingie)
3170 * @param string $what which memberdata is needed
3173 public function parse_member($what)
3175 global $memberinfo, $member, $CONF;
3177 // 1. only allow the member-details-page specific variables on member pages
3178 if ( $this->skintype == 'member' )
3183 echo Entity::hsc($memberinfo->getDisplayName());
3186 echo Entity::hsc($memberinfo->getRealName());
3189 echo Entity::hsc($memberinfo->getNotes());
3192 echo Entity::hsc($memberinfo->getURL());
3195 echo Entity::hsc($memberinfo->getEmail());
3198 echo Entity::hsc($memberinfo->getID());
3203 // 2. the next bunch of options is available everywhere, as long as the user is logged in
3204 if ( $member->isLoggedIn() )
3209 echo $member->getDisplayName();
3211 case 'yourrealname':
3212 echo $member->getRealName();
3215 echo $member->getNotes();
3218 echo $member->getURL();
3221 echo $member->getEmail();
3224 echo $member->getID();
3226 case 'yourprofileurl':
3227 if ( $CONF['URLMode'] == 'pathinfo' )
3229 echo Link::create_member_link($member->getID());
3233 echo $CONF['IndexURL'] . Link::create_member_link($member->getID());
3242 * AdminActions::parse_version()
3243 * Parse skinvar version
3244 * (include nucleus versionnumber)
3249 public function parse_version()
3252 echo 'Nucleus CMS ' . $nucleus['version'];
3257 * AdminActions::parse_sitevar()
3258 * Parse skinvar sitevar
3259 * (include a sitevar)
3261 * @param string $which
3264 public function parse_sitevar($which)
3270 echo $CONF['IndexURL'];
3273 echo $CONF['SiteName'];
3276 echo $CONF['AdminEmail'];
3279 echo $CONF['AdminURL'];
3286 * AdminActions::parse_actionurl()
3292 public function parse_actionurl()
3295 echo Entity::hsc($CONF['ActionURL']);
3300 * AdminActions::parse_getblogsetting()
3301 * Parse skinvar getblogsetting
3303 public function parse_getblogsetting($which)
3305 global $blog, $manager;
3311 elseif ( $bid = intRequestVar('blogid') )
3313 $b =& $manager->getBlog($bid);
3323 return Entity::hsc($b->getID());
3326 return Entity::hsc($b->getURL());
3329 return Entity::hsc($b->getName());
3332 return Entity::hsc($b->getDescription());
3335 return Entity::hsc($b->getShortName());
3337 case 'notifyaddress':
3338 return Entity::hsc($b->getNotifyAddress());
3341 return Entity::hsc($b->getMaxComments());
3344 return Entity::hsc($b->getUpdateFile());
3347 return Entity::hsc($b->getTimeOffset());
3354 * AdminActions::parse_geteditpluginfo()
3355 * Parse skinvar geteditpluginfo
3357 * @param string $type name of setting for edit plugin info
3360 public function parse_geteditpluginfo($type)
3363 $pid = intRequestVar('plugid');
3370 return Entity::hsc($manager->getPluginNameFromPid($pid));
3377 * AdminActions::parse_getmember()
3378 * Parse skinvar getmember
3379 * (includes a member info thingie)
3381 * @param string $what name of setting for member
3384 public function parse_getmember($what)
3386 global $memberinfo, $member;
3387 // 1. only allow the member-details-page specific variables on member pages
3388 if ( $this->skintype == 'member' )
3393 return Entity::hsc($memberinfo->getDisplayName());
3396 return Entity::hsc($memberinfo->getRealName());
3399 return Entity::hsc($memberinfo->getNotes());
3402 return Entity::hsc($memberinfo->getURL());
3405 return Entity::hsc($memberinfo->getEmail());
3408 return Entity::hsc($memberinfo->getID());
3412 // 2. the next bunch of options is available everywhere, as long as the user is logged in
3413 if ( $member->isLoggedIn() )
3418 return $member->getDisplayName();
3420 case 'yourrealname':
3421 return $member->getRealName();
3424 return $member->getNotes();
3427 return $member->getURL();
3430 return $member->getEmail();
3433 return $member->getID();
3441 * AdminActions::parse_headmessage()
3442 * Parse skinvar headmessage
3447 public function parse_headmessage()
3449 if ( !empty(Admin::$headMess) )
3451 echo '<p>' . _MESSAGE . ': ' . Entity::hsc(Admin::$headMess) . "</p>\n";
3457 * AdminActions::parse_helplink()
3458 * Parse skinvar helplink
3460 * @param string $topic name of topic for help
3463 public function parse_helplink($topic = '')
3465 if ( !empty($topic) )
3473 * AdminActions::parse_helpplugname()
3474 * Parse skinvar helpplugname
3479 public function parse_helpplugname()
3481 $plugid = intGetVar('plugid');
3482 Entity::hsc($manager->getPluginNameFromPid($plugid));
3487 * AdminActions::parse_ilistaddnew()
3488 * Parse skinvar ilistaddnew
3493 public function parse_ilistaddnew()
3495 $blogid = intRequestVar('blogid');
3496 if ( intPostVar('start') == 0 )
3498 echo '<p><a href="index.php?action=createitem&blogid=' . $blogid . '">' . _ITEMLIST_ADDNEW . "</a></p>\n";
3504 * AdminActions::parse_importskininfo()
3505 * Parse skinvar importskininfo
3507 * @param string $type name of information for imported skin
3510 public function parse_importskininfo($type)
3515 echo Entity::hsc(requestVar('skininfo'));
3518 $dataArr = requestArray('skinnames');
3519 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3522 $dataArr = requestArray('tpltnames');
3523 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3526 $dataArr = requestArray('skinclashes');
3527 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3530 $dataArr = requestArray('tpltclashes');
3531 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3534 echo Entity::hsc(requestVar('skinfile'));
3537 echo Entity::hsc(requestVar('mode'));
3544 * AdminActions::parse_inputyesno()
3545 * Parse skinvar inputyesno
3547 * some init stuff for all forms
3552 public function parse_init()
3557 if ( requestVar('action') == 'itemedit' )
3559 $authorid = Admin::$contents['authorid'];
3562 Admin::$blog->insertJavaScriptInfo($authorid);
3567 * AdminActions::parse_inputyesno()
3568 * Parse skinvar inputyesno
3570 * @param string $name
3571 * @param string $checkedval
3572 * @param string $tabindex
3573 * @param string $value1
3574 * @param string $value2
3575 * @param string $yesval
3576 * @param string $noval
3577 * @param string $isAdmin
3578 * @param string $templateName
3581 public function parse_inputyesno($name, $checkedval, $tabindex = 0, $value1 = 1, $value2 = 0, $yesval = _YES, $noval = _NO, $isAdmin = 0, $templateName = '')
3583 self::input_yesno($name, $checkedval, $tabindex, $value1, $value2, $yesval, $noval, $isAdmin, $templateName );
3588 * AdminActions::parse_insertpluginfo()
3589 * Parse templatevar insertpluginfo
3591 public function parse_insertpluginfo($type)
3593 $option = Admin::getAdminaOption();
3597 return $option['pid'];
3600 return Entity::hsc($option['pfile']);
3607 * AdminActions::parse_insplugoptcontent()
3608 * Parse skinvar insplugoptcontent
3613 public function parse_insplugoptcontent()
3615 $option = Admin::getAdminaOption();
3617 $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);
3618 if ( array_key_exists('access', $meta) && $meta['access'] != 'hidden' )
3621 listplug_plugOptionRow($option);
3628 * AdminActions::parse_iprangeinput()
3629 * Parse skinvar iprangeinput
3634 public function parse_iprangeinput()
3636 if ( requestVar('ip') )
3638 $iprangeVal = Entity::hsc(requestVar('ip'));
3639 echo "<input name=\"iprange\" type=\"radio\" value=\"{$iprangeVal}\" checked=\"checked\" id=\"ip_fixed\" />\n";
3640 echo "<label for=\"ip_fixed\">{$iprangeVal}</label><br />\n";
3641 echo '<input name="iprange" type="radio" value="custom" id="ip_custom" />' . "\n";
3642 echo '<label for="ip_custom">' . _BAN_IP_CUSTOM . '</label>' . "\n";
3643 echo "<input name=\"customiprange\" value=\"{$iprangeVal}\" maxlength=\"15\" size=\"15\" />\n";
3647 echo '<input name="iprange" value="custom" type="hidden" />' . "\n";
3648 echo '<input name="customiprange" value="" maxlength="15" size="15" />' . "\n";
3654 * AdminActions::parse_itemnavlist()
3655 * Parse skinvar itemnavlist
3660 public function parse_itemnavlist($templateName)
3662 global $CONF, $manager, $member;
3664 $query = "SELECT bshortname, cname, mname, ititle, ibody, inumber, idraft, itime"
3665 . " FROM %s, %s, %s, %s"
3666 . " WHERE iblog=bnumber AND iauthor=mnumber AND icat=catid";
3668 $query = sprintf($query, sql_table('item'), sql_table('blog'), sql_table('member'), sql_table('category'));
3670 if ( $this->skintype == 'itemlist' )
3673 if ( array_key_exists('blogid', $_REQUEST) )
3675 $blogid = intRequestVar('blogid');
3677 else if ( array_key_exists('itemid', $_REQUEST) )
3679 $itemid = intRequestVar('itemid');
3680 $item = &$manager->getItem($itemid, 1, 1);
3681 $blogid = (integer) $item['blogid'];
3683 $blog =& $manager->getBlog($blogid);
3685 $query .= " AND iblog={$blogid}";
3686 $template['now'] = $blog->getCorrectTime(time());
3688 // non-blog-admins can only edit/delete their own items
3689 if ( !$member->blogAdminRights($blogid) )
3691 $query .= ' AND iauthor = ' . $member->getID();
3694 elseif ( $this->skintype == 'browseownitems' )
3696 $query .= ' AND iauthor = ' . $member->getID();
3698 $template['now'] = time();
3701 // search through items
3702 $search = postVar('search');
3704 if ( !empty($search) )
3706 $query .= ' AND ((ititle LIKE ' . DB::quoteValue('%'.$search.'%') . ') '
3707 . ' OR (ibody LIKE ' . DB::quoteValue('%'.$search.'%') . ') '
3708 . ' OR (imore LIKE ' . DB::quoteValue('%'.$search.'%') . '))';
3711 if ( postVar('start') )
3713 $start = intPostVar('start');
3720 // amount of items to show
3721 if ( postVar('amount') )
3723 $amount = intPostVar('amount');
3727 $amount = (integer) $CONF['DefaultListSize'];
3734 $query .= ' ORDER BY itime DESC'
3735 . " LIMIT {$start},{$amount}";
3737 $template['content'] = 'itemlist';
3739 $navList = new Navlist($this->skintype, $start, $amount, 0, 1000, $blogid, $search, 0);
3740 $navList->showBatchList('item', $query, 'table', $template, '', $templateName);
3745 * AdminActions::parse_itemtime()
3746 * date change on edit item
3748 * @param string $key key of PHP's getDate()
3751 public function parse_itemtime($key)
3756 $itemid = intRequestVar('itemid');
3757 $item =& $manager->getItem($itemid, 1, 1);
3759 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
3761 if ( $item && $blog->convertBreaks() && requestVar('action') == 'itemedit' )
3763 $item['body'] = removeBreaks($item['body']);
3764 $item['more'] = removeBreaks($item['more']);
3767 $contents = array();
3768 if ( requestVar('action') == 'itemedit' )
3772 elseif ( requestVar('action') == 'createitem' )
3775 'contents' => &$contents,
3776 'blog' => &$this->blog
3778 $manager->notify('PreAddItemForm', $data);
3780 $itemtime = getdate($contents['timestamp']);
3781 echo $itemtime[$key];
3786 * AdminActions::parse_jstoolbaroptions()
3787 * Parse skinvar jstoolbaroptions
3792 public function parse_jstoolbaroptions()
3796 _SETTINGS_JSTOOLBAR_NONE,
3797 _SETTINGS_JSTOOLBAR_SIMPLE,
3798 _SETTINGS_JSTOOLBAR_FULL
3802 foreach ( $options as $option )
3804 $text = "<option value=\"%d\"%s>%s</option>\n";
3805 $extra = ($CONF['DisableJsTools'] == $i) ? ' selected="selected"' : '';
3806 echo sprintf($text, $i, $extra, $option);
3812 * AdminActions::parse_localeselectoptions()
3813 * Parse skinvar localeselectoptions
3818 public function parse_localeselectoptions()
3822 $locales = i18n::get_available_locale_list();
3824 $memid = intRequestVar('memberid');
3827 $mem =& $manager->getMember($memid);
3828 if ( !$mem->getLocale() || !in_array($mem->getLocale(), $locales) )
3830 echo "<option value=\"\" selected=\"selected\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";
3834 echo "<option value=\"\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";
3839 if ( !i18n::get_current_locale() || !in_array(i18n::get_current_locale(), $locales) )
3841 echo "<option value=\"\" selected=\"selected\">en_Latn_US</option>\n";
3845 echo "<option value=\"\">en_Latn_US</option>\n";
3848 foreach ( $locales as $locale )
3850 if ( $locale == 'en_Latn_US' )
3856 if ( $locale == $mem->getLocale() )
3858 echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";
3862 echo "<option value=\"{$locale}\">{$locale}</option>\n";
3867 if ( $locale == i18n::get_current_locale() )
3869 echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";
3873 echo "<option value=\"{$locale}\">{$locale}</option>\n";
3881 * AdminActions::parse_listplugplugoptionrow()
3882 * Parse templatevar listplugplugoptionrow
3884 * @param string $templateName name of template
3887 public function parse_listplugplugoptionrow($templateName = '')
3889 echo listplug_plugOptionRow(Admin::getAdminaOption(), $templateName);
3894 * AdminActions::parse_mediadirwarning()
3895 * Parse skinvar mediadirwarning
3900 public function parse_mediadirwarning()
3903 if ( !is_dir($DIR_MEDIA) )
3905 echo "<br /><b>" . _WARNING_NOTADIR . "</b>\n";
3907 if ( !is_readable($DIR_MEDIA) )
3909 echo "<br /><b>" . _WARNING_NOTREADABLE . "</b>\n";
3911 if ( !is_writeable($DIR_MEDIA) )
3913 echo "<br /><b>" . _WARNING_NOTWRITABLE . "</b>\n";
3919 * AdminActions::parse_movedistselect()
3920 * Parse skinvar movedistselect
3922 public function parse_movedistselect()
3924 $actionType = requestVar('action');
3925 switch ( $actionType )
3928 $this->selectBlog('destcatid', 'category');
3930 case 'batchcategory':
3931 $this->selectBlog('destblogid');
3934 if ( $this->skintype == 'itemmove' )
3936 $query = "SELECT icat as result FROM %s WHERE inumber=%d;";
3937 $query = sprintf($query, sql_table('item'), intRequestVar('itemid'));
3938 $catid = DB::getValue(sprintf($query, intRequestVar('itemid')));
3939 $this->selectBlog('catid', 'category', $catid, 10, 1);
3947 * AdminActions::parse_moveitemid()
3948 * Parse skinvar moveitemid
3953 public function parse_moveitemid()
3955 echo intRequestVar('itemid');
3960 * AdminActions::parse_newestcompare()
3961 * Parse skinvar newestcompare
3966 public function parse_newestcompare()
3970 $newestVersion = getLatestVersion();
3971 $newestCompare = str_replace('/', '.', $newestVersion);
3972 $currentVersion = str_replace(array('/', 'v'), array('.', ''), $nucleus['version']);
3974 if ( $newestVersion && version_compare($newestCompare, $currentVersion, '>') )
3976 echo '<br /><a style="color:red" href="http://nucleuscms.org/upgrade.php" title="' . _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE . '">';
3977 echo _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT . $newestVersion . '</a>';
3983 * AdminActions::parse_newmemberselect()
3984 * Parse skinvar newmemberselect
3986 * @param string $templateName name of template to use
3989 public function parse_newmemberselect($templateName = '')
3991 $blogid = intRequestVar('blogid');
3993 $query = "SELECT tmember FROM %s WHERE tblog=%d;";
3994 $query = sprintf($query, sql_table('team'), (integer) $blogid);
3995 $res = DB::getResult($query);
3998 foreach ( $res as $row )
4000 $tmem[] = intval($row['tmember']);
4003 $query = "SELECT mname as text, mnumber as value FROM %s WHERE mnumber NOT IN (%s);";
4004 $query = sprintf($query, sql_table('member'), implode(', ', $tmem));
4007 'name' => 'memberid',
4008 'tabindex' => 10000,
4011 Showlist($query, 'select', $template, $templateName);
4016 * AdminActions::parse_newpluginlist()
4017 * Parse skinvar newpluginlist
4022 public function parse_newpluginlist()
4024 $candidates = $this->newPlugCandidates;
4025 foreach ( $candidates as $name )
4027 echo '<option value="NP_' . $name . '">' . Entity::hsc($name) . "</option>\n";
4033 * AdminActions::parse_outputspecialdirs()
4034 * Parse skinvar outputspecialdirs
4036 * @param string $type type of setting for directory
4039 public function parse_outputspecialdirs($type)
4041 global $DIR_MEDIA, $DIR_NUCLEUS;
4046 echo Entity::hsc($DIR_NUCLEUS);
4049 echo Entity::hsc($DIR_MEDIA);
4056 * AdminActions::parse_passrequestvars()
4057 * Parse skinvar passrequestvars
4062 public function parse_passrequestvars()
4064 $passvar = Admin::getAdminpassvar();
4065 $oldaction = postVar('oldaction');
4067 if ( ($oldaction != 'logout')
4068 && ($oldaction != 'login')
4070 && !postVar('customaction') )
4078 * AdminActions::parse_pluginextras()
4079 * Parse skinvar pluginextras
4081 * @param string $type type of plugin context
4084 public function parse_pluginextras($type = 'global')
4091 $id = intRequestVar('memberid');
4092 $mem =& $manager->getMember($id);
4093 $manager->notify('MemberSettingsFormExtras', array('member' => &$mem));
4096 $id = intRequestVar('blogid');
4097 $blg =& $manager->getBlog($id);
4098 $manager->notify('BlogSettingsFormExtras', array('member' => &$blg));
4100 case 'createaccount':
4102 'type' => 'createaccount.php',
4104 'postlabel' => '<br />',
4106 'postfield' => '<br /><br />'
4108 $manager->notify('RegistrationFormExtraFields', $data);
4111 $manager->notify('GeneralSettingsFormExtras', array());
4118 * AdminActions::parse_pluginhelp()
4119 * Parse skinvar pluginhelp
4124 public function parse_pluginhelp()
4126 global $manager, $DIR_PLUGINS;
4128 $plugid = intGetVar('plugid');
4129 $plugName = $manager->getPluginNameFromPid($plugid);
4130 $plug =& $manager->getPlugin($plugName);
4132 if ( $plug->supportsFeature('HelpPage') > 0 )
4134 $helpfile = $DIR_PLUGINS . $plug->getShortName() . '/help.';
4135 if ( @file_exists($helpfile . 'php') )
4137 @include($helpfile . 'php');
4140 elseif ( @file_exists($helpfile . 'html') )
4142 @include($helpfile . 'html');
4146 echo '<p>' . _ERROR . ': ' . _ERROR_PLUGNOHELPFILE . "</p>\n";
4147 echo '<p><a href="index.php?action=pluginlist">(' . _BACK . ")</a></p>\n";
4152 * AdminActions::parse_pluginlistlist()
4153 * Parse skinvar pluginlistlist
4155 * @param string $templateName name of template to use
4158 public function parse_pluginlistlist($templateName = '')
4160 $query = "SELECT * FROM %s ORDER BY porder ASC;";
4161 $query = sprintf($query, sql_table('plugin'));
4163 $template['content'] = 'pluginlist';
4164 $template['tabindex'] = 10;
4166 Showlist($query, 'table', $template, $templateName);
4172 * AdminActions::parse_pluginoptions()
4173 * Parse skinvar pluginoptions
4175 * @param string $type type of plugin option
4178 public function parse_pluginoptions($context='global', $templateName='')
4180 global $itemid, $manager;
4185 $contextid = intRequestVar('memberid');
4188 $contextid = intRequestVar('blogid');
4191 $contextid = intRequestVar('catid');
4194 $contextid = $itemid;
4198 /* Actually registererd plugin options */
4199 $aIdToValue = array();
4200 $query = "SELECT oid, ovalue FROM %s WHERE ocontextid=%d;";
4201 $query = sprintf($query, sql_table('plugin_option'), (integer) $contextid);
4202 $res = DB::getResult($query);
4203 foreach ( $res as $row )
4205 $aIdToValue[$row['oid']] = $row['ovalue'];
4208 /* Currently available plugin options */
4209 $query = "SELECT * FROM %s, %s WHERE opid=pid and ocontext= %s ORDER BY porder, oid ASC;";
4210 $query = sprintf($query, sql_table('plugin_option_desc'), sql_table('plugin'), DB::quoteValue($context));
4211 $res = DB::getResult($query);
4214 foreach ($res as $row )
4216 if ( !array_key_exists($row['oid'], $aIdToValue) )
4218 $value = $row['odef'];
4222 $value = $aIdToValue[$row['oid']];
4226 'pid' => $row['pid'],
4227 'pfile' => $row['pfile'],
4228 'oid' => $row['oid'],
4230 'name' => $row['oname'],
4231 'description' => $row['odesc'],
4232 'type' => $row['otype'],
4233 'typeinfo' => $row['oextra'],
4234 'contextid' => $contextid,
4240 'context' => $context,
4241 'contextid' => $contextid,
4242 'options' => &$options
4244 $manager->notify('PrePluginOptionsEdit', $data);
4246 $template = array();
4247 if ( $templateName )
4249 $templates =& $manager->getTemplate($templateName);
4250 if ( !array_key_exists('INSERT_PLUGOPTION_TITLE', $templates) || empty($templates['INSERT_PLUGOPTION_TITLE']) )
4252 $template['title'] = "<tr>"
4253 . "<th colspan=\"2\"><%sprinttext(_PLUGIN_OPTIONS_TITLE, <|%insertpluginfo(name)%|>)%></th>"
4258 $template['title'] = $templates['INSERT_PLUGOPTION_TITLE'];
4261 if ( !array_key_exists('INSERT_PLUGOPTION_BODY', $templates) || empty($templates['INSERT_PLUGOPTION_BODY']) )
4263 $template['body'] = "<tr>"
4264 . "<%listplugplugoptionrow%>"
4269 $template['body'] = $templates['INSERT_PLUGOPTION_BODY'];
4275 include_libs('ACTIONS.php');
4276 $handler = new Actions($this->skintype);
4277 $parser = new PARSER($handler);
4279 foreach ( $options as $option )
4282 if ( $prevPid != $option['pid'] )
4284 $prevPid = $option['pid'];
4285 $parser->parse($template['title']);
4288 $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);
4290 if ( @$meta['access'] != 'hidden' )
4292 $parsed = $parser->parse($template['body']);
4300 * AdminActions::parse_qmenuaddselect()
4301 * Parse skinvar qmanuaddselect
4303 * @param string $templateName name of template to use
4306 public function parse_qmenuaddselect($templateName = '')
4309 $showAll = requestVar('showall');
4310 if ( $member->isAdmin() && ($showAll == 'yes') )
4312 // Super-Admins have access to all blogs! (no add item support though)
4313 $query = 'SELECT bnumber as value, bname as text'
4314 . ' FROM ' . sql_table('blog')
4315 . ' ORDER BY bname';
4319 $query = 'SELECT bnumber as value, bname as text'
4320 . ' FROM ' . sql_table('blog') . ', ' . sql_table('team')
4321 . ' WHERE tblog=bnumber and tmember=' . $member->getID()
4322 . ' ORDER BY bname';
4325 $template['name'] = 'blogid';
4326 $template['tabindex'] = 15000;
4327 $template['extra'] = _QMENU_ADD_SELECT;
4328 $template['selected'] = -1;
4329 $template['shorten'] = 10;
4330 $template['shortenel'] = '';
4331 $template['javascript'] = 'onchange="return form.submit()"';
4333 Showlist($query, 'select', $template, $templateName);
4339 * AdminActions::parse_quickmenu()
4340 * Parse skinvar quickmenu
4342 * @param string $templateName name of template to use
4345 public function parse_quickmenu($templateName = '')
4348 $templates = array();
4349 $template = array();
4350 if ( !empty($templateName) )
4352 $templates = & $manager->getTemplate($templateName);
4354 $pluginExtras = array();
4358 'options' => &$pluginExtras
4361 if ( count($pluginExtras) > 0 )
4363 if ( !array_key_exists('PLUGIN_QUICKMENU_TITLE', $templates) || empty($templates['PLUGIN_QUICKMENU_TITLE']) )
4365 $template['title'] = "<h2><%text(_QMENU_PLUGINS)%></h2>\n";
4369 $template['title'] = $templates['PLUGIN_QUICKMENU_TITLE'];
4371 if ( !array_key_exists('PLUGIN_QUICKMENU_HEAD', $templates) || empty($templates['PLUGIN_QUICKMENU_HEAD']) )
4373 $template['head'] = "<ul>\n";
4377 $template['head'] = $templates['PLUGIN_QUICKMENU_HEAD'];
4379 if ( !array_key_exists('PLUGIN_QUICKMENU_BODY', $templates) && empty($templates['PLUGIN_QUICKMENU_BODY']) )
4381 $template['body'] = "<li><a href=\"<%plugadminurl%>\" title=\"<%plugadmintooltip%>\"><%plugadmintitle%></a></li>\n";
4385 $template['body'] = $templates['PLUGIN_QUICKMENU_BODY'];
4387 if ( !array_key_exists('PLUGIN_QUICKMENU_FOOT', $templates) || empty($templates['PLUGIN_QUICKMENU_FOOT']) )
4389 $template['foot'] = "</ul>\n";
4393 $template['foot'] = $templates['PLUGIN_QUICKMENU_FOOT'];
4396 $handler = new Actions($this->skintype);
4397 $parser = new PARSER($handler);
4399 $parser->parse($template['title']);
4400 echo $template['head'];
4401 foreach ( $pluginExtras as $aInfo )
4404 'plugadminurl' => Entity::hsc($aInfo['url']),
4405 'plugadmintooltip' => Entity::hsc($aInfo['tooltip']),
4406 'plugadmintitle' => Entity::hsc($aInfo['title']),
4408 echo Template::fill($template['body'], $data);
4410 echo $template['foot'];
4416 * AdminActions::parse_requestblogid()
4417 * Parse skinvar requestblogid
4422 public function parse_requestblogid()
4424 echo intRequestVar('blogid');
4429 * AdminActions::parse_requestiprange()
4430 * Parse skinvar requestiprange
4435 public function parse_requestiprange()
4437 if ( requestVar('iprange') )
4439 echo Entity::hsc(requestVar('iprange'));
4441 elseif ( requestVar('ip') )
4443 echo Entity::hsc(requestVar('ip'));
4449 * AdminActions::parse_selectlocaladminskinfiles()
4450 * Parse skinvar selectlocaladminskinfiles
4455 public function parse_selectlocaladminskinfiles()
4457 global $DIR_SKINS, $manager, $DIR_LIBS;
4459 if ( !class_exists('SkinImport', FALSE) )
4461 include_once("{$DIR_LIBS}skinie.php");
4463 $adminskindir = $DIR_SKINS . 'admin/';
4464 $candidates = SkinImport::searchForCandidates($adminskindir);
4466 foreach ( $candidates as $skinname => $skinfile )
4468 $html = Entity::hsc($skinfile);
4469 echo '<option value="' . $html . '">' . $skinname . "</option>\n";
4476 * AdminActions::parse_selectlocalskinfiles()
4477 * Parse skinvar selectlocalskinfiles
4482 public function parse_selectlocalskinfiles()
4486 $candidates = SkinImport::searchForCandidates($DIR_SKINS);
4488 foreach ( $candidates as $skinname => $skinfile )
4490 $html = Entity::hsc($skinfile);
4491 echo '<option value="' . $html . '">' . $skinname . "</option>\n";
4498 * AdminActions::parse_skineditallowedlist()
4499 * Parse skinvar skineditallowedlist
4501 * @param string $type type of skin
4502 * @param string $templateName name of template
4505 public function parse_skineditallowedlist($type, $templateName = '')
4510 $query = "SELECT bshortname, bname FROM %s;";
4512 'content' => 'shortblognames'
4514 $query = sprintf($query, sql_table('blog'));
4515 Showlist($query, 'table', $show, $templateName);
4518 $query = "SELECT tdname as name, tddesc as description FROM %s WHERE tdname NOT LIKE 'admin/%%';";
4520 'content' => 'shortnames'
4522 $query = sprintf($query, sql_table('template_desc'));
4523 Showlist($query, 'table', $show, $templateName);
4530 * AdminActions::parse_skinielist()
4531 * Parse skinvar skinielist
4533 * @param string $type type of skin
4534 * @param string $templateName name of template to use
4537 public function parse_skinielist($type, $templateName = '')
4541 $templates = array();
4542 if ( $templateName )
4544 $templates =& $manager->getTemplate($templateName);
4546 if ( array_key_exists('SKINIE_EXPORT_LIST', $templates) && !empty($templates['SKINIE_EXPORT_LIST']) )
4548 $template = $templates['SKINIE_EXPORT_LIST'];
4553 . "<input type=\"checkbox\" name=\"<%typeid%>\" id=\"<%expid%>\" />\n"
4554 . "<label for=\"<%expid%>\"><%expname%></label>\n"
4556 . "<td><%expdesc%></td>\n"
4563 $res = DB::getResult('SELECT * FROM ' . sql_table('skin_desc'). " WHERE sdname NOT LIKE 'admin/%%';");
4564 foreach ( $res as $row )
4567 'typeid' => 'skin[' . $row['sdnumber'] . ']',
4568 'expid' => 'skinexp' . $row['sdnumber'],
4569 'expname' => Entity::hsc($row['sdname']),
4570 'expdesc' => Entity::hsc($row['sddesc'])
4572 echo Template::fill($template, $data);
4576 $res = DB::getResult('SELECT * FROM '.sql_table('template_desc'). " WHERE tdname NOT LIKE 'admin/%%';");
4577 foreach ( $res as $row )
4580 'typeid' => 'template[' . $row['tdnumber'] . ']',
4581 'expid' => 'templateexp' . $row['tdnumber'],
4582 'expname' => Entity::hsc($row['tdname']),
4583 'expdesc' => Entity::hsc($row['tddesc'])
4585 echo Template::fill($template, $data);
4593 * AdminActions::parse_skinoverview()
4594 * Parse skinvar skinoverview
4596 * @param string $templateName name of template to use
4599 public function parse_skinoverview($templateName = '')
4602 $query = "SELECT * FROM %s WHERE sdname NOT LIKE 'admin/%%';";
4603 $query = sprintf($query, sql_table('skin_desc'));
4605 $template['content'] = 'skinlist';
4606 $template['tabindex'] = 10;
4608 Showlist($query, 'table', $template, $templateName);
4613 * AdminActions::parse_skintypehelp()
4614 * Check editing skintypehelp
4619 public function parse_skintypehelp()
4621 $nowSkinType = strtolower(trim(requestVar('type')));
4623 /* TODO: use Skin class */
4624 $regularType = array(
4635 if ( in_array($nowSkinType, $regularType) )
4637 help('skinpart' . $nowSkinType);
4641 help('skinpartspecial');
4647 * AdminActions::parse_specialskinlist()
4648 * Parse skinvar specialskinlist
4650 * @param string $templateName name of template to use
4653 public function parse_specialskinlist($templateName = '')
4657 $templates = array();
4658 if ( $templateName )
4660 $templates =& $manager->getTemplate($templateName);
4663 /* TODO: use Skin class */
4674 $skinid = intRequestVar('skinid');
4675 $query = "SELECT stype FROM %s WHERE stype NOT IN ('%s') AND sdesc = %d;";
4676 $query = sprintf($query, sql_table('skin'), implode("', '", $nType), $skinid);
4678 $res = DB::getResult($query);
4679 if ( $res && $res->rowCount() > 0 )
4682 if ( array_key_exists('SPECIALSKINLIST_HEAD', $templates) && !empty($templates['SPECIALSKINLIST_HEAD']) )
4684 $template['head'] = $templates['SPECIALSKINLIST_HEAD'];
4688 $template['head'] = "<ul>\n";
4690 echo Template::fill($template['head'], $data);
4691 if ( !array_key_exists('SPECIALSKINLIST_BODY', $templates) || empty($templates['SPECIALSKINLIST_BODY']) )
4693 $template['body'] = '<li><a tabindex="<%tabindex%>" href="index.php?action=skinedittype&skinid=<%skinid%>'
4694 . '&type=<%skintype%>"><%skintype%></a> (<a tabindex="<%tabindex%>" href="index.php?'
4695 . 'action=skinremovetype&skinid=<%skinid%>&type=<%skintype%>">remove</a>)</li>';
4699 $template['body'] = $templates['SPECIALSKINLIST_BODY'];
4703 foreach ( $res as $row )
4706 'tabindex' => $tabstart++,
4707 'skinid' => $skinid,
4708 'skintype' => Entity::hsc(strtolower($row['stype']))
4710 echo Template::fill($template['body'], $data);
4713 if (array_key_exists('SPECIALSKINLIST_FOOT', $templates) && !empty($templates['SPECIALSKINLIST_FOOT']) )
4715 $template['foot'] = $templates['SPECIALSKINLIST_FOOT'];
4719 $template['foot'] = "</ul>\n";
4721 echo Template::fill($template['foot'], $data);
4727 * AdminActions::parse_sprinttext()
4730 * @param string $which
4731 * @param string $val
4734 public function parse_sprinttext($which, $val)
4736 if ( !defined($which) )
4742 $base = constant($which);
4745 if ( preg_match('#[^<|%].*[^%|>]#', $val, $matchies) )
4747 if ( !preg_match('#[(].*[^)]#', $matchies[0], $args) )
4749 $met = 'parse_' . $matchies[0];
4753 $arg = trim($args[0], '()');
4754 $met = 'parse_' . substr($matchies[0], 0, strpos($matchies[0], '('));
4757 if ( method_exists($this, $met) )
4759 $value = call_user_func(array(&$this, $met), $arg);
4763 if ( !isset($value) || empty($value) )
4767 echo sprintf($base, $value);
4772 * AdminActions::parse_systemsettings()
4773 * Parse skinvar systemsettings
4775 * @param string $type type of settings for system
4776 * @param string $templateName name of template to use
4779 public function parse_systemsettings($type = 'phpinfo', $templateName = '')
4781 global $manager, $member, $CONF, $nucleus;
4783 $member->isAdmin() or Admin::disallow();
4785 $enable = _ADMIN_SYSTEMOVERVIEW_ENABLE;
4786 $disable = _ADMIN_SYSTEMOVERVIEW_DISABLE;
4793 case 'sqlserverinfo':
4794 echo DB::getAttribute(PDO::ATTR_SERVER_VERSION);
4796 case 'sqlclientinfo':
4797 echo DB::getAttribute(PDO::ATTR_CLIENT_VERSION);
4799 case 'magicquotesgpc':
4800 echo ini_get('magic_quotes_gpc') ? 'On' : 'Off';
4802 case 'magicquotesruntime':
4803 echo ini_get('magic_quotes_runtime') ? 'On' : 'Off';
4805 case 'registerglobals':
4806 echo ini_get('register_globals') ? 'On' : 'Off';
4809 $templates = array();
4810 if ( $templateName )
4812 $templates =& $manager->getTemplate($templateName);
4814 if ( !array_key_exists('SYSTEMINFO_GDSETTINGS', $templates) || empty($templates['SYSTEMINFO_GDSETTINGS']) )
4816 $template = "<tr>\n"
4817 . "<td><%key%></td>\n"
4818 . "<td><%value%></td>\n"
4823 $template = $templates['SYSTEMINFO_GDSETTINGS'];
4826 $gdinfo = gd_info();
4828 foreach ( $gdinfo as $key => $value )
4830 if ( is_bool($value) )
4832 $value = $value ? $enable : $disable;
4836 $value = Entity::hsc($value);
4842 echo Template::fill($template, $data);
4847 phpinfo(INFO_MODULES);
4848 $im = ob_get_contents();
4850 echo ( i18n::strpos($im, 'mod_rewrite') !== FALSE ) ? $enable : $disable;
4852 case 'nucleusversion':
4853 echo getNucleusVersion() / 100 . '(' . $nucleus['version'] . ')';
4855 case 'nucleuspatchlevel':
4856 echo getNucleusPatchLevel();
4862 echo $CONF['ItemURL'];
4864 case 'alertonheaderssent':
4865 echo $CONF['alertOnHeadersSent'] ? $enable : $disable;
4867 case 'nucleuscodename':
4868 if ( $nucleus['codename'] != '' )
4870 echo ' "' . $nucleus['codename'] . '"';
4873 case 'versioncheckurl':
4874 echo sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
4881 * AdminActions::parse_templateoverview()
4882 * Parse skinvar templateoverview
4884 * @param string $templateName name of template to use
4887 public function parse_templateoverview($templateName = '')
4889 $query = "SELECT * FROM %s WHERE tdname NOT LIKE 'admin/%%' ORDER BY tdname";
4890 $query = sprintf($query, sql_table('template_desc'));
4892 $template['content'] = 'templatelist';
4893 $template['tabindex'] = 10;
4895 Showlist($query, 'table', $template, $templateName);
4901 * AdminActions::parse_ticket()
4907 public function parse_ticket()
4910 $manager->addTicketHidden();
4915 * AdminActions::parse_versioncheckurl()
4916 * Parse skinvar versioncheckurl
4921 public function parse_versioncheckurl()
4923 echo sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
4928 * AdminActions::parse_yrbloglist()
4929 * Parse skinvar yrbloglist
4931 * @param string $templateName name of template to use
4934 public function parse_yrbloglist($templateName = '')
4937 $showAll = requestVar('showall');
4939 if ( $member->isAdmin() && ($showAll == 'yes') )
4941 // Super-Admins have access to all blogs! (no add item support though)
4942 $query = "SELECT bnumber, bname, 1 as tadmin, burl, bshortname"
4944 . " ORDER BY bnumber;";
4945 $query = sprintf($query, sql_table('blog'));
4949 $query = "SELECT bnumber, bname, tadmin, burl, bshortname"
4951 . " WHERE tblog=bnumber and tmember=%d"
4952 . " ORDER BY bnumber;";
4953 $query = sprintf($query, sql_table('blog'), sql_table('team'), (integer) $member->getID());
4956 $template['content'] = 'bloglist';
4957 $template['superadmin'] = $member->isAdmin();
4959 $amount = Showlist($query, 'table', $template, $templateName);
4961 if ( ($showAll != 'yes') && ($member->isAdmin()) )
4963 $query = 'SELECT COUNT(*) as result FROM ' . sql_table('blog');
4965 $total = DB::getValue($query);
4966 if ( $total > $amount )
4968 echo '<p><a href="index.php?action=overview&showall=yes">' . _OVERVIEW_SHOWALL . '</a></p>';
4974 echo _OVERVIEW_NOBLOGS;
4976 elseif( $amount != 0 )
4978 echo '<h2>' . _OVERVIEW_YRDRAFTS . '</h2>';
4980 $query = "SELECT ititle, inumber, bshortname"
4982 . ' WHERE iauthor=%d AND iblog=bnumber AND idraft=1;';
4983 $query = sprintf($query, sql_table('item'), sql_table('blog'), (integer) $member->getID());
4985 $template['content'] = 'draftlist';
4987 $amountdrafts = Showlist($query, 'table', $template, $templateName);
4988 if ( $amountdrafts == 0 )
4990 echo _OVERVIEW_NODRAFTS;
4997 * AdminActions::checkCondition()
4998 * Checks conditions for if statements
5000 * @param string $field type of <%if%>
5001 * @param string $name property of field
5002 * @param string $value value of property
5003 * @return boolean condition
5005 protected function checkCondition($field, $name='', $value = '')
5007 global $CONF, $archiveprevexists, $archivenextexists, $blog, $catid, $itemidnext, $itemidprev, $manager, $member;
5017 $blog =& $manager->getBlog($blogid);
5021 $blogid = getBlogIDFromCatID($catid);
5022 $blog =& $manager->getBlog($blogid);
5024 elseif ( intRequestVar('catid') )
5026 $catid = intRequestVar('catid');
5027 $blogid = getBlogIDFromCatID($catid);
5028 $blog =& $manager->getBlog($blogid);
5035 $condition = ($blog && $this->ifCategory($name, $value));
5038 $condition = $member->isLoggedIn();
5041 $condition = $member->isLoggedIn() && $this->ifOnTeam($name);
5044 $condition = $member->isLoggedIn() && $this->ifAdmin($name);
5047 $condition = $member->isLoggedIn() && $member->isAdmin();
5049 case 'allowloginedit':
5050 $condition = $member->isLoggedIn() && ($CONF['AllowLoginEdit'] || $member->isAdmin());
5053 $condition = ($itemidnext != '');
5056 $condition = ($itemidprev != '');
5058 case 'archiveprevexists':
5059 $condition = ($archiveprevexists == true);
5061 case 'archivenextexists':
5062 $condition = ($archivenextexists == true);
5065 $condition = (($name == $this->skintype) || ($name == requestVar('action')));
5068 $condition = $this->ifHasPlugin($name, $value);
5071 $condition = (Admin::getAdminAction() == $name);
5073 case 'adminoldaction':
5074 $condition = (Admin::getAdminAction() == $name);
5076 case 'addresschange':
5077 $condition = ($this->ifAddresscange());
5079 case 'bechangepass':
5080 $condition = ($this->beChangePassword());
5082 case 'skincandidates':
5083 $condition = ($this->ifSkincandidates());
5086 $condition = requestVar('nameclashes');
5088 case 'existsnewplugin':
5089 $condition = ($this->existsNewPlugin());
5096 $condition = (boolean) ($member->getAutosave() == $value);
5103 $condition = (Admin::$blog->getSetting($name) == $value);
5105 case 'itemproperty':
5110 if ( array_key_exists($name, Admin::$contents) )
5112 $condition = (boolean) (Admin::$contents[$name] == $value);
5116 $condition = $manager->pluginInstalled("NP_{$field}") && $this->ifPlugin($field, $name, $value);
5123 * AdminActions::_ifHasPlugin()
5124 * hasplugin,PlugName
5125 * -> checks if plugin exists
5126 * hasplugin,PlugName,OptionName
5127 * -> checks if the option OptionName from plugin PlugName is not set to 'no'
5128 * hasplugin,PlugName,OptionName=value
5129 * -> checks if the option OptionName from plugin PlugName is set to value
5131 * @param string $name name of plugin
5132 * @param string $value
5135 private function ifHasPlugin($name, $value)
5139 // (pluginInstalled method won't write a message in the actionlog on failure)
5140 if ( $manager->pluginInstalled("NP_{$name}") )
5142 $plugin =& $manager->getPlugin("NP_{$name}");
5143 if ( $plugin != NULL )
5151 list($name2, $value2) = preg_split('#=#', $value, 2);
5152 if ( $value2 == "" && $plugin->getOption($name2) != 'no' )
5156 else if ( $plugin->getOption($name2) == $value2 )
5167 * AdminActions::beChangePassword()
5172 private function beChangePassword()
5174 return intRequestVar('bNeedsPasswordChange');
5178 * AdminActions::ifSkincandidates()
5179 * Checks if a plugin exists and call its doIf function
5185 private function ifSkincandidates()
5188 $candidates = SKINIMPORT::searchForCandidates($DIR_SKINS);
5189 return (count($candidates) > 0);
5193 * AdminActions::ifPlugin()
5194 * Checks if a plugin exists and call its doIf function
5196 * @param string $name name of plugin
5197 * @param string $key
5198 * @param string $value
5201 private function ifPlugin($name, $key = '', $value = '')
5205 $plugin =& $manager->getPlugin("NP_{$name}");
5211 $params = func_get_args();
5212 array_shift($params);
5214 return call_user_func_array(array(&$plugin, 'doIf'), $params);
5218 * AdminActions::ifCategory()
5219 * Different checks for a category
5221 * @param string $key key for information of category
5222 * @param string $value value for information of category
5225 private function ifCategory($key = '', $value='')
5227 global $blog, $catid;
5229 // when no parameter is defined, just check if a category is selected
5230 if (($key != 'catname' && $key != 'catid') || ($value == ''))
5232 return $blog->isValidCategory($catid);
5235 // check category name
5236 if ( $key == 'catname' )
5238 $value = $blog->getCategoryIdFromName($value);
5239 if ($value == $catid)
5241 return $blog->isValidCategory($catid);
5245 // check category id
5246 if (($key == 'catid') && ($value == $catid))
5248 return $blog->isValidCategory($catid);
5255 * AdminActions::ifOnTeam()
5256 * Checks if a member is on the team of a blog and return his rights
5258 * @param string $blogName name of weblog
5261 private function ifOnTeam($blogName = '')
5263 global $blog, $member, $manager;
5265 // when no blog found
5266 if ( ($blogName == '') && !is_object($blog) )
5271 // explicit blog selection
5272 if ($blogName != '')
5274 $blogid = getBlogIDFromName($blogName);
5277 if (($blogName == '') || !$manager->existsBlogID($blogid))
5280 $blogid = $blog->getID();
5282 return $member->teamRights($blogid);
5286 * AdminActions::ifAdmin()
5287 * Checks if a member is admin of a blog
5289 * @param string $blogName name of weblog
5292 private function ifAdmin($blogName = '')
5294 global $blog, $member, $manager;
5296 // when no blog found
5297 if (($blogName == '') && (!is_object($blog)))
5302 // explicit blog selection
5303 if ($blogName != '')
5305 $blogid = getBlogIDFromName($blogName);
5308 if (($blogName == '') || !$manager->existsBlogID($blogid))
5311 $blogid = $blog->getID();
5314 return $member->isBlogAdmin($blogid);
5318 * AdminActions::ifAddresscange()
5319 * Check e-Mail address is changed
5324 private function ifAddresscange()
5328 $key = $this->objAdmin->sessionVar("{$CONF['CookiePrefix']}ackey");
5333 $info = MEMBER::getActivationInfo($key);
5338 $mem =& $manager->getMember($info->vmember);
5343 if ( $info->vtype == 'addresschange' )
5351 * AdminActions::templateEditRow()
5354 * @param array $template
5355 * @param string $desc
5356 * @param string $name
5357 * @param string $help
5358 * @param integer $tabindex
5359 * @param boolean $big
5360 * @param array $tmplt
5363 private function templateEditRow(&$template, $desc, $name, $help = '', $tabindex = 0, $big = 0, $tplt = '')
5369 if ( !array_key_exists($name, $template) )
5371 $template[$name] = '';
5379 $tmplt =& $manager->getTemplate($tplt);
5383 'description' => $desc,
5384 'help' => empty($help) ? '' : helpHtml('template' . $help),
5387 'tabindex' => $tabindex,
5388 'rows' => $big ? 10 : 5,
5391 if ( !array_key_exists('TEMPLATE_EDIT_ROW_HEAD', $tmplt) || empty($tmplt['TEMPLATE_EDIT_ROW_HEAD']) )
5393 $base['head'] = "</tr>"
5395 . "<td><%description%><%help%></td>\n"
5396 . "<td id=\"td<%count%>\">\n"
5397 . "<textarea class=\"templateedit\" name=\"<%name%>\" tabindex=\"<%tabindex%>\" cols=\"50\" rows=\"<%rows%>\" id=\"textarea<%count%>\">\n";
5401 $base['head'] = $tmplt['TEMPLATE_EDIT_ROW_HEAD'];
5404 if ( !array_key_exists('TEMPLATE_EDIT_ROW_TAIL', $tmplt) || empty($tmplt['TEMPLATE_EDIT_ROW_TAIL']) )
5406 $base['tail'] = "</textarea>\n"
5411 $base['tail'] = $tmplt['TEMPLATE_EDIT_ROW_TAIL'];
5414 echo TEMPLATE::fill($base['head'], $data);
5415 echo ENTITY::hsc($template[$name]);
5416 echo TEMPLATE::fill($base['tail'], $data);
5424 * AdminActions::customHelp()
5425 * shows a link to custom help file
5428 * @param string $tplName
5429 * @param string $url
5430 * @param string $iconURL
5431 * @param string $alt
5432 * @param string $title
5436 private function customHelp($id, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
5438 echo self::customHelpHtml($id, $tplName, $url, $iconURL, $alt, $title, $onclick);
5442 * AdminActions::customHelp()
5443 * shows a link to custom help file
5446 * @param string $tplName
5447 * @param string $url
5448 * @param string $iconURL
5449 * @param string $alt
5450 * @param string $title
5454 static function customHelplink($id, $tplName = '', $url = '', $title = '', $onclick = '')
5456 global $CONF, $manager;
5458 $templates = array();
5462 $templates =& $manager->getTemplate($tplName);
5465 if ( !array_key_exists('ADMIN_CUSTOMHELPLINK_ANCHOR', $templates) || empty($templates['ADMIN_CUSTOMHELPLINK_ANCHOR']) )
5467 $template = "<a href=\"<%helpurl%>#<%helptarget%>\" title=\"<%title%>\" <%onclick%>>\n";
5471 $template = $templates['ADMIN_CUSTOMHELPLINK_ANCHOR'];
5476 $url = $CONF['AdminURL'] . 'documentation/customHelp.html';
5479 if ( empty($onclick) )
5481 $onclick = 'onclick="if (event && event.preventDefault) event.preventDefault(); return help(this.href);"';
5483 elseif ( preg_match('#^onclick#', $onclick) )
5485 $onclick = $onclick;
5489 $onclick = 'onclick="' . $onclick . '"';
5494 'helptarget' => $id,
5495 'onclick' => $onclick,
5496 'title' => (isset($title) && !empty($title)) ? $title : _HELP_TT,
5498 return Template::fill($template, $data);
5502 * AdminActions::customHelpHtml()
5505 * @param string $tplName
5506 * @param string $url
5507 * @param string $iconURL
5508 * @param string $alt
5509 * @param string $title
5510 * @param string $onclick
5511 * @return string anchor element with help uri
5513 private function customHelpHtml($id, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
5515 global $CONF, $manager;
5517 $templates = array();
5521 $templates =& $manager->getTemplate($tplName);
5523 if ( !array_key_exists('ADMIN_CUSTOMHELPLINK_ICON', $templates) || !empty($templates['ADMIN_CUSTOMHELPLINK_ICON']) )
5525 $template = "<img src=\"<%iconurl%>\" <%width%><%height%>alt=\"<%alt%>\" title=\"<%title%>\" /></a>\n";
5529 $template = $templates['ADMIN_CUSTOMHELPLINK_ICON'];
5532 if ( empty($iconURL) )
5534 $iconURL = $CONF['AdminURL'] . 'documentation/icon-help.gif';
5537 if ( function_exists('getimagesize') )
5539 $size = getimagesize($iconURL);
5540 $width = 'width="' . $size[0] . '" ';
5541 $height = 'height="' . $size[1] . '" ';
5545 'iconurl' => $iconURL,
5547 'height' => $height,
5548 'alt' => (isset($alt) && !empty($alt)) ? $alt : _HELP_TT,
5549 'title' => (isset($title) && !empty($title)) ? $title : _HELP_TT,
5552 $icon = Template::fill($template, $data);
5553 $help = self::customHelplink($id, $tplName, $url, $title, $onclick);
5555 return $help . $icon;
5559 * AdminActions::input_yesno
5562 * @param $checkedval
5569 * @param $templateName
5572 public function input_yesno($name,
5585 $templates = array();
5586 if ( $templateName )
5588 $templates =& $manager->getTemplate($templateName);
5591 if ( $name == 'admin' )
5593 if ( !array_key_exists('INPUTYESNO_TEMPLATE_ADMIN', $templates) || empty($templates['INPUTYESNO_TEMPLATE_ADMIN']) )
5595 $template = '<input onclick="selectCanLogin(true);" type="radio" name="<%name%>" value="<%yesval%>" <%yescheckedval%> id="<%yesid%>" />' . "\n"
5596 . '<label for="<%yesid%>"><%yesvaltext%></label>' . "\n"
5597 . '<input onclick="selectCanLogin(false);" type="radio" name="<%name%>" value="<%noval%>" <%nocheckedval%> id="<%noid%>"<%disabled%> />' . "\n"
5598 . '<label for="<%noid%>"><%novaltext%></label>' . "\n";
5602 $template = $templates['INPUTYESNO_TEMPLATE_ADMIN'];
5607 if ( array_key_exists('INPUTYESNO_TEMPLATE_NORMAL', $templates) && !empty($templates['INPUTYESNO_TEMPLATE_NORMAL']) )
5609 $template = $templates['INPUTYESNO_TEMPLATE_NORMAL'];
5613 if ( array_key_exists('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO', $templates) && !empty($templates['SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO']) )
5615 $template = $templates['SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO'];
5618 if ( !isset($template) )
5620 $template = '<input type="radio" name="<%name%>" value="<%yesval%>" <%yescheckedval%> id="<%yesid%>" />' . "\n"
5621 . '<label for="<%yesid%>"><%yesvaltext%></label>' . "\n"
5622 . '<input type="radio" name="<%name%>" value="<%noval%>" <%nocheckedval%> id="<%noid%>"<%disabled%> />' . "\n"
5623 . '<label for="<%noid%>"><%novaltext%></label>' . "\n";
5628 $id = Entity::hsc($name);
5629 $id = str_replace('[', '-', $id);
5630 $id = str_replace(']', '-', $id);
5631 $id1 = $id . Entity::hsc($value1);
5632 $id2 = $id . Entity::hsc($value2);
5634 'name' => Entity::hsc($name),
5635 'yesval' => Entity::hsc($value1),
5636 'noval' => Entity::hsc($value2),
5639 'yesvaltext' => $yesval,
5640 'novaltext' => $noval,
5641 'yescheckedval' => ($checkedval == $value1) ? ' checked="checked" tabindex="' . $tabindex . '"': '',
5642 'nocheckedval' => ($checkedval != $value1) ? ' checked="checked" tabindex="' . $tabindex . '"': '',
5643 'disabled' => ($isAdmin && $name == 'canlogin') ? ' disabled="disabled"' : '',
5648 return Template::fill($template, $dat);
5652 echo Template::fill($template, $dat);
5658 * AdminActions::existsNewPlugin()
5659 * Check exists new plugin
5662 * @return boolean exists or not
5664 private function existsNewPlugin()
5666 global $DIR_PLUGINS;
5668 $query = "SELECT * FROM %s;";
5669 $query = sprintf($query, sql_table('plugin'));
5670 $res = DB::getResult($query);
5672 $installed = array();
5673 foreach( $res as $row )
5675 $installed[] = $row['pfile'];
5678 $files = scandir($DIR_PLUGINS);
5680 $candidates = array();
5681 foreach ( $files as $file )
5683 if ( preg_match("#^(NP_.*)\.php$#", $file, $matches) )
5685 if ( !in_array($matches[1], $installed) )
5687 $candidates[] = preg_replace("#^NP_#", "", $matches[1]);
5691 $this->newPlugCandidates = $candidates;
5692 return (count($candidates) > 0);
5696 * AdminActions::pagehead()
5697 * Output admin page head
5702 public function parse_pagehead()
5704 global $member, $nucleus, $CONF, $manager;
5706 $extrahead = Admin::getAdminextrahead();
5708 'extrahead' => &$extrahead,
5709 'action' => Admin::getAdminAction()
5711 $manager->notify('AdminPrePageHead', $data);
5713 $content = $this->parser->skin->getContentFromDB('pagehead');
5716 $baseUrl = Entity::hsc($CONF['SkinsURL']);
5720 if ( !array_key_exists('AdminCSS', $CONF) )
5722 DB::execute("INSERT INTO " . sql_table('config') . " VALUES ('AdminCSS', 'original')");
5723 $CONF['AdminCSS'] = 'original';
5727 /* HTTP 1.1 application for no caching */
5728 header("Cache-Control: no-cache, must-revalidate");
5729 header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
5731 $root_element = 'html';
5732 $charset = i18n::get_current_charset();
5733 $locale = preg_replace('#_#', '-', i18n::get_current_locale());
5734 $xml_version_info = self::$xml_version_info;
5735 $formal_public_identifier = self::$formal_public_identifier;
5736 $system_identifier = self::$system_identifier;
5737 $xhtml_namespace = self::$xhtml_namespace;
5739 echo "<?xml version=\"{$xml_version_info}\" encoding=\"{$charset}\" ?>\n";
5740 echo "<!DOCTYPE {$root_element} PUBLIC \"{$formal_public_identifier}\" \"{$system_identifier}\">\n";
5741 echo "<{$root_element} xmlns=\"{$xhtml_namespace}\" xml:lang=\"{$locale}\" lang=\"{$locale}\">\n";
5743 echo '<title>' . Entity::hsc($CONF['SiteName']) . " - Admin</title>\n";
5746 echo "<link rel=\"stylesheet\" title=\"Nucleus Admin Default\" type=\"text/css\" href=\"{$baseUrl}admin/defaultadmin/styles/admin_{$CONF["AdminCSS"]}.css\" />\n";
5748 echo "<link rel=\"stylesheet\" title=\"Nucleus Admin Default\" type=\"text/css\" href=\"{$baseUrl}admin/defaultadmin/styles/addedit.css\" />\n";
5749 echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/edit.js\"></script>\n";
5750 echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/admin.js\"></script>\n";
5751 echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/compatibility.js\"></script>\n";
5752 echo "{$extrahead}\n";
5755 echo "<div id=\"adminwrapper\">\n";
5756 echo "<div class=\"header\">\n";
5757 echo '<h1>' . Entity::hsc($CONF['SiteName']) . "</h1>\n";
5759 echo "<div id=\"container\">\n";
5760 echo "<div id=\"content\">\n";
5761 echo "<div class=\"loginname\">\n";
5763 if ( !$member->isLoggedIn() )
5765 echo '<a href="index.php?action=showlogin" title="Log in">' . _NOTLOGGEDIN . "</a><br />\n";
5769 echo _LOGGEDINAS . ' ' . $member->getDisplayName() ." - <a href='index.php?action=logout'>" . _LOGOUT. "</a><br />\n";
5770 echo "<a href='index.php?action=overview'>" . _ADMINHOME . "</a> - ";
5773 echo "<a href='".$CONF['IndexURL']."'>"._YOURSITE."</a><br />\n";
5776 if ( !array_key_exists('codename', $nucleus) || empty($nucleus['codename']) )
5778 $codenamestring = '';
5782 $codenamestring = ' "' . $nucleus['codename'].'"';
5785 if ( $member->isLoggedIn() && $member->isAdmin() )
5787 $checkURL = sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
5788 echo '<a href="' . $checkURL . '" title="' . _ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TITLE . '">Nucleus CMS ' . $nucleus['version'] . $codenamestring . '</a>';
5790 $newestVersion = getLatestVersion();
5791 $newestCompare = str_replace('/', '.', $newestVersion);
5792 $currentVersion = str_replace(array('/','v'), array('.',''), $nucleus['version']);
5794 if ( $newestVersion && version_compare($newestCompare, $currentVersion) > 0 )
5797 echo '<a style="color:red" href="http://nucleuscms.org/upgrade.php" title="' . _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE . '">';
5798 echo _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT . $newestVersion;
5804 echo "Nucleus CMS {$nucleus['version']}{$codenamestring}";
5811 $this->parser->parse($content);
5818 * AdminActionss::pagefoot()
5819 * Output admin page foot include quickmenu
5824 public function parse_pagefoot()
5826 global $action, $member, $manager;
5829 'action' => Admin::getAdminAction()
5831 $manager->notify('AdminPrePageFoot', $data);
5833 $content = $this->parser->skin->getContentFromDB('pagefoot');
5836 if ( $member->isLoggedIn() && ($action != 'showlogin') )
5838 echo '<h2>' . _LOGOUT . "</h2>\n";
5840 echo '<li><a href="index.php?action=overview">' . _BACKHOME . "</a></li>\n";
5841 echo '<li><a href="index.php?action=logout">' . _LOGOUT . "</a></li>\n";
5845 echo "<div class=\"foot\">\n";
5846 echo '<a href="' . _ADMINPAGEFOOT_OFFICIALURL . '">Nucleus CMS</a> © 2002-' . date('Y') . ' ' . _ADMINPAGEFOOT_COPYRIGHT;
5848 echo '<a href="' . _ADMINPAGEFOOT_DONATEURL . '">' . _ADMINPAGEFOOT_DONATE . "</a>\n";
5851 echo "<div id=\"quickmenu\">\n";
5853 if ( ($action != 'showlogin') && ($member->isLoggedIn()) )
5856 echo '<li><a href="index.php?action=overview">' . _QMENU_HOME . "</a></li>\n";
5859 echo '<h2>' . _QMENU_ADD . "</h2>\n";
5860 echo "<form method=\"get\" action=\"index.php\">\n";
5862 echo "<input type=\"hidden\" name=\"action\" value=\"createitem\" />\n";
5864 $showAll = requestVar('showall');
5866 if ( ($member->isAdmin()) && ($showAll == 'yes') )
5868 // Super-Admins have access to all blogs! (no add item support though)
5869 $query = "SELECT bnumber as value, bname as text FROM %s ORDER BY bname;";
5870 $query = sprintf($query, sql_table('blog'));
5874 $query = "SELECT bnumber as value, bname as text FROM %s, %s WHERE tblog=bnumber and tmember=%d ORDER BY bname;";
5875 $query = sprintf($query, sql_table('blog'), sql_table('team'), (integer) $member->getID());
5877 $template['name'] = 'blogid';
5878 $template['tabindex'] = 15000;
5879 $template['extra'] = _QMENU_ADD_SELECT;
5880 $template['selected'] = -1;
5881 $template['shorten'] = 10;
5882 $template['shortenel'] = '';
5883 $template['javascript'] = 'onchange="return form.submit()"';
5884 showlist($query, 'select', $template);
5889 echo "<h2>{$member->getDisplayName()}</h2>\n";
5891 echo '<li><a href="index.php?action=editmembersettings">' . _QMENU_USER_SETTINGS . "</a></li>\n";
5892 echo '<li><a href="index.php?action=browseownitems">' . _QMENU_USER_ITEMS . "</a></li>\n";
5893 echo '<li><a href="index.php?action=browseowncomments">' . _QMENU_USER_COMMENTS . "</a></li>\n";
5896 if ( $member->isAdmin() )
5898 echo '<h2>' . _QMENU_MANAGE . "</h2>\n";
5900 echo '<li><a href="index.php?action=actionlog">' . _QMENU_MANAGE_LOG . "</a></li>\n";
5901 echo '<li><a href="index.php?action=settingsedit">' . _QMENU_MANAGE_SETTINGS . "</a></li>\n";
5902 echo '<li><a href="index.php?action=systemoverview">' . _QMENU_MANAGE_SYSTEM . "</a></li>\n";
5903 echo '<li><a href="index.php?action=usermanagement">' . _QMENU_MANAGE_MEMBERS . "</a></li>\n";
5904 echo '<li><a href="index.php?action=createnewlog">' . _QMENU_MANAGE_NEWBLOG . "</a></li>\n";
5905 echo '<li><a href="index.php?action=backupoverview">' . _QMENU_MANAGE_BACKUPS . "</a></li>\n";
5906 echo '<li><a href="index.php?action=pluginlist">' . _QMENU_MANAGE_PLUGINS . "</a></li>\n";
5909 echo "<h2>" . _QMENU_LAYOUT . "</h2>\n";
5911 echo '<li><a href="index.php?action=skinoverview">' . _QMENU_LAYOUT_SKINS . "</a></li>\n";
5912 echo '<li><a href="index.php?action=templateoverview">' . _QMENU_LAYOUT_TEMPL . "</a></li>\n";
5913 echo '<li><a href="index.php?action=skinieoverview">' . _QMENU_LAYOUT_IEXPORT . "</a></li>\n";
5917 $data = array('options' => array());
5919 $manager->notify('QuickMenu', $data);
5921 if ( count($data['options']) > 0 )
5923 echo "<h2>" . _QMENU_PLUGINS . "</h2>\n";
5925 foreach ( $data['options'] as $option )
5927 echo '<li><a href="' . Entity::hsc($option['url']) . '" title="' . Entity::hsc($option['tooltip']) . '">' . Entity::hsc($option['title']) . "</a></li>\n";
5932 else if ( ($action == 'activate') || ($action == 'activatesetpwd') )
5935 echo '<h2>' . _QMENU_ACTIVATE . '</h2>' . _QMENU_ACTIVATE_TEXT;
5939 echo '<h2>' . _QMENU_INTRO . '</h2>' . _QMENU_INTRO_TEXT;
5942 echo "<!-- quickmenu -->\n";
5945 echo "<!-- content -->\n";
5948 echo "<!-- container -->\n";
5951 echo "<!-- adminwrapper -->\n";
5959 $this->parser->parse($content);
5966 * AdminActions::selectBlog()
5967 * Inserts a HTML select element with choices for all blogs to which the user has access
5968 * mode = 'blog' => shows blognames and values are blogids
5969 * mode = 'category' => show category names and values are catids
5971 * @param string $name
5972 * @param string $mode
5973 * @param integer $selected
5974 * @param integer $tabindex
5975 * @param integer $showNewCat
5976 * @param integer $iForcedBlogInclude ID for weblog always included
5977 * @param $iForcedBlogInclude
5978 * ID of a blog that always needs to be included, without checking if the
5979 * member is on the blog team (-1 = none)
5982 private function selectBlog($name, $mode='blog', $selected = 0, $tabindex = 0, $showNewCat = 0, $iForcedBlogInclude = -1)
5984 global $member, $CONF;
5986 // 0. get IDs of blogs to which member can post items (+ forced blog)
5987 $aBlogIds = array();
5988 if ( $iForcedBlogInclude != -1 )
5990 $aBlogIds[] = intval($iForcedBlogInclude);
5993 if ( $member->isAdmin() && array_key_exists('ShowAllBlogs', $CONF) && $CONF['ShowAllBlogs'] )
5995 $query = "SELECT bnumber FROM %s ORDER BY bname;";
5996 $query = sprintf($query, sql_table('blog'));
6000 $query = "SELECT bnumber FROM %s, %s WHERE tblog=bnumber AND tmember=%d;";
6001 $query = sprintf($query, sql_table('blog'), sql_table('team'), (integer) $member->getID());
6004 $rblogids = DB::getResult($query);
6005 foreach ( $rblogids as $row )
6007 if ( $row['bnumber'] != $iForcedBlogInclude )
6009 $aBlogIds[] = intval($row['bnumber']);
6013 if ( count($aBlogIds) == 0 )
6018 echo "<select name=\"{$name}\" tabindex=\"{$tabindex}\">\n";
6020 // 1. select blogs (we'll create optiongroups)
6021 // (only select those blogs that have the user on the team)
6022 $queryBlogs = "SELECT bnumber, bname FROM %s WHERE bnumber in (%s) ORDER BY bname;";
6023 $queryBlogs = sprintf($queryBlogs, sql_table('blog'), implode(',', $aBlogIds));
6024 $blogs = DB::getResult($queryBlogs);
6026 if ( $mode == 'category' )
6028 if ( $blogs->rowCount() > 1 )
6032 foreach ( $blogs as $rBlog )
6034 if ( isset($multipleBlogs) && !empty($multipleBlogs) )
6036 echo '<optgroup label="' . Entity::hsc($rBlog['bname']) . "\">\n";
6039 // show selection to create new category when allowed/wanted
6042 // check if allowed to do so
6043 if ( $member->blogAdminRights($rBlog['bnumber']) )
6045 echo '<option value="newcat-' . $rBlog['bnumber'] . '">' . _ADD_NEWCAT . "</option>\n";
6049 // 2. for each category in that blog
6050 $catQuery = "SELECT cname, catid FROM %s WHERE cblog=%d ORDER BY cname ASC;";
6051 $catQuery = sprintf($catQuery, sql_table('category'), (integer) $rBlog['bnumber']);
6052 $categories = DB::getResult($catQuery);
6053 foreach ( $categories as $rCat )
6055 if ( $rCat['catid'] == $selected )
6057 $selectText = ' selected="selected" ';
6063 echo '<option value="' . $rCat['catid'] . '" ' . $selectText . '>' . Entity::hsc($rCat['cname']) . "</option>\n";
6066 if ( isset($multipleBlogs) && !empty($multipleBlogs) )
6074 foreach ( $blogs as $rBlog )
6076 echo '<option value="' . $rBlog['bnumber'] . '"';
6077 if ( $rBlog['bnumber'] == $selected )
6079 echo '<option value="' . $rBlog['bnumber'] . '" selected="selected">' . Entity::hsc($rBlog['bname']) . "</option>\n";
6083 echo '<option value="' . $rBlog['bnumber'] . '">' . Entity::hsc($rBlog['bname']) . "</option>\n";