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 'admntemplateoverview' => _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)
2838 $pid = intRequestVar('plugid');
2845 echo Entity::hsc($manager->getPluginNameFromPid($pid));
2852 * AdminActions::parse_editplugoptionslist()
2853 * Parse skinvar editplugoptionslist
2855 * @param string $templateName name of template
2858 public function parse_editplugoptionslist($templateName = '')
2862 $pid = intRequestVar('plugid');
2863 $aOptions = array();
2866 $query = "SELECT * FROM %s WHERE ocontext='global' AND opid=%d ORDER BY oid ASC;";
2867 $query = sprintf($query, sql_table('plugin_option_desc'), (integer) $pid);
2868 $resource = DB::getResult($query);
2870 foreach ( $resource as $row )
2872 array_push($aOIDs, $row['oid']);
2873 $aOptions[$row['oid']] = array(
2874 'oid' => $row['oid'],
2875 'value' => $row['odef'],
2876 'name' => $row['oname'],
2877 'description' => $row['odesc'],
2878 'type' => $row['otype'],
2879 'typeinfo' => $row['oextra'],
2884 // fill out actual values
2885 if ( count($aOIDs) > 0 )
2887 $query = 'SELECT oid, ovalue FROM %s WHERE oid in (%s)';
2888 $query = sprintf($query, sql_table('plugin_option'), implode(',', $aOIDs));
2890 $result = DB::getResult($query);
2892 foreach ( $result as $row )
2894 $aOptions[$row['oid']]['value'] = $row['ovalue'];
2900 'context' => 'global',
2902 'options' => &$aOptions
2904 $manager->notify('PrePluginOptionsEdit', $data);
2906 $template['content'] = 'plugoptionlist';
2908 $amount = Showlist($aOptions, 'table', $template, $templateName);
2912 echo '<p>' . _ERROR_NOPLUGOPTIONS . "</p>\n";
2918 * AdminActions::parse_editskin()
2919 * Parse skinvar editskin
2921 * @param string $type type of skin
2924 public function parse_editskin($type = 'id')
2926 $skinid = intRequestVar('skinid');
2927 $skin = new SKIN($skinid);
2931 echo intRequestVar('skinid');
2934 echo Entity::hsc($skin->getName());
2937 echo Entity::hsc($skin->getDescription());
2940 echo Entity::hsc($skin->getContentType());
2943 echo Entity::hsc($skin->getIncludePrefix());
2946 $this->parse_inputyesno('inc_mode', $skin->getIncludeMode(), 120, 'skindir', 'normal', _PARSER_INCMODE_SKINDIR, _PARSER_INCMODE_NORMAL);
2954 * AdminActions::parse_editskintype()
2955 * Parse skinvar editskintype
2957 * @param string $type name of type for skin type
2960 public function parse_editskintype($type = 'id')
2962 global $CONF, $manager, $member;
2963 $skinid = intRequestVar('skinid');
2964 $skin = new SKIN($skinid);
2965 $fNames = $skin->getAvailableTypes();
2966 $sType = strtolower(trim(requestVar('type')));
2971 echo intRequestVar('skinid');
2974 echo Entity::hsc($skin->getName());
2977 echo Entity::hsc($skin->getDescription());
2980 echo Entity::hsc($skin->getContentType());
2983 echo Entity::hsc($skin->getContentFromDB($sType));
2986 $skinType = !array_key_exists($sType, $fNames) ? ucfirst($sType) : $fNames[$sType];
2987 echo Entity::hsc($skinType);
2990 echo Entity::hsc($sType);
2993 echo Entity::hsc($skin->getIncludePrefix());
2996 $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;
2997 echo Entity::hsc($incMode);
3006 * AdminActions::parse_adminurl()
3007 * Parse skinvar adminurl
3008 * (shortcut for admin url)
3013 public function parse_adminurl()
3015 $this->parse_sitevar('adminurl');
3020 * AdminActions::parse_edittemplateinfo()
3021 * Parse skinvar edittemplateinfo
3023 * @param string $type name of type for skin
3024 * @param string $description description for skin
3025 * @param string $name name of skin
3026 * @param string $help
3027 * @param string $tabindex index value for tabindex attribute of input element
3028 * @param string $big
3029 * @param string $tplt name of template
3032 public function parse_edittemplateinfo($type, $desc = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')
3036 $t_id = intRequestVar('templateid');
3037 $t_name = Template::getNameFromId($t_id);
3038 $t_desc = Template::getDesc($t_id);
3039 $template = &Template::read($t_name);
3047 echo Entity::hsc($t_name);
3050 echo Entity::hsc($t_desc);
3052 case 'extratemplate':
3054 $pluginfields = array();
3055 $manager->notify('TemplateExtraFields', array('fields' => &$pluginfields));
3060 $tmplt = Template::read($desc);
3062 if ( !array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) || empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )
3066 . '<th colspan="2"><%explugtplname%>' . "</th>\n";
3070 $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];
3073 foreach ( $pluginfields as $pfkey => $pfvalue )
3075 $data = array('explugtplname' => Entity::hsc($pfkey));
3077 echo Template::fill($base, $data);
3079 foreach ( $pfvalue as $pffield => $pfdesc )
3081 $this->templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);
3086 $desc = defined($desc) ? constant($desc) : $desc;
3087 $name = defined($name) ? constant($name) : $name;
3088 $this->templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);
3096 * AdminActions::parse_editadmintemplateinfo()
3097 * Parse skinvar editadmintemplateinfo
3099 * @param string $type type of skin template
3100 * @param string $description description of template
3101 * @param string $name name of stemplate
3102 * @param string $tabindex index number for tabindex attribute of input element
3103 * @param string $big
3104 * @param string $tplt
3106 public function parse_editadmintemplateinfo($type, $desc = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')
3110 $t_id = intRequestVar('templateid');
3111 $t_name = Template::getNameFromId($t_id);
3112 $t_desc = Template::getDesc($t_id);
3113 $template = &Template::read($t_name);
3121 echo Entity::hsc($t_name);
3124 echo Entity::hsc($t_desc);
3126 case 'extratemplate':
3128 $pluginfields = array();
3129 $manager->notify('AdminTemplateExtraFields', array('fields' => &$pluginfields));
3134 $tmplt = Template::read($desc);
3136 if ( !array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) || empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )
3140 . '<th colspan="2"><%explugtplname%>' . "</th>\n";
3144 $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];
3147 foreach ( $pluginfields as $pfkey => $pfvalue )
3149 $data = array('explugtplname' => Entity::hsc($pfkey));
3151 echo Template::fill($base, $data);
3153 foreach ( $pfvalue as $pffield => $pfdesc )
3155 $this->templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);
3160 $desc = defined($desc) ? constant($desc) : $desc;
3161 $name = defined($name) ? constant($name) : $name;
3162 $this->templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);
3169 * AdminActions::parse_eventformextra()
3170 * Parse skinvar eventformextra
3172 * @param string $type name of type for event form extra
3175 public function parse_eventformextra($type = 'activation')
3184 $key = requestVar('ackey');
3187 Admin::error(_ERROR_ACTIVATE);
3189 $info = MEMBER::getActivationInfo($key);
3192 Admin::error(_ERROR_ACTIVATE);
3194 $mem = MEMBER::createFromId($info->vmember);
3197 Admin::error(_ERROR_ACTIVATE);
3200 'type' => 'activation',
3204 case 'membermailform-notloggedin':
3205 $data = array('type' => 'membermailform-notloggedin',);
3208 $manager->notify('FormExtra', $data);
3213 * AdminActions::parse_extrahead()
3214 * Parse skinvar extrahead
3216 public function parse_extrahead()
3220 $extrahead = Admin::getAdminextrahead();
3223 'extrahead' => &$extrahead,
3224 'action' => Admin::getAdminAction()
3227 $manager->notify('AdminPrePageHead', $data);
3233 * AdminActions::parse_member()
3234 * Parse skinvar member
3235 * (includes a member info thingie)
3237 * @param string $what which memberdata is needed
3240 public function parse_member($what)
3242 global $memberinfo, $member, $CONF;
3244 // 1. only allow the member-details-page specific variables on member pages
3245 if ( $this->skintype == 'member' )
3250 echo Entity::hsc($memberinfo->getDisplayName());
3253 echo Entity::hsc($memberinfo->getRealName());
3256 echo Entity::hsc($memberinfo->getNotes());
3259 echo Entity::hsc($memberinfo->getURL());
3262 echo Entity::hsc($memberinfo->getEmail());
3265 echo Entity::hsc($memberinfo->getID());
3270 // 2. the next bunch of options is available everywhere, as long as the user is logged in
3271 if ( $member->isLoggedIn() )
3276 echo $member->getDisplayName();
3278 case 'yourrealname':
3279 echo $member->getRealName();
3282 echo $member->getNotes();
3285 echo $member->getURL();
3288 echo $member->getEmail();
3291 echo $member->getID();
3293 case 'yourprofileurl':
3294 if ( $CONF['URLMode'] == 'pathinfo' )
3296 echo Link::create_member_link($member->getID());
3300 echo $CONF['IndexURL'] . Link::create_member_link($member->getID());
3309 * AdminActions::parse_version()
3310 * Parse skinvar version
3311 * (include nucleus versionnumber)
3316 public function parse_version()
3319 echo 'Nucleus CMS ' . $nucleus['version'];
3324 * AdminActions::parse_sitevar()
3325 * Parse skinvar sitevar
3326 * (include a sitevar)
3328 * @param string $which
3331 public function parse_sitevar($which)
3337 echo $CONF['IndexURL'];
3340 echo $CONF['SiteName'];
3343 echo $CONF['AdminEmail'];
3346 echo $CONF['AdminURL'];
3352 * AdminActions::parse_charset()
3353 * Parse skinvar charset
3358 public function parse_charset()
3360 echo i18n::get_current_charset();
3365 * AdminActions::parse_getblogsetting()
3366 * Parse skinvar getblogsetting
3368 public function parse_getblogsetting($which)
3370 global $blog, $manager;
3376 elseif ( $bid = intRequestVar('blogid') )
3378 $b = $manager->getBlog($bid);
3388 return Entity::hsc($b->getID());
3391 return Entity::hsc($b->getURL());
3394 return Entity::hsc($b->getName());
3397 return Entity::hsc($b->getDescription());
3400 return Entity::hsc($b->getShortName());
3402 case 'notifyaddress':
3403 return Entity::hsc($b->getNotifyAddress());
3406 return Entity::hsc($b->getMaxComments());
3409 return Entity::hsc($b->getUpdateFile());
3412 return Entity::hsc($b->getTimeOffset());
3419 * AdminActions::parse_geteditpluginfo()
3420 * Parse skinvar geteditpluginfo
3422 * @param string $type name of setting for edit plugin info
3425 public function parse_geteditpluginfo($type)
3427 $pid = intRequestVar('plugid');
3434 return Entity::hsc($manager->getPluginNameFromPid($pid));
3441 * AdminActions::parse_getmember()
3442 * Parse skinvar getmember
3443 * (includes a member info thingie)
3445 * @param string $what name of setting for member
3448 public function parse_getmember($what)
3450 global $memberinfo, $member;
3451 // 1. only allow the member-details-page specific variables on member pages
3452 if ( $this->skintype == 'member' )
3457 return Entity::hsc($memberinfo->getDisplayName());
3460 return Entity::hsc($memberinfo->getRealName());
3463 return Entity::hsc($memberinfo->getNotes());
3466 return Entity::hsc($memberinfo->getURL());
3469 return Entity::hsc($memberinfo->getEmail());
3472 return Entity::hsc($memberinfo->getID());
3476 // 2. the next bunch of options is available everywhere, as long as the user is logged in
3477 if ( $member->isLoggedIn() )
3482 return $member->getDisplayName();
3484 case 'yourrealname':
3485 return $member->getRealName();
3488 return $member->getNotes();
3491 return $member->getURL();
3494 return $member->getEmail();
3497 return $member->getID();
3505 * AdminActions::parse_headmessage()
3506 * Parse skinvar headmessage
3511 public function parse_headmessage()
3513 if ( !empty(Admin::$headMess) )
3515 echo '<p>' . _MESSAGE . ': ' . Entity::hsc(Admin::$headMess) . "</p>\n";
3521 * AdminActions::parse_helplink()
3522 * Parse skinvar helplink
3524 * @param string $topic name of topic for help
3527 public function parse_helplink($topic = '')
3529 if ( !empty($topic) )
3537 * AdminActions::parse_helpplugname()
3538 * Parse skinvar helpplugname
3543 public function parse_helpplugname()
3545 $plugid = intGetVar('plugid');
3546 Entity::hsc($manager->getPluginNameFromPid($plugid));
3551 * AdminActions::parse_ilistaddnew()
3552 * Parse skinvar ilistaddnew
3557 public function parse_ilistaddnew()
3559 $blogid = intRequestVar('blogid');
3560 if ( intPostVar('start') == 0 )
3562 echo '<p><a href="index.php?action=createitem&blogid=' . $blogid . '">' . _ITEMLIST_ADDNEW . "</a></p>\n";
3568 * AdminActions::parse_importskininfo()
3569 * Parse skinvar importskininfo
3571 * @param string $type name of information for imported skin
3574 public function parse_importskininfo($type)
3579 echo Entity::hsc(requestVar('skininfo'));
3582 $dataArr = requestArray('skinnames');
3583 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3586 $dataArr = requestArray('tpltnames');
3587 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3590 $dataArr = requestArray('skinclashes');
3591 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3594 $dataArr = requestArray('tpltclashes');
3595 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3598 echo Entity::hsc(requestVar('skinfile'));
3601 echo Entity::hsc(requestVar('mode'));
3608 * AdminActions::parse_inputyesno()
3609 * Parse skinvar inputyesno
3611 * some init stuff for all forms
3616 public function parse_init()
3621 if ( requestVar('action') == 'itemedit' )
3623 $itemid = intRequestVar('itemid');
3624 $item =& $manager->getItem($itemid, 1, 1);
3626 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
3627 if ( $item && $blog->convertBreaks() )
3629 $item['body'] = removeBreaks($item['body']);
3630 $item['more'] = removeBreaks($item['more']);
3633 $authorid = $contents['authorid'];
3635 elseif ( requestVar('action') == 'createitem' )
3637 $blogid = intRequestVar('blogid');
3638 $blog =& $manager->getBlog($blogid);
3641 $blog->insertJavaScriptInfo($authorid);
3646 * AdminActions::parse_inputyesno()
3647 * Parse skinvar inputyesno
3649 * @param string $name
3650 * @param string $checkedval
3651 * @param string $tabindex
3652 * @param string $value1
3653 * @param string $value2
3654 * @param string $yesval
3655 * @param string $noval
3656 * @param string $isAdmin
3657 * @param string $templateName
3660 public function parse_inputyesno($name, $checkedval, $tabindex = 0, $value1 = 1, $value2 = 0, $yesval = _YES, $noval = _NO, $isAdmin = 0, $templateName = '')
3662 self::input_yesno($name, $checkedval, $tabindex, $value1, $value2, $yesval, $noval, $isAdmin, $templateName );
3667 * AdminActions::parse_insertpluginfo()
3668 * Parse templatevar insertpluginfo
3670 public function parse_insertpluginfo($type)
3672 $option = Admin::getAdminaOption();
3676 return $option['pid'];
3679 return Entity::hsc($option['pfile']);
3686 * AdminActions::parse_insertpluginoptions()
3687 * Parse skinvar insertpluginoptions
3689 * @param string $templateName name of template
3692 public function parse_insertpluginoptions($templateName = '')
3694 $options = Admin::getAdminaOption();
3695 $template = array();
3696 $templats = array();
3698 if ( $templateName )
3700 $templates = Template::read($templateName);
3703 if ( !array_key_exists('INSERT_PLUGOPTION_TITLE', $templates) || empty($templates['INSERT_PLUGOPTION_TITLE']) )
3705 $template['title'] = "<tr>"
3706 . "<th colspan=\"2\"><%sprinttext(_PLUGIN_OPTIONS_TITLE, <|%insertpluginfo(name)%|>)%></th>"
3711 $template['title'] = $templates['INSERT_PLUGOPTION_TITLE'];
3714 if ( !array_key_exists('INSERT_PLUGOPTION_BODY', $templates) || empty($templates['INSERT_PLUGOPTION_BODY']) )
3716 $template['body'] = "<tr>"
3717 . "<%listplugplugoptionrow%>"
3722 $template['body'] = $templates['INSERT_PLUGOPTION_BODY'];
3727 include_libs('ACTIONS.php');
3728 $handler = new Actions($this->skintype);
3729 $parser = new PARSER($handler);
3731 foreach ( $options as $option )
3735 if ( $prevPid != $option['pid'] )
3737 $prevPid = $option['pid'];
3738 $parser->parse($template['title']);
3741 $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);
3743 if ( @$meta['access'] != 'hidden' )
3745 $parsed = $parser->parse($template['body']);
3752 * AdminActions::parse_insplugoptcontent()
3753 * Parse skinvar insplugoptcontent
3758 public function parse_insplugoptcontent()
3760 $option = Admin::getAdminaOption();
3762 $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);
3763 if ( array_key_exists('access', $meta) && $meta['access'] != 'hidden' )
3766 listplug_plugOptionRow($option);
3773 * AdminActions::parse_iprangeinput()
3774 * Parse skinvar iprangeinput
3779 public function parse_iprangeinput()
3781 if ( requestVar('ip') )
3783 $iprangeVal = Entity::hsc(requestVar('ip'));
3784 echo "<input name=\"iprange\" type=\"radio\" value=\"{$iprangeVal}\" checked=\"checked\" id=\"ip_fixed\" />\n";
3785 echo "<label for=\"ip_fixed\">{$iprangeVal}</label><br />\n";
3786 echo '<input name="iprange" type="radio" value="custom" id="ip_custom" />' . "\n";
3787 echo '<label for="ip_custom">' . _BAN_IP_CUSTOM . '</label>' . "\n";
3788 echo "<input name=\"customiprange\" value=\"{$iprangeVal}\" maxlength=\"15\" size=\"15\" />\n";
3792 echo '<input name="iprange" value="custom" type="hidden" />' . "\n";
3793 echo '<input name="customiprange" value="" maxlength="15" size="15" />' . "\n";
3799 * AdminActions::parse_itemnavlist()
3800 * Parse skinvar itemnavlist
3805 public function parse_itemnavlist($templateName)
3807 global $CONF, $manager, $member;
3809 $query = "SELECT bshortname, cname, mname, ititle, ibody, inumber, idraft, itime"
3810 . " FROM %s, %s, %s, %s"
3811 . " WHERE iblog=bnumber AND iauthor=mnumber AND icat=catid";
3813 $query = sprintf($query, sql_table('item'), sql_table('blog'), sql_table('member'), sql_table('category'));
3815 if ( $this->skintype == 'itemlist' )
3818 if ( array_key_exists('blogid', $_REQUEST) )
3820 $blogid = intRequestVar('blogid');
3822 else if ( array_key_exists('itemid', $_REQUEST) )
3824 $itemid = intRequestVar('itemid');
3825 $item = &$manager->getItem($itemid, 1, 1);
3826 $blogid = (integer) $item['blogid'];
3828 $blog =& $manager->getBlog($blogid);
3830 $query .= " AND iblog={$blogid}";
3831 $template['now'] = $blog->getCorrectTime(time());
3833 // non-blog-admins can only edit/delete their own items
3834 if ( !$member->blogAdminRights($blogid) )
3836 $query .= ' AND iauthor = ' . $member->getID();
3839 elseif ( $this->skintype == 'browseownitems' )
3841 $query .= ' AND iauthor = ' . $member->getID();
3843 $template['now'] = time();
3846 // search through items
3847 $search = postVar('search');
3849 if ( !empty($search) )
3851 $query .= ' AND ((ititle LIKE ' . DB::quoteValue('%'.$search.'%') . ') '
3852 . ' OR (ibody LIKE ' . DB::quoteValue('%'.$search.'%') . ') '
3853 . ' OR (imore LIKE ' . DB::quoteValue('%'.$search.'%') . '))';
3856 if ( postVar('start') )
3858 $start = intPostVar('start');
3865 // amount of items to show
3866 if ( postVar('amount') )
3868 $amount = intPostVar('amount');
3872 $amount = (integer) $CONF['DefaultListSize'];
3879 $query .= ' ORDER BY itime DESC'
3880 . " LIMIT {$start},{$amount}";
3882 $template['content'] = 'itemlist';
3884 $navList = new Navlist($this->skintype, $start, $amount, 0, 1000, $blogid, $search, 0);
3885 $navList->showBatchList('item', $query, 'table', $template, '', $templateName);
3890 * AdminActions::parse_itemtime()
3891 * date change on edit item
3893 * @param string $key key of PHP's getDate()
3896 public function parse_itemtime($key)
3901 $itemid = intRequestVar('itemid');
3902 $item =& $manager->getItem($itemid, 1, 1);
3904 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
3906 if ( $item && $blog->convertBreaks() && requestVar('action') == 'itemedit' )
3908 $item['body'] = removeBreaks($item['body']);
3909 $item['more'] = removeBreaks($item['more']);
3912 $contents = array();
3913 if ( requestVar('action') == 'itemedit' )
3917 elseif ( requestVar('action') == 'createitem' )
3920 'contents' => &$contents,
3921 'blog' => &$this->blog
3923 $manager->notify('PreAddItemForm', $data);
3925 $itemtime = getdate($contents['timestamp']);
3926 echo $itemtime[$key];
3931 * AdminActions::parse_jstoolbaroptions()
3932 * Parse skinvar jstoolbaroptions
3937 public function parse_jstoolbaroptions()
3941 _SETTINGS_JSTOOLBAR_NONE,
3942 _SETTINGS_JSTOOLBAR_SIMPLE,
3943 _SETTINGS_JSTOOLBAR_FULL
3947 foreach ( $options as $option )
3949 $text = "<option value=\"%d\"%s>%s</option>\n";
3950 $extra = ($CONF['DisableJsTools'] == $i) ? ' selected="selected"' : '';
3951 echo sprintf($text, $i, $extra, $option);
3957 * AdminActions::parse_localeselectoptions()
3958 * Parse skinvar localeselectoptions
3963 public function parse_localeselectoptions()
3965 $locales = i18n::get_available_locale_list();
3967 $memid = intRequestVar('memberid');
3970 $mem = MEMBER::createFromID($memid);
3971 if ( !$mem->getLocale() || !in_array($mem->getLocale(), $locales) )
3973 echo "<option value=\"\" selected=\"selected\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";
3977 echo "<option value=\"\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";
3982 if ( !i18n::get_current_locale() || !in_array(i18n::get_current_locale(), $locales) )
3984 echo "<option value=\"\" selected=\"selected\">en_Latn_US</option>\n";
3988 echo "<option value=\"\">en_Latn_US</option>\n";
3991 foreach ( $locales as $locale )
3993 if ( $locale == 'en_Latn_US' )
3999 if ( $locale == $mem->getLocale() )
4001 echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";
4005 echo "<option value=\"{$locale}\">{$locale}</option>\n";
4010 if ( $locale == i18n::get_current_locale() )
4012 echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";
4016 echo "<option value=\"{$locale}\">{$locale}</option>\n";
4024 * AdminActions::parse_listplugplugoptionrow()
4025 * Parse templatevar listplugplugoptionrow
4027 * @param string $templateName name of template
4030 public function parse_listplugplugoptionrow($templateName = '')
4032 echo listplug_plugOptionRow(Admin::getAdminaOption(), $templateName);
4037 * AdminActions::parse_mediadirwarning()
4038 * Parse skinvar mediadirwarning
4043 public function parse_mediadirwarning()
4046 if ( !is_dir($DIR_MEDIA) )
4048 echo "<br /><b>" . _WARNING_NOTADIR . "</b>\n";
4050 if ( !is_readable($DIR_MEDIA) )
4052 echo "<br /><b>" . _WARNING_NOTREADABLE . "</b>\n";
4054 if ( !is_writeable($DIR_MEDIA) )
4056 echo "<br /><b>" . _WARNING_NOTWRITABLE . "</b>\n";
4062 * AdminActions::parse_movedistselect()
4063 * Parse skinvar movedistselect
4065 public function parse_movedistselect()
4067 $actionType = requestVar('action');
4068 switch ( $actionType )
4071 Admin::selectBlogCategory('destcatid');
4073 case 'batchcategory':
4074 Admin::selectBlog('destblogid');
4077 if ( $this->skintype == 'itemmove' )
4079 $query = "SELECT icat as result FROM %s WHERE inumber=%d;";
4080 $query = sprintf($query, sql_table('item'), intRequestVar('itemid'));
4081 $catid = DB::getValue(sprintf($query, intRequestVar('itemid')));
4082 Admin::selectBlogCategory('catid', $catid, 10, 1);
4090 * AdminActions::parse_moveitemid()
4091 * Parse skinvar moveitemid
4096 public function parse_moveitemid()
4098 echo intRequestVar('itemid');
4103 * AdminActions::parse_newestcompare()
4104 * Parse skinvar newestcompare
4109 public function parse_newestcompare()
4113 $newestVersion = getLatestVersion();
4114 $newestCompare = str_replace('/', '.', $newestVersion);
4115 $currentVersion = str_replace(array('/', 'v'), array('.', ''), $nucleus['version']);
4117 if ( $newestVersion && version_compare($newestCompare, $currentVersion, '>') )
4119 echo '<br /><a style="color:red" href="http://nucleuscms.org/upgrade.php" title="' . _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE . '">';
4120 echo _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT . $newestVersion . '</a>';
4126 * AdminActions::parse_newmemberselect()
4127 * Parse skinvar newmemberselect
4129 * @param string $templateName name of template to use
4132 public function parse_newmemberselect($templateName = '')
4134 $blogid = intRequestVar('blogid');
4136 $query = "SELECT tmember FROM %s WHERE tblog=%d;";
4137 $query = sprintf($query, sql_table('team'), (integer) $blogid);
4138 $res = DB::getResult($query);
4141 foreach ( $res as $row )
4143 $tmem[] = intval($row['tmember']);
4146 $query = "SELECT mname as text, mnumber as value FROM %s WHERE mnumber NOT IN (%s);";
4147 $query = sprintf($query, sql_table('member'), implode(', ', $tmem));
4150 'name' => 'memberid',
4151 'tabindex' => 10000,
4154 Showlist($query, 'select', $template, $templateName);
4159 * AdminActions::parse_newpluginlist()
4160 * Parse skinvar newpluginlist
4165 public function parse_newpluginlist()
4167 $candidates = $this->newPlugCandidates;
4168 foreach ( $candidates as $name )
4170 echo '<option value="NP_' . $name . '">' . Entity::hsc($name) . "</option>\n";
4176 * AdminActions::parse_outputspecialdirs()
4177 * Parse skinvar outputspecialdirs
4179 * @param string $type type of setting for directory
4182 public function parse_outputspecialdirs($type)
4184 global $DIR_MEDIA, $DIR_NUCLEUS;
4189 echo Entity::hsc($DIR_NUCLEUS);
4192 echo Entity::hsc($DIR_MEDIA);
4199 * AdminActions::parse_passrequestvars()
4200 * Parse skinvar passrequestvars
4205 public function parse_passrequestvars()
4207 $passvar = Admin::getAdminpassvar();
4208 $oldaction = postVar('oldaction');
4210 if ( ($oldaction != 'logout')
4211 && ($oldaction != 'login')
4213 && !postVar('customaction') )
4221 * AdminActions::parse_pluginextras()
4222 * Parse skinvar pluginextras
4224 * @param string $type type of plugin context
4227 public function parse_pluginextras($type = 'global')
4233 $id = intRequestVar('memberid');
4234 $mem = MEMBER::createFromID($id);
4235 $manager->notify('MemberSettingsFormExtras', array('member' => &$mem));
4238 $id = intRequestVar('blogid');
4239 $blg = $manager->getBlog($id);
4240 $manager->notify('BlogSettingsFormExtras', array('member' => &$blg));
4244 'GeneralSettingsFormExtras',
4254 * AdminActions::parse_pluginhelp()
4255 * Parse skinvar pluginhelp
4260 public function parse_pluginhelp()
4262 global $manager, $DIR_PLUGINS;
4264 $plugid = intGetVar('plugid');
4265 $plugName = $manager->getPluginNameFromPid($plugid);
4266 $plug =& $manager->getPlugin($plugName);
4268 if ( $plug->supportsFeature('HelpPage') > 0 )
4270 $helpfile = $DIR_PLUGINS . $plug->getShortName() . '/help.';
4271 if ( @file_exists($helpfile . 'php') )
4273 @include($helpfile . 'php');
4276 elseif ( @file_exists($helpfile . 'html') )
4278 @include($helpfile . 'html');
4282 echo '<p>' . _ERROR . ': ' . _ERROR_PLUGNOHELPFILE . "</p>\n";
4283 echo '<p><a href="index.php?action=pluginlist">(' . _BACK . ")</a></p>\n";
4288 * AdminActions::parse_pluginlistlist()
4289 * Parse skinvar pluginlistlist
4291 * @param string $templateName name of template to use
4294 public function parse_pluginlistlist($templateName = '')
4296 $query = "SELECT * FROM %s ORDER BY porder ASC;";
4297 $query = sprintf($query, sql_table('plugin'));
4299 $template['content'] = 'pluginlist';
4300 $template['tabindex'] = 10;
4302 Showlist($query, 'table', $template, $templateName);
4308 * AdminActions::parse_pluginoptions()
4309 * Parse skinvar pluginoptions
4311 * @param string $type type of plugin option
4314 public function parse_pluginoptions($context='global')
4316 global $itemid, $manager;
4321 $contextid = intRequestVar('memberid');
4324 $contextid = intRequestVar('blogid');
4327 $contextid = intRequestVar('catid');
4330 $contextid = $itemid;
4334 /* Actually registererd plugin options */
4335 $aIdToValue = array();
4336 $query = "SELECT oid, ovalue FROM %s WHERE ocontextid=%d;";
4337 $query = sprintf($query, sql_table('plugin_option'), (integer) $contextid);
4338 $res = DB::getResult($query);
4339 foreach ( $res as $row )
4341 $aIdToValue[$row['oid']] = $row['ovalue'];
4344 /* Currently available plugin options */
4345 $query = "SELECT * FROM %s, %s WHERE opid=pid and ocontext= %s ORDER BY porder, oid ASC;";
4346 $query = sprintf($query, sql_table('plugin_option_desc'), sql_table('plugin'), DB::quoteValue($context));
4347 $res = DB::getResult($query);
4350 foreach ($res as $row )
4352 if ( !array_key_exists($row['oid'], $aIdToValue) )
4354 $value = $row['odef'];
4358 $value = $aIdToValue[$row['oid']];
4362 'pid' => $row['pid'],
4363 'pfile' => $row['pfile'],
4364 'oid' => $row['oid'],
4366 'name' => $row['oname'],
4367 'description' => $row['odesc'],
4368 'type' => $row['otype'],
4369 'typeinfo' => $row['oextra'],
4370 'contextid' => $contextid,
4376 'context' => $context,
4377 'contextid' => $contextid,
4378 'options' => &$opt4ions
4380 $manager->notify('PrePluginOptionsEdit', $data);
4382 $content = $this->parser->skin->getContentFromDB('insertpluginoptions');
4383 $this->parser->parse($content);
4389 * AdminActions::parse_qmenuaddselect()
4390 * Parse skinvar qmanuaddselect
4392 * @param string $templateName name of template to use
4395 public function parse_qmenuaddselect($templateName = '')
4398 $showAll = requestVar('showall');
4399 if ( $member->isAdmin() && ($showAll == 'yes') )
4401 // Super-Admins have access to all blogs! (no add item support though)
4402 $query = 'SELECT bnumber as value, bname as text'
4403 . ' FROM ' . sql_table('blog')
4404 . ' ORDER BY bname';
4408 $query = 'SELECT bnumber as value, bname as text'
4409 . ' FROM ' . sql_table('blog') . ', ' . sql_table('team')
4410 . ' WHERE tblog=bnumber and tmember=' . $member->getID()
4411 . ' ORDER BY bname';
4414 $template['name'] = 'blogid';
4415 $template['tabindex'] = 15000;
4416 $template['extra'] = _QMENU_ADD_SELECT;
4417 $template['selected'] = -1;
4418 $template['shorten'] = 10;
4419 $template['shortenel'] = '';
4420 $template['javascript'] = 'onchange="return form.submit()"';
4422 Showlist($query, 'select', $template, $templateName);
4428 * AdminActions::parse_quickmenu()
4429 * Parse skinvar quickmenu
4431 * @param string $templateName name of template to use
4434 public function parse_quickmenu($templateName = '')
4437 $templates = array();
4438 $template = array();
4439 if ( !empty($templateName) )
4441 $templates = Template::read($templateName);
4443 $pluginExtras = array();
4447 'options' => &$pluginExtras
4450 if ( count($pluginExtras) > 0 )
4452 if ( !array_key_exists('PLUGIN_QUICKMENU_TITLE', $templates) || empty($templates['PLUGIN_QUICKMENU_TITLE']) )
4454 $template['title'] = "<h2><%text(_QMENU_PLUGINS)%></h2>\n";
4458 $template['title'] = $templates['PLUGIN_QUICKMENU_TITLE'];
4460 if ( !array_key_exists('PLUGIN_QUICKMENU_HEAD', $templates) || empty($templates['PLUGIN_QUICKMENU_HEAD']) )
4462 $template['head'] = "<ul>\n";
4466 $template['head'] = $templates['PLUGIN_QUICKMENU_HEAD'];
4468 if ( !array_key_exists('PLUGIN_QUICKMENU_BODY', $templates) && empty($templates['PLUGIN_QUICKMENU_BODY']) )
4470 $template['body'] = "<li><a href=\"<%plugadminurl%>\" title=\"<%plugadmintooltip%>\"><%plugadmintitle%></a></li>\n";
4474 $template['body'] = $templates['PLUGIN_QUICKMENU_BODY'];
4476 if ( !array_key_exists('PLUGIN_QUICKMENU_FOOT', $templates) || empty($templates['PLUGIN_QUICKMENU_FOOT']) )
4478 $template['foot'] = "</ul>\n";
4482 $template['foot'] = $templates['PLUGIN_QUICKMENU_FOOT'];
4485 $handler = new Actions($this->skintype);
4486 $parser = new PARSER($handler);
4488 $parser->parse($template['title']);
4489 echo $template['head'];
4490 foreach ( $pluginExtras as $aInfo )
4493 'plugadminurl' => Entity::hsc($aInfo['url']),
4494 'plugadmintooltip' => Entity::hsc($aInfo['tooltip']),
4495 'plugadmintitle' => Entity::hsc($aInfo['title']),
4497 echo Template::fill($template['body'], $data);
4499 echo $template['foot'];
4505 * AdminActions::parse_requestblogid()
4506 * Parse skinvar requestblogid
4511 public function parse_requestblogid()
4513 echo intRequestVar('blogid');
4518 * AdminActions::parse_requestiprange()
4519 * Parse skinvar requestiprange
4524 public function parse_requestiprange()
4526 if ( requestVar('iprange') )
4528 echo Entity::hsc(requestVar('iprange'));
4530 elseif ( requestVar('ip') )
4532 echo Entity::hsc(requestVar('ip'));
4538 * AdminActions::parse_selectlocaladminskinfiles()
4539 * Parse skinvar selectlocaladminskinfiles
4544 public function parse_selectlocaladminskinfiles()
4546 global $DIR_SKINS, $manager;
4548 $adminskindir = $DIR_SKINS . 'admin/';
4549 $candidates = SkinImport::searchForCandidates($adminskindir);
4551 foreach ( $candidates as $skinname => $skinfile )
4553 $html = Entity::hsc($skinfile);
4554 echo '<option value="' . $html . '">' . $skinname . "</option>\n";
4561 * AdminActions::parse_selectlocalskinfiles()
4562 * Parse skinvar selectlocalskinfiles
4567 public function parse_selectlocalskinfiles()
4571 $candidates = SkinImport::searchForCandidates($DIR_SKINS);
4573 foreach ( $candidates as $skinname => $skinfile )
4575 $html = Entity::hsc($skinfile);
4576 echo '<option value="' . $html . '">' . $skinname . "</option>\n";
4583 * AdminActions::parse_skineditallowedlist()
4584 * Parse skinvar skineditallowedlist
4586 * @param string $type type of skin
4587 * @param string $templateName name of template
4590 public function parse_skineditallowedlist($type, $templateName = '')
4595 $query = "SELECT bshortname, bname FROM %s;";
4597 'content' => 'shortblognames'
4599 $query = sprintf($query, sql_table('blog'));
4600 Showlist($query, 'table', $show, $templateName);
4603 $query = "SELECT tdname as name, tddesc as description FROM %s WHERE tdname NOT LIKE 'admin/%%';";
4605 'content' => 'shortnames'
4607 $query = sprintf($query, sql_table('template_desc'));
4608 Showlist($query, 'table', $show, $templateName);
4615 * AdminActions::parse_skinielist()
4616 * Parse skinvar skinielist
4618 * @param string $type type of skin
4619 * @param string $templateName name of template to use
4622 public function parse_skinielist($type, $templateName = '')
4624 $templates = array();
4625 if ( $templateName )
4627 $templates = Template::read($templateName);
4629 if ( array_key_exists('SKINIE_EXPORT_LIST', $templates) && !empty($templates['SKINIE_EXPORT_LIST']) )
4631 $template = $templates['SKINIE_EXPORT_LIST'];
4636 . "<input type=\"checkbox\" name=\"<%typeid%>\" id=\"<%expid%>\" />\n"
4637 . "<label for=\"<%expid%>\"><%expname%></label>\n"
4639 . "<td><%expdesc%></td>\n"
4646 $res = DB::getResult('SELECT * FROM ' . sql_table('skin_desc'));
4647 foreach ( $res as $row )
4650 'typeid' => 'skin[' . $row['sdnumber'] . ']',
4651 'expid' => 'skinexp' . $row['sdnumber'],
4652 'expname' => Entity::hsc($row['sdname']),
4653 'expdesc' => Entity::hsc($row['sddesc'])
4655 echo Template::fill($template, $data);
4659 $res = DB::getResult('SELECT * FROM '.sql_table('template_desc'). " WHERE tdname NOT LIKE 'admin/%%';");
4660 foreach ( $res as $row )
4663 'typeid' => 'template[' . $row['tdnumber'] . ']',
4664 'expid' => 'templateexp' . $row['tdnumber'],
4665 'expname' => Entity::hsc($row['tdname']),
4666 'expdesc' => Entity::hsc($row['tddesc'])
4668 echo Template::fill($template, $data);
4676 * AdminActions::parse_skinoverview()
4677 * Parse skinvar skinoverview
4679 * @param string $templateName name of template to use
4682 public function parse_skinoverview($templateName = '')
4685 $query = "SELECT * FROM %s WHERE sdname NOT LIKE 'admin/%%';";
4686 $query = sprintf($query, sql_table('skin_desc'));
4688 $template['content'] = 'skinlist';
4689 $template['tabindex'] = 10;
4691 Showlist($query, 'table', $template, $templateName);
4696 * AdminActions::parse_skintypehelp()
4697 * Check editing skintypehelp
4702 public function parse_skintypehelp()
4704 $nowSkinType = strtolower(trim(requestVar('type')));
4706 /* TODO: use Skin class */
4707 $regularType = array(
4718 if ( in_array($nowSkinType, $regularType) )
4720 help('skinpart' . $nowSkinType);
4724 help('skinpartspecial');
4730 * AdminActions::parse_specialskinlist()
4731 * Parse skinvar specialskinlist
4733 * @param string $templateName name of template to use
4736 public function parse_specialskinlist($templateName = '')
4738 $templates = array();
4739 if ( $templateName )
4741 $templates = Template::read($templateName);
4744 /* TODO: use Skin class */
4755 $skinid = intRequestVar('skinid');
4756 $query = "SELECT stype FROM %s WHERE stype NOT IN ('%s') AND sdesc = %d;";
4757 $query = sprintf($query, sql_table('skin'), implode("', '", $nType), $skinid);
4759 $res = DB::getResult($query);
4760 if ( $res && $res->rowCount() > 0 )
4763 if ( array_key_exists('SPECIALSKINLIST_HEAD', $templates) && !empty($templates['SPECIALSKINLIST_HEAD']) )
4765 $template['head'] = $templates['SPECIALSKINLIST_HEAD'];
4769 $template['head'] = "<ul>\n";
4771 echo Template::fill($template['head'], $data);
4772 if ( !array_key_exists('SPECIALSKINLIST_BODY', $templates) || empty($templates['SPECIALSKINLIST_BODY']) )
4774 $template['body'] = '<li><a tabindex="<%tabindex%>" href="index.php?action=skinedittype&skinid=<%skinid%>'
4775 . '&type=<%skintype%>"><%skintype%></a> (<a tabindex="<%tabindex%>" href="index.php?'
4776 . 'action=skinremovetype&skinid=<%skinid%>&type=<%skintype%>">remove</a>)</li>';
4780 $template['body'] = $templates['SPECIALSKINLIST_BODY'];
4784 foreach ( $res as $row )
4787 'tabindex' => $tabstart++,
4788 'skinid' => $skinid,
4789 'skintype' => Entity::hsc(strtolower($row['stype']))
4791 echo Template::fill($template['body'], $data);
4794 if (array_key_exists('SPECIALSKINLIST_FOOT', $templates) && !empty($templates['SPECIALSKINLIST_FOOT']) )
4796 $template['foot'] = $templates['SPECIALSKINLIST_FOOT'];
4800 $template['foot'] = "</ul>\n";
4802 echo Template::fill($template['foot'], $data);
4808 * AdminActions::parse_sprinttext()
4811 * @param string $which
4812 * @param string $val
4815 public function parse_sprinttext($which, $val)
4817 if ( !defined($which) )
4823 $base = constant($which);
4826 if ( preg_match('#[^<|%].*[^%|>]#', $val, $matchies) )
4828 if ( !preg_match('#[(].*[^)]#', $matchies[0], $args) )
4830 $met = 'parse_' . $matchies[0];
4834 $arg = trim($args[0], '()');
4835 $met = 'parse_' . substr($matchies[0], 0, strpos($matchies[0], '('));
4838 if ( method_exists($this, $met) )
4840 $value = call_user_func(array(&$this, $met), $arg);
4844 if ( !isset($value) || empty($value) )
4848 echo sprintf($base, $value);
4853 * AdminActions::parse_systemsettings()
4854 * Parse skinvar systemsettings
4856 * @param string $type type of settings for system
4857 * @param string $templateName name of template to use
4860 public function parse_systemsettings($type = 'phpinfo', $templateName = '')
4862 global $member, $CONF, $nucleus;
4864 $member->isAdmin() or Admin::disallow();
4866 $enable = _ADMIN_SYSTEMOVERVIEW_ENABLE;
4867 $disable = _ADMIN_SYSTEMOVERVIEW_DISABLE;
4874 case 'sqlserverinfo':
4875 echo DB::getAttribute(PDO::ATTR_SERVER_VERSION);
4877 case 'sqlclientinfo':
4878 echo DB::getAttribute(PDO::ATTR_CLIENT_VERSION);
4880 case 'magicquotesgpc':
4881 echo ini_get('magic_quotes_gpc') ? 'On' : 'Off';
4883 case 'magicquotesruntime':
4884 echo ini_get('magic_quotes_runtime') ? 'On' : 'Off';
4886 case 'registerglobals':
4887 echo ini_get('register_globals') ? 'On' : 'Off';
4890 $templates = array();
4891 if ( $templateName )
4893 $templates = Template::read($templateName);
4895 if ( !array_key_exists('SYSTEMINFO_GDSETTINGS', $templates) || empty($templates['SYSTEMINFO_GDSETTINGS']) )
4897 $template = "<tr>\n"
4898 . "<td><%key%></td>\n"
4899 . "<td><%value%></td>\n"
4904 $template = $templates['SYSTEMINFO_GDSETTINGS'];
4907 $gdinfo = gd_info();
4909 foreach ( $gdinfo as $key => $value )
4911 if ( is_bool($value) )
4913 $value = $value ? $enable : $disable;
4917 $value = Entity::hsc($value);
4923 echo Template::fill($template, $data);
4928 phpinfo(INFO_MODULES);
4929 $im = ob_get_contents();
4931 echo ( i18n::strpos($im, 'mod_rewrite') !== FALSE ) ? $enable : $disable;
4933 case 'nucleusversion':
4934 echo getNucleusVersion() / 100 . '(' . $nucleus['version'] . ')';
4936 case 'nucleuspatchlevel':
4937 echo getNucleusPatchLevel();
4943 echo $CONF['ItemURL'];
4945 case 'alertonheaderssent':
4946 echo $CONF['alertOnHeadersSent'] ? $enable : $disable;
4948 case 'nucleuscodename':
4949 if ( $nucleus['codename'] != '' )
4951 echo ' "' . $nucleus['codename'] . '"';
4954 case 'versioncheckurl':
4955 echo sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
4962 * AdminActions::parse_templateoverview()
4963 * Parse skinvar templateoverview
4965 * @param string $templateName name of template to use
4968 public function parse_templateoverview($templateName = '')
4970 $query = "SELECT * FROM %s WHERE tdname NOT LIKE 'admin/%%' ORDER BY tdname";
4971 $query = sprintf($query, sql_table('template_desc'));
4973 $template['content'] = 'templatelist';
4974 $template['tabindex'] = 10;
4976 Showlist($query, 'table', $template, $templateName);
4982 * AdminActions::parse_ticket()
4988 public function parse_ticket()
4991 $manager->addTicketHidden();
4996 * AdminActions::parse_versioncheckurl()
4997 * Parse skinvar versioncheckurl
5002 public function parse_versioncheckurl()
5004 echo sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
5009 * AdminActions::parse_yrbloglist()
5010 * Parse skinvar yrbloglist
5012 * @param string $templateName name of template to use
5015 public function parse_yrbloglist($templateName = '')
5018 $showAll = requestVar('showall');
5020 if ( $member->isAdmin() && ($showAll == 'yes') )
5022 // Super-Admins have access to all blogs! (no add item support though)
5023 $query = "SELECT bnumber, bname, 1 as tadmin, burl, bshortname"
5025 . " ORDER BY bnumber;";
5026 $query = sprintf($query, sql_table('blog'));
5030 $query = "SELECT bnumber, bname, tadmin, burl, bshortname"
5032 . " WHERE tblog=bnumber and tmember=%d"
5033 . " ORDER BY bnumber;";
5034 $query = sprintf($query, sql_table('blog'), sql_table('team'), (integer) $member->getID());
5037 $template['content'] = 'bloglist';
5038 $template['superadmin'] = $member->isAdmin();
5040 $amount = Showlist($query, 'table', $template, $templateName);
5042 if ( ($showAll != 'yes') && ($member->isAdmin()) )
5044 $query = 'SELECT COUNT(*) as result FROM ' . sql_table('blog');
5046 $total = DB::getValue($query);
5047 if ( $total > $amount )
5049 echo '<p><a href="index.php?action=overview&showall=yes">' . _OVERVIEW_SHOWALL . '</a></p>';
5055 echo _OVERVIEW_NOBLOGS;
5057 elseif( $amount != 0 )
5059 echo '<h2>' . _OVERVIEW_YRDRAFTS . '</h2>';
5061 $query = "SELECT ititle, inumber, bshortname"
5063 . ' WHERE iauthor=%d AND iblog=bnumber AND idraft=1;';
5064 $query = sprintf($query, sql_table('item'), sql_table('blog'), (integer) $member->getID());
5066 $template['content'] = 'draftlist';
5068 $amountdrafts = Showlist($query, 'table', $template, $templateName);
5069 if ( $amountdrafts == 0 )
5071 echo _OVERVIEW_NODRAFTS;
5078 * AdminActions::checkCondition()
5079 * Checks conditions for if statements
5081 * @param string $field type of <%if%>
5082 * @param string $name property of field
5083 * @param string $value value of property
5084 * @return boolean condition
5086 protected function checkCondition($field, $name='', $value = '')
5088 global $CONF, $catid, $blog, $member, $itemidnext, $itemidprev, $manager, $archiveprevexists, $archivenextexists;
5099 $blog =& $manager->getBlog($blogid);
5103 $blogid = getBlogIDFromCatID($catid);
5105 $blog =& $manager->getBlog($blogid);
5107 elseif ( intRequestVar('catid') )
5109 $catid = intRequestVar('catid');
5110 $blogid = getBlogIDFromCatID($catid);
5112 $blog =& $manager->getBlog($blogid);
5119 $condition = ($blog && $this->ifCategory($name, $value));
5122 $condition = ($blog && ($blog->getSetting($name) == $value));
5125 $condition = $member->isLoggedIn();
5128 $condition = $member->isLoggedIn() && $this->ifOnTeam($name);
5131 $condition = $member->isLoggedIn() && $this->ifAdmin($name);
5134 $condition = $member->isLoggedIn() && $member->isAdmin();
5136 case 'allowloginedit':
5137 $condition = $member->isLoggedIn() && ($CONF['AllowLoginEdit'] || $member->isAdmin());
5140 $condition = ($itemidnext != '');
5143 $condition = ($itemidprev != '');
5145 case 'archiveprevexists':
5146 $condition = ($archiveprevexists == true);
5148 case 'archivenextexists':
5149 $condition = ($archivenextexists == true);
5152 $condition = (($name == $this->skintype) || ($name == requestVar('action')));
5155 $condition = $this->ifHasPlugin($name, $value);
5158 $condition = (Admin::getAdminAction() == $name);
5160 case 'adminoldaction':
5161 $condition = (Admin::getAdminAction() == $name);
5163 case 'addresschange':
5164 $condition = ($this->ifAddresscange());
5166 case 'bechangepass':
5167 $condition = ($this->beChangePassword());
5169 case 'skincandidates':
5170 $condition = ($this->ifSkincandidates());
5173 $condition = requestVar('nameclashes');
5175 case 'existsnewplugin':
5176 $condition = ($this->existsNewPlugin());
5179 $condition = (boolean) ($member->getAutosave() == $value);
5182 $condition = $manager->pluginInstalled("NP_{$field}") && $this->ifPlugin($field, $name, $value);
5189 * Actions::_ifHasPlugin()
5190 * hasplugin,PlugName
5191 * -> checks if plugin exists
5192 * hasplugin,PlugName,OptionName
5193 * -> checks if the option OptionName from plugin PlugName is not set to 'no'
5194 * hasplugin,PlugName,OptionName=value
5195 * -> checks if the option OptionName from plugin PlugName is set to value
5197 * @param string $name name of plugin
5198 * @param string $value
5201 private function ifHasPlugin($name, $value)
5205 // (pluginInstalled method won't write a message in the actionlog on failure)
5206 if ( $manager->pluginInstalled("NP_{$name}") )
5208 $plugin =& $manager->getPlugin("NP_{$name}");
5209 if ( $plugin != NULL )
5217 list($name2, $value2) = preg_split('#=#', $value, 2);
5218 if ( $value2 == "" && $plugin->getOption($name2) != 'no' )
5222 else if ( $plugin->getOption($name2) == $value2 )
5233 * Actions::beChangePassword()
5238 private function beChangePassword()
5240 return intRequestVar('bNeedsPasswordChange');
5244 * Actions::ifSkincandidates()
5245 * Checks if a plugin exists and call its doIf function
5251 private function ifSkincandidates()
5254 $candidates = SKINIMPORT::searchForCandidates($DIR_SKINS);
5255 return (count($candidates) > 0);
5259 * Actions::ifPlugin()
5260 * Checks if a plugin exists and call its doIf function
5262 * @param string $name name of plugin
5263 * @param string $key
5264 * @param string $value
5267 private function ifPlugin($name, $key = '', $value = '')
5271 $plugin =& $manager->getPlugin("NP_{$name}");
5277 $params = func_get_args();
5278 array_shift($params);
5280 return call_user_func_array(array(&$plugin, 'doIf'), $params);
5284 * AdminActions::ifCategory()
5285 * Different checks for a category
5287 * @param string $key key for information of category
5288 * @param string $value value for information of category
5291 private function ifCategory($key = '', $value='')
5293 global $blog, $catid;
5295 // when no parameter is defined, just check if a category is selected
5296 if (($key != 'catname' && $key != 'catid') || ($value == ''))
5298 return $blog->isValidCategory($catid);
5301 // check category name
5302 if ( $key == 'catname' )
5304 $value = $blog->getCategoryIdFromName($value);
5305 if ($value == $catid)
5307 return $blog->isValidCategory($catid);
5311 // check category id
5312 if (($key == 'catid') && ($value == $catid))
5314 return $blog->isValidCategory($catid);
5321 * AdminActions::ifOnTeam()
5322 * Checks if a member is on the team of a blog and return his rights
5324 * @param string $blogName name of weblog
5327 private function ifOnTeam($blogName = '')
5329 global $blog, $member, $manager;
5331 // when no blog found
5332 if ( ($blogName == '') && !is_object($blog) )
5337 // explicit blog selection
5338 if ($blogName != '')
5340 $blogid = getBlogIDFromName($blogName);
5343 if (($blogName == '') || !$manager->existsBlogID($blogid))
5346 $blogid = $blog->getID();
5348 return $member->teamRights($blogid);
5352 * AdminActions::ifAdmin()
5353 * Checks if a member is admin of a blog
5355 * @param string $blogName name of weblog
5358 private function ifAdmin($blogName = '')
5360 global $blog, $member, $manager;
5362 // when no blog found
5363 if (($blogName == '') && (!is_object($blog)))
5368 // explicit blog selection
5369 if ($blogName != '')
5371 $blogid = getBlogIDFromName($blogName);
5374 if (($blogName == '') || !$manager->existsBlogID($blogid))
5377 $blogid = $blog->getID();
5380 return $member->isBlogAdmin($blogid);
5384 * AdminActions::ifAddresscange()
5385 * Check e-Mail address is changed
5390 private function ifAddresscange()
5392 $key = $this->objAdmin->sessionVar("{$CONF['CookiePrefix']}ackey");
5397 $info = MEMBER::getActivationInfo($key);
5402 $mem = MEMBER::createFromId($info->vmember);
5407 if ( $info->vtype == 'addresschange' )
5415 * AdminActions::templateEditRow()
5418 * @param array $template
5419 * @param string $desc
5420 * @param string $name
5421 * @param string $help
5422 * @param integer $tabindex
5423 * @param boolean $big
5424 * @param array $tmplt
5427 private function templateEditRow(&$template, $desc, $name, $help = '', $tabindex = 0, $big = 0, $tplt = '')
5431 if ( !array_key_exists($name, $template) )
5433 $template[$name] = '';
5441 $tmplt = skinableTEMPLATE::read($tplt);
5445 'description' => $desc,
5446 'help' => empty($help) ? '' : helpHtml('template' . $help),
5449 'tabindex' => $tabindex,
5450 'rows' => $big ? 10 : 5,
5453 if ( !array_key_exists('TEMPLATE_EDIT_ROW_HEAD', $tmplt) || empty($tmplt['TEMPLATE_EDIT_ROW_HEAD']) )
5455 $base['head'] = "</tr>"
5457 . "<td><%description%><%help%></td>\n"
5458 . "<td id=\"td<%count%>\">\n"
5459 . "<textarea class=\"templateedit\" name=\"<%name%>\" tabindex=\"<%tabindex%>\" cols=\"50\" rows=\"<%rows%>\" id=\"textarea<%count%>\">\n";
5463 $base['head'] = $tmplt['TEMPLATE_EDIT_ROW_HEAD'];
5466 if ( !array_key_exists('TEMPLATE_EDIT_ROW_TAIL', $tmplt) || empty($tmplt['TEMPLATE_EDIT_ROW_TAIL']) )
5468 $base['tail'] = "</textarea>\n"
5473 $base['tail'] = $tmplt['TEMPLATE_EDIT_ROW_TAIL'];
5476 echo TEMPLATE::fill($base['head'], $data);
5477 echo ENTITY::hsc($template[$name]);
5478 echo TEMPLATE::fill($base['tail'], $data);
5486 * AdminActions::customHelp()
5487 * shows a link to custom help file
5490 * @param string $tplName
5491 * @param string $url
5492 * @param string $iconURL
5493 * @param string $alt
5494 * @param string $title
5498 private function customHelp($id, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
5500 echo self::customHelpHtml($id, $tplName, $url, $iconURL, $alt, $title, $onclick);
5504 * AdminActions::customHelp()
5505 * shows a link to custom help file
5508 * @param string $tplName
5509 * @param string $url
5510 * @param string $iconURL
5511 * @param string $alt
5512 * @param string $title
5516 static function customHelplink($id, $tplName = '', $url = '', $title = '', $onclick = '')
5520 $templates = array();
5524 $templates = Template::read($tplName);
5527 if ( !array_key_exists('ADMIN_CUSTOMHELPLINK_ANCHOR', $templates) || empty($templates['ADMIN_CUSTOMHELPLINK_ANCHOR']) )
5529 $template = "<a href=\"<%helpurl%>#<%helptarget%>\" title=\"<%title%>\" <%onclick%>>\n";
5533 $template = $templates['ADMIN_CUSTOMHELPLINK_ANCHOR'];
5538 $url = $CONF['AdminURL'] . 'documentation/customHelp.html';
5541 if ( empty($onclick) )
5543 $onclick = 'onclick="if (event && event.preventDefault) event.preventDefault(); return help(this.href);"';
5545 elseif ( preg_match('#^onclick#', $onclick) )
5547 $onclick = $onclick;
5551 $onclick = 'onclick="' . $onclick . '"';
5556 'helptarget' => $id,
5557 'onclick' => $onclick,
5558 'title' => (isset($title) && !empty($title)) ? $title : _HELP_TT,
5560 return Template::fill($template, $data);
5564 * AdminActions::customHelpHtml()
5567 * @param string $tplName
5568 * @param string $url
5569 * @param string $iconURL
5570 * @param string $alt
5571 * @param string $title
5572 * @param string $onclick
5573 * @return string anchor element with help uri
5575 private function customHelpHtml($id, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
5579 $templates = array();
5583 $templates = Template::read($tplName);
5585 if ( !array_key_exists('ADMIN_CUSTOMHELPLINK_ICON', $templates) || !empty($templates['ADMIN_CUSTOMHELPLINK_ICON']) )
5587 $template = "<img src=\"<%iconurl%>\" <%width%><%height%>alt=\"<%alt%>\" title=\"<%title%>\" /></a>\n";
5591 $template = $templates['ADMIN_CUSTOMHELPLINK_ICON'];
5594 if ( empty($iconURL) )
5596 $iconURL = $CONF['AdminURL'] . 'documentation/icon-help.gif';
5599 if ( function_exists('getimagesize') )
5601 $size = getimagesize($iconURL);
5602 $width = 'width="' . $size[0] . '" ';
5603 $height = 'height="' . $size[1] . '" ';
5607 'iconurl' => $iconURL,
5609 'height' => $height,
5610 'alt' => (isset($alt) && !empty($alt)) ? $alt : _HELP_TT,
5611 'title' => (isset($title) && !empty($title)) ? $title : _HELP_TT,
5614 $icon = Template::fill($template, $data);
5615 $help = self::customHelplink($id, $tplName, $url, $title, $onclick);
5617 return $help . $icon;
5621 * AdminActions::input_yesno
5624 * @param $checkedval
5631 * @param $templateName
5634 public function input_yesno($name,
5645 $templates = array();
5646 if ( $templateName )
5648 $templates = Template::read($templateName);
5651 if ( $name == 'admin' )
5653 if ( !array_key_exists('INPUTYESNO_TEMPLATE_ADMIN', $templates) || empty($templates['INPUTYESNO_TEMPLATE_ADMIN']) )
5655 $template = '<input onclick="selectCanLogin(true);" type="radio" name="<%name%>" value="<%yesval%>" <%yescheckedval%> id="<%yesid%>" />' . "\n"
5656 . '<label for="<%yesid%>"><%yesvaltext%></label>' . "\n"
5657 . '<input onclick="selectCanLogin(false);" type="radio" name="<%name%>" value="<%noval%>" <%nocheckedval%> id="<%noid%>"<%disabled%> />' . "\n"
5658 . '<label for="<%noid%>"><%novaltext%></label>' . "\n";
5662 $template = $templates['INPUTYESNO_TEMPLATE_ADMIN'];
5667 if ( array_key_exists('INPUTYESNO_TEMPLATE_NORMAL', $templates) && !empty($templates['INPUTYESNO_TEMPLATE_NORMAL']) )
5669 $template = $templates['INPUTYESNO_TEMPLATE_NORMAL'];
5673 if ( array_key_exists('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO', $templates) && !empty($templates['SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO']) )
5675 $template = $templates['SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO'];
5678 if ( !isset($template) )
5680 $template = '<input type="radio" name="<%name%>" value="<%yesval%>" <%yescheckedval%> id="<%yesid%>" />' . "\n"
5681 . '<label for="<%yesid%>"><%yesvaltext%></label>' . "\n"
5682 . '<input type="radio" name="<%name%>" value="<%noval%>" <%nocheckedval%> id="<%noid%>"<%disabled%> />' . "\n"
5683 . '<label for="<%noid%>"><%novaltext%></label>' . "\n";
5688 $id = Entity::hsc($name);
5689 $id = str_replace('[', '-', $id);
5690 $id = str_replace(']', '-', $id);
5691 $id1 = $id . Entity::hsc($value1);
5692 $id2 = $id . Entity::hsc($value2);
5694 'name' => Entity::hsc($name),
5695 'yesval' => Entity::hsc($value1),
5696 'noval' => Entity::hsc($value2),
5699 'yesvaltext' => $yesval,
5700 'novaltext' => $noval,
5701 'yescheckedval' => ($checkedval == $value1) ? ' checked="checked" tabindex="' . $tabindex . '"': '',
5702 'nocheckedval' => ($checkedval != $value1) ? ' checked="checked" tabindex="' . $tabindex . '"': '',
5703 'disabled' => ($isAdmin && $name == 'canlogin') ? ' disabled="disabled"' : '',
5708 return Template::fill($template, $dat);
5712 echo Template::fill($template, $dat);
5718 * AdminActions::existsNewPlugin()
5719 * Check exists new plugin
5722 * @return boolean exists or not
5724 private function existsNewPlugin()
5726 global $DIR_PLUGINS;
5728 $query = "SELECT * FROM %s;";
5729 $query = sprintf($query, sql_table('plugin'));
5730 $res = DB::getResult($query);
5732 $installed = array();
5733 foreach( $res as $row )
5735 $installed[] = $row['pfile'];
5738 $files = scandir($DIR_PLUGINS);
5740 $candidates = array();
5741 foreach ( $files as $file )
5743 if ( preg_match("#^(NP_.*)\.php$#", $file, $matches) )
5745 if ( !in_array($matches[1], $installed) )
5747 $candidates[] = $matches[1];
5751 $this->newPlugCandidates = $candidates;
5752 return (count($candidates) > 0);
5756 * AdminActions::pagehead()
5757 * Output admin page head
5762 public function parse_pagehead()
5764 global $member, $nucleus, $CONF, $manager;
5766 $content = $this->parser->skin->getContentFromDB('pagehead');
5769 $extrahead = Admin::getAdminextrahead();
5771 'extrahead' => &$extrahead,
5772 'action' => Admin::getAdminAction()
5774 $manager->notify('AdminPrePageHead', $data);
5776 $baseUrl = Entity::hsc($CONF['SkinsURL']);
5780 if ( !array_key_exists('AdminCSS', $CONF) )
5782 DB::execute("INSERT INTO " . sql_table('config') . " VALUES ('AdminCSS', 'original')");
5783 $CONF['AdminCSS'] = 'original';
5787 /* HTTP 1.1 application for no caching */
5788 header("Cache-Control: no-cache, must-revalidate");
5789 header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
5791 $root_element = 'html';
5792 $charset = i18n::get_current_charset();
5793 $locale = preg_replace('#_#', '-', i18n::get_current_locale());
5794 $xml_version_info = self::$xml_version_info;
5795 $formal_public_identifier = self::$formal_public_identifier;
5796 $system_identifier = self::$system_identifier;
5797 $xhtml_namespace = self::$xhtml_namespace;
5799 echo "<?xml version=\"{$xml_version_info}\" encoding=\"{$charset}\" ?>\n";
5800 echo "<!DOCTYPE {$root_element} PUBLIC \"{$formal_public_identifier}\" \"{$system_identifier}\">\n";
5801 echo "<{$root_element} xmlns=\"{$xhtml_namespace}\" xml:lang=\"{$locale}\" lang=\"{$locale}\">\n";
5803 echo '<title>' . Entity::hsc($CONF['SiteName']) . " - Admin</title>\n";
5806 echo "<link rel=\"stylesheet\" title=\"Nucleus Admin Default\" type=\"text/css\" href=\"{$baseUrl}admin/defaultadmin/styles/admin_{$CONF["AdminCSS"]}.css\" />\n";
5808 echo "<link rel=\"stylesheet\" title=\"Nucleus Admin Default\" type=\"text/css\" href=\"{$baseUrl}admin/defaultadmin/styles/addedit.css\" />\n";
5809 echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/edit.js\"></script>\n";
5810 echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/admin.js\"></script>\n";
5811 echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/compatibility.js\"></script>\n";
5812 echo "{$extrahead}\n";
5815 echo "<div id=\"adminwrapper\">\n";
5816 echo "<div class=\"header\">\n";
5817 echo '<h1>' . Entity::hsc($CONF['SiteName']) . "</h1>\n";
5819 echo "<div id=\"container\">\n";
5820 echo "<div id=\"content\">\n";
5821 echo "<div class=\"loginname\">\n";
5823 if ( !$member->isLoggedIn() )
5825 echo '<a href="index.php?action=showlogin" title="Log in">' . _NOTLOGGEDIN . "</a><br />\n";
5829 echo _LOGGEDINAS . ' ' . $member->getDisplayName() ." - <a href='index.php?action=logout'>" . _LOGOUT. "</a><br />\n";
5830 echo "<a href='index.php?action=overview'>" . _ADMINHOME . "</a> - ";
5833 echo "<a href='".$CONF['IndexURL']."'>"._YOURSITE."</a><br />\n";
5836 if ( !array_key_exists('codename', $nucleus) || empty($nucleus['codename']) )
5838 $codenamestring = '';
5842 $codenamestring = ' "' . $nucleus['codename'].'"';
5845 if ( $member->isLoggedIn() && $member->isAdmin() )
5847 $checkURL = sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
5848 echo '<a href="' . $checkURL . '" title="' . _ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TITLE . '">Nucleus CMS ' . $nucleus['version'] . $codenamestring . '</a>';
5850 $newestVersion = getLatestVersion();
5851 $newestCompare = str_replace('/', '.', $newestVersion);
5852 $currentVersion = str_replace(array('/','v'), array('.',''), $nucleus['version']);
5854 if ( $newestVersion && version_compare($newestCompare, $currentVersion) > 0 )
5857 echo '<a style="color:red" href="http://nucleuscms.org/upgrade.php" title="' . _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE . '">';
5858 echo _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT . $newestVersion;
5864 echo "Nucleus CMS {$nucleus['version']}{$codenamestring}";
5871 $this->parser->parse($content);
5878 * AdminActionss::pagefoot()
5879 * Output admin page foot include quickmenu
5884 public function parse_pagefoot()
5886 global $action, $member, $manager;
5888 $content = $this->parser->skin->getContentFromDB('pagefoot');
5892 'action' => Admin::getAdminAction()
5894 $manager->notify('AdminPrePageFoot', $data);
5896 if ( $member->isLoggedIn() && ($action != 'showlogin') )
5898 echo '<h2>' . _LOGOUT . "</h2>\n";
5900 echo '<li><a href="index.php?action=overview">' . _BACKHOME . "</a></li>\n";
5901 echo '<li><a href="index.php?action=logout">' . _LOGOUT . "</a></li>\n";
5905 echo "<div class=\"foot\">\n";
5906 echo '<a href="' . _ADMINPAGEFOOT_OFFICIALURL . '">Nucleus CMS</a> © 2002-' . date('Y') . ' ' . _ADMINPAGEFOOT_COPYRIGHT;
5908 echo '<a href="' . _ADMINPAGEFOOT_DONATEURL . '">' . _ADMINPAGEFOOT_DONATE . "</a>\n";
5911 echo "<div id=\"quickmenu\">\n";
5913 if ( ($action != 'showlogin') && ($member->isLoggedIn()) )
5916 echo '<li><a href="index.php?action=overview">' . _QMENU_HOME . "</a></li>\n";
5919 echo '<h2>' . _QMENU_ADD . "</h2>\n";
5920 echo "<form method=\"get\" action=\"index.php\">\n";
5922 echo "<input type=\"hidden\" name=\"action\" value=\"createitem\" />\n";
5924 $showAll = requestVar('showall');
5926 if ( ($member->isAdmin()) && ($showAll == 'yes') )
5928 // Super-Admins have access to all blogs! (no add item support though)
5929 $query = "SELECT bnumber as value, bname as text FROM %s ORDER BY bname;";
5930 $query = sprintf($query, sql_table('blog'));
5934 $query = "SELECT bnumber as value, bname as text FROM %s, %s WHERE tblog=bnumber and tmember=%d ORDER BY bname;";
5935 $query = sprintf($query, sql_table('blog'), sql_table('team'), (integer) $member->getID());
5937 $template['name'] = 'blogid';
5938 $template['tabindex'] = 15000;
5939 $template['extra'] = _QMENU_ADD_SELECT;
5940 $template['selected'] = -1;
5941 $template['shorten'] = 10;
5942 $template['shortenel'] = '';
5943 $template['javascript'] = 'onchange="return form.submit()"';
5944 showlist($query, 'select', $template);
5949 echo "<h2>{$member->getDisplayName()}</h2>\n";
5951 echo '<li><a href="index.php?action=editmembersettings">' . _QMENU_USER_SETTINGS . "</a></li>\n";
5952 echo '<li><a href="index.php?action=browseownitems">' . _QMENU_USER_ITEMS . "</a></li>\n";
5953 echo '<li><a href="index.php?action=browseowncomments">' . _QMENU_USER_COMMENTS . "</a></li>\n";
5956 if ( $member->isAdmin() )
5958 echo '<h2>' . _QMENU_MANAGE . "</h2>\n";
5960 echo '<li><a href="index.php?action=actionlog">' . _QMENU_MANAGE_LOG . "</a></li>\n";
5961 echo '<li><a href="index.php?action=settingsedit">' . _QMENU_MANAGE_SETTINGS . "</a></li>\n";
5962 echo '<li><a href="index.php?action=systemoverview">' . _QMENU_MANAGE_SYSTEM . "</a></li>\n";
5963 echo '<li><a href="index.php?action=usermanagement">' . _QMENU_MANAGE_MEMBERS . "</a></li>\n";
5964 echo '<li><a href="index.php?action=createnewlog">' . _QMENU_MANAGE_NEWBLOG . "</a></li>\n";
5965 echo '<li><a href="index.php?action=backupoverview">' . _QMENU_MANAGE_BACKUPS . "</a></li>\n";
5966 echo '<li><a href="index.php?action=pluginlist">' . _QMENU_MANAGE_PLUGINS . "</a></li>\n";
5969 echo "<h2>" . _QMENU_LAYOUT . "</h2>\n";
5971 echo '<li><a href="index.php?action=skinoverview">' . _QMENU_LAYOUT_SKINS . "</a></li>\n";
5972 echo '<li><a href="index.php?action=templateoverview">' . _QMENU_LAYOUT_TEMPL . "</a></li>\n";
5973 echo '<li><a href="index.php?action=skinieoverview">' . _QMENU_LAYOUT_IEXPORT . "</a></li>\n";
5977 $data = array('options' => array());
5979 $manager->notify('QuickMenu', $data);
5981 if ( count($data['options']) > 0 )
5983 echo "<h2>" . _QMENU_PLUGINS . "</h2>\n";
5985 foreach ( $data['options'] as $option )
5987 echo '<li><a href="' . Entity::hsc($option['url']) . '" title="' . Entity::hsc($option['tooltip']) . '">' . Entity::hsc($option['title']) . "</a></li>\n";
5992 else if ( ($action == 'activate') || ($action == 'activatesetpwd') )
5995 echo '<h2>' . _QMENU_ACTIVATE . '</h2>' . _QMENU_ACTIVATE_TEXT;
5999 echo '<h2>' . _QMENU_INTRO . '</h2>' . _QMENU_INTRO_TEXT;
6002 echo "<!-- quickmenu -->\n";
6005 echo "<!-- content -->\n";
6008 echo "<!-- container -->\n";
6011 echo "<!-- adminwrapper -->\n";
6019 $this->parser->skin->parse('pagefoot');