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
21 'adminskineditallowedlist',
24 'adminskinselectoptions',
25 'adminspecialskinlist',
26 'admintemplateoverview',
27 'allowedadminskinactions',
50 'configsettingsyesno',
53 'defaultadminskintypes',
63 'editadmintemplateinfo',
69 'editplugoptionslist',
85 'insertpluginoptions',
90 'listplugplugoptionrow',
91 'localeselectoptions',
108 'selectlocaladminskinfiles',
109 'selectlocalskinfiles',
110 'skineditallowedlist',
127 * AdminActions::$default_actions
128 * list of whole action names with which this class can deal
130 static private $default_actions = array(
153 * AdminActions::$skin_type_friendly_names
154 * friendly name for wrapped page types
156 static private $default_skin_types = array(
157 'actionlog' => _ADM_SKPRT_ACTIONLOG,
158 'activate' => _ADM_SKPRT_ACTIVATE,
159 'activatesetpwd' => _ADM_SKPRT_ACTIVATESETPWD,
160 'addnewlog' => _ADM_SKPRT_ADDNEWLOG,
161 'adminerrorpage' => _ADM_SKPRT_ADMINERRORPAGE,
162 'adminskindelete' => _ADM_SKPRT_ADMINSKINDELETE,
163 'adminskinedit' => _ADM_SKPRT_ADMINSKINEDIT,
164 'adminskinedittype' => _ADM_SKPRT_ADMINSKINEDITTYPE,
165 'adminskiniedoimport' => _ADM_SKPRT_ADMINSKINIEDOIMPORT,
166 'adminskinieimport' => _ADM_SKPRT_ADMINSKINIEIMPORT,
167 'adminskinieoverview' => _ADM_SKPRT_ADMINSKINIEOVERVIEW,
168 'adminskinoverview' => _ADM_SKPRT_ADMINSKINOVERVIEW,
169 'adminskinremovetype' => _ADM_SKPRT_ADMINSKINREMOVETYPE,
170 'admintemplatedelete' => _ADM_SKPRT_ADMINTEMPLATEDELETE,
171 'admintemplateedit' => _ADM_SKPRT_ADMINTEMPLATEEDIT,
172 'admintemplateoverview' => _ADM_SKPRT_ADMINTEMPLATEOVERVIEW,
173 'backupoverview' => _ADM_SKPRT_BACKUPOVERVIEW,
174 'backuprestore' => _ADM_SKPRT_BACKUPRESTORE,
175 'banlist' => _ADM_SKPRT_BANLIST,
176 'banlistdelete' => _ADM_SKPRT_BANLISTDELETE,
177 'banlistdeleteconfirm' => _ADM_SKPRT_BANLISTDELETECONFIRM,
178 'banlistnew' => _ADM_SKPRT_BANLISTNEW,
179 'batchcategory' => _ADM_SKPRT_BATCHCATEGORY,
180 'batchcomment' => _ADM_SKPRT_BATCHCOMMENT,
181 'batchdelete' => _ADM_SKPRT_BATCHDELETE,
182 'batchitem' => _ADM_SKPRT_BATCHITEM,
183 'batchmember' => _ADM_SKPRT_BATCHMEMBER,
184 'batchmove' => _ADM_SKPRT_BATCHMOVE,
185 'batchmovecat' => _ADM_SKPRT_BATCHMOVECAT,
186 'batchteam' => _ADM_SKPRT_BATCHTEAM,
187 'blogcommentlist' => _ADM_SKPRT_BLOGCOMMENTLIST,
188 'blogselectbox' => _ADM_SKPRT_BLOGSELECTBOX,
189 'blogsettings' => _ADM_SKPRT_BLOGSETTINGS,
190 'bookmarklet' => _ADM_SKPRT_BOOKMARKLET,
191 'browseowncomments' => _ADM_SKPRT_BROWSEOWNCOMMENTS,
192 'browseownitems' => _ADM_SKPRT_BROWSEOWNITEMS,
193 'categorydelete' => _ADM_SKPRT_CATEGORYDELETE,
194 'categoryedit' => _ADM_SKPRT_CATEGORYEDIT,
195 'commentdelete' => _ADM_SKPRT_COMMENTDELETE,
196 'commentedit' => _ADM_SKPRT_COMMENTEDIT,
197 'createitem' => _ADM_SKPRT_CREATEITEM,
198 'createnewlog' => _ADM_SKPRT_CREATENEWLOG,
199 'deleteblog' => _ADM_SKPRT_DELETEBLOG,
200 'editmembersettings' => _ADM_SKPRT_EDITMEMBERSETTINGS,
201 'insertpluginoptions' => _ADM_SKPRT_INSERTPLUGINO,
202 'itemcommentlist' => _ADM_SKPRT_ITEMCOMMENTLIST,
203 'itemdelete' => _ADM_SKPRT_ITEMDELETE,
204 'itemedit' => _ADM_SKPRT_ITEMEDIT,
205 'itemlist' => _ADM_SKPRT_ITEMLIST,
206 'itemmove' => _ADM_SKPRT_ITEMMOVE,
207 'login' => FALSE, //missing
208 'manage' => _ADM_SKPRT_MANAGE,
209 'manageteam' => _ADM_SKPRT_MANAGETEAM,
210 'memberdelete' => _ADM_SKPRT_MEMBERDELETE,
211 'memberedit' => FALSE, //missing
212 'overview' => _ADM_SKPRT_OVERVIEW,
213 'pagefoot' => _ADM_SKPRT_PAGEFOOT,
214 'pagehead' => _ADM_SKPRT_PAGEHEAD,
215 'plugindelete' => _ADM_SKPRT_PLUGINDELETE,
216 'pluginhelp' => _ADM_SKPRT_PLUGINHELP,
217 'pluginlist' => _ADM_SKPRT_PLUGINLIST,
218 'pluginoptions' => _ADM_SKPRT_PLUGINOPTIONS,
219 'settingsedit' => _ADM_SKPRT_SETTINGSEDIT,
220 'showlogin' => _ADM_SKPRT_SHOWLOGIN,
221 'skindelete' => _ADM_SKPRT_SKINDELETE,
222 'skinedit' => _ADM_SKPRT_SKINEDIT,
223 'skinedittype' => _ADM_SKPRT_SKINEDITTYPE,
224 'skiniedoimport' => _ADM_SKPRT_SKINIEDOIMPORT,
225 'skinieimport' => _ADM_SKPRT_SKINIEIMPORT,
226 'skinieoverview' => _ADM_SKPRT_SKINIEOVERVIEW,
227 'skinoverview' => _ADM_SKPRT_SKINOVERVIEW,
228 'skinremovetype' => _ADM_SKPRT_SKINREMOVETYPE,
229 'systemoverview' => _ADM_SKPRT_SYSTEMOVERVIEW,
230 'teamdelete' => _ADM_SKPRT_TEAMDELETE,
231 'templatedelete' => _ADM_SKPRT_TEMPLATEDELETE,
232 'templateedit' => _ADM_SKPRT_TEMPLATEEDIT,
233 'templateoverview' => _ADM_SKPRT_TEMPLATEOVERVIEW,
234 'usermanagement' => _ADM_SKPRT_USERMANAGEMENT,
238 * AdminActions::getAvailableSkinTypes()
242 * @return array list of friendly names for page actions
244 static public function getAvailableSkinTypes()
246 return self::$default_skin_types;
250 * AdminActions::getDefaultTypes()
254 * @return array list of friendly names for page actions
256 static public function getDefaultTypes()
258 return self::$default_skin_types;
262 * AdminActions::__construct()
263 * Constructor for a new Actions object
265 * @param string $type
268 public function __construct($type)
270 // call constructor of superclass first
271 parent::__construct();
272 $this->skintype = $type;
273 if ( !class_exists('Navlist') || !class_exists('Batch') )
276 include $DIR_LIBS . 'ENCAPSULATE.php';
282 * AdminActions::getAvailableActions()
285 * @return array allowed actions for the page type
287 public function getAvailableActions()
289 $extra_actions = array();
291 switch ( $this->skintype )
294 $extra_actions = array(
299 $extra_actions = array(
304 case 'activatesetpwd':
305 $extra_actions = array(
309 $extra_actions = array(
315 case 'adminerrorpage':
316 $extra_actions = array(
319 case 'adminskindelete':
320 $extra_actions = array(
324 case 'adminskinedit':
325 $extra_actions = array(
327 'defaultadminskintypes',
328 'adminspecialskinlist',
331 case 'adminskinedittype':
332 $extra_actions = array(
335 'allowedadminskinactions',
336 'adminskineditallowedlist',
339 case 'adminskiniedoimport':
340 $extra_actions = array(
344 case 'adminskinieimport':
345 $extra_actions = array(
349 case 'adminskinieoverview':
350 $extra_actions = array(
351 'selectlocaladminskinfiles',
355 case 'adminskinoverview':
356 $extra_actions = array(
360 case 'adminskinremovetype':
361 $extra_actions = array(
365 case 'admintemplatedelete':
366 $extra_actions = array(
367 'editadmintemplateinfo',
369 case 'admintemplateedit':
370 $extra_actions = array(
371 'editadmintemplateinfo',
374 case 'admntemplateoverview':
375 $extra_actions = array(
376 'admintemplateoverview',
379 case 'backupoverview':
380 $extra_actions = array(
383 case 'backuprestore':
384 $extra_actions = array(
388 $extra_actions = array(
394 case 'banlistdelete':
395 $extra_actions = array(
400 case 'banlistdeleteconfirm':
401 $extra_actions = array(
402 'banlistdeletedlist',
407 $extra_actions = array(
413 case 'batchcategory':
414 $extra_actions = array(
420 $extra_actions = array(
426 $extra_actions = array(
432 $extra_actions = array(
438 $extra_actions = array(
444 $extra_actions = array(
453 $extra_actions = array(
462 $extra_actions = array(
468 case 'blogcommentlist':
469 $extra_actions = array(
475 case 'blogselectbox':
476 $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(
536 $extra_actions = array(
548 $extra_actions = array(
554 $extra_actions = array(
559 case 'editmembersettings':
560 $extra_actions = array(
561 'adminskinselectoptions',
563 'localeselectoptions',
567 case 'insertpluginoptions':
568 $extra_actions = array(
569 'insertpluginoptions',
572 case 'itemcommentlist':
573 $extra_actions = array(
579 $extra_actions = array(
586 $extra_actions = array(
598 $extra_actions = array(
605 $extra_actions = array(
611 $extra_actions = array(
615 $extra_actions = array(
624 $extra_actions = array(
629 $extra_actions = array(
634 $extra_actions = array(
639 $extra_actions = array(
645 $extra_actions = array(
650 case 'pluginoptions':
651 $extra_actions = array(
653 'editplugoptionslist',
657 $extra_actions = array(
660 'configsettingsedit',
661 'configsettingsyesno',
664 'localeselectoptions',
670 $extra_actions = array(
675 $extra_actions = array(
680 $extra_actions = array(
686 $extra_actions = array(
689 'allowedskinactions',
690 'skineditallowedlist',
691 'skineditallowedlist',
694 case 'skiniedoimport':
695 $extra_actions = array(
700 $extra_actions = array(
704 case 'skinieoverview':
705 $extra_actions = array(
706 'selectlocalskinfiles',
711 $extra_actions = array(
715 case 'skinremovetype':
716 $extra_actions = array(
720 case 'systemoverview':
721 $extra_actions = array(
726 $extra_actions = array(
732 case 'templatedelete':
733 $extra_actions = array(
738 $extra_actions = array(
742 case 'templateoverview':
743 $extra_actions = array(
747 case 'usermanagement':
748 $extra_actions = array(
754 $extra_actions = array(
764 'selectlocaladminskinfiles',
772 $defined_actions = array_merge(self::$default_actions, $extra_actions);
774 return array_merge($defined_actions, parent::getAvailableActions());
778 * AdminActions::parse_actionloglist()
779 * Parse skinvar actionloglist
781 * @param string $templateName name of template to use
784 public function parse_actionloglist($templateName = '')
786 $query = "SELECT * FROM %s ORDER BY timestamp DESC";
787 $query = sprintf($query, sql_table('actionlog'));
789 $template['content'] = 'actionlist';
790 $amount = showlist($query, 'table', $template, $templateName);
796 * AdminActions::parse_activationmessage()
797 * Parse skinvar activationmessage
799 * @param string $type type of message
800 * @param string $templateName name of template to use
803 public function parse_activationmessage($type, $templateName = '')
805 global $CONF, $manager;
809 if ( !empty($templateName))
811 $template = Template::read($templateName);
814 $key = postVar('ackey');
817 Admin::error(_ERROR_ACTIVATE);
820 $info = MEMBER::getActivationInfo($key);
823 Admin::error(_ERROR_ACTIVATE);
826 $mem = MEMBER::createFromId($info->vmember);
829 Admin::error(_ERROR_ACTIVATE);
831 switch ( $info->vtype )
834 if ( array_key_exists('ACTIVATE_FORGOT_TITLE', $template) && !empty($template['ACTIVATE_FORGOT_TITLE']) )
836 $title = $template['ACTIVATE_FORGOT_TITLE'];
840 $title = _ACTIVATE_FORGOT_TITLE;
842 if ( array_key_exists('ACTIVATE_FORGOT_TEXT', $template) && !empty($template['ACTIVATE_FORGOT_TEXT']) )
844 $text = $template['ACTIVATE_FORGOT_TEXT'];
848 $text = _ACTIVATE_FORGOT_TEXT;
852 if ( array_key_exists('ACTIVATE_REGISTER_TITLE', $template) && !empty($template['ACTIVATE_REGISTER_TITLE']) )
854 $title = $template['ACTIVATE_REGISTER_TITLE'];
858 $title = _ACTIVATE_REGISTER_TITLE;
860 if ( array_key_exists('ACTIVATE_REGISTER_TEXT', $template) && !empty($template['ACTIVATE_REGISTER_TEXT']) )
862 $text = $template['ACTIVATE_REGISTER_TEXT'];
866 $text = _ACTIVATE_REGISTER_TEXT;
869 case 'addresschange':
870 if ( array_key_exists('ACTIVATE_CHANGE_TITLE', $template) && !empty($template['ACTIVATE_CHANGE_TITLE']) )
872 $title = $template['ACTIVATE_CHANGE_TITLE'];
876 $title = _ACTIVATE_CHANGE_TITLE;
878 if (array_key_exists('ACTIVATE_CHANGE_TEXT', $template) && !empty($template['ACTIVATE_CHANGE_TEXT']))
880 $text = $template['ACTIVATE_CHANGE_TEXT'];
884 $text = _ACTIVATE_CHANGE_TEXT;
889 'memberName' => Entity::hsc($mem->getDisplayName()),
890 'realName' => Entity::hsc($mem->getRealName()),
895 echo Template::fill($title, $aVars);
898 echo Template::fill($text, $aVars);
901 echo Entity::hsc($key);
908 * AdminActions::parse_addtickettourl()
909 * Parse skinvar addtickettourl
911 * @param string $url URI for ticket
914 public function parse_addtickettourl($url)
917 $url = $manager->addTicketToUrl($url);
918 echo Entity::hsc($url);
923 * AdminActions::parse_adminbanlist()
924 * Parse skinvar adminbanlist
926 * @param string $templateName name of template to use
929 public function parse_adminbanlist($templateName = '')
931 $blogid = intRequestVar('blogid');
933 $query = "SELECT * FROM %s WHERE blogid=%d ORDER BY iprange;";
934 $query = sprintf($query, sql_table('ban'), (integer) $blogid);
936 $template['content'] = 'banlist';
938 $amount = Showlist($query, 'table', $template, $templateName);
948 * AdminActions::parse_adminbatchaction()
949 * Parse skinvar adminbatchaction
954 public function parse_adminbatchaction()
956 echo Entity::hsc(requestVar('batchaction'));
961 * AdminActions::parse_adminbatchlist()
962 * Parse skinvar adminbatchlist
964 * @param string $templateName name of template to use
967 public function parse_adminbatchlist($templateName = '')
970 $templates = array();
972 if ( !empty($templateName) )
974 $templates = Template::read($templateName);
977 if ( !array_key_exists('ADMIN_BATCHLIST', $templates) || empty($templates['ADMIN_BATCHLIST']) )
979 $template = '<li><%text(_BATCH_EXECUTING)%> '
980 . '<b><%adminbatchaction%></b> '
981 . '<%batchlisttype%> '
982 . '<b><%batchid%></b>... '
983 . '<b><%batchlistmsg%></b>'
988 $template = $templates['ADMIN_BATCHLIST'];
991 $selected = requestIntArray('batch');
992 $action = requestVar('batchaction');
994 switch ( $this->skintype )
997 $batchlisttype = _BATCH_ONITEM;
998 $deleteaction = 'deleteOneItem';
999 $moveaction = 'moveOneItem';
1000 $destid = intRequestVar('destcatid');
1002 case 'batchcomment':
1003 $batchlisttype = _BATCH_ONCOMMENT;
1004 $deleteaction = 'deleteOneComment';
1007 $batchlisttype = _BATCH_ONMEMBER;
1008 $deleteaction = 'deleteOneMember';
1009 $setadminsql = sql_table('member') . ' SET madmin = 1 WHERE mnumber = ';
1010 $unsetchksql = 'SELECT * FROM ' . sql_table('member') . ' WHERE madmin = 1 AND mcanlogin = 1';
1011 $unsetupsql = sql_table('member') . ' SET madmin = 0 WHERE mnumber = ';
1012 $unseterrmsg = _ERROR_ATLEASTONEADMIN;
1015 $blogid = intRequestVar('blogid');
1016 $batchlisttype = _BATCH_ONTEAM;
1017 $deleteaction = 'deleteOneTeamMember';
1018 $setadminsql = sql_table('team') . ' SET tadmin = 1 WHERE tblog = ' . $blogid . ' AND tmember = ';
1019 $unsetchksql = 'SELECT * FROM ' . sql_table('team') . ' WHERE tadmin = 1 AND tblog = ' . $blogid;
1020 $unseterrmsg = _ERROR_ATLEASTONEBLOGADMIN;
1021 $unsetupsql = sql_table('team') . ' SET tadmin = 0 WHERE tblog = ' . $blogid . ' AND tmember = ';
1023 case 'batchcategory':
1024 $batchlisttype = _BATCH_ONCATEGORY;
1025 $deleteaction = 'deleteOneCategory';
1026 $moveaction = 'moveOneCategory';
1027 $destid = intRequestVar('destblogid');
1031 // walk over all selectedids and perform action
1032 foreach ( $selected as $selectedid )
1035 $selectedid = intval($selectedid);
1039 if ( $this->skintype != 'batchteam' )
1041 $error = call_user_func_array(array('Admin', $deleteaction), array($selectedid));
1045 $error = Admin::deleteOneTeamMember($blogid, $selectedid);
1049 $error = call_user_func_array(array('Admin', $moveaction), array($selectedid, $destid));
1053 DB::execute("UPDATE {$setadminsql} {$selectedid};");
1057 // there should always remain at least one super-admin
1058 $r = DB::getResult($unsetchksql);
1059 if ( $r->rowCount() < 2 )
1061 $error = $unseterrmsg;
1065 DB::execute("UPDATE {$unsetupsql} {$selectedid};");
1069 $error = _BATCH_UNKNOWN . Entity::hsc($action);
1073 'batchid' => $selectedid,
1074 'batchlisttype' => Entity::hsc($batchlisttype),
1075 'adminbatchaction' => Entity::hsc($action),
1076 'batchlistmsg' => $error ? $error : _BATCH_SUCCESS,
1079 $handler = new AdminActions('template');
1080 $parser = new Parser($handler);
1082 $output = Template::fill($template, $data);
1084 $parser->parse($output);
1085 $output = ob_get_contents();
1087 echo "{$output}<br />";
1093 * AdminActions::parse_adminbloglink()
1094 * Parse skinvar adminbloglink
1096 * @param string $templateName name of template to use
1099 public function parse_adminbloglink($templateName = '')
1102 $blogid = intRequestVar('blogid');
1103 $blog =& $manager->getBlog($blogid);
1104 $templates = array();
1106 if ( !empty($templateName) )
1108 $templates = Template::read($templateName);
1111 if ( !array_key_exists('ADMIN_BLOGLINK', $templates) || empty($templates['ADMIN_BLOGLINK']) )
1113 $template = '<a href="<%url%>" title="<%adminbloglinktitle%>"><%blogname%></a>';
1117 $template = $templates['ADMIN_BLOGLINK'];
1121 'url' => Entity::hsc($blog->getURL()),
1122 'adminbloglinktitle' => _BLOGLIST_TT_VISIT,
1123 'blogname' => Entity::hsc($blog->getName())
1126 echo Template::fill($template, $data);
1131 * AdminActions::parse_adminerrormesg()
1132 * Parse skinvar adminerrormesg
1137 public function parse_adminerrormesg()
1142 if ( requestVar('errormessage') )
1144 $message = requestVar('errormessage');
1146 elseif ( cookieVar($CONF['CookiePrefix'] . 'errormessage') )
1148 $message = cookieVar($CONF['CookiePrefix'] . 'errormessage');
1150 elseif ( Admin::sessionVar($CONF['CookiePrefix'] . 'errormessage') )
1152 $message = Admin::sessionVar($CONF['CookiePrefix'] . 'errormessage');
1154 echo Entity::hsc($message);
1159 * AdminActions::parse_adminskineditallowedlist()
1160 * Parse skinvar adminskineditallowedlist
1162 * @param string $type template/blog
1163 * @param string $templateName name of template to use
1166 public function parse_adminskineditallowedlist($type = 'template', $templateName = '')
1170 /* TODO: blog seems not to be used */
1172 $query = "SELECT bshortname, bname FROM %s";
1173 $query = sprintf($query, sql_table('blog'));
1175 'content' => 'shortblognames'
1177 Showlist($query, 'table', $show, $templateName);
1180 $query = "SELECT tdname as name, tddesc as description FROM %s WHERE tdname LIKE 'admin/%%'";
1181 $query = sprintf($query, sql_table('template_desc'));
1183 'content' => 'shortnames'
1185 Showlist($query, 'table', $show, $templateName);
1192 * AdminActions::parse_adminskinielist()
1193 * Parse skinvar adminskinielist
1195 * @param string $type skin/template
1196 * @param string $templateName name of template to use
1199 public function parse_adminskinielist($type, $templateName = '')
1201 $templates = array();
1202 if ( $templateName )
1204 $templates = Template::read($templateName);
1207 if ( !array_key_exists('SKINIE_EXPORT_LIST', $templates) || empty($templates['SKINIE_EXPORT_LIST']) )
1210 . "<input type=\"checkbox\" name=\"<%typeid%>\" id=\"<%expid%>\" />\n"
1211 . "<label for=\"<%expid%>\"><%expname%></label>"
1213 . "<td><%expdesc%></td>\n"
1219 $template = $templates['SKINIE_EXPORT_LIST'];
1225 $query = "SELECT * FROM %s WHERE sdname LIKE 'admin/%%';";
1226 $query = sprintf($query, sql_table('skin_desc'));
1227 $res = DB::getResult($query);
1229 foreach ( $res as $row )
1232 'typeid' => 'skin[' . $row['sdnumber'] . ']',
1233 'expid' => 'skinexp' . $row['sdnumber'],
1234 'expname' => Entity::hsc($row['sdname']),
1235 'expdesc' => Entity::hsc($row['sddesc']),
1237 echo Template::fill($template, $data);
1241 $query = "SELECT * FROM %s WHERE tdname LIKE 'admin/%%';";
1242 $query = sprintf($query, sql_table('template_desc'));
1243 $res = DB::getResult($query);
1244 foreach ( $res as $row )
1247 'typeid' => 'template[' . $row['tdnumber'] . ']',
1248 'expid' => 'templateexp' . $row['tdnumber'],
1249 'expname' => Entity::hsc($row['tdname']),
1250 'expdesc' => Entity::hsc($row['tddesc']),
1252 echo Template::fill($template, $data);
1260 * AdminActions::parse_adminskinoverview()
1261 * Parse skinvar adminskinoverview
1263 * @param string $templateName name of template to use
1266 public function parse_adminskinoverview($templateName = '')
1268 $query = "SELECT * FROM %s WHERE sdname LIKE 'admin/%%' ORDER BY sdname;";
1269 $query = sprintf($query, sql_table('skin_desc'));
1271 $template['content'] = 'adminskinlist';
1272 $template['tabindex'] = 10;
1273 $template['friendly_names'] = $this->parser->skin->getAvailableTypes();
1274 Showlist($query, 'table', $template, $templateName);
1279 * AdminActions::parse_adminskinselectoptions()
1280 * Parse skinvar adminskinselectoptions
1285 public function parse_adminskinselectoptions($templateName = '')
1288 $query = "SELECT sdname as text, sdnumber as value FROM %s WHERE sdname LIKE 'admin/%%';";
1289 $query = sprintf($query, sql_table('skin_desc'));
1291 $template['name'] = 'adminskin';
1292 $template['selected'] = $CONF['AdminSkin'];
1293 $template['tabindex'] = 110;
1294 Showlist($query, 'select', $template, $templateName);
1299 * AdminActions::parse_adminspecialskinlist()
1300 * Parse skinvar adminspecialskinlist
1302 * @param string $templateName name of template to use
1304 public function parse_adminspecialskinlist($templateName = '')
1306 $templates = array();
1307 if ( $templateName )
1309 $templates = Template::read($templateName);
1312 $nType = $this->parser->skin->getAvailableTypes();
1313 $skinid = intRequestVar('skinid');
1315 $query = "SELECT stype FROM %s WHERE stype NOT IN (%s) AND sdesc=%d;";
1316 $query = sprintf($query, sql_table('skin'), "'" . implode("', '", $nType) . "'", (integer) $skinid);
1318 $res = DB::getResult($query);
1319 if ( $res && $res->rowCount() > 0 )
1321 /* NOTE: set templates for HEAD/BODY/FOOT */
1322 if ( !array_key_exists('ADMIN_SPECIALSKINLIST_HEAD', $templates) || empty($templates['ADMIN_SPECIALSKINLIST_HEAD']) )
1324 $template['head'] = "<ul>\n";
1328 $template['head'] = $templates['ADMIN_SPECIALSKINLIST_HEAD'];
1330 if ( !array_key_exists('ADMIN_SPECIALSKINLIST_BODY', $templates) || empty($templates['ADMIN_SPECIALSKINLIST_BODY']) )
1332 $template['body'] = '<li>'
1333 . '<a tabindex="<%tabindex%>" href="index.php?action=adminskinedittype&skinid=<%skinid%>&type=<%skintype%>">'
1336 . '(<a tabindex="<%tabindex%>" href="index.php?action=adminskinremovetype&skinid=<%skinid%>&type=<%skintype%>">'
1343 $template['body'] = $templates['ADMIN_SPECIALSKINLIST_BODY'];
1345 if ( !array_key_exists('ADMIN_SPECIALSKINLIST_FOOT', $templates) || empty($templates['ADMIN_SPECIALSKINLIST_FOOT']) )
1347 $template['foot'] = "</ul>\n";
1351 $template['foot'] = $templates['ADMIN_SPECIALSKINLIST_FOOT'];
1358 echo $template['head'];
1359 foreach ( $res as $row )
1362 'tabindex' => $tabstart++,
1363 'skinid' => $skinid,
1364 'skintype' => Entity::hsc(strtolower($row['stype']))
1366 echo Template::fill($template['body'], $data);
1369 echo $template['foot'];
1375 * AdminActions::parse_admintemplateoverview()
1376 * Parse skinvar admintemplateoverview
1378 * @param string $templateName name of template to use
1381 public function parse_admintemplateoverview($templateName = '')
1383 $query = "SELECT * FROM %s WHERE tdname LIKE 'admin/%%' ORDER BY tdname;";
1384 $query = sprintf($query, sql_table('template_desc'));
1386 $template['content'] = 'admintemplatelist';
1387 $template['tabindex'] = 10;
1389 Showlist($query, 'table', $template, $templateName);
1394 * AdminActions::parse_allowedadminskinactions()
1395 * Parse skinvar allowedadminskinactions
1400 public function parse_allowedadminskinactions()
1402 global $DIR_ADMINSKINS;
1403 $skinType = strtolower(trim(requestVar('type')));
1404 $actions = $this->parser->skin->getAllowedActionsForType($skinType);
1407 while ( $current = array_shift($actions) )
1409 // TODO: remove this
1410 // skip deprecated vars
1411 if ($current == 'ifcat' || $current == 'imagetext' || $current == 'vars')
1416 echo helplink("adminskinvar-{$current}") . "$current</a>\n";
1418 if ( count($actions) != 0 )
1427 * AdminActions::parse_allowedskinactions()
1428 * Parse skinvar allowedskinactions
1433 public function parse_allowedskinactions()
1435 $skinType = strtolower(trim(requestVar('type')));
1436 $skinid = intRequestVar('skinid');
1438 $skin = new Skin($skinid);
1439 $actions = $skin->getAllowedActionsForType($skinType);
1442 while ( $current = array_shift($actions) )
1444 // TODO: remove this
1445 // skip deprecated vars
1446 if ( $current == 'ifcat' || $current == 'imagetext' || $current == 'vars' )
1451 /* TODO: alternative function should be used or not? */
1452 echo helplink("skinvar-{$current}") . "$current</a>\n";
1454 if ( count($actions) != 0 )
1463 * AdminActions::parse_banlistdeletedlist()
1464 * Parse skinvar banlistdeletedlist
1466 * @param string $templateName name of template to use
1469 public function parse_banlistdeletedlist($templateName = '')
1473 $templates = array();
1474 if ( $templateName )
1476 $templates = Template::read($templateName);
1479 if ( !array_key_exists('BANLIST_DELETED_LIST', $templates) || empty($templates['BANLIST_DELETED_LIST']) )
1481 $template = "<li><%blogname%></li>\n";
1485 $template = $templates['BANLIST_DELETED_LIST'];
1488 $deleted = requestArray('delblogs');
1489 foreach ( $deleted as $delblog )
1491 $blog =& $manager->getBlog($delblog);
1493 'blogname' => Entity::hsc($blog->getName())
1495 echo Template::fill($template, $data);
1502 * AdminActions::parse_batchdeletelist()
1503 * Parse skinvar batchdeletelist
1508 public function parse_batchdeletelist()
1510 $selected = requestIntArray('batch');
1513 foreach ( $selected as $select )
1515 echo '<input type="hidden" name="batch[' . ($index++) . ']" value="' . intval($select) . "\" />\n";
1517 // add hidden vars for team & comment
1518 if ( requestVar('action') == 'batchteam' )
1520 echo '<input type="hidden" name="blogid" value="' . intRequestVar('blogid') . "\" />\n";
1522 if ( requestVar('action') == 'batchcomment' )
1524 echo '<input type="hidden" name="itemid" value="' . intRequestVar('itemid') . "\" />\n";
1530 * AdminActions::parse_batchdeletetype()
1531 * Parse skinvar batchdeletetype
1536 public function parse_batchdeletetype()
1538 echo Entity::hsc(requestVar('action'));
1543 * AdminActions::parse_batchmovebtn()
1544 * Parse skinvar batchmovebtn
1549 public function parse_batchmovebtn()
1551 $actionType = requestVar('action');
1552 switch ( $actionType )
1557 case 'batchcategory':
1565 * AdminActions::parse_batchmovelist()
1566 * Parse skinvar batchmovelist
1571 public function parse_batchmovelist()
1573 $selected = requestIntArray('batch');
1575 foreach ( $selected as $select )
1577 echo '<input type="hidden" name="batch[' . ($count) . ']" value="' . intval($select) . "\" />\n";
1584 * AdminActions::parse_batchmovetitle()
1585 * Parse skinvar batchmovetitle
1590 public function parse_batchmovetitle()
1592 $actionType = requestVar('action');
1593 switch ( $actionType )
1598 case 'batchcategory':
1599 echo _MOVECAT_TITLE;
1606 * AdminActions::parse_batchmovetype()
1607 * Parse skinvar batchmovetype
1612 public function parse_batchmovetype()
1614 echo Entity::hsc(requestVar('action'));
1619 * AdminActions::parse_blogcatlist()
1620 * Parse skinvar blogcatlist
1625 public function parse_blogcatlist($templateName = '')
1628 $blogid = intRequestVar('blogid');
1629 $query = "SELECT * FROM %s WHERE cblog = %d ORDER BY cname;";
1630 $query = sprintf($query, sql_table('category'), (integer) $blogid);
1632 $template['content'] = 'categorylist';
1633 $template['tabindex'] = 200;
1635 $batch = new Batch('category');
1636 $batch->showlist($query, 'table', $template, $templateName);
1641 * AdminActions::parse_blogid()
1642 * Parse skinvar blogid
1647 public function parse_blogid()
1649 echo intRequestVar('blogid');
1654 * AdminActions::parse_blognotifysetting()
1655 * Parse skinvar blognotifysetting
1660 public function parse_blognotifysetting($type)
1663 $blogid = intRequestVar('blogid');
1664 $blog = $manager->getBlog($blogid);
1669 if ( !$blog->notifyOnComment() )
1675 if ( !$blog->notifyOnVote() )
1681 if ( !$blog->notifyOnNewItem() )
1687 echo ' checked="checked"';
1692 * AdminActions::parse_blogselectbox()
1693 * Parse skinvar blogselectbox
1698 public function parse_blogselectbox()
1702 $selectData = requestVar('selectData');
1703 $mode = $selectData['mode'];
1704 $name = Entity::hsc($selectData['name']);
1705 $tabindex = Entity::hsc($selectData['tabindex']);
1706 $aBlogIds = array_map('intval', $selectData['aBlogIds']);
1707 $showNewCat = intval($selectData['showNewCat']);
1708 $selected = intval($selectData['selected']);
1710 echo "<select name=\"{$name}\" tabindex=\"{$tabindex}\">\n";
1712 // 1. select blogs (we'll create optiongroups)
1713 // (only select those blogs that have the user on the team)
1714 $queryBlogs = "SELECT bnumber, bname FROM %s WHERE bnumber in (%s) ORDER BY bname;";
1715 $queryBlogs = sprintf($queryBlogs, sql_table('blog'), implode(',', $aBlogIds));
1716 $blogs = DB::getResult($queryBlogs);
1718 if ( $mode == 'category' )
1720 if ( $blogs->rowCount() > 1 )
1724 foreach ( $blogs as $rBlog )
1726 if ( isset($multipleBlogs) && !empty($multipleBlogs) )
1728 echo '<optgroup label="' . Entity::hsc($rBlog['bname']) . "\">\n";
1731 // show selection to create new category when allowed/wanted
1734 // check if allowed to do so
1735 if ( $member->blogAdminRights($rBlog['bnumber']) )
1737 echo '<option value="newcat-' . $rBlog['bnumber'] . '">' . _ADD_NEWCAT . "</option>\n";
1741 // 2. for each category in that blog
1742 $catQuery = "SELECT cname, catid FROM %s WHERE cblog=%d ORDER BY cname ASC;";
1743 $catQuery = sprintf($catQuery, sql_table('category'), (integer) $rBlog['bnumber']);
1744 $categories = DB::getResult($catQuery);
1745 foreach ( $categories as $rCat )
1747 if ( $rCat['catid'] == $selected )
1749 $selectText = ' selected="selected" ';
1755 echo '<option value="' . $rCat['catid'] . '" ' . $selectText . '>' . Entity::hsc($rCat['cname']) . "</option>\n";
1758 if ( isset($multipleBlogs) && !empty($multipleBlogs) )
1767 foreach ( $blogs as $rBlog )
1769 echo '<option value="' . $rBlog['bnumber'] . '"';
1770 if ( $rBlog['bnumber'] == $selected )
1772 echo '<option value="' . $rBlog['bnumber'] . '" selected="selected">' . Entity::hsc($rBlog['bname']) . "</option>\n";
1776 echo '<option value="' . $rBlog['bnumber'] . '">' . Entity::hsc($rBlog['bname']) . "</option>\n";
1785 * AdminActions::parse_blogsetting()
1786 * Parse skinvar blogsetting
1788 * @param string $which name of weblog setting
1791 public function parse_blogsetting($which)
1793 echo $this->parse_getblogsetting($which);
1798 * AdminActions::parse_blogsettingyesno()
1799 * Parse skinvar blogsettingyesno
1801 * @param string $type type of weblog setting
1802 * @param string $templateName name of template to use
1805 public function parse_blogsettingyesno($type, $templateName = '')
1809 $blogid = intRequestVar('blogid');
1810 $blog = $manager->getBlog($blogid);
1814 case 'convertbreaks':
1815 $checkedval = $blog->convertBreaks();
1818 case 'allowpastposting':
1819 $checkedval = $blog->allowPastPosting();
1823 $checkedval = $blog->commentsEnabled();
1827 $checkedval = $blog->isPublic();
1831 $checkedval = $blog->emailRequired();
1835 $checkedval = $blog->getSearchable();
1839 $this->parse_inputyesno($type, $checkedval, $tabindex, 1, 0, _YES, _NO, 0, $templateName);
1844 * AdminActions::parse_blogteamlist()
1845 * Parse skinvar blogteamlist
1847 * @param string $templateName name of template to use
1850 public function parse_blogteamlist($templateName = '')
1853 $blogid = intRequestVar('blogid');
1854 $query = "SELECT tblog, tmember, mname, mrealname, memail, tadmin "
1856 . "WHERE tmember=mnumber AND tblog= %d";
1857 $query = sprintf($query, sql_table('member'), sql_table('team'), (integer) $blogid);
1859 $template['content'] = 'teamlist';
1860 $template['tabindex'] = 10;
1862 $batch = new Batch('team');
1863 $batch->showList($query, 'table', $template, $templateName, _LISTS_NOMORE);
1868 * AdminActions::parse_blogteammembers()
1869 * Parse skinvar blogteammembers
1874 public function parse_blogteammembers()
1876 $blogid = intRequestVar('blogid');
1877 $query = "SELECT mname, mrealname "
1879 . "WHERE mnumber=tmember AND tblog=%d;";
1880 $query = sprintf($query, sql_table('member'), sql_table('team'), (integer) $blogid);
1881 $res = DB::getResult($query);
1882 $memberNames = array();
1883 foreach ( $res as $row )
1885 $memberNames[] = Entity::hsc($row['mname']) . ' (' . Entity::hsc($row['mrealname']). ')';
1887 echo implode(',', $memberNames);
1891 * AdminActions::parse_blogtime()
1892 * Parse skinvar blogtime
1894 * @param string $type type of time
1895 * @param string $format format for time expression
1896 * @param integer $offset offset of time
1899 public function parse_blogtime($type, $format = '%H:%M', $offset = 0)
1903 if ( $type != 'blogtime' )
1905 /* return server time */
1906 $timestamp = time() + $offset;
1910 $bid = intRequestVar('blogid');
1911 $b = $manager->getBlog($bid);
1912 $timestamp = $b->getCorrectTime() + $offset;
1915 echo i18n::formatted_datetime($format, $timestamp);
1920 * AdminActions::parse_bookmarkletadmin()
1921 * Parse skinvar bookmarkletadmin
1926 public function parse_bookmarkletadmin()
1930 $blogid = intRequestVar('blogid');
1932 echo Entity::hsc('javascript:' . getBookmarklet($blogid));
1937 * AdminActions::parse_categories()
1938 * Parse skinvar categories
1940 * create category dropdown box
1942 * @param string $type name of setting for category
1945 public function parse_categories($startidx = 0)
1950 $itemid = intRequestVar('itemid');
1951 $item = &$manager->getItem($itemid, 1, 1);
1956 $blogid = intRequestVar('blogid');
1960 $blogid = $item['blogid'];
1962 $blog = &$manager->getBlog($blogid);
1964 if ( $item && $blog->convertBreaks() && requestVar('action') == 'itemedit' )
1966 $item['body'] = removeBreaks($item['body']);
1967 $item['more'] = removeBreaks($item['more']);
1970 $contents = array();
1971 if ( requestVar('action') == 'itemedit' )
1976 if ( !array_key_exists('catid', $contents) || empty($contents['catid']) )
1979 $catid = $blog->getDefaultCategory();
1984 $catid = $contents['catid'];
1987 Admin::selectBlogCategory('catid', $catid, $startidx, 1, $blog->getID());
1993 * AdminActions::parse_category()
1994 * Parse skinvar category
1996 * @param string $type name of setting for category
1999 public function parse_category($type = 'name')
2001 echo $this->parse_getcategory($type);
2006 * AdminActions::parse_categorysetting()
2007 * Parse skinvar categorysetting
2009 * @param string $type type in category setting
2012 public function parse_categorysetting($type)
2014 $catid = intRequestVar('catid');
2015 if ( $type == 'id' )
2020 $blogid = intRequestVar('blogid');
2021 $query = "SELECT * FROM %s WHERE cblog = %d AND catid = %d;";
2022 $query = sprintf($query, sql_table('category'), (integer) $blogid, (integer) $catid);
2023 $row = DB::getRow($query);
2025 if ( $type != 'name' )
2027 echo Entity::hsc($row['cdesc']);
2031 echo Entity::hsc($row['cname']);
2038 * AdminActions::parse_codename()
2039 * Parse templatevar codename
2045 public function parse_checkedonval($value, $name)
2050 $itemid = intRequestVar('itemid');
2051 $item =& $manager->getItem($itemid, 1, 1);
2053 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
2055 if ( $item && $blog->convertBreaks() && requestVar('action') == 'itemedit' )
2057 $item['body'] = removeBreaks($item['body']);
2058 $item['more'] = removeBreaks($item['more']);
2061 $contents = array();
2062 if ( requestVar('action') == 'itemedit' )
2066 if ( !isset($contents[$name]) )
2068 $contents[$name] = '';
2070 if ($contents[$name] == $value)
2072 echo 'checked="checked"';
2078 * AdminActions::parse_codename()
2079 * Parse templatevar codename
2084 * TODO: is this need???
2086 public function parse_codename()
2089 echo $nucleus['codename'];
2094 * AdminActions::parse_commentnavlist()
2095 * Parse skinvar commentnavlist
2100 public function parse_commentnavlist()
2102 global $CONF, $manager, $member;
2105 if ( postVar('start') )
2107 $start = intPostVar('start');
2114 // amount of items to show
2115 if ( postVar('amount') )
2117 $amount = intPostVar('amount');
2121 $amount = (integer) $CONF['DefaultListSize'];
2127 $query = 'SELECT cbody, cuser, cmail, cemail, mname, ctime, chost, cnumber, cip, citem '
2129 . 'LEFT OUTER JOIN %s ON mnumber=cmember '
2131 $query = sprintf($query, sql_table('comment'), sql_table('member'));
2133 if ( $this->skintype == 'itemcommentlist' )
2135 $itemid = intRequestVar('itemid');
2136 $query .= " citem={$itemid}";
2137 $template['canAddBan'] = $member->blogAdminRights(intRequestVar('blogid'));
2139 $nonComments = _NOCOMMENTS;
2141 elseif ( $this->skintype == 'browseowncomments' )
2144 $query .= ' cmember=' . $member->getID();
2145 $template['canAddBan'] = 0;
2147 $nonComments = _NOCOMMENTS_YOUR;
2149 elseif ( $this->skintype == 'blogcommentlist' )
2152 $query .= ' cblog=' . intRequestVar('blogid');
2153 $template['canAddBan'] = $member->blogAdminRights(intRequestVar('blogid'));
2154 $bid = intRequestVar('blogid');
2155 $nonComments = _NOCOMMENTS_BLOG;
2158 $search = postVar('search');
2159 if ( !empty($search) )
2161 $query .= ' and cbody LIKE ' . DB::quoteValue('%'.$search.'%');
2164 $query .= " ORDER BY ctime ASC LIMIT {$start},{$amount}";
2166 $template['content'] = 'commentlist';
2168 $navList = new Navlist($this->skintype, $start, $amount, 0, 1000, $bid, $search, $itemid);
2169 $navList->showBatchList('comment', $query, 'table', $template, $nonComments);
2174 * AdminActions::parse_configsettingsedit()
2175 * Parse skinvar configsettingsedit
2177 * @param string $type type of global configuration
2180 public function parse_configsettingsedit($type)
2185 case 'DefaultListSize':
2186 if ( !array_key_exists('DefaultListSize', $CONF) )
2188 $query = "INSERT INTO %s VALUES (DefaultListSize, 10);";
2189 $query = sprintf($query, sql_table('config'));
2190 DB::execute($query);
2191 $CONF['DefaultListSize'] = 10;
2193 elseif ( intval($CONF['DefaultListSize']) < 1 )
2195 $CONF['DefaultListSize'] = 10;
2197 echo intval($CONF['DefaultListSize']);
2199 case 'SessionCookie':
2200 $value = $CONF['SessionCookie'];
2201 $txt1 = _SETTINGS_COOKIESESSION;
2202 $txt2 = _SETTINGS_COOKIEMONTH;
2203 $this->parse_inputyesno('SessionCookie', $value, 10190, 1, 0, $txt1, $txt2);
2206 $value = $CONF['URLMode'];
2207 $txt1 = _SETTINGS_URLMODE_NORMAL;
2208 $txt2 = _SETTINGS_URLMODE_PATHINFO;
2209 $this->parse_inputyesno('URLMode', $value, 10077, 'normal', 'pathinfo', $txt1, $txt2);
2212 if ( array_key_exists($type, $CONF) && is_string($CONF[$type]) )
2214 echo Entity::hsc($CONF[$type]);
2222 * AdminActions::parse_configsettingsyesno()
2223 * Parse skinvar configsettingsyesno
2225 * @param string $type type of global setting
2226 * @param integer $tabindex tabindex attribute of input element
2229 public function parse_configsettingsyesno($type, $tabindex)
2232 if ( array_key_exists($type, $CONF) )
2234 $this->parse_inputyesno($type, $CONF[$type], $tabindex);
2240 * AdminActions::parse_contents()
2241 * Parse skinvar contents
2243 * @param string $which part for item
2246 public function parse_contents($which)
2251 $contents = array();
2253 if ( requestVar('action') == 'itemedit' )
2255 $itemid = intRequestVar('itemid');
2256 $item =& $manager->getItem($itemid, 1, 1);
2258 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
2260 if ( $item && $blog->convertBreaks() )
2262 $item['body'] = removeBreaks($item['body']);
2263 $item['more'] = removeBreaks($item['more']);
2267 elseif ( requestVar('action') == 'createitem' )
2269 $blogid = intRequestVar('blogid');
2270 $blog =& $manager->getBlog($blogid);
2274 'contents' => &$contents,
2280 if ( !array_key_exists($which, $contents) )
2282 $contents[$which] = '';
2284 echo Entity::hsc($contents[$which],ENT_QUOTES);
2288 * AdminActions::parse_currenttime()
2289 * Parse skinvar currenttime
2291 * @param string $what
2294 public function parse_currenttime($what)
2297 if ( requestVar('action') == 'itemedit' )
2299 $itemid = intRequestVar('itemid');
2300 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
2302 elseif ( requestVar('action') == 'createitem' )
2304 $blog =& $manager->getBlog(intRequestVar('blogid'));
2306 $nu = getdate($blog->getCorrectTime());
2311 * AdminActions::parse_customhelplink()
2312 * Parse skinvar customhelplink
2314 * @param string $topic name of topic
2315 * @param string $tplName name of template
2316 * @param string $url string as URI
2317 * @param string $iconURL string as URI for icon
2318 * @param string $alt alternative text for image element
2319 * @param string $title title for anchor element
2322 public function parse_customhelplink($topic, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
2324 $this->customHelp($topic, $url, $iconURL);
2329 * AdminActions::parse_date()
2330 * Parse skinvar date
2332 public function parse_date($format = 'c')
2334 global $CONF, $manager;
2335 echo i18n::formatted_datetime($format, time(), 'iso8601', $manager->getBlog((integer) $CONF['DefaultBlog']));
2340 * AdminActions::parse_defaultadminskintypes()
2341 * Parse skinvar defaultadminskintypes
2343 * @param string $tabindex index number for tabindex attribute of input element
2344 * @param string $templateName name of template
2347 public function parse_defaultadminskintypes($tabindex, $templateName = '')
2349 $templates = array();
2351 if ( $templateName )
2353 $templates = Template::read($templateName);
2356 $types = $this->parser->skin->getAvailableTypes();
2359 /* NOTE: set templates for HEAD/BODY/FOOT */
2360 if ( !array_key_exists('ADMINSKINTYPELIST_HEAD', $templates) || empty($templates['ADMINSKINTYPELIST_HEAD']) )
2362 $template['head'] = "<ul>\n";
2366 $template['head'] = $templates['ADMINSKINTYPELIST_HEAD'];
2368 if ( !array_key_exists('ADMINSKINTYPELIST_BODY', $templates) || empty($templates['ADMINSKINTYPELIST_BODY']) )
2370 $template['body'] = "<li>"
2371 . "<a tabindex=\"<%tabindex%>\" href=\"index.php?action=adminskinedittype&skinid=<%skinid%>&type=<%skintype%>\"><%name%></a> <%help%>"
2376 $template['body'] = $templates['ADMINSKINTYPELIST_BODY'];
2378 if ( !array_key_exists('ADMINSKINTYPELIST_FOOT', $templates) || empty($templates['ADMINSKINTYPELIST_FOOT']) )
2380 $template['foot'] = "</ul>\n";
2384 $template['foot'] = $templates['ADMINSKINTYPELIST_FOOT'];
2387 $handler = new AdminActions('template');
2388 $parser = new PARSER($handler);
2390 /* NOTE: do output */
2391 echo $template['head'];
2392 foreach ( $types as $type => $fName )
2394 $helplink = $this->customHelpHtml("skinpart{$type}{$templateName}");
2396 'tabindex' => $tabindex,
2397 'skintype' => $type,
2399 'help' => $helplink,
2400 'skinid' => intrequestVar('skinid'),
2402 $parser->parse(Template::fill($template['body'], $data));
2405 echo $template['foot'];
2411 * AdminActions::parse_defblogselect()
2412 * Parse skinvar defblogselect
2414 * @param string $templateName name of template
2417 public function parse_defblogselect($templateName = '')
2421 $query = "SELECT bname as text, bnumber as value FROM %s;";
2422 $query = sprintf($query, sql_table('blog'));
2424 $template['name'] = 'DefaultBlog';
2425 $template['selected'] = $CONF['DefaultBlog'];
2426 $template['tabindex'] = 10;
2428 Showlist($query, 'select', $template, $templateName);
2434 * AdminActions::parse_defcatselect()
2435 * Parse skinvar defcatselect
2437 * @param string $templateName name of template
2440 public function parse_defcatselect($templateName = '')
2444 $blogid = intRequestVar('blogid');
2445 $blog = $manager->getBlog($blogid);
2447 $query = "SELECT cname as text, catid as value FROM %s WHERE cblog=%d;";
2448 $query = sprintf($query, sql_table('category'), (integer) $blog->getID());
2450 $template['name'] = 'defcat';
2451 $template['selected'] = $blog->getDefaultCategory();
2452 $template['tabindex'] = 110;
2454 Showlist($query, 'select', $template, $templateName);
2460 * AdminActions::parse_defskinselect()
2461 * Parse skinvar defskinselect
2463 * @param string $type type of skin
2464 * @param string $templateName name of template
2467 public function parse_defskinselect($type = 'blog', $templateName = '')
2469 global $CONF, $manager;
2471 $query = "SELECT sdname as text, sdnumber as value FROM %s WHERE sdname NOT LIKE 'admin/%%';";
2472 $query = sprintf($query, sql_table('skin_desc'));
2474 $blogid = intRequestVar('blogid');
2478 $template['selected'] = $CONF['BaseSkin'];
2482 $blog = $manager->getBlog($blogid);
2483 $template['selected'] = $blog->getDefaultSkin();
2486 if ( $type != 'blog' )
2488 $nname = 'BaseSkin';
2495 $template['name'] = $nname;
2496 $template['tabindex'] = 50;
2498 Showlist($query, 'select', $template, $templateName);
2504 * AdminActions::parse_deletecomment()
2505 * Parse skinvar deletecomment
2507 * @param string $type type of infomation for comment
2510 public function parse_deletecomment($type = 'id')
2512 $commentid = intRequestVar('commentid');
2513 $comment = COMMENT::getComment($commentid);
2518 echo intRequestVar('commentid');
2521 if ( array_key_exists('member', $comment) && !empty($comment['member']) )
2523 echo $comment['member'];
2527 echo $comment['user'];
2531 $body = strip_tags($comment['body']);
2532 echo Entity::hsc(shorten($body, 300, '...'));
2538 * AdminActions::parse_deleteitembody()
2539 * Parse skinvar deleteitembody
2544 public function parse_deleteitembody()
2548 $itemid = intRequestVar('itemid');
2549 $item =& $manager->getItem($itemid, 1, 1);
2551 $body = strip_tags($item['body']);
2553 echo Entity::hsc(shorten($body, 300, '...'));
2559 * AdminActions::parse_deleteitemid()
2560 * Parse skinvar deleteitemid
2565 public function parse_deleteitemid()
2567 echo (integer) intRequestVar('itemid');
2572 * AdminActions::parse_deleteitemtitle()
2573 * Parse skinvar deleteitemtitle
2578 public function parse_deleteitemtitle()
2582 $itemid = intRequestVar('itemid');
2583 $item =& $manager->getItem($itemid, 1, 1);
2585 echo Entity::hsc(strip_tags($item['title']));
2591 * AdminActions::parse_editadminskin()
2592 * Parse skinvar editadminskin
2594 * @param string $type type of skin setting
2597 public function parse_editadminskin($type = 'id')
2599 $skinid = intRequestVar('skinid');
2600 $skin = new Skin($skinid);
2604 echo intRequestVar('skinid');
2607 echo Entity::hsc($skin->getName());
2610 echo Entity::hsc($skin->getDescription());
2613 echo Entity::hsc($skin->getContentType());
2616 echo Entity::hsc($skin->getIncludePrefix());
2619 $this->parse_inputyesno('inc_mode', $skin->getIncludeMode(), 120, 'skindir', 'normal', _PARSER_INCMODE_SKINDIR, _PARSER_INCMODE_NORMAL);
2627 * AdminActions::parse_editadminskintype()
2628 * Parse skinvar editadminskintype
2630 * @param string $type name of skin type
2633 public function parse_editadminskintype($type = 'id')
2635 global $CONF, $manager, $member;
2637 $fNames = $this->parser->skin->getAvailableTypes();
2638 $sType = strtolower(trim(requestVar('type')));
2643 echo intRequestVar('skinid');
2646 echo Entity::hsc($this->parser->skin->getName());
2649 echo Entity::hsc($this->parser->skin->getDescription());
2652 echo Entity::hsc($this->parser->skin->getContentType());
2655 echo Entity::hsc($this->parser->skin->getContentFromDB($sType));
2658 $skinType = !array_key_exists($sType, $fNames) ? ucfirst($sType) : $fNames[$sType];
2659 echo Entity::hsc($skinType);
2662 echo Entity::hsc($sType);
2665 echo Entity::hsc($this->parser->skin->getIncludePrefix());
2668 $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;
2669 echo Entity::hsc($incMode);
2678 * AdminActions::parse_editcomment()
2679 * Parse skinvar editcomment
2681 * @param string $type type of comment setting
2684 public function parse_editcomment($type = 'id')
2688 $commentid = intRequestVar('commentid');
2689 $comment = COMMENT::getComment($commentid);
2691 $manager->notify('PrepareCommentForEdit', array('comment' => &$comment));
2696 echo intRequestVar('commentid');
2699 if ( !array_key_exists('member', $comment) || empty($comment['member']) )
2701 echo $comment['user'] . " (" . _EDITC_NONMEMBER . ")";
2705 echo $comment['member'] . " (" . _EDITC_MEMBER . ")";
2709 echo date("Y-m-d @ H:i", $comment['timestamp']);
2712 $comment['body'] = str_replace('<br />', '', $comment['body']);
2713 $comment['body'] = preg_replace("#<a href=['\"]([^'\"]+)['\"]( rel=\"nofollow\")?>[^<]*</a>#", "\\1", $comment['body']);
2714 echo $comment['body'];
2717 echo $comment['userid'];
2720 echo $comment['userid'];
2723 echo $comment[$type];
2730 * AdminActions::parse_editdesturl()
2731 * Parse skinvar editdesturl
2733 public function parse_editdesturl()
2735 if ( requestVar('desturl') )
2737 echo Entity::hsc(requestVar('desturl'));
2743 * AdminActions::parse_editmemberlist()
2744 * Parse skinvar editmemberlist
2746 * @param string $templateName name of template
2749 public function parse_editmemberlist($templateName = '')
2752 // show list of members with actions
2753 $query = 'SELECT * FROM '.sql_table('member');
2754 $template['content'] = 'memberlist';
2755 $template['tabindex'] = 10;
2757 $batch = new Batch('member');
2758 $batch->showList($query, 'table', $template, $templateName, _LISTS_NOMORE);
2763 * AdminActions::parse_editmember()
2764 * Parse skinvar editmember
2766 * @param string $type type of information for member
2767 * @return string $tempateName name of template to use
2770 public function parse_editmember($type = 'id', $templateName = '')
2772 global $CONF, $manager, $member;
2774 $memberid = intRequestVar('memberid');
2775 $mem = MEMBER::createFromID($memberid);
2780 echo intRequestVar('memberid');
2783 if ( $this->skintype == 'teamdelete' || $this->skintype == 'memberdelete' )
2785 echo Entity::hsc($mem->getDisplayName());
2789 $dispName = Entity::hsc($mem->getDisplayName());
2790 if ( $CONF['AllowLoginEdit'] || $member->isAdmin() )
2792 echo '<input name="name" tabindex="10" maxlength="32" size="32" value="' . $dispName . "\" />\n";
2801 echo Entity::hsc($mem->getRealName());
2804 echo Entity::hsc($mem->getEmail());
2807 echo Entity::hsc($mem->getURL());
2810 $this->parse_inputyesno('admin', $mem->isAdmin(), 60, 1, 0, _YES, _NO, 0, $templateName);
2813 $this->parse_inputyesno('canlogin', $mem->canLogin(), 70, 1, 0, _YES, _NO, $mem->isAdmin(), $templateName);
2816 echo Entity::hsc($mem->getNotes());
2819 $this->parse_inputyesno('autosave', $mem->getAutosave(), 87, 1, 0, _YES, _NO, 0, $templateName);
2828 * AdminActions::parse_editpluginfo()
2829 * Parse skinvar editpluginfo
2831 * @param string $type type of plugin info
2834 public function parse_editpluginfo($type)
2836 $pid = intRequestVar('plugid');
2843 echo Entity::hsc(getPluginNameFromPid($pid));
2850 * AdminActions::parse_editplugoptionslist()
2851 * Parse skinvar editplugoptionslist
2853 * @param string $templateName name of template
2856 public function parse_editplugoptionslist($templateName = '')
2860 $pid = intRequestVar('plugid');
2861 $aOptions = array();
2864 $query = "SELECT * FROM %s WHERE ocontext='global' AND opid=%d ORDER BY oid ASC;";
2865 $query = sprintf($query, sql_table('plugin_option_desc'), (integer) $pid);
2866 $resource = DB::getResult($query);
2868 foreach ( $resource as $row )
2870 array_push($aOIDs, $row['oid']);
2871 $aOptions[$row['oid']] = array(
2872 'oid' => $row['oid'],
2873 'value' => $row['odef'],
2874 'name' => $row['oname'],
2875 'description' => $row['odesc'],
2876 'type' => $row['otype'],
2877 'typeinfo' => $row['oextra'],
2882 // fill out actual values
2883 if ( count($aOIDs) > 0 )
2885 $query = 'SELECT oid, ovalue FROM %s WHERE oid in (%s)';
2886 $query = sprintf($query, sql_table('plugin_option'), implode(',', $aOIDs));
2888 $result = DB::getResult($query);
2890 foreach ( $result as $row )
2892 $aOptions[$row['oid']]['value'] = $row['ovalue'];
2898 'context' => 'global',
2900 'options' => &$aOptions
2902 $manager->notify('PrePluginOptionsEdit', $data);
2904 $template['content'] = 'plugoptionlist';
2906 $amount = Showlist($aOptions, 'table', $template, $templateName);
2910 echo '<p>' . _ERROR_NOPLUGOPTIONS . "</p>\n";
2916 * AdminActions::parse_editskin()
2917 * Parse skinvar editskin
2919 * @param string $type type of skin
2922 public function parse_editskin($type = 'id')
2924 $skinid = intRequestVar('skinid');
2925 $skin = new SKIN($skinid);
2929 echo intRequestVar('skinid');
2932 echo Entity::hsc($skin->getName());
2935 echo Entity::hsc($skin->getDescription());
2938 echo Entity::hsc($skin->getContentType());
2941 echo Entity::hsc($skin->getIncludePrefix());
2944 $this->parse_inputyesno('inc_mode', $skin->getIncludeMode(), 120, 'skindir', 'normal', _PARSER_INCMODE_SKINDIR, _PARSER_INCMODE_NORMAL);
2952 * AdminActions::parse_editskintype()
2953 * Parse skinvar editskintype
2955 * @param string $type name of type for skin type
2958 public function parse_editskintype($type = 'id')
2960 global $CONF, $manager, $member;
2961 $skinid = intRequestVar('skinid');
2962 $skin = new SKIN($skinid);
2963 $fNames = $skin->getAvailableTypes();
2964 $sType = strtolower(trim(requestVar('type')));
2969 echo intRequestVar('skinid');
2972 echo Entity::hsc($skin->getName());
2975 echo Entity::hsc($skin->getDescription());
2978 echo Entity::hsc($skin->getContentType());
2981 echo Entity::hsc($skin->getContentFromDB($sType));
2984 $skinType = !array_key_exists($sType, $fNames) ? ucfirst($sType) : $fNames[$sType];
2985 echo Entity::hsc($skinType);
2988 echo Entity::hsc($sType);
2991 echo Entity::hsc($skin->getIncludePrefix());
2994 $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;
2995 echo Entity::hsc($incMode);
3004 * AdminActions::parse_adminurl()
3005 * Parse skinvar adminurl
3006 * (shortcut for admin url)
3011 public function parse_adminurl()
3013 $this->parse_sitevar('adminurl');
3018 * AdminActions::parse_edittemplateinfo()
3019 * Parse skinvar edittemplateinfo
3021 * @param string $type name of type for skin
3022 * @param string $description description for skin
3023 * @param string $name name of skin
3024 * @param string $help
3025 * @param string $tabindex index value for tabindex attribute of input element
3026 * @param string $big
3027 * @param string $tplt name of template
3030 public function parse_edittemplateinfo($type, $desc = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')
3034 $t_id = intRequestVar('templateid');
3035 $t_name = Template::getNameFromId($t_id);
3036 $t_desc = Template::getDesc($t_id);
3037 $template = &Template::read($t_name);
3045 echo Entity::hsc($t_name);
3048 echo Entity::hsc($t_desc);
3050 case 'extratemplate':
3052 $pluginfields = array();
3053 $manager->notify('TemplateExtraFields', array('fields' => &$pluginfields));
3058 $tmplt = Template::read($desc);
3060 if ( !array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) || empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )
3064 . '<th colspan="2"><%explugtplname%>' . "</th>\n";
3068 $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];
3071 foreach ( $pluginfields as $pfkey => $pfvalue )
3073 $data = array('explugtplname' => Entity::hsc($pfkey));
3075 echo Template::fill($base, $data);
3077 foreach ( $pfvalue as $pffield => $pfdesc )
3079 $this->templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);
3084 $desc = defined($desc) ? constant($desc) : $desc;
3085 $name = defined($name) ? constant($name) : $name;
3086 $this->templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);
3094 * AdminActions::parse_editadmintemplateinfo()
3095 * Parse skinvar editadmintemplateinfo
3097 * @param string $type type of skin template
3098 * @param string $description description of template
3099 * @param string $name name of stemplate
3100 * @param string $tabindex index number for tabindex attribute of input element
3101 * @param string $big
3102 * @param string $tplt
3104 public function parse_editadmintemplateinfo($type, $desc = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')
3108 $t_id = intRequestVar('templateid');
3109 $t_name = Template::getNameFromId($t_id);
3110 $t_desc = Template::getDesc($t_id);
3111 $template = &Template::read($t_name);
3119 echo Entity::hsc($t_name);
3122 echo Entity::hsc($t_desc);
3124 case 'extratemplate':
3126 $pluginfields = array();
3127 $manager->notify('AdminTemplateExtraFields', array('fields' => &$pluginfields));
3132 $tmplt = Template::read($desc);
3134 if ( !array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) || empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )
3138 . '<th colspan="2"><%explugtplname%>' . "</th>\n";
3142 $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];
3145 foreach ( $pluginfields as $pfkey => $pfvalue )
3147 $data = array('explugtplname' => Entity::hsc($pfkey));
3149 echo Template::fill($base, $data);
3151 foreach ( $pfvalue as $pffield => $pfdesc )
3153 $this->templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);
3158 $desc = defined($desc) ? constant($desc) : $desc;
3159 $name = defined($name) ? constant($name) : $name;
3160 $this->templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);
3167 * AdminActions::parse_eventformextra()
3168 * Parse skinvar eventformextra
3170 * @param string $type name of type for event form extra
3173 public function parse_eventformextra($type = 'activation')
3182 $key = requestVar('ackey');
3185 Admin::error(_ERROR_ACTIVATE);
3187 $info = MEMBER::getActivationInfo($key);
3190 Admin::error(_ERROR_ACTIVATE);
3192 $mem = MEMBER::createFromId($info->vmember);
3195 Admin::error(_ERROR_ACTIVATE);
3198 'type' => 'activation',
3202 case 'membermailform-notloggedin':
3203 $data = array('type' => 'membermailform-notloggedin',);
3206 $manager->notify('FormExtra', $data);
3211 * AdminActions::parse_extrahead()
3212 * Parse skinvar extrahead
3214 public function parse_extrahead()
3218 $extrahead = Admin::getAdminextrahead();
3221 'extrahead' => &$extrahead,
3222 'action' => Admin::getAdminAction()
3225 $manager->notify('AdminPrePageHead', $data);
3231 * AdminActions::parse_member()
3232 * Parse skinvar member
3233 * (includes a member info thingie)
3235 * @param string $what which memberdata is needed
3238 public function parse_member($what)
3240 global $memberinfo, $member, $CONF;
3242 // 1. only allow the member-details-page specific variables on member pages
3243 if ( $this->skintype == 'member' )
3248 echo Entity::hsc($memberinfo->getDisplayName());
3251 echo Entity::hsc($memberinfo->getRealName());
3254 echo Entity::hsc($memberinfo->getNotes());
3257 echo Entity::hsc($memberinfo->getURL());
3260 echo Entity::hsc($memberinfo->getEmail());
3263 echo Entity::hsc($memberinfo->getID());
3268 // 2. the next bunch of options is available everywhere, as long as the user is logged in
3269 if ( $member->isLoggedIn() )
3274 echo $member->getDisplayName();
3276 case 'yourrealname':
3277 echo $member->getRealName();
3280 echo $member->getNotes();
3283 echo $member->getURL();
3286 echo $member->getEmail();
3289 echo $member->getID();
3291 case 'yourprofileurl':
3292 if ( $CONF['URLMode'] == 'pathinfo' )
3294 echo Link::create_member_link($member->getID());
3298 echo $CONF['IndexURL'] . Link::create_member_link($member->getID());
3307 * AdminActions::parse_version()
3308 * Parse skinvar version
3309 * (include nucleus versionnumber)
3314 public function parse_version()
3317 echo 'Nucleus CMS ' . $nucleus['version'];
3322 * AdminActions::parse_sitevar()
3323 * Parse skinvar sitevar
3324 * (include a sitevar)
3326 * @param string $which
3329 public function parse_sitevar($which)
3335 echo $CONF['IndexURL'];
3338 echo $CONF['SiteName'];
3341 echo $CONF['AdminEmail'];
3344 echo $CONF['AdminURL'];
3350 * AdminActions::parse_charset()
3351 * Parse skinvar charset
3356 public function parse_charset()
3358 echo i18n::get_current_charset();
3363 * AdminActions::parse_getblogsetting()
3364 * Parse skinvar getblogsetting
3366 public function parse_getblogsetting($which)
3368 global $blog, $manager;
3374 elseif ( $bid = intRequestVar('blogid') )
3376 $b = $manager->getBlog($bid);
3386 return Entity::hsc($b->getID());
3389 return Entity::hsc($b->getURL());
3392 return Entity::hsc($b->getName());
3395 return Entity::hsc($b->getDescription());
3398 return Entity::hsc($b->getShortName());
3400 case 'notifyaddress':
3401 return Entity::hsc($b->getNotifyAddress());
3404 return Entity::hsc($b->getMaxComments());
3407 return Entity::hsc($b->getUpdateFile());
3410 return Entity::hsc($b->getTimeOffset());
3417 * AdminActions::parse_geteditpluginfo()
3418 * Parse skinvar geteditpluginfo
3420 * @param string $type name of setting for edit plugin info
3423 public function parse_geteditpluginfo($type)
3425 $pid = intRequestVar('plugid');
3432 return Entity::hsc(getPluginNameFromPid($pid));
3439 * AdminActions::parse_getmember()
3440 * Parse skinvar getmember
3441 * (includes a member info thingie)
3443 * @param string $what name of setting for member
3446 public function parse_getmember($what)
3448 global $memberinfo, $member;
3449 // 1. only allow the member-details-page specific variables on member pages
3450 if ( $this->skintype == 'member' )
3455 return Entity::hsc($memberinfo->getDisplayName());
3458 return Entity::hsc($memberinfo->getRealName());
3461 return Entity::hsc($memberinfo->getNotes());
3464 return Entity::hsc($memberinfo->getURL());
3467 return Entity::hsc($memberinfo->getEmail());
3470 return Entity::hsc($memberinfo->getID());
3474 // 2. the next bunch of options is available everywhere, as long as the user is logged in
3475 if ( $member->isLoggedIn() )
3480 return $member->getDisplayName();
3482 case 'yourrealname':
3483 return $member->getRealName();
3486 return $member->getNotes();
3489 return $member->getURL();
3492 return $member->getEmail();
3495 return $member->getID();
3503 * AdminActions::parse_headmessage()
3504 * Parse skinvar headmessage
3509 public function parse_headmessage()
3511 if ( !empty(Admin::$headMess) )
3513 echo '<p>' . _MESSAGE . ': ' . Entity::hsc(Admin::$headMess) . "</p>\n";
3519 * AdminActions::parse_helplink()
3520 * Parse skinvar helplink
3522 * @param string $topic name of topic for help
3525 public function parse_helplink($topic = '')
3527 if ( !empty($topic) )
3535 * AdminActions::parse_helpplugname()
3536 * Parse skinvar helpplugname
3541 public function parse_helpplugname()
3543 $plugid = intGetVar('plugid');
3544 Entity::hsc(getPluginNameFromPid($plugid));
3549 * AdminActions::parse_ilistaddnew()
3550 * Parse skinvar ilistaddnew
3555 public function parse_ilistaddnew()
3557 $blogid = intRequestVar('blogid');
3558 if ( intPostVar('start') == 0 )
3560 echo '<p><a href="index.php?action=createitem&blogid=' . $blogid . '">' . _ITEMLIST_ADDNEW . "</a></p>\n";
3566 * AdminActions::parse_importskininfo()
3567 * Parse skinvar importskininfo
3569 * @param string $type name of information for imported skin
3572 public function parse_importskininfo($type)
3577 echo Entity::hsc(requestVar('skininfo'));
3580 $dataArr = requestArray('skinnames');
3581 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3584 $dataArr = requestArray('tpltnames');
3585 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3588 $dataArr = requestArray('skinclashes');
3589 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3592 $dataArr = requestArray('tpltclashes');
3593 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3596 echo Entity::hsc(requestVar('skinfile'));
3599 echo Entity::hsc(requestVar('mode'));
3606 * AdminActions::parse_inputyesno()
3607 * Parse skinvar inputyesno
3609 * some init stuff for all forms
3614 public function parse_init()
3619 if ( requestVar('action') == 'itemedit' )
3621 $itemid = intRequestVar('itemid');
3622 $item =& $manager->getItem($itemid, 1, 1);
3624 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
3625 if ( $item && $blog->convertBreaks() )
3627 $item['body'] = removeBreaks($item['body']);
3628 $item['more'] = removeBreaks($item['more']);
3631 $authorid = $contents['authorid'];
3633 elseif ( requestVar('action') == 'createitem' )
3635 $blogid = intRequestVar('blogid');
3636 $blog =& $manager->getBlog($blogid);
3639 $blog->insertJavaScriptInfo($authorid);
3644 * AdminActions::parse_inputyesno()
3645 * Parse skinvar inputyesno
3647 * @param string $name
3648 * @param string $checkedval
3649 * @param string $tabindex
3650 * @param string $value1
3651 * @param string $value2
3652 * @param string $yesval
3653 * @param string $noval
3654 * @param string $isAdmin
3655 * @param string $templateName
3658 public function parse_inputyesno($name, $checkedval, $tabindex = 0, $value1 = 1, $value2 = 0, $yesval = _YES, $noval = _NO, $isAdmin = 0, $templateName = '')
3660 self::input_yesno($name, $checkedval, $tabindex, $value1, $value2, $yesval, $noval, $isAdmin, $templateName );
3665 * AdminActions::parse_insertpluginfo()
3666 * Parse templatevar insertpluginfo
3668 public function parse_insertpluginfo($type)
3670 $option = Admin::getAdminaOption();
3674 return $option['pid'];
3677 return Entity::hsc($option['pfile']);
3684 * AdminActions::parse_insertpluginoptions()
3685 * Parse skinvar insertpluginoptions
3687 * @param string $templateName name of template
3690 public function parse_insertpluginoptions($templateName = '')
3692 $options = Admin::getAdminaOption();
3693 $template = array();
3694 $templats = array();
3696 if ( $templateName )
3698 $templates = Template::read($templateName);
3701 if ( !array_key_exists('INSERT_PLUGOPTION_TITLE', $templates) || empty($templates['INSERT_PLUGOPTION_TITLE']) )
3703 $template['title'] = "<tr>"
3704 . "<th colspan=\"2\"><%sprinttext(_PLUGIN_OPTIONS_TITLE, <|%insertpluginfo(name)%|>)%></th>"
3709 $template['title'] = $templates['INSERT_PLUGOPTION_TITLE'];
3712 if ( !array_key_exists('INSERT_PLUGOPTION_BODY', $templates) || empty($templates['INSERT_PLUGOPTION_BODY']) )
3714 $template['body'] = "<tr>"
3715 . "<%listplugplugoptionrow%>"
3720 $template['body'] = $templates['INSERT_PLUGOPTION_BODY'];
3725 include_libs('ACTIONS.php');
3726 $handler = new Actions($this->skintype);
3727 $parser = new PARSER($handler);
3729 foreach ( $options as $option )
3733 if ( $prevPid != $option['pid'] )
3735 $prevPid = $option['pid'];
3736 $parser->parse($template['title']);
3739 $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);
3741 if ( @$meta['access'] != 'hidden' )
3743 $parsed = $parser->parse($template['body']);
3750 * AdminActions::parse_insplugoptcontent()
3751 * Parse skinvar insplugoptcontent
3756 public function parse_insplugoptcontent()
3758 $option = Admin::getAdminaOption();
3760 $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);
3761 if ( array_key_exists('access', $meta) && $meta['access'] != 'hidden' )
3764 listplug_plugOptionRow($option);
3771 * AdminActions::parse_iprangeinput()
3772 * Parse skinvar iprangeinput
3777 public function parse_iprangeinput()
3779 if ( requestVar('ip') )
3781 $iprangeVal = Entity::hsc(requestVar('ip'));
3782 echo "<input name=\"iprange\" type=\"radio\" value=\"{$iprangeVal}\" checked=\"checked\" id=\"ip_fixed\" />\n";
3783 echo "<label for=\"ip_fixed\">{$iprangeVal}</label><br />\n";
3784 echo '<input name="iprange" type="radio" value="custom" id="ip_custom" />' . "\n";
3785 echo '<label for="ip_custom">' . _BAN_IP_CUSTOM . '</label>' . "\n";
3786 echo "<input name=\"customiprange\" value=\"{$iprangeVal}\" maxlength=\"15\" size=\"15\" />\n";
3790 echo '<input name="iprange" value="custom" type="hidden" />' . "\n";
3791 echo '<input name="customiprange" value="" maxlength="15" size="15" />' . "\n";
3797 * AdminActions::parse_itemnavlist()
3798 * Parse skinvar itemnavlist
3803 public function parse_itemnavlist($templateName)
3805 global $CONF, $manager, $member;
3807 $query = "SELECT bshortname, cname, mname, ititle, ibody, inumber, idraft, itime"
3808 . " FROM %s, %s, %s, %s"
3809 . " WHERE iblog=bnumber AND iauthor=mnumber AND icat=catid";
3811 $query = sprintf($query, sql_table('item'), sql_table('blog'), sql_table('member'), sql_table('category'));
3813 if ( $this->skintype == 'itemlist' )
3816 if ( array_key_exists('blogid', $_REQUEST) )
3818 $blogid = intRequestVar('blogid');
3820 else if ( array_key_exists('itemid', $_REQUEST) )
3822 $itemid = intRequestVar('itemid');
3823 $item = &$manager->getItem($itemid, 1, 1);
3824 $blogid = (integer) $item['blogid'];
3826 $blog =& $manager->getBlog($blogid);
3828 $query .= " AND iblog={$blogid}";
3829 $template['now'] = $blog->getCorrectTime(time());
3831 // non-blog-admins can only edit/delete their own items
3832 if ( !$member->blogAdminRights($blogid) )
3834 $query .= ' AND iauthor = ' . $member->getID();
3837 elseif ( $this->skintype == 'browseownitems' )
3839 $query .= ' AND iauthor = ' . $member->getID();
3841 $template['now'] = time();
3844 // search through items
3845 $search = postVar('search');
3847 if ( !empty($search) )
3849 $query .= ' AND ((ititle LIKE ' . DB::quoteValue('%'.$search.'%') . ') '
3850 . ' OR (ibody LIKE ' . DB::quoteValue('%'.$search.'%') . ') '
3851 . ' OR (imore LIKE ' . DB::quoteValue('%'.$search.'%') . '))';
3854 if ( postVar('start') )
3856 $start = intPostVar('start');
3863 // amount of items to show
3864 if ( postVar('amount') )
3866 $amount = intPostVar('amount');
3870 $amount = (integer) $CONF['DefaultListSize'];
3877 $query .= ' ORDER BY itime DESC'
3878 . " LIMIT {$start},{$amount}";
3880 $template['content'] = 'itemlist';
3882 $navList = new Navlist($this->skintype, $start, $amount, 0, 1000, $blogid, $search, 0);
3883 $navList->showBatchList('item', $query, 'table', $template, '', $templateName);
3888 * AdminActions::parse_itemtime()
3889 * date change on edit item
3891 * @param string $key key of PHP's getDate()
3894 public function parse_itemtime($key)
3899 $itemid = intRequestVar('itemid');
3900 $item =& $manager->getItem($itemid, 1, 1);
3902 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
3904 if ( $item && $blog->convertBreaks() && requestVar('action') == 'itemedit' )
3906 $item['body'] = removeBreaks($item['body']);
3907 $item['more'] = removeBreaks($item['more']);
3910 $contents = array();
3911 if ( requestVar('action') == 'itemedit' )
3915 elseif ( requestVar('action') == 'createitem' )
3918 'contents' => &$contents,
3919 'blog' => &$this->blog
3921 $manager->notify('PreAddItemForm', $data);
3923 $itemtime = getdate($contents['timestamp']);
3924 echo $itemtime[$key];
3929 * AdminActions::parse_jstoolbaroptions()
3930 * Parse skinvar jstoolbaroptions
3935 public function parse_jstoolbaroptions()
3939 _SETTINGS_JSTOOLBAR_NONE,
3940 _SETTINGS_JSTOOLBAR_SIMPLE,
3941 _SETTINGS_JSTOOLBAR_FULL
3945 foreach ( $options as $option )
3947 $text = "<option value=\"%d\"%s>%s</option>\n";
3948 $extra = ($CONF['DisableJsTools'] == $i) ? ' selected="selected"' : '';
3949 echo sprintf($text, $i, $extra, $option);
3955 * AdminActions::parse_localeselectoptions()
3956 * Parse skinvar localeselectoptions
3961 public function parse_localeselectoptions()
3963 $locales = i18n::get_available_locale_list();
3965 $memid = intRequestVar('memberid');
3968 $mem = MEMBER::createFromID($memid);
3969 if ( !$mem->getLocale() || !in_array($mem->getLocale(), $locales) )
3971 echo "<option value=\"\" selected=\"selected\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";
3975 echo "<option value=\"\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";
3980 if ( !i18n::get_current_locale() || !in_array(i18n::get_current_locale(), $locales) )
3982 echo "<option value=\"\" selected=\"selected\">en_Latn_US</option>\n";
3986 echo "<option value=\"\">en_Latn_US</option>\n";
3989 foreach ( $locales as $locale )
3991 if ( $locale == 'en_Latn_US' )
3997 if ( $locale == $mem->getLocale() )
3999 echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";
4003 echo "<option value=\"{$locale}\">{$locale}</option>\n";
4008 if ( $locale == i18n::get_current_locale() )
4010 echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";
4014 echo "<option value=\"{$locale}\">{$locale}</option>\n";
4022 * AdminActions::parse_listplugplugoptionrow()
4023 * Parse templatevar listplugplugoptionrow
4025 * @param string $templateName name of template
4028 public function parse_listplugplugoptionrow($templateName = '')
4030 echo listplug_plugOptionRow(Admin::getAdminaOption(), $templateName);
4035 * AdminActions::parse_mediadirwarning()
4036 * Parse skinvar mediadirwarning
4041 public function parse_mediadirwarning()
4044 if ( !is_dir($DIR_MEDIA) )
4046 echo "<br /><b>" . _WARNING_NOTADIR . "</b>\n";
4048 if ( !is_readable($DIR_MEDIA) )
4050 echo "<br /><b>" . _WARNING_NOTREADABLE . "</b>\n";
4052 if ( !is_writeable($DIR_MEDIA) )
4054 echo "<br /><b>" . _WARNING_NOTWRITABLE . "</b>\n";
4060 * AdminActions::parse_movedistselect()
4061 * Parse skinvar movedistselect
4063 public function parse_movedistselect()
4065 $actionType = requestVar('action');
4066 switch ( $actionType )
4069 Admin::selectBlogCategory('destcatid');
4071 case 'batchcategory':
4072 Admin::selectBlog('destblogid');
4075 if ( $this->skintype == 'itemmove' )
4077 $query = "SELECT icat as result FROM %s WHERE inumber=%d;";
4078 $query = sprintf($query, sql_table('item'), intRequestVar('itemid'));
4079 $catid = DB::getValue(sprintf($query, intRequestVar('itemid')));
4080 Admin::selectBlogCategory('catid', $catid, 10, 1);
4088 * AdminActions::parse_moveitemid()
4089 * Parse skinvar moveitemid
4094 public function parse_moveitemid()
4096 echo intRequestVar('itemid');
4101 * AdminActions::parse_newestcompare()
4102 * Parse skinvar newestcompare
4107 public function parse_newestcompare()
4111 $newestVersion = getLatestVersion();
4112 $newestCompare = str_replace('/', '.', $newestVersion);
4113 $currentVersion = str_replace(array('/', 'v'), array('.', ''), $nucleus['version']);
4115 if ( $newestVersion && version_compare($newestCompare, $currentVersion, '>') )
4117 echo '<br /><a style="color:red" href="http://nucleuscms.org/upgrade.php" title="' . _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE . '">';
4118 echo _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT . $newestVersion . '</a>';
4124 * AdminActions::parse_newmemberselect()
4125 * Parse skinvar newmemberselect
4127 * @param string $templateName name of template to use
4130 public function parse_newmemberselect($templateName = '')
4132 $blogid = intRequestVar('blogid');
4134 $query = "SELECT tmember FROM %s WHERE tblog=%d;";
4135 $query = sprintf($query, sql_table('team'), (integer) $blogid);
4136 $res = DB::getResult($query);
4139 foreach ( $res as $row )
4141 $tmem[] = intval($row['tmember']);
4144 $query = "SELECT mname as text, mnumber as value FROM %s WHERE mnumber NOT IN (%s);";
4145 $query = sprintf($query, sql_table('member'), implode(', ', $tmem));
4148 'name' => 'memberid',
4149 'tabindex' => 10000,
4152 Showlist($query, 'select', $template, $templateName);
4157 * AdminActions::parse_newpluginlist()
4158 * Parse skinvar newpluginlist
4163 public function parse_newpluginlist()
4165 $candidates = $this->newPlugCandidates;
4166 foreach ( $candidates as $name )
4168 echo '<option value="NP_' . $name . '">' . Entity::hsc($name) . "</option>\n";
4174 * AdminActions::parse_outputspecialdirs()
4175 * Parse skinvar outputspecialdirs
4177 * @param string $type type of setting for directory
4180 public function parse_outputspecialdirs($type)
4182 global $DIR_MEDIA, $DIR_NUCLEUS;
4187 echo Entity::hsc($DIR_NUCLEUS);
4190 echo Entity::hsc($DIR_MEDIA);
4197 * AdminActions::parse_passrequestvars()
4198 * Parse skinvar passrequestvars
4203 public function parse_passrequestvars()
4205 $passvar = Admin::getAdminpassvar();
4206 $oldaction = postVar('oldaction');
4208 if ( ($oldaction != 'logout')
4209 && ($oldaction != 'login')
4211 && !postVar('customaction') )
4219 * AdminActions::parse_pluginextras()
4220 * Parse skinvar pluginextras
4222 * @param string $type type of plugin context
4225 public function parse_pluginextras($type = 'global')
4231 $id = intRequestVar('memberid');
4232 $mem = MEMBER::createFromID($id);
4233 $manager->notify('MemberSettingsFormExtras', array('member' => &$mem));
4236 $id = intRequestVar('blogid');
4237 $blg = $manager->getBlog($id);
4238 $manager->notify('BlogSettingsFormExtras', array('member' => &$blg));
4242 'GeneralSettingsFormExtras',
4252 * AdminActions::parse_pluginhelp()
4253 * Parse skinvar pluginhelp
4258 public function parse_pluginhelp()
4260 global $manager, $DIR_PLUGINS;
4262 $plugid = intGetVar('plugid');
4263 $plugName = getPluginNameFromPid($plugid);
4264 $plug =& $manager->getPlugin($plugName);
4266 if ( $plug->supportsFeature('HelpPage') > 0 )
4268 $helpfile = $DIR_PLUGINS . $plug->getShortName() . '/help.';
4269 if ( @file_exists($helpfile . 'php') )
4271 @include($helpfile . 'php');
4274 elseif ( @file_exists($helpfile . 'html') )
4276 @include($helpfile . 'html');
4280 echo '<p>' . _ERROR . ': ' . _ERROR_PLUGNOHELPFILE . "</p>\n";
4281 echo '<p><a href="index.php?action=pluginlist">(' . _BACK . ")</a></p>\n";
4286 * AdminActions::parse_pluginlistlist()
4287 * Parse skinvar pluginlistlist
4289 * @param string $templateName name of template to use
4292 public function parse_pluginlistlist($templateName = '')
4294 $query = "SELECT * FROM %s ORDER BY porder ASC;";
4295 $query = sprintf($query, sql_table('plugin'));
4297 $template['content'] = 'pluginlist';
4298 $template['tabindex'] = 10;
4300 Showlist($query, 'table', $template, $templateName);
4306 * AdminActions::parse_pluginoptions()
4307 * Parse skinvar pluginoptions
4309 * @param string $type type of plugin option
4312 public function parse_pluginoptions($context='global')
4314 global $itemid, $manager;
4319 $contextid = intRequestVar('memberid');
4322 $contextid = intRequestVar('blogid');
4325 $contextid = intRequestVar('catid');
4328 $contextid = $itemid;
4332 /* Actually registererd plugin options */
4333 $aIdToValue = array();
4334 $query = "SELECT oid, ovalue FROM %s WHERE ocontextid=%d;";
4335 $query = sprintf($query, sql_table('plugin_option'), (integer) $contextid);
4336 $res = DB::getResult($query);
4337 foreach ( $res as $row )
4339 $aIdToValue[$row['oid']] = $row['ovalue'];
4342 /* Currently available plugin options */
4343 $query = "SELECT * FROM %s, %s WHERE opid=pid and ocontext= %s ORDER BY porder, oid ASC;";
4344 $query = sprintf($query, sql_table('plugin_option_desc'), sql_table('plugin'), DB::quoteValue($context));
4345 $res = DB::getResult($query);
4348 foreach ($res as $row )
4350 if ( !array_key_exists($row['oid'], $aIdToValue) )
4352 $value = $row['odef'];
4356 $value = $aIdToValue[$row['oid']];
4360 'pid' => $row['pid'],
4361 'pfile' => $row['pfile'],
4362 'oid' => $row['oid'],
4364 'name' => $row['oname'],
4365 'description' => $row['odesc'],
4366 'type' => $row['otype'],
4367 'typeinfo' => $row['oextra'],
4368 'contextid' => $contextid,
4374 'context' => $context,
4375 'contextid' => $contextid,
4376 'options' => &$opt4ions
4378 $manager->notify('PrePluginOptionsEdit', $data);
4380 $content = $this->parser->skin->getContentFromDB('insertpluginoptions');
4381 $this->parser->parse($content);
4387 * AdminActions::parse_qmenuaddselect()
4388 * Parse skinvar qmanuaddselect
4390 * @param string $templateName name of template to use
4393 public function parse_qmenuaddselect($templateName = '')
4396 $showAll = requestVar('showall');
4397 if ( $member->isAdmin() && ($showAll == 'yes') )
4399 // Super-Admins have access to all blogs! (no add item support though)
4400 $query = 'SELECT bnumber as value, bname as text'
4401 . ' FROM ' . sql_table('blog')
4402 . ' ORDER BY bname';
4406 $query = 'SELECT bnumber as value, bname as text'
4407 . ' FROM ' . sql_table('blog') . ', ' . sql_table('team')
4408 . ' WHERE tblog=bnumber and tmember=' . $member->getID()
4409 . ' ORDER BY bname';
4412 $template['name'] = 'blogid';
4413 $template['tabindex'] = 15000;
4414 $template['extra'] = _QMENU_ADD_SELECT;
4415 $template['selected'] = -1;
4416 $template['shorten'] = 10;
4417 $template['shortenel'] = '';
4418 $template['javascript'] = 'onchange="return form.submit()"';
4420 Showlist($query, 'select', $template, $templateName);
4426 * AdminActions::parse_quickmenu()
4427 * Parse skinvar quickmenu
4429 * @param string $templateName name of template to use
4432 public function parse_quickmenu($templateName = '')
4435 $templates = array();
4436 $template = array();
4437 if ( !empty($templateName) )
4439 $templates = Template::read($templateName);
4441 $pluginExtras = array();
4445 'options' => &$pluginExtras
4448 if ( count($pluginExtras) > 0 )
4450 if ( !array_key_exists('PLUGIN_QUICKMENU_TITLE', $templates) || empty($templates['PLUGIN_QUICKMENU_TITLE']) )
4452 $template['title'] = "<h2><%text(_QMENU_PLUGINS)%></h2>\n";
4456 $template['title'] = $templates['PLUGIN_QUICKMENU_TITLE'];
4458 if ( !array_key_exists('PLUGIN_QUICKMENU_HEAD', $templates) || empty($templates['PLUGIN_QUICKMENU_HEAD']) )
4460 $template['head'] = "<ul>\n";
4464 $template['head'] = $templates['PLUGIN_QUICKMENU_HEAD'];
4466 if ( !array_key_exists('PLUGIN_QUICKMENU_BODY', $templates) && empty($templates['PLUGIN_QUICKMENU_BODY']) )
4468 $template['body'] = "<li><a href=\"<%plugadminurl%>\" title=\"<%plugadmintooltip%>\"><%plugadmintitle%></a></li>\n";
4472 $template['body'] = $templates['PLUGIN_QUICKMENU_BODY'];
4474 if ( !array_key_exists('PLUGIN_QUICKMENU_FOOT', $templates) || empty($templates['PLUGIN_QUICKMENU_FOOT']) )
4476 $template['foot'] = "</ul>\n";
4480 $template['foot'] = $templates['PLUGIN_QUICKMENU_FOOT'];
4483 $handler = new Actions($this->skintype);
4484 $parser = new PARSER($handler);
4486 $parser->parse($template['title']);
4487 echo $template['head'];
4488 foreach ( $pluginExtras as $aInfo )
4491 'plugadminurl' => Entity::hsc($aInfo['url']),
4492 'plugadmintooltip' => Entity::hsc($aInfo['tooltip']),
4493 'plugadmintitle' => Entity::hsc($aInfo['title']),
4495 echo Template::fill($template['body'], $data);
4497 echo $template['foot'];
4503 * AdminActions::parse_requestblogid()
4504 * Parse skinvar requestblogid
4509 public function parse_requestblogid()
4511 echo intRequestVar('blogid');
4516 * AdminActions::parse_requestiprange()
4517 * Parse skinvar requestiprange
4522 public function parse_requestiprange()
4524 if ( requestVar('iprange') )
4526 echo Entity::hsc(requestVar('iprange'));
4528 elseif ( requestVar('ip') )
4530 echo Entity::hsc(requestVar('ip'));
4536 * AdminActions::parse_selectlocaladminskinfiles()
4537 * Parse skinvar selectlocaladminskinfiles
4542 public function parse_selectlocaladminskinfiles()
4544 global $DIR_SKINS, $manager;
4546 $adminskindir = $DIR_SKINS . 'admin/';
4547 $candidates = SkinImport::searchForCandidates($adminskindir);
4549 foreach ( $candidates as $skinname => $skinfile )
4551 $html = Entity::hsc($skinfile);
4552 echo '<option value="' . $html . '">' . $skinname . "</option>\n";
4559 * AdminActions::parse_selectlocalskinfiles()
4560 * Parse skinvar selectlocalskinfiles
4565 public function parse_selectlocalskinfiles()
4569 $candidates = SkinImport::searchForCandidates($DIR_SKINS);
4571 foreach ( $candidates as $skinname => $skinfile )
4573 $html = Entity::hsc($skinfile);
4574 echo '<option value="' . $html . '">' . $skinname . "</option>\n";
4581 * AdminActions::parse_skineditallowedlist()
4582 * Parse skinvar skineditallowedlist
4584 * @param string $type type of skin
4585 * @param string $templateName name of template
4588 public function parse_skineditallowedlist($type, $templateName = '')
4593 $query = "SELECT bshortname, bname FROM %s;";
4595 'content' => 'shortblognames'
4597 $query = sprintf($query, sql_table('blog'));
4598 Showlist($query, 'table', $show, $templateName);
4601 $query = "SELECT tdname as name, tddesc as description FROM %s WHERE tdname NOT LIKE 'admin/%%';";
4603 'content' => 'shortnames'
4605 $query = sprintf($query, sql_table('template_desc'));
4606 Showlist($query, 'table', $show, $templateName);
4613 * AdminActions::parse_skinielist()
4614 * Parse skinvar skinielist
4616 * @param string $type type of skin
4617 * @param string $templateName name of template to use
4620 public function parse_skinielist($type, $templateName = '')
4622 $templates = array();
4623 if ( $templateName )
4625 $templates = Template::read($templateName);
4627 if ( array_key_exists('SKINIE_EXPORT_LIST', $templates) && !empty($templates['SKINIE_EXPORT_LIST']) )
4629 $template = $templates['SKINIE_EXPORT_LIST'];
4634 . "<input type=\"checkbox\" name=\"<%typeid%>\" id=\"<%expid%>\" />\n"
4635 . "<label for=\"<%expid%>\"><%expname%></label>\n"
4637 . "<td><%expdesc%></td>\n"
4644 $res = DB::getResult('SELECT * FROM ' . sql_table('skin_desc'));
4645 foreach ( $res as $row )
4648 'typeid' => 'skin[' . $row['sdnumber'] . ']',
4649 'expid' => 'skinexp' . $row['sdnumber'],
4650 'expname' => Entity::hsc($row['sdname']),
4651 'expdesc' => Entity::hsc($row['sddesc'])
4653 echo Template::fill($template, $data);
4657 $res = DB::getResult('SELECT * FROM '.sql_table('template_desc'). " WHERE tdname NOT LIKE 'admin/%%';");
4658 foreach ( $res as $row )
4661 'typeid' => 'template[' . $row['tdnumber'] . ']',
4662 'expid' => 'templateexp' . $row['tdnumber'],
4663 'expname' => Entity::hsc($row['tdname']),
4664 'expdesc' => Entity::hsc($row['tddesc'])
4666 echo Template::fill($template, $data);
4674 * AdminActions::parse_skinoverview()
4675 * Parse skinvar skinoverview
4677 * @param string $templateName name of template to use
4680 public function parse_skinoverview($templateName = '')
4683 $query = "SELECT * FROM %s WHERE sdname NOT LIKE 'admin/%%';";
4684 $query = sprintf($query, sql_table('skin_desc'));
4686 $template['content'] = 'skinlist';
4687 $template['tabindex'] = 10;
4689 Showlist($query, 'table', $template, $templateName);
4694 * AdminActions::parse_skintypehelp()
4695 * Check editing skintypehelp
4700 public function parse_skintypehelp()
4702 $nowSkinType = strtolower(trim(requestVar('type')));
4704 /* TODO: use Skin class */
4705 $regularType = array(
4716 if ( in_array($nowSkinType, $regularType) )
4718 help('skinpart' . $nowSkinType);
4722 help('skinpartspecial');
4728 * AdminActions::parse_specialskinlist()
4729 * Parse skinvar specialskinlist
4731 * @param string $templateName name of template to use
4734 public function parse_specialskinlist($templateName = '')
4736 $templates = array();
4737 if ( $templateName )
4739 $templates = Template::read($templateName);
4742 /* TODO: use Skin class */
4753 $skinid = intRequestVar('skinid');
4754 $query = "SELECT stype FROM %s WHERE stype NOT IN ('%s') AND sdesc = %d;";
4755 $query = sprintf($query, sql_table('skin'), implode("', '", $nType), $skinid);
4757 $res = DB::getResult($query);
4758 if ( $res && $res->rowCount() > 0 )
4761 if ( array_key_exists('SPECIALSKINLIST_HEAD', $templates) && !empty($templates['SPECIALSKINLIST_HEAD']) )
4763 $template['head'] = $templates['SPECIALSKINLIST_HEAD'];
4767 $template['head'] = "<ul>\n";
4769 echo Template::fill($template['head'], $data);
4770 if ( !array_key_exists('SPECIALSKINLIST_BODY', $templates) || empty($templates['SPECIALSKINLIST_BODY']) )
4772 $template['body'] = '<li><a tabindex="<%tabindex%>" href="index.php?action=skinedittype&skinid=<%skinid%>'
4773 . '&type=<%skintype%>"><%skintype%></a> (<a tabindex="<%tabindex%>" href="index.php?'
4774 . 'action=skinremovetype&skinid=<%skinid%>&type=<%skintype%>">remove</a>)</li>';
4778 $template['body'] = $templates['SPECIALSKINLIST_BODY'];
4782 foreach ( $res as $row )
4785 'tabindex' => $tabstart++,
4786 'skinid' => $skinid,
4787 'skintype' => Entity::hsc(strtolower($row['stype']))
4789 echo Template::fill($template['body'], $data);
4792 if (array_key_exists('SPECIALSKINLIST_FOOT', $templates) && !empty($templates['SPECIALSKINLIST_FOOT']) )
4794 $template['foot'] = $templates['SPECIALSKINLIST_FOOT'];
4798 $template['foot'] = "</ul>\n";
4800 echo Template::fill($template['foot'], $data);
4806 * AdminActions::parse_sprinttext()
4809 * @param string $which
4810 * @param string $val
4813 public function parse_sprinttext($which, $val)
4815 if ( !defined($which) )
4821 $base = constant($which);
4824 if ( preg_match('#[^<|%].*[^%|>]#', $val, $matchies) )
4826 if ( !preg_match('#[(].*[^)]#', $matchies[0], $args) )
4828 $met = 'parse_' . $matchies[0];
4832 $arg = trim($args[0], '()');
4833 $met = 'parse_' . substr($matchies[0], 0, strpos($matchies[0], '('));
4836 if ( method_exists($this, $met) )
4838 $value = call_user_func(array(&$this, $met), $arg);
4842 if ( !isset($value) || empty($value) )
4846 echo sprintf($base, $value);
4851 * AdminActions::parse_systemsettings()
4852 * Parse skinvar systemsettings
4854 * @param string $type type of settings for system
4855 * @param string $templateName name of template to use
4858 public function parse_systemsettings($type = 'phpinfo', $templateName = '')
4860 global $member, $CONF, $nucleus;
4862 $member->isAdmin() or Admin::disallow();
4864 $enable = _ADMIN_SYSTEMOVERVIEW_ENABLE;
4865 $disable = _ADMIN_SYSTEMOVERVIEW_DISABLE;
4872 case 'sqlserverinfo':
4873 echo DB::getAttribute(PDO::ATTR_SERVER_VERSION);
4875 case 'sqlclientinfo':
4876 echo DB::getAttribute(PDO::ATTR_CLIENT_VERSION);
4878 case 'magicquotesgpc':
4879 echo ini_get('magic_quotes_gpc') ? 'On' : 'Off';
4881 case 'magicquotesruntime':
4882 echo ini_get('magic_quotes_runtime') ? 'On' : 'Off';
4884 case 'registerglobals':
4885 echo ini_get('register_globals') ? 'On' : 'Off';
4888 $templates = array();
4889 if ( $templateName )
4891 $templates = Template::read($templateName);
4893 if ( !array_key_exists('SYSTEMINFO_GDSETTINGS', $templates) || empty($templates['SYSTEMINFO_GDSETTINGS']) )
4895 $template = "<tr>\n"
4896 . "<td><%key%></td>\n"
4897 . "<td><%value%></td>\n"
4902 $template = $templates['SYSTEMINFO_GDSETTINGS'];
4905 $gdinfo = gd_info();
4907 foreach ( $gdinfo as $key => $value )
4909 if ( is_bool($value) )
4911 $value = $value ? $enable : $disable;
4915 $value = Entity::hsc($value);
4921 echo Template::fill($template, $data);
4926 phpinfo(INFO_MODULES);
4927 $im = ob_get_contents();
4929 echo ( i18n::strpos($im, 'mod_rewrite') !== FALSE ) ? $enable : $disable;
4931 case 'nucleusversion':
4932 echo getNucleusVersion() / 100 . '(' . $nucleus['version'] . ')';
4934 case 'nucleuspatchlevel':
4935 echo getNucleusPatchLevel();
4941 echo $CONF['ItemURL'];
4943 case 'alertonheaderssent':
4944 echo $CONF['alertOnHeadersSent'] ? $enable : $disable;
4946 case 'nucleuscodename':
4947 if ( $nucleus['codename'] != '' )
4949 echo ' "' . $nucleus['codename'] . '"';
4952 case 'versioncheckurl':
4953 echo sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
4960 * AdminActions::parse_templateoverview()
4961 * Parse skinvar templateoverview
4963 * @param string $templateName name of template to use
4966 public function parse_templateoverview($templateName = '')
4968 $query = "SELECT * FROM %s WHERE tdname NOT LIKE 'admin/%%' ORDER BY tdname";
4969 $query = sprintf($query, sql_table('template_desc'));
4971 $template['content'] = 'templatelist';
4972 $template['tabindex'] = 10;
4974 Showlist($query, 'table', $template, $templateName);
4980 * AdminActions::parse_ticket()
4986 public function parse_ticket()
4989 $manager->addTicketHidden();
4994 * AdminActions::parse_versioncheckurl()
4995 * Parse skinvar versioncheckurl
5000 public function parse_versioncheckurl()
5002 echo sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
5007 * AdminActions::parse_yrbloglist()
5008 * Parse skinvar yrbloglist
5010 * @param string $templateName name of template to use
5013 public function parse_yrbloglist($templateName = '')
5016 $showAll = requestVar('showall');
5018 if ( $member->isAdmin() && ($showAll == 'yes') )
5020 // Super-Admins have access to all blogs! (no add item support though)
5021 $query = "SELECT bnumber, bname, 1 as tadmin, burl, bshortname"
5023 . " ORDER BY bnumber;";
5024 $query = sprintf($query, sql_table('blog'));
5028 $query = "SELECT bnumber, bname, tadmin, burl, bshortname"
5030 . " WHERE tblog=bnumber and tmember=%d"
5031 . " ORDER BY bnumber;";
5032 $query = sprintf($query, sql_table('blog'), sql_table('team'), (integer) $member->getID());
5035 $template['content'] = 'bloglist';
5036 $template['superadmin'] = $member->isAdmin();
5038 $amount = Showlist($query, 'table', $template, $templateName);
5040 if ( ($showAll != 'yes') && ($member->isAdmin()) )
5042 $query = 'SELECT COUNT(*) as result FROM ' . sql_table('blog');
5044 $total = DB::getValue($query);
5045 if ( $total > $amount )
5047 echo '<p><a href="index.php?action=overview&showall=yes">' . _OVERVIEW_SHOWALL . '</a></p>';
5053 echo _OVERVIEW_NOBLOGS;
5055 elseif( $amount != 0 )
5057 echo '<h2>' . _OVERVIEW_YRDRAFTS . '</h2>';
5059 $query = "SELECT ititle, inumber, bshortname"
5061 . ' WHERE iauthor=%d AND iblog=bnumber AND idraft=1;';
5062 $query = sprintf($query, sql_table('item'), sql_table('blog'), (integer) $member->getID());
5064 $template['content'] = 'draftlist';
5066 $amountdrafts = Showlist($query, 'table', $template, $templateName);
5067 if ( $amountdrafts == 0 )
5069 echo _OVERVIEW_NODRAFTS;
5076 * AdminActions::checkCondition()
5077 * Checks conditions for if statements
5079 * @param string $field type of <%if%>
5080 * @param string $name property of field
5081 * @param string $value value of property
5082 * @return boolean condition
5084 protected function checkCondition($field, $name='', $value = '')
5086 global $CONF, $catid, $blog, $member, $itemidnext, $itemidprev, $manager, $archiveprevexists, $archivenextexists;
5097 $blog =& $manager->getBlog($blogid);
5101 $blogid = getBlogIDFromCatID($catid);
5103 $blog =& $manager->getBlog($blogid);
5105 elseif ( intRequestVar('catid') )
5107 $catid = intRequestVar('catid');
5108 $blogid = getBlogIDFromCatID($catid);
5110 $blog =& $manager->getBlog($blogid);
5117 $condition = ($blog && $this->ifCategory($name, $value));
5120 $condition = ($blog && ($blog->getSetting($name) == $value));
5123 $condition = $member->isLoggedIn();
5126 $condition = $member->isLoggedIn() && $this->ifOnTeam($name);
5129 $condition = $member->isLoggedIn() && $this->ifAdmin($name);
5132 $condition = $member->isLoggedIn() && $member->isAdmin();
5134 case 'allowloginedit':
5135 $condition = $member->isLoggedIn() && ($CONF['AllowLoginEdit'] || $member->isAdmin());
5138 $condition = ($itemidnext != '');
5141 $condition = ($itemidprev != '');
5143 case 'archiveprevexists':
5144 $condition = ($archiveprevexists == true);
5146 case 'archivenextexists':
5147 $condition = ($archivenextexists == true);
5150 $condition = (($name == $this->skintype) || ($name == requestVar('action')));
5153 $condition = $this->ifHasPlugin($name, $value);
5156 $condition = (Admin::getAdminAction() == $name);
5158 case 'adminoldaction':
5159 $condition = (Admin::getAdminAction() == $name);
5161 case 'addresschange':
5162 $condition = ($this->ifAddresscange());
5164 case 'bechangepass':
5165 $condition = ($this->beChangePassword());
5167 case 'skincandidates':
5168 $condition = ($this->ifSkincandidates());
5171 $condition = requestVar('nameclashes');
5173 case 'existsnewplugin':
5174 $condition = ($this->existsNewPlugin());
5177 $condition = (boolean) ($member->getAutosave() == $value);
5180 $condition = $manager->pluginInstalled("NP_{$field}") && $this->ifPlugin($field, $name, $value);
5187 * Actions::_ifHasPlugin()
5188 * hasplugin,PlugName
5189 * -> checks if plugin exists
5190 * hasplugin,PlugName,OptionName
5191 * -> checks if the option OptionName from plugin PlugName is not set to 'no'
5192 * hasplugin,PlugName,OptionName=value
5193 * -> checks if the option OptionName from plugin PlugName is set to value
5195 * @param string $name name of plugin
5196 * @param string $value
5199 private function ifHasPlugin($name, $value)
5203 // (pluginInstalled method won't write a message in the actionlog on failure)
5204 if ( $manager->pluginInstalled("NP_{$name}") )
5206 $plugin =& $manager->getPlugin("NP_{$name}");
5207 if ( $plugin != NULL )
5215 list($name2, $value2) = preg_split('#=#', $value, 2);
5216 if ( $value2 == "" && $plugin->getOption($name2) != 'no' )
5220 else if ( $plugin->getOption($name2) == $value2 )
5231 * Actions::beChangePassword()
5236 private function beChangePassword()
5238 return intRequestVar('bNeedsPasswordChange');
5242 * Actions::ifSkincandidates()
5243 * Checks if a plugin exists and call its doIf function
5249 private function ifSkincandidates()
5252 $candidates = SKINIMPORT::searchForCandidates($DIR_SKINS);
5253 return (count($candidates) > 0);
5257 * Actions::ifPlugin()
5258 * Checks if a plugin exists and call its doIf function
5260 * @param string $name name of plugin
5261 * @param string $key
5262 * @param string $value
5265 private function ifPlugin($name, $key = '', $value = '')
5269 $plugin =& $manager->getPlugin("NP_{$name}");
5275 $params = func_get_args();
5276 array_shift($params);
5278 return call_user_func_array(array(&$plugin, 'doIf'), $params);
5282 * AdminActions::ifCategory()
5283 * Different checks for a category
5285 * @param string $key key for information of category
5286 * @param string $value value for information of category
5289 private function ifCategory($key = '', $value='')
5291 global $blog, $catid;
5293 // when no parameter is defined, just check if a category is selected
5294 if (($key != 'catname' && $key != 'catid') || ($value == ''))
5296 return $blog->isValidCategory($catid);
5299 // check category name
5300 if ( $key == 'catname' )
5302 $value = $blog->getCategoryIdFromName($value);
5303 if ($value == $catid)
5305 return $blog->isValidCategory($catid);
5309 // check category id
5310 if (($key == 'catid') && ($value == $catid))
5312 return $blog->isValidCategory($catid);
5319 * AdminActions::ifOnTeam()
5320 * Checks if a member is on the team of a blog and return his rights
5322 * @param string $blogName name of weblog
5325 private function ifOnTeam($blogName = '')
5327 global $blog, $member, $manager;
5329 // when no blog found
5330 if ( ($blogName == '') && !is_object($blog) )
5335 // explicit blog selection
5336 if ($blogName != '')
5338 $blogid = getBlogIDFromName($blogName);
5341 if (($blogName == '') || !$manager->existsBlogID($blogid))
5344 $blogid = $blog->getID();
5346 return $member->teamRights($blogid);
5350 * AdminActions::ifAdmin()
5351 * Checks if a member is admin of a blog
5353 * @param string $blogName name of weblog
5356 private function ifAdmin($blogName = '')
5358 global $blog, $member, $manager;
5360 // when no blog found
5361 if (($blogName == '') && (!is_object($blog)))
5366 // explicit blog selection
5367 if ($blogName != '')
5369 $blogid = getBlogIDFromName($blogName);
5372 if (($blogName == '') || !$manager->existsBlogID($blogid))
5375 $blogid = $blog->getID();
5378 return $member->isBlogAdmin($blogid);
5382 * AdminActions::ifAddresscange()
5383 * Check e-Mail address is changed
5388 private function ifAddresscange()
5390 $key = $this->objAdmin->sessionVar("{$CONF['CookiePrefix']}ackey");
5395 $info = MEMBER::getActivationInfo($key);
5400 $mem = MEMBER::createFromId($info->vmember);
5405 if ( $info->vtype == 'addresschange' )
5413 * AdminActions::templateEditRow()
5416 * @param array $template
5417 * @param string $desc
5418 * @param string $name
5419 * @param string $help
5420 * @param integer $tabindex
5421 * @param boolean $big
5422 * @param array $tmplt
5425 private function templateEditRow(&$template, $desc, $name, $help = '', $tabindex = 0, $big = 0, $tplt = '')
5429 if ( !array_key_exists($name, $template) )
5431 $template[$name] = '';
5439 $tmplt = skinableTEMPLATE::read($tplt);
5443 'description' => $desc,
5444 'help' => empty($help) ? '' : helpHtml('template' . $help),
5447 'tabindex' => $tabindex,
5448 'rows' => $big ? 10 : 5,
5451 if ( !array_key_exists('TEMPLATE_EDIT_ROW_HEAD', $tmplt) || empty($tmplt['TEMPLATE_EDIT_ROW_HEAD']) )
5453 $base['head'] = "</tr>"
5455 . "<td><%description%><%help%></td>\n"
5456 . "<td id=\"td<%count%>\">\n"
5457 . "<textarea class=\"templateedit\" name=\"<%name%>\" tabindex=\"<%tabindex%>\" cols=\"50\" rows=\"<%rows%>\" id=\"textarea<%count%>\">\n";
5461 $base['head'] = $tmplt['TEMPLATE_EDIT_ROW_HEAD'];
5464 if ( !array_key_exists('TEMPLATE_EDIT_ROW_TAIL', $tmplt) || empty($tmplt['TEMPLATE_EDIT_ROW_TAIL']) )
5466 $base['tail'] = "</textarea>\n"
5471 $base['tail'] = $tmplt['TEMPLATE_EDIT_ROW_TAIL'];
5474 echo TEMPLATE::fill($base['head'], $data);
5475 echo ENTITY::hsc($template[$name]);
5476 echo TEMPLATE::fill($base['tail'], $data);
5484 * AdminActions::customHelp()
5485 * shows a link to custom help file
5488 * @param string $tplName
5489 * @param string $url
5490 * @param string $iconURL
5491 * @param string $alt
5492 * @param string $title
5496 private function customHelp($id, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
5498 echo self::customHelpHtml($id, $tplName, $url, $iconURL, $alt, $title, $onclick);
5502 * AdminActions::customHelp()
5503 * shows a link to custom help file
5506 * @param string $tplName
5507 * @param string $url
5508 * @param string $iconURL
5509 * @param string $alt
5510 * @param string $title
5514 static function customHelplink($id, $tplName = '', $url = '', $title = '', $onclick = '')
5518 $templates = array();
5522 $templates = Template::read($tplName);
5525 if ( !array_key_exists('ADMIN_CUSTOMHELPLINK_ANCHOR', $templates) || empty($templates['ADMIN_CUSTOMHELPLINK_ANCHOR']) )
5527 $template = "<a href=\"<%helpurl%>#<%helptarget%>\" title=\"<%title%>\" <%onclick%>>\n";
5531 $template = $templates['ADMIN_CUSTOMHELPLINK_ANCHOR'];
5536 $url = $CONF['AdminURL'] . 'documentation/customHelp.html';
5539 if ( empty($onclick) )
5541 $onclick = 'onclick="if (event && event.preventDefault) event.preventDefault(); return help(this.href);"';
5543 elseif ( preg_match('#^onclick#', $onclick) )
5545 $onclick = $onclick;
5549 $onclick = 'onclick="' . $onclick . '"';
5554 'helptarget' => $id,
5555 'onclick' => $onclick,
5556 'title' => (isset($title) && !empty($title)) ? $title : _HELP_TT,
5558 return Template::fill($template, $data);
5562 * AdminActions::customHelpHtml()
5565 * @param string $tplName
5566 * @param string $url
5567 * @param string $iconURL
5568 * @param string $alt
5569 * @param string $title
5570 * @param string $onclick
5571 * @return string anchor element with help uri
5573 private function customHelpHtml($id, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
5577 $templates = array();
5581 $templates = Template::read($tplName);
5583 if ( !array_key_exists('ADMIN_CUSTOMHELPLINK_ICON', $templates) || !empty($templates['ADMIN_CUSTOMHELPLINK_ICON']) )
5585 $template = "<img src=\"<%iconurl%>\" <%width%><%height%>alt=\"<%alt%>\" title=\"<%title%>\" /></a>\n";
5589 $template = $templates['ADMIN_CUSTOMHELPLINK_ICON'];
5592 if ( empty($iconURL) )
5594 $iconURL = $CONF['AdminURL'] . 'documentation/icon-help.gif';
5597 if ( function_exists('getimagesize') )
5599 $size = getimagesize($iconURL);
5600 $width = 'width="' . $size[0] . '" ';
5601 $height = 'height="' . $size[1] . '" ';
5605 'iconurl' => $iconURL,
5607 'height' => $height,
5608 'alt' => (isset($alt) && !empty($alt)) ? $alt : _HELP_TT,
5609 'title' => (isset($title) && !empty($title)) ? $title : _HELP_TT,
5612 $icon = Template::fill($template, $data);
5613 $help = self::customHelplink($id, $tplName, $url, $title, $onclick);
5615 return $help . $icon;
5619 * AdminActions::input_yesno
5622 * @param $checkedval
5629 * @param $templateName
5632 public function input_yesno($name,
5643 $templates = array();
5644 if ( $templateName )
5646 $templates = Template::read($templateName);
5649 if ( $name == 'admin' )
5651 if ( !array_key_exists('INPUTYESNO_TEMPLATE_ADMIN', $templates) || empty($templates['INPUTYESNO_TEMPLATE_ADMIN']) )
5653 $template = '<input onclick="selectCanLogin(true);" type="radio" name="<%name%>" value="<%yesval%>" <%yescheckedval%> id="<%yesid%>" />' . "\n"
5654 . '<label for="<%yesid%>"><%yesvaltext%></label>' . "\n"
5655 . '<input onclick="selectCanLogin(false);" type="radio" name="<%name%>" value="<%noval%>" <%nocheckedval%> id="<%noid%>"<%disabled%> />' . "\n"
5656 . '<label for="<%noid%>"><%novaltext%></label>' . "\n";
5660 $template = $templates['INPUTYESNO_TEMPLATE_ADMIN'];
5665 if ( array_key_exists('INPUTYESNO_TEMPLATE_NORMAL', $templates) && !empty($templates['INPUTYESNO_TEMPLATE_NORMAL']) )
5667 $template = $templates['INPUTYESNO_TEMPLATE_NORMAL'];
5671 if ( array_key_exists('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO', $templates) && !empty($templates['SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO']) )
5673 $template = $templates['SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO'];
5676 if ( !isset($template) )
5678 $template = '<input type="radio" name="<%name%>" value="<%yesval%>" <%yescheckedval%> id="<%yesid%>" />' . "\n"
5679 . '<label for="<%yesid%>"><%yesvaltext%></label>' . "\n"
5680 . '<input type="radio" name="<%name%>" value="<%noval%>" <%nocheckedval%> id="<%noid%>"<%disabled%> />' . "\n"
5681 . '<label for="<%noid%>"><%novaltext%></label>' . "\n";
5686 $id = Entity::hsc($name);
5687 $id = str_replace('[', '-', $id);
5688 $id = str_replace(']', '-', $id);
5689 $id1 = $id . Entity::hsc($value1);
5690 $id2 = $id . Entity::hsc($value2);
5692 'name' => Entity::hsc($name),
5693 'yesval' => Entity::hsc($value1),
5694 'noval' => Entity::hsc($value2),
5697 'yesvaltext' => $yesval,
5698 'novaltext' => $noval,
5699 'yescheckedval' => ($checkedval == $value1) ? ' checked="checked" tabindex="' . $tabindex . '"': '',
5700 'nocheckedval' => ($checkedval != $value1) ? ' checked="checked" tabindex="' . $tabindex . '"': '',
5701 'disabled' => ($isAdmin && $name == 'canlogin') ? ' disabled="disabled"' : '',
5706 return Template::fill($template, $dat);
5710 echo Template::fill($template, $dat);
5716 * AdminActions::existsNewPlugin()
5717 * Check exists new plugin
5720 * @return boolean exists or not
5722 private function existsNewPlugin()
5724 global $DIR_PLUGINS;
5726 $candidates = array();
5727 $files = scandir($DIR_PLUGINS);
5729 foreach ( $files as $file )
5731 if ( preg_match("#^NP_(.*)\.php$#", $file, $matches) )
5733 $name = $matches[1];
5734 $query = "SELECT * FROM %s WHERE pfile=%s;";
5735 $query = sprintf($query, sql_table('plugin'), DB::quoteValue("{NP_{$name}"));
5736 $res = DB::getResult($query);
5738 if ( $res->rowCount() == 0 )
5740 $candidates[] = $name;
5745 $this->newPlugCandidates = $candidates;
5746 return (count($candidates) > 0);
5750 * AdminActions::pagehead()
5751 * Output admin page head
5756 public function parse_pagehead()
5758 global $member, $nucleus, $CONF, $manager;
5760 $content = $this->parser->skin->getContentFromDB('pagehead');
5763 $extrahead = Admin::$extrahead;
5765 'extrahead' => &$extrahead,
5766 'action' => Admin::$action
5768 $manager->notify('AdminPrePageHead', $data);
5770 $baseUrl = Entity::hsc($CONF['SkinsURL']);
5774 if ( !array_key_exists('AdminCSS', $CONF) )
5776 DB::execute("INSERT INTO " . sql_table('config') . " VALUES ('AdminCSS', 'original')");
5777 $CONF['AdminCSS'] = 'original';
5781 /* HTTP 1.1 application for no caching */
5782 header("Cache-Control: no-cache, must-revalidate");
5783 header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
5785 $root_element = 'html';
5786 $charset = i18n::get_current_charset();
5787 $locale = preg_replace('#_#', '-', i18n::get_current_locale());
5788 $xml_version_info = self::$xml_version_info;
5789 $formal_public_identifier = self::$formal_public_identifier;
5790 $system_identifier = self::$system_identifier;
5791 $xhtml_namespace = self::$xhtml_namespace;
5793 echo "<?xml version=\"{$xml_version_info}\" encoding=\"{$charset}\" ?>\n";
5794 echo "<!DOCTYPE {$root_element} PUBLIC \"{$formal_public_identifier}\" \"{$system_identifier}\">\n";
5795 echo "<{$root_element} xmlns=\"{$xhtml_namespace}\" xml:lang=\"{$locale}\" lang=\"{$locale}\">\n";
5797 echo '<title>' . Entity::hsc($CONF['SiteName']) . " - Admin</title>\n";
5800 echo "<link rel=\"stylesheet\" title=\"Nucleus Admin Default\" type=\"text/css\" href=\"{$baseUrl}admin/defaultadmin/styles/admin_{$CONF["AdminCSS"]}.css\" />\n";
5802 echo "<link rel=\"stylesheet\" title=\"Nucleus Admin Default\" type=\"text/css\" href=\"{$baseUrl}admin/defaultadmin/styles/addedit.css\" />\n";
5803 echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/edit.js\"></script>\n";
5804 echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/admin.js\"></script>\n";
5805 echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/compatibility.js\"></script>\n";
5806 echo "{$extrahead}\n";
5809 echo "<div id=\"adminwrapper\">\n";
5810 echo "<div class=\"header\">\n";
5811 echo '<h1>' . Entity::hsc($CONF['SiteName']) . "</h1>\n";
5813 echo "<div id=\"container\">\n";
5814 echo "<div id=\"content\">\n";
5815 echo "<div class=\"loginname\">\n";
5817 if ( !$member->isLoggedIn() )
5819 echo '<a href="index.php?action=showlogin" title="Log in">' . _NOTLOGGEDIN . "</a><br />\n";
5823 echo _LOGGEDINAS . ' ' . $member->getDisplayName() ." - <a href='index.php?action=logout'>" . _LOGOUT. "</a><br />\n";
5824 echo "<a href='index.php?action=overview'>" . _ADMINHOME . "</a> - ";
5827 echo "<a href='".$CONF['IndexURL']."'>"._YOURSITE."</a><br />\n";
5830 if ( !array_key_exists('codename', $nucleus) || empty($nucleus['codename']) )
5832 $codenamestring = '';
5836 $codenamestring = ' "' . $nucleus['codename'].'"';
5839 if ( $member->isLoggedIn() && $member->isAdmin() )
5841 $checkURL = sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
5842 echo '<a href="' . $checkURL . '" title="' . _ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TITLE . '">Nucleus CMS ' . $nucleus['version'] . $codenamestring . '</a>';
5844 $newestVersion = getLatestVersion();
5845 $newestCompare = str_replace('/', '.', $newestVersion);
5846 $currentVersion = str_replace(array('/','v'), array('.',''), $nucleus['version']);
5848 if ( $newestVersion && version_compare($newestCompare, $currentVersion) > 0 )
5851 echo '<a style="color:red" href="http://nucleuscms.org/upgrade.php" title="' . _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE . '">';
5852 echo _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT . $newestVersion;
5858 echo "Nucleus CMS {$nucleus['version']}{$codenamestring}";
5865 $this->parser->parse($content);
5872 * AdminActionss::pagefoot()
5873 * Output admin page foot include quickmenu
5878 public function parse_pagefoot()
5880 global $action, $member, $manager;
5882 $content = $this->parser->skin->getContentFromDB('pagefoot');
5886 'action' => self::$action
5888 $manager->notify('AdminPrePageFoot', $data);
5890 if ( $member->isLoggedIn() && ($action != 'showlogin') )
5892 echo '<h2>' . _LOGOUT . "</h2>\n";
5894 echo '<li><a href="index.php?action=overview">' . _BACKHOME . "</a></li>\n";
5895 echo '<li><a href="index.php?action=logout">' . _LOGOUT . "</a></li>\n";
5899 echo "<div class=\"foot\">\n";
5900 echo '<a href="' . _ADMINPAGEFOOT_OFFICIALURL . '">Nucleus CMS</a> © 2002-' . date('Y') . ' ' . _ADMINPAGEFOOT_COPYRIGHT;
5902 echo '<a href="' . _ADMINPAGEFOOT_DONATEURL . '">' . _ADMINPAGEFOOT_DONATE . "</a>\n";
5905 echo "<div id=\"quickmenu\">\n";
5907 if ( ($action != 'showlogin') && ($member->isLoggedIn()) )
5910 echo '<li><a href="index.php?action=overview">' . _QMENU_HOME . "</a></li>\n";
5913 echo '<h2>' . _QMENU_ADD . "</h2>\n";
5914 echo "<form method=\"get\" action=\"index.php\">\n";
5916 echo "<input type=\"hidden\" name=\"action\" value=\"createitem\" />\n";
5918 $showAll = requestVar('showall');
5920 if ( ($member->isAdmin()) && ($showAll == 'yes') )
5922 // Super-Admins have access to all blogs! (no add item support though)
5923 $query = "SELECT bnumber as value, bname as text FROM %s ORDER BY bname;";
5924 $query = sprintf($query, sql_table('blog'));
5928 $query = "SELECT bnumber as value, bname as text FROM %s, %s WHERE tblog=bnumber and tmember=%d ORDER BY bname;";
5929 $query = sprintf($query, sql_table('blog'), sql_table('team'), (integer) $member->getID());
5931 $template['name'] = 'blogid';
5932 $template['tabindex'] = 15000;
5933 $template['extra'] = _QMENU_ADD_SELECT;
5934 $template['selected'] = -1;
5935 $template['shorten'] = 10;
5936 $template['shortenel'] = '';
5937 $template['javascript'] = 'onchange="return form.submit()"';
5938 showlist($query, 'select', $template);
5943 echo "<h2>{$member->getDisplayName()}</h2>\n";
5945 echo '<li><a href="index.php?action=editmembersettings">' . _QMENU_USER_SETTINGS . "</a></li>\n";
5946 echo '<li><a href="index.php?action=browseownitems">' . _QMENU_USER_ITEMS . "</a></li>\n";
5947 echo '<li><a href="index.php?action=browseowncomments">' . _QMENU_USER_COMMENTS . "</a></li>\n";
5950 if ( $member->isAdmin() )
5952 echo '<h2>' . _QMENU_MANAGE . "</h2>\n";
5954 echo '<li><a href="index.php?action=actionlog">' . _QMENU_MANAGE_LOG . "</a></li>\n";
5955 echo '<li><a href="index.php?action=settingsedit">' . _QMENU_MANAGE_SETTINGS . "</a></li>\n";
5956 echo '<li><a href="index.php?action=systemoverview">' . _QMENU_MANAGE_SYSTEM . "</a></li>\n";
5957 echo '<li><a href="index.php?action=usermanagement">' . _QMENU_MANAGE_MEMBERS . "</a></li>\n";
5958 echo '<li><a href="index.php?action=createnewlog">' . _QMENU_MANAGE_NEWBLOG . "</a></li>\n";
5959 echo '<li><a href="index.php?action=backupoverview">' . _QMENU_MANAGE_BACKUPS . "</a></li>\n";
5960 echo '<li><a href="index.php?action=pluginlist">' . _QMENU_MANAGE_PLUGINS . "</a></li>\n";
5963 echo "<h2>" . _QMENU_LAYOUT . "</h2>\n";
5965 echo '<li><a href="index.php?action=skinoverview">' . _QMENU_LAYOUT_SKINS . "</a></li>\n";
5966 echo '<li><a href="index.php?action=templateoverview">' . _QMENU_LAYOUT_TEMPL . "</a></li>\n";
5967 echo '<li><a href="index.php?action=skinieoverview">' . _QMENU_LAYOUT_IEXPORT . "</a></li>\n";
5971 $data = array('options' => array());
5973 $manager->notify('QuickMenu', $data);
5975 if ( count($data['options']) > 0 )
5977 echo "<h2>" . _QMENU_PLUGINS . "</h2>\n";
5979 foreach ( $data['options'] as $option )
5981 echo '<li><a href="' . Entity::hsc($option['url']) . '" title="' . Entity::hsc($option['tooltip']) . '">' . Entity::hsc($option['title']) . "</a></li>\n";
5986 else if ( ($action == 'activate') || ($action == 'activatesetpwd') )
5989 echo '<h2>' . _QMENU_ACTIVATE . '</h2>' . _QMENU_ACTIVATE_TEXT;
5993 echo '<h2>' . _QMENU_INTRO . '</h2>' . _QMENU_INTRO_TEXT;
5996 echo "<!-- quickmenu -->\n";
5999 echo "<!-- content -->\n";
6002 echo "<!-- container -->\n";
6005 echo "<!-- adminwrapper -->\n";
6013 $this->parser->skin->parse('pagefoot');