2 if ( !class_exists('BaseActions') )
4 include $DIR_LIBS . 'BaseActions.php';
8 class AdminActions extends BaseActions
10 // reference to the skin object for which a part is being parsed
15 /* NOTE: list of whole available action names for tags
24 'adminskineditallowedlist',
27 'adminskinselectoptions',
28 'adminspecialskinlist',
29 'admintemplateoverview',
30 'allowedadminskinactions',
53 'configsettingsyesno',
56 'defaultadminskintypes',
66 'editadmintemplateinfo',
72 'editplugoptionslist',
88 'insertpluginoptions',
93 'listplugplugoptionrow',
94 'localeselectoptions',
111 'selectlocaladminskinfiles',
112 'selectlocalskinfiles',
113 'skineditallowedlist',
130 * AdminActions::$default_actions
131 * list of whole action names with which this class can deal
133 static private $default_actions = array(
144 * AdminActions::$skin_type_friendly_names
145 * friendly name for wrapped page types
147 static private $default_skin_types = array(
148 'actionlog' => _ADM_SKPRT_ACTIONLOG,
149 'activate' => _ADM_SKPRT_ACTIVATE,
150 'activatesetpwd' => _ADM_SKPRT_ACTIVATESETPWD,
151 'addnewlog' => _ADM_SKPRT_ADDNEWLOG,
152 'adminerrorpage' => _ADM_SKPRT_ADMINERRORPAGE,
153 'adminskindelete' => _ADM_SKPRT_ADMINSKINDELETE,
154 'adminskinedit' => _ADM_SKPRT_ADMINSKINEDIT,
155 'adminskinedittype' => _ADM_SKPRT_ADMINSKINEDITTYPE,
156 'adminskiniedoimport' => _ADM_SKPRT_ADMINSKINIEDOIMPORT,
157 'adminskinieimport' => _ADM_SKPRT_ADMINSKINIEIMPORT,
158 'adminskinieoverview' => _ADM_SKPRT_ADMINSKINIEOVERVIEW,
159 'adminskinoverview' => _ADM_SKPRT_ADMINSKINOVERVIEW,
160 'adminskinremovetype' => _ADM_SKPRT_ADMINSKINREMOVETYPE,
161 'admintemplatedelete' => _ADM_SKPRT_ADMINTEMPLATEDELETE,
162 'admintemplateedit' => _ADM_SKPRT_ADMINTEMPLATEEDIT,
163 'admintemplateoverview' => _ADM_SKPRT_ADMINTEMPLATEOVERVIEW,
164 'backupoverview' => _ADM_SKPRT_BACKUPOVERVIEW,
165 'backuprestore' => _ADM_SKPRT_BACKUPRESTORE,
166 'banlist' => _ADM_SKPRT_BANLIST,
167 'banlistdelete' => _ADM_SKPRT_BANLISTDELETE,
168 'banlistdeleteconfirm' => _ADM_SKPRT_BANLISTDELETECONFIRM,
169 'banlistnew' => _ADM_SKPRT_BANLISTNEW,
170 'batchcategory' => _ADM_SKPRT_BATCHCATEGORY,
171 'batchcomment' => _ADM_SKPRT_BATCHCOMMENT,
172 'batchdelete' => _ADM_SKPRT_BATCHDELETE,
173 'batchitem' => _ADM_SKPRT_BATCHITEM,
174 'batchmember' => _ADM_SKPRT_BATCHMEMBER,
175 'batchmove' => _ADM_SKPRT_BATCHMOVE,
176 'batchmovecat' => _ADM_SKPRT_BATCHMOVECAT,
177 'batchteam' => _ADM_SKPRT_BATCHTEAM,
178 'blogcommentlist' => _ADM_SKPRT_BLOGCOMMENTLIST,
179 'blogselectbox' => _ADM_SKPRT_BLOGSELECTBOX,
180 'blogsettings' => _ADM_SKPRT_BLOGSETTINGS,
181 'bookmarklet' => _ADM_SKPRT_BOOKMARKLET,
182 'browseowncomments' => _ADM_SKPRT_BROWSEOWNCOMMENTS,
183 'browseownitems' => _ADM_SKPRT_BROWSEOWNITEMS,
184 'categorydelete' => _ADM_SKPRT_CATEGORYDELETE,
185 'categoryedit' => _ADM_SKPRT_CATEGORYEDIT,
186 'commentdelete' => _ADM_SKPRT_COMMENTDELETE,
187 'commentedit' => _ADM_SKPRT_COMMENTEDIT,
188 'createitem' => _ADM_SKPRT_CREATEITEM,
189 'createnewlog' => _ADM_SKPRT_CREATENEWLOG,
190 'deleteblog' => _ADM_SKPRT_DELETEBLOG,
191 'editmembersettings' => _ADM_SKPRT_EDITMEMBERSETTINGS,
192 'insertpluginoptions' => _ADM_SKPRT_INSERTPLUGINO,
193 'itemcommentlist' => _ADM_SKPRT_ITEMCOMMENTLIST,
194 'itemdelete' => _ADM_SKPRT_ITEMDELETE,
195 'itemedit' => _ADM_SKPRT_ITEMEDIT,
196 'itemlist' => _ADM_SKPRT_ITEMLIST,
197 'itemmove' => _ADM_SKPRT_ITEMMOVE,
198 'login' => FALSE, //missing
199 'manage' => _ADM_SKPRT_MANAGE,
200 'manageteam' => _ADM_SKPRT_MANAGETEAM,
201 'memberdelete' => _ADM_SKPRT_MEMBERDELETE,
202 'memberedit' => FALSE, //missing
203 'overview' => _ADM_SKPRT_OVERVIEW,
204 'pagefoot' => _ADM_SKPRT_PAGEFOOT,
205 'pagehead' => _ADM_SKPRT_PAGEHEAD,
206 'plugindelete' => _ADM_SKPRT_PLUGINDELETE,
207 'pluginhelp' => _ADM_SKPRT_PLUGINHELP,
208 'pluginlist' => _ADM_SKPRT_PLUGINLIST,
209 'pluginoptions' => _ADM_SKPRT_PLUGINOPTIONS,
210 'settingsedit' => _ADM_SKPRT_SETTINGSEDIT,
211 'showlogin' => _ADM_SKPRT_SHOWLOGIN,
212 'skindelete' => _ADM_SKPRT_SKINDELETE,
213 'skinedit' => _ADM_SKPRT_SKINEDIT,
214 'skinedittype' => _ADM_SKPRT_SKINEDITTYPE,
215 'skiniedoimport' => _ADM_SKPRT_SKINIEDOIMPORT,
216 'skinieimport' => _ADM_SKPRT_SKINIEIMPORT,
217 'skinieoverview' => _ADM_SKPRT_SKINIEOVERVIEW,
218 'skinoverview' => _ADM_SKPRT_SKINOVERVIEW,
219 'skinremovetype' => _ADM_SKPRT_SKINREMOVETYPE,
220 'systemoverview' => _ADM_SKPRT_SYSTEMOVERVIEW,
221 'teamdelete' => _ADM_SKPRT_TEAMDELETE,
222 'templatedelete' => _ADM_SKPRT_TEMPLATEDELETE,
223 'templateedit' => _ADM_SKPRT_TEMPLATEEDIT,
224 'templateoverview' => _ADM_SKPRT_TEMPLATEOVERVIEW,
225 'usermanagement' => _ADM_SKPRT_USERMANAGEMENT,
229 * AdminActions::getAvailableSkinTypes()
233 * @return array list of friendly names for page actions
235 static public function getAvailableSkinTypes()
237 return self::$default_skin_types;
241 * AdminActions::getDefaultTypes()
245 * @return array list of friendly names for page actions
247 static public function getDefaultTypes()
249 return self::$default_skin_types;
253 * AdminActions::__construct()
254 * Constructor for a new Actions object
256 * @param string $type
259 public function __construct($type)
261 // call constructor of superclass first
262 parent::__construct();
263 $this->skintype = $type;
264 if ( !class_exists('Navlist') || !class_exists('Batch') )
267 include $DIR_LIBS . 'ENCAPSULATE.php';
273 * AdminActions::getAvailableActions()
276 * @return array allowed actions for the page type
278 public function getAvailableActions()
280 $extra_actions = array();
282 switch ( $this->skintype )
285 $extra_actions = array(
290 $extra_actions = array(
295 case 'activatesetpwd':
296 $extra_actions = array(
300 $extra_actions = array(
306 case 'adminerrorpage':
307 $extra_actions = array(
310 case 'adminskindelete':
311 $extra_actions = array(
315 case 'adminskinedit':
316 $extra_actions = array(
318 'defaultadminskintypes',
319 'adminspecialskinlist',
322 case 'adminskinedittype':
323 $extra_actions = array(
326 'allowedadminskinactions',
327 'adminskineditallowedlist',
330 case 'adminskiniedoimport':
331 $extra_actions = array(
335 case 'adminskinieimport':
336 $extra_actions = array(
340 case 'adminskinieoverview':
341 $extra_actions = array(
342 'selectlocaladminskinfiles',
346 case 'adminskinoverview':
347 $extra_actions = array(
351 case 'adminskinremovetype':
352 $extra_actions = array(
356 case 'admintemplatedelete':
357 $extra_actions = array(
358 'editadmintemplateinfo',
360 case 'admintemplateedit':
361 $extra_actions = array(
362 'editadmintemplateinfo',
365 case 'admntemplateoverview':
366 $extra_actions = array(
367 'admintemplateoverview',
370 case 'backupoverview':
371 $extra_actions = array(
374 case 'backuprestore':
375 $extra_actions = array(
379 $extra_actions = array(
385 case 'banlistdelete':
386 $extra_actions = array(
391 case 'banlistdeleteconfirm':
392 $extra_actions = array(
393 'banlistdeletedlist',
398 $extra_actions = array(
404 case 'batchcategory':
405 $extra_actions = array(
411 $extra_actions = array(
417 $extra_actions = array(
423 $extra_actions = array(
429 $extra_actions = array(
435 $extra_actions = array(
444 $extra_actions = array(
453 $extra_actions = array(
459 case 'blogcommentlist':
460 $extra_actions = array(
466 case 'blogselectbox':
467 $extra_actions = array(
472 $extra_actions = array(
488 $extra_actions = array(
492 case 'browseowncomments':
493 $extra_actions = array(
497 case 'browseownitems':
498 $extra_actions = array(
502 case 'categorydelete':
503 $extra_actions = array(
509 $extra_actions = array(
516 case 'commentdelete':
517 $extra_actions = array(
522 $extra_actions = array(
527 $extra_actions = array(
539 $extra_actions = array(
545 $extra_actions = array(
550 case 'editmembersettings':
551 $extra_actions = array(
552 'adminskinselectoptions',
554 'localeselectoptions',
558 case 'insertpluginoptions':
559 $extra_actions = array(
560 'insertpluginoptions',
563 case 'itemcommentlist':
564 $extra_actions = array(
570 $extra_actions = array(
577 $extra_actions = array(
589 $extra_actions = array(
596 $extra_actions = array(
602 $extra_actions = array(
606 $extra_actions = array(
615 $extra_actions = array(
620 $extra_actions = array(
625 $extra_actions = array(
633 $extra_actions = array(
646 $extra_actions = array(
651 $extra_actions = array(
657 $extra_actions = array(
662 case 'pluginoptions':
663 $extra_actions = array(
665 'editplugoptionslist',
669 $extra_actions = array(
672 'configsettingsedit',
673 'configsettingsyesno',
676 'localeselectoptions',
682 $extra_actions = array(
687 $extra_actions = array(
692 $extra_actions = array(
698 $extra_actions = array(
701 'allowedskinactions',
702 'skineditallowedlist',
703 'skineditallowedlist',
706 case 'skiniedoimport':
707 $extra_actions = array(
712 $extra_actions = array(
716 case 'skinieoverview':
717 $extra_actions = array(
718 'selectlocalskinfiles',
723 $extra_actions = array(
727 case 'skinremovetype':
728 $extra_actions = array(
732 case 'systemoverview':
733 $extra_actions = array(
738 $extra_actions = array(
744 case 'templatedelete':
745 $extra_actions = array(
750 $extra_actions = array(
754 case 'templateoverview':
755 $extra_actions = array(
759 case 'usermanagement':
760 $extra_actions = array(
766 $extra_actions = array(
776 'selectlocaladminskinfiles',
784 $defined_actions = array_merge(self::$default_actions, $extra_actions);
786 return array_merge($defined_actions, parent::getAvailableActions());
790 * AdminActions::setSkin()
792 * @param object $skin an instance of Skin class
795 public function setSkin(&$skin)
797 $this->skin =& $skin;
802 * AdminActions::parse_actionloglist()
803 * Parse skinvar actionloglist
805 * @param string $templateName name of template to use
808 public function parse_actionloglist($templateName = '')
810 $query = "SELECT * FROM %s ORDER BY timestamp DESC";
811 $query = sprintf($query, sql_table('actionlog'));
813 $template['content'] = 'actionlist';
814 $amount = showlist($query, 'table', $template, $templateName);
820 * AdminActions::parse_activationmessage()
821 * Parse skinvar activationmessage
823 * @param string $type type of message
824 * @param string $templateName name of template to use
827 public function parse_activationmessage($type, $templateName = '')
829 global $CONF, $manager;
833 if ( !empty($templateName))
835 $template = Template::read($templateName);
838 $key = postVar('ackey');
841 Admin::error(_ERROR_ACTIVATE);
844 $info = MEMBER::getActivationInfo($key);
847 Admin::error(_ERROR_ACTIVATE);
850 $mem = MEMBER::createFromId($info->vmember);
853 Admin::error(_ERROR_ACTIVATE);
855 switch ( $info->vtype )
858 if ( array_key_exists('ACTIVATE_FORGOT_TITLE', $template) && !empty($template['ACTIVATE_FORGOT_TITLE']) )
860 $title = $template['ACTIVATE_FORGOT_TITLE'];
864 $title = _ACTIVATE_FORGOT_TITLE;
866 if ( array_key_exists('ACTIVATE_FORGOT_TEXT', $template) && !empty($template['ACTIVATE_FORGOT_TEXT']) )
868 $text = $template['ACTIVATE_FORGOT_TEXT'];
872 $text = _ACTIVATE_FORGOT_TEXT;
876 if ( array_key_exists('ACTIVATE_REGISTER_TITLE', $template) && !empty($template['ACTIVATE_REGISTER_TITLE']) )
878 $title = $template['ACTIVATE_REGISTER_TITLE'];
882 $title = _ACTIVATE_REGISTER_TITLE;
884 if ( array_key_exists('ACTIVATE_REGISTER_TEXT', $template) && !empty($template['ACTIVATE_REGISTER_TEXT']) )
886 $text = $template['ACTIVATE_REGISTER_TEXT'];
890 $text = _ACTIVATE_REGISTER_TEXT;
893 case 'addresschange':
894 if ( array_key_exists('ACTIVATE_CHANGE_TITLE', $template) && !empty($template['ACTIVATE_CHANGE_TITLE']) )
896 $title = $template['ACTIVATE_CHANGE_TITLE'];
900 $title = _ACTIVATE_CHANGE_TITLE;
902 if (array_key_exists('ACTIVATE_CHANGE_TEXT', $template) && !empty($template['ACTIVATE_CHANGE_TEXT']))
904 $text = $template['ACTIVATE_CHANGE_TEXT'];
908 $text = _ACTIVATE_CHANGE_TEXT;
913 'memberName' => Entity::hsc($mem->getDisplayName()),
914 'realName' => Entity::hsc($mem->getRealName()),
919 echo Template::fill($title, $aVars);
922 echo Template::fill($text, $aVars);
925 echo Entity::hsc($key);
932 * AdminActions::parse_addtickettourl()
933 * Parse skinvar addtickettourl
935 * @param string $url URI for ticket
938 public function parse_addtickettourl($url)
941 $url = $manager->addTicketToUrl($url);
942 echo Entity::hsc($url);
947 * AdminActions::parse_adminbanlist()
948 * Parse skinvar adminbanlist
950 * @param string $templateName name of template to use
953 public function parse_adminbanlist($templateName = '')
955 $blogid = intRequestVar('blogid');
957 $query = "SELECT * FROM %s WHERE blogid=%d ORDER BY iprange;";
958 $query = sprintf($query, sql_table('ban'), (integer) $blogid);
960 $template['content'] = 'banlist';
962 $amount = Showlist($query, 'table', $template, $templateName);
972 * AdminActions::parse_adminbatchaction()
973 * Parse skinvar adminbatchaction
978 public function parse_adminbatchaction()
980 echo Entity::hsc(requestVar('batchaction'));
985 * AdminActions::parse_adminbatchlist()
986 * Parse skinvar adminbatchlist
988 * @param string $templateName name of template to use
991 public function parse_adminbatchlist($templateName = '')
994 $templates = array();
996 if ( !empty($templateName) )
998 $templates = Template::read($templateName);
1001 if ( !array_key_exists('ADMIN_BATCHLIST', $templates) || empty($templates['ADMIN_BATCHLIST']) )
1003 $template = '<li><%text(_BATCH_EXECUTING)%>'
1004 . '<b><%adminbatchaction%></b>'
1005 . '<%batchlisttype%>'
1006 . '<b><%batchid%></b>...'
1007 . '<b><%batchlistmsg%></b>'
1012 $template = $templates['ADMIN_BATCHLIST'];
1015 $selected = requestIntArray('batch');
1016 $action = requestVar('batchaction');
1018 switch ( $this->skintype )
1021 $batchlisttype = _BATCH_ONITEM;
1022 $deleteaction = 'deleteOneItem';
1023 $moveaction = 'moveOneItem';
1024 $destid = intRequestVar('destcatid');
1026 case 'batchcomment':
1027 $batchlisttype = _BATCH_ONCOMMENT;
1028 $deleteaction = 'deleteOneComment';
1031 $batchlisttype = _BATCH_ONMEMBER;
1032 $deleteaction = 'deleteOneMember';
1033 $setadminsql = sql_table('member') . ' SET madmin = 1 WHERE mnumber = ';
1034 $unsetchksql = 'SELECT * FROM ' . sql_table('member') . ' WHERE madmin = 1 AND mcanlogin = 1';
1035 $unsetupsql = sql_table('member') . ' SET madmin = 0 WHERE mnumber = ';
1036 $unseterrmsg = _ERROR_ATLEASTONEADMIN;
1039 $blogid = intRequestVar('blogid');
1040 $batchlisttype = _BATCH_ONTEAM;
1041 $deleteaction = 'deleteOneTeamMember';
1042 $setadminsql = sql_table('team') . ' SET tadmin = 1 WHERE tblog = ' . $blogid . ' AND tmember = ';
1043 $unsetchksql = 'SELECT * FROM ' . sql_table('team') . ' WHERE tadmin = 1 AND tblog = ' . $blogid;
1044 $unseterrmsg = _ERROR_ATLEASTONEBLOGADMIN;
1045 $unsetupsql = sql_table('team') . ' SET tadmin = 0 WHERE tblog = ' . $blogid . ' AND tmember = ';
1047 case 'batchcategory':
1048 $batchlisttype = _BATCH_ONCATEGORY;
1049 $deleteaction = 'deleteOneCategory';
1050 $moveaction = 'moveOneCategory';
1051 $destid = intRequestVar('destblogid');
1055 // walk over all selectedids and perform action
1056 foreach ( $selected as $selectedid )
1059 $selectedid = intval($selectedid);
1064 if ( $this->skintype != 'batchteam' )
1066 $error = Admin::deleteaction($selectedid);
1070 $error = Admin::deleteOneTeamMember($blogid, $selectedid);
1074 $error = Admin::moveaction($selectedid, $destid);
1078 sql_query("UPDATE {$setadminsql} {$selectedid};");
1082 // there should always remain at least one super-admin
1083 $r = sql_query($unsetchksql);
1084 if ( sql_num_rows($r) < 2 )
1086 $error = $unseterrmsg;
1090 sql_query("UPDATE {$setadminsql} {$selectedid};");
1094 $error = _BATCH_UNKNOWN . Entity::hsc($action);
1098 'batchid' => $selectedid,
1099 'batchlisttype' => Entity::hsc($batchlisttype),
1100 'adminbatchaction' => Entity::hsc($action),
1101 'batchlistmsg' => $error ? $error : _BATCH_SUCCESS,
1104 $handler = new AdminActions('template');
1105 $parser = new Parser($handler);
1108 $parser->parse($template);
1109 $template = ob_get_contents();
1112 echo Template::fill($template, $data);
1118 * AdminActions::parse_adminbloglink()
1119 * Parse skinvar adminbloglink
1121 * @param string $templateName name of template to use
1124 public function parse_adminbloglink($templateName = '')
1127 $blogid = intRequestVar('blogid');
1128 $blog =& $manager->getBlog($blogid);
1129 $templates = array();
1131 if ( !empty($templateName) )
1133 $templates = Template::read($templateName);
1136 if ( !array_key_exists('ADMIN_BLOGLINK', $templates) || empty($templates['ADMIN_BLOGLINK']) )
1138 $template = '<a href="<%url%>" title="<%adminbloglinktitle%>"><%blogname%></a>';
1142 $template = $templates['ADMIN_BLOGLINK'];
1146 'url' => Entity::hsc($blog->getURL()),
1147 'adminbloglinktitle' => _BLOGLIST_TT_VISIT,
1148 'blogname' => Entity::hsc($blog->getName())
1151 echo Template::fill($template, $data);
1156 * AdminActions::parse_adminerrormesg()
1157 * Parse skinvar adminerrormesg
1162 public function parse_adminerrormesg()
1167 if ( requestVar('errormessage') )
1169 $message = requestVar('errormessage');
1171 elseif ( cookieVar($CONF['CookiePrefix'] . 'errormessage') )
1173 $message = cookieVar($CONF['CookiePrefix'] . 'errormessage');
1175 elseif ( Admin::sessionVar($CONF['CookiePrefix'] . 'errormessage') )
1177 $message = Admin::sessionVar($CONF['CookiePrefix'] . 'errormessage');
1179 echo Entity::hsc($message);
1184 * AdminActions::parse_adminskineditallowedlist()
1185 * Parse skinvar adminskineditallowedlist
1187 * @param string $type template/blog
1188 * @param string $templateName name of template to use
1191 public function parse_adminskineditallowedlist($type = 'template', $templateName = '')
1195 /* TODO: blog seems not to be used */
1197 $query = "SELECT bshortname, bname FROM %s";
1198 $query = sprintf($query, sql_table('blog'));
1200 'content' => 'shortblognames'
1202 Showlist($query, 'table', $show, $templateName);
1205 $query = "SELECT tdname as name, tddesc as description FROM %s WHERE tdname LIKE 'admin/%%'";
1206 $query = sprintf($query, sql_table('template_desc'));
1208 'content' => 'shortnames'
1210 Showlist($query, 'table', $show, $templateName);
1217 * AdminActions::parse_adminskinielist()
1218 * Parse skinvar adminskinielist
1220 * @param string $type skin/template
1221 * @param string $templateName name of template to use
1224 public function parse_adminskinielist($type, $templateName = '')
1226 $templates = array();
1227 if ( $templateName )
1229 $templates = Template::read($templateName);
1232 if ( !array_key_exists('SKINIE_EXPORT_LIST', $templates) || empty($templates['SKINIE_EXPORT_LIST']) )
1235 . "<input type=\"checkbox\" name=\"<%typeid%>\" id=\"<%expid%>\" />\n"
1236 . "<label for=\"<%expid%>\"><%expname%></label>"
1238 . "<td><%expdesc%></td>\n"
1244 $template = $templates['SKINIE_EXPORT_LIST'];
1250 $query = "SELECT * FROM %s WHERE sdname LIKE 'admin/%%';";
1251 $query = sprintf($query, sql_table('skin_desc'));
1252 $res = sql_query($query);
1254 while ( $skinObj = sql_fetch_object($res) )
1257 'typeid' => 'skin[' . $skinObj->sdnumber . ']',
1258 'expid' => 'skinexp' . $skinObj->sdnumber,
1259 'expname' => Entity::hsc($skinObj->sdname),
1260 'expdesc' => Entity::hsc($skinObj->sddesc),
1262 echo Template::fill($template, $data);
1266 $query = "SELECT * FROM %s WHERE tdname LIKE 'admin/%%';";
1267 $query = sprintf($query, sql_table('template_desc'));
1268 $res = sql_query($query);
1269 while ( $templateObj = sql_fetch_object($res) )
1272 'typeid' => 'template[' . $templateObj->tdnumber . ']',
1273 'expid' => 'templateexp' . $templateObj->tdnumber,
1274 'expname' => Entity::hsc($templateObj->tdname),
1275 'expdesc' => Entity::hsc($templateObj->tddesc),
1277 echo Template::fill($template, $data);
1285 * AdminActions::parse_adminskinoverview()
1286 * Parse skinvar adminskinoverview
1288 * @param string $templateName name of template to use
1291 public function parse_adminskinoverview($templateName = '')
1293 $query = "SELECT * FROM %s WHERE sdname LIKE 'admin/%%' ORDER BY sdname;";
1294 $query = sprintf($query, sql_table('skin_desc'));
1296 $template['content'] = 'adminskinlist';
1297 $template['tabindex'] = 10;
1298 $template['friendly_names'] = $this->skin->getAvailableTypes();
1299 Showlist($query, 'table', $template, $templateName);
1304 * AdminActions::parse_adminskinselectoptions()
1305 * Parse skinvar adminskinselectoptions
1310 public function parse_adminskinselectoptions()
1313 $query = "SELECT sdname as text, sdnumber as value FROM %s WHERE sdname LIKE 'admin/%%';";
1314 $query = sprintf($query, sql_table('skin_desc'));
1316 $template['name'] = 'adminskin';
1317 $template['selected'] = $CONF['DefaultAdminSkin'];
1318 $template['tabindex'] = 110;
1319 Showlist($query, 'select', $template, '');
1324 * AdminActions::parse_adminspecialskinlist()
1325 * Parse skinvar adminspecialskinlist
1327 * @param string $templateName name of template to use
1329 public function parse_adminspecialskinlist($templateName = '')
1331 $templates = array();
1332 if ( $templateName )
1334 $templates = Template::read($templateName);
1337 $nType = $this->skin->getAvailableTypes();
1338 $skinid = intRequestVar('skinid');
1340 $query = "SELECT stype FROM %s WHERE stype NOT IN (%s) AND sdesc=%d;";
1341 $query = sprintf($query, sql_table('skin'), "'" . implode("', '", $nType) . "'", (integer) $skinid);
1343 $res = sql_query($query);
1344 if ( $res && sql_num_rows($res) > 0 )
1346 /* NOTE: set templates for HEAD/BODY/FOOT */
1347 if ( !array_key_exists('ADMIN_SPECIALSKINLIST_HEAD', $templates) || empty($templates['ADMIN_SPECIALSKINLIST_HEAD']) )
1349 $template['head'] = "<ul>\n";
1353 $template['head'] = $templates['ADMIN_SPECIALSKINLIST_HEAD'];
1355 if ( !array_key_exists('ADMIN_SPECIALSKINLIST_BODY', $templates) || empty($templates['ADMIN_SPECIALSKINLIST_BODY']) )
1357 $template['body'] = '<li>'
1358 . '<a tabindex="<%tabindex%>" href="index.php?action=adminskinedittype&skinid=<%skinid%>&type=<%skintype%>">'
1361 . '(<a tabindex="<%tabindex%>" href="index.php?action=adminskinremovetype&skinid=<%skinid%>&type=<%skintype%>">'
1368 $template['body'] = $templates['ADMIN_SPECIALSKINLIST_BODY'];
1370 if ( !array_key_exists('ADMIN_SPECIALSKINLIST_FOOT', $templates) || empty($templates['ADMIN_SPECIALSKINLIST_FOOT']) )
1372 $template['foot'] = "</ul>\n";
1376 $template['foot'] = $templates['ADMIN_SPECIALSKINLIST_FOOT'];
1383 echo $template['head'];
1384 while ( $row = sql_fetch_assoc($res) )
1387 'tabindex' => $tabstart++,
1388 'skinid' => $skinid,
1389 'skintype' => Entity::hsc(strtolower($row['stype']))
1391 echo Template::fill($template['body'], $data);
1394 echo $template['foot'];
1400 * AdminActions::parse_admintemplateoverview()
1401 * Parse skinvar admintemplateoverview
1403 * @param string $templateName name of template to use
1406 public function parse_admintemplateoverview($templateName = '')
1408 $query = "SELECT * FROM %s WHERE tdname LIKE 'admin/%%' ORDER BY tdname;";
1409 $query = sprintf($query, sql_table('template_desc'));
1411 $template['content'] = 'admintemplatelist';
1412 $template['tabindex'] = 10;
1414 Showlist($query, 'table', $template, $templateName);
1419 * AdminActions::parse_allowedadminskinactions()
1420 * Parse skinvar allowedadminskinactions
1425 public function parse_allowedadminskinactions()
1427 global $DIR_ADMINSKINS;
1428 $skinType = strtolower(trim(requestVar('type')));
1429 $actions = $this->skin->getAllowedActionsForType($skinType);
1432 while ( $current = array_shift($actions) )
1434 // TODO: remove this
1435 // skip deprecated vars
1436 if ($current == 'ifcat' || $current == 'imagetext' || $current == 'vars')
1441 echo helplink("adminskinvar-{$current}") . "$current</a>\n";
1443 if ( count($actions) != 0 )
1452 * AdminActions::parse_allowedskinactions()
1453 * Parse skinvar allowedskinactions
1458 public function parse_allowedskinactions()
1460 $skinType = strtolower(trim(requestVar('type')));
1461 $skinid = intRequestVar('skinid');
1463 $skin = new Skin($skinid);
1464 $actions = $skin->getAllowedActionsForType($skinType);
1467 while ( $current = array_shift($actions) )
1469 // TODO: remove this
1470 // skip deprecated vars
1471 if ( $current == 'ifcat' || $current == 'imagetext' || $current == 'vars' )
1476 /* TODO: alternative function should be used or not? */
1477 echo helplink("skinvar-{$current}") . "$current</a>\n";
1479 if ( count($actions) != 0 )
1488 * AdminActions::parse_banlistdeletedlist()
1489 * Parse skinvar banlistdeletedlist
1491 * @param string $templateName name of template to use
1494 public function parse_banlistdeletedlist($templateName = '')
1497 $templates = array();
1499 if ( $templateName )
1501 $templates = Template::read($templateName);
1503 if ( !array_key_exists('BANLIST_DELETED_LIST', $templates) || empty($templates['BANLIST_DELETED_LIST']) )
1505 $template = "<li><%blogname%></li>\n";
1509 $template = $templates['BANLIST_DELETED_LIST'];
1512 $deleted = requestArray('delblogs');
1513 foreach ( $deleted as $delblog )
1515 $blog =& $manager->getBlog($delblog);
1517 Entity::hsc($blog->getName())
1519 Template::fill($template, $data);
1525 * AdminActions::parse_batchdeletelist()
1526 * Parse skinvar batchdeletelist
1531 public function parse_batchdeletelist()
1533 $selected = requestIntArray('batch');
1536 foreach ( $selected as $select )
1538 echo '<input type="hidden" name="batch[' . ($index++) . ']" value="' . intval($select) . "\" />\n";
1540 // add hidden vars for team & comment
1541 if ( requestVar('action') == 'batchteam' )
1543 echo '<input type="hidden" name="blogid" value="' . intRequestVar('blogid') . "\" />\n";
1545 if ( requestVar('action') == 'batchcomment' )
1547 echo '<input type="hidden" name="itemid" value="' . intRequestVar('itemid') . "\" />\n";
1553 * AdminActions::parse_batchdeletetype()
1554 * Parse skinvar batchdeletetype
1559 public function parse_batchdeletetype()
1561 echo Entity::hsc(requestVar('action'));
1566 * AdminActions::parse_batchmovebtn()
1567 * Parse skinvar batchmovebtn
1572 public function parse_batchmovebtn()
1574 $actionType = requestVar('action');
1575 switch ( $actionType )
1580 case 'batchcategory':
1588 * AdminActions::parse_batchmovelist()
1589 * Parse skinvar batchmovelist
1594 public function parse_batchmovelist()
1596 $selected = requestIntArray('batch');
1597 foreach ( $selected as $select )
1599 echo '<input type="hidden" name="batch[' . ($select++) . ']" value="' . intval($select) . "\" />\n";
1605 * AdminActions::parse_batchmovetitle()
1606 * Parse skinvar batchmovetitle
1611 public function parse_batchmovetitle()
1613 $actionType = requestVar('action');
1614 switch ( $actionType )
1619 case 'batchcategory':
1620 echo _MOVECAT_TITLE;
1627 * AdminActions::parse_batchmovetype()
1628 * Parse skinvar batchmovetype
1633 public function parse_batchmovetype()
1635 echo Entity::hsc(requestVar('action'));
1640 * AdminActions::parse_blogcatlist()
1641 * Parse skinvar blogcatlist
1646 public function parse_blogcatlist()
1649 $blogid = intRequestVar('blogid');
1650 $query = "SELECT * FROM %s WHERE cblog = %d ORDER BY cname;";
1651 $query = sprintf($query, sql_table('category'), (integer) $blogid);
1653 $template['content'] = 'categorylist';
1654 $template['tabindex'] = 200;
1656 $batch = new Batch('category');
1657 $batch->showlist($query, 'table', $template);
1662 * AdminActions::parse_blogid()
1663 * Parse skinvar blogid
1668 function parse_blogid()
1670 echo intRequestVar('blogid');
1675 * AdminActions::parse_blognotifysetting()
1676 * Parse skinvar blognotifysetting
1681 public function parse_blognotifysetting($type)
1684 $blogid = intRequestVar('blogid');
1685 $blog = $manager->getBlog($blogid);
1690 if ( !$blog->notifyOnComment() )
1696 if ( !$blog->notifyOnVote() )
1702 if ( !$blog->notifyOnNewItem() )
1708 echo ' checked="checked"';
1713 * AdminActions::parse_blogselectbox()
1714 * Parse skinvar blogselectbox
1719 public function parse_blogselectbox()
1723 $selectData = requestVar('selectData');
1724 $mode = $selectData['mode'];
1725 $name = Entity::hsc($selectData['name']);
1726 $tabindex = Entity::hsc($selectData['tabindex']);
1727 $aBlogIds = array_map('intval', $selectData['aBlogIds']);
1728 $showNewCat = intval($selectData['showNewCat']);
1729 $selected = intval($selectData['selected']);
1731 echo "<select name=\"{$name}\" tabindex=\"{$tabindex}\">\n";
1733 // 1. select blogs (we'll create optiongroups)
1734 // (only select those blogs that have the user on the team)
1735 $queryBlogs = "SELECT bnumber, bname FROM %s WHERE bnumber in (%s) ORDER BY bname;";
1736 $queryBlogs = sprintf($queryBlogs, sql_table('blog'), implode(',', $aBlogIds));
1737 $blogs = sql_query($queryBlogs);
1739 if ( $mode == 'category' )
1741 if ( sql_num_rows($blogs) > 1 )
1745 while ( $oBlog = sql_fetch_object($blogs) )
1747 if ( isset($multipleBlogs) && !empty($multipleBlogs) )
1749 echo '<optgroup label="' . Entity::hsc($oBlog->bname) . "\">\n";
1752 // show selection to create new category when allowed/wanted
1755 // check if allowed to do so
1756 if ( $member->blogAdminRights($oBlog->bnumber) )
1758 echo '<option value="newcat-' . $oBlog->bnumber . '">' . _ADD_NEWCAT . "</option>\n";
1762 // 2. for each category in that blog
1763 $catQuery = "SELECT cname, catid FROM %s WHERE cblog=%d ORDER BY cname ASC;";
1764 $catQuery = sprintf($catQuery, sql_table('category'), (integer) $oBlog->bnumber);
1765 $categories = sql_query($catQuery);
1766 while ( $oCat = sql_fetch_object($categories) )
1768 if ( $oCat->catid == $selected )
1770 $selectText = ' selected="selected" ';
1776 echo '<option value="' . $oCat->catid . '" ' . $selectText . '>' . Entity::hsc($oCat->cname) . "</option>\n";
1779 if ( isset($multipleBlogs) && !empty($multipleBlogs) )
1788 while ( $oBlog = sql_fetch_object($blogs) )
1790 echo '<option value="' . $oBlog->bnumber . '"';
1791 if ( $oBlog->bnumber == $selected )
1793 echo '<option value="' . $oBlog->bnumber . '" selected="selected">' . Entity::hsc($oBlog->bname) . "</option>\n";
1797 echo '<option value="' . $oBlog->bnumber . '">' . Entity::hsc($oBlog->bname) . "</option>\n";
1806 * AdminActions::parse_blogsetting()
1807 * Parse skinvar blogsetting
1809 * @param string $which name of weblog setting
1812 public function parse_blogsetting($which)
1814 echo $this->parse_getblogsetting($which);
1819 * AdminActions::parse_blogsettingyesno()
1820 * Parse skinvar blogsettingyesno
1822 * @param string $type type of weblog setting
1823 * @param string $templateName name of template to use
1826 public function parse_blogsettingyesno($type, $templateName = '')
1830 $blogid = intRequestVar('blogid');
1831 $blog = $manager->getBlog($blogid);
1835 case 'convertbreaks':
1836 $checkedval = $blog->convertBreaks();
1839 case 'allowpastposting':
1840 $checkedval = $blog->allowPastPosting();
1844 $checkedval = $blog->commentsEnabled();
1848 $checkedval = $blog->isPublic();
1852 $checkedval = $blog->emailRequired();
1856 $checkedval = $blog->getSearchable();
1860 $this->parse_inputyesno($type, $checkedval, $tabindex, 1, 0, _YES, _NO, 0, $templateName);
1865 * AdminActions::parse_blogteamlist()
1866 * Parse skinvar blogteamlist
1868 * @param string $templateName name of template to use
1871 public function parse_blogteamlist($templateName = '')
1874 $blogid = intRequestVar('blogid');
1875 $query = "SELECT tblog, tmember, mname, mrealname, memail, tadmin "
1877 . "WHERE tmember=mnumber AND tblog= %d";
1878 $query = sprintf($query, sql_table('member'), sql_table('team'), (integer) $blogid);
1880 $template['content'] = 'teamlist';
1881 $template['tabindex'] = 10;
1883 $batch = new Batch('team');
1884 $batch->showlist($query, 'table', $template, _LISTS_NOMORE, $templateName);
1889 * AdminActions::parse_blogteammembers()
1890 * Parse skinvar blogteammembers
1895 public function parse_blogteammembers()
1897 $blogid = intRequestVar('blogid');
1898 $query = "SELECT mname, mrealname "
1900 . "WHERE mnumber=tmember AND tblog=%d;";
1901 $query = sprintf($query, sql_table('member'), sql_table('team'), (integer) $blogid);
1902 $res = sql_query($query);
1903 $memberNames = array();
1904 while ( $o = sql_fetch_object($res) )
1906 $memberNames[] = Entity::hsc($o->mname) . ' (' . Entity::hsc($o->mrealname). ')';
1908 echo implode(',', $memberNames);
1912 * AdminActions::parse_blogtime()
1913 * Parse skinvar blogtime
1915 * @param string $type type of time
1916 * @param string $format format for time expression
1917 * @param integer $offset offset of time
1920 public function parse_blogtime($type, $format = '%H:%M', $offset = 0)
1924 if ( $type != 'blogtime' )
1926 /* return server time */
1927 $timestamp = time() + $offset;
1931 $bid = intRequestVar('blogid');
1932 $b = $manager->getBlog($bid);
1933 $timestamp = $b->getCorrectTime() + $offset;
1936 echo i18n::formatted_datetime($format, $timestamp);
1941 * AdminActions::parse_bookmarkletadmin()
1942 * Parse skinvar bookmarkletadmin
1947 public function parse_bookmarkletadmin()
1951 $blogid = intRequestVar('blogid');
1953 echo Entity::hsc('javascript:' . getBookmarklet($blogid));
1958 * AdminActions::parse_categories()
1959 * Parse skinvar categories
1961 * create category dropdown box
1963 * @param string $type name of setting for category
1966 function parse_categories($startidx = 0)
1971 $itemid = intRequestVar('itemid');
1972 $item = &$manager->getItem($itemid, 1, 1);
1977 $blogid = intRequestVar('blogid');
1981 $blogid = $item['blogid'];
1984 $blog = &$manager->getBlog($blogid);
1986 if ( $item && $blog->convertBreaks() && requestVar('action') == 'itemedit' )
1988 $item['body'] = removeBreaks($item['body']);
1989 $item['more'] = removeBreaks($item['more']);
1992 $contents = array();
1993 if ( requestVar('action') == 'itemedit' )
1998 if ( !array_key_exists('catid', $contents) || empty($contents['catid']) )
2001 $catid = $blog->getDefaultCategory();
2006 $catid = $contents['catid'];
2009 Admin::selectBlogCategory('catid', $catid, $startidx, 1, $blog->getID());
2015 * AdminActions::parse_category()
2016 * Parse skinvar category
2018 * @param string $type name of setting for category
2021 public function parse_category($type = 'name')
2023 echo $this->parse_getcategory($type);
2028 * AdminActions::parse_categorysetting()
2029 * Parse skinvar categorysetting
2031 * @param string $type type in category setting
2034 public function parse_categorysetting($type)
2036 $catid = intRequestVar('catid');
2037 if ( $type == 'id' )
2042 $blogid = intRequestVar('blogid');
2043 $query = "SELECT * FROM %s WHERE cblog = %d AND catid = %d;";
2044 $query = sprintf($query, sql_table('category'), (integer) $blogid, (integer) $catid);
2045 $res = sql_query($query);
2046 $obj = sql_fetch_object($res);
2048 if ( $type != 'name' )
2050 echo Entity::hsc($obj->cdesc);
2054 echo Entity::hsc($obj->cname);
2061 * AdminActions::parse_codename()
2062 * Parse templatevar codename
2068 function parse_checkedonval($value, $name)
2073 $itemid = intRequestVar('itemid');
2074 $item =& $manager->getItem($itemid, 1, 1);
2076 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
2078 if ( $item && $blog->convertBreaks() && requestVar('action') == 'itemedit' )
2080 $item['body'] = removeBreaks($item['body']);
2081 $item['more'] = removeBreaks($item['more']);
2084 $contents = array();
2085 if ( requestVar('action') == 'itemedit' )
2089 if ( !isset($contents[$name]) )
2091 $contents[$name] = '';
2093 if ($contents[$name] == $value)
2095 echo 'checked="checked"';
2101 * AdminActions::parse_codename()
2102 * Parse templatevar codename
2107 * TODO: is this need???
2109 public function parse_codename()
2112 echo $nucleus['codename'];
2117 * AdminActions::parse_commentnavlist()
2118 * Parse skinvar commentnavlist
2123 public function parse_commentnavlist()
2125 global $CONF, $manager, $member;
2128 if ( postVar('start') )
2130 $start = intPostVar('start');
2137 // amount of items to show
2138 if ( postVar('amount') )
2140 $amount = intPostVar('amount');
2144 $amount = (integer) $CONF['DefaultListSize'];
2150 $query = 'SELECT cbody, cuser, cmail, cemail, mname, ctime, chost, cnumber, cip, citem '
2152 . 'LEFT OUTER JOIN %s ON mnumber=cmember '
2154 $query = sprintf($query, sql_table('comment'), sql_table('member'));
2156 if ( $this->skintype == 'itemcommentlist' )
2158 $itemid = intRequestVar('itemid');
2159 $query .= " citem={$itemid}";
2160 $template['canAddBan'] = $member->blogAdminRights(intRequestVar('blogid'));
2162 $nonComments = _NOCOMMENTS;
2164 elseif ( $this->skintype == 'browseowncomments' )
2167 $query .= ' cmember=' . $member->getID();
2168 $template['canAddBan'] = 0;
2170 $nonComments = _NOCOMMENTS_YOUR;
2172 elseif ( $this->skintype == 'blogcommentlist' )
2175 $query .= ' cblog=' . intRequestVar('blogid');
2176 $template['canAddBan'] = $member->blogAdminRights(intRequestVar('blogid'));
2177 $bid = intRequestVar('blogid');
2178 $nonComments = _NOCOMMENTS_BLOG;
2181 $search = postVar('search');
2182 if ( !empty($search) )
2184 $query .= ' and cbody LIKE "%' . sql_real_escape_string($search) . '%"';
2187 $query .= " ORDER BY ctime ASC LIMIT {$start},{$amount}";
2189 $template['content'] = 'commentlist';
2191 $navList = new Navlist($this->skintype, $start, $amount, 0, 1000, $bid, $search, $itemid);
2192 $navList->showBatchList('comment', $query, 'table', $template, $nonComments);
2197 * AdminActions::parse_configsettingsedit()
2198 * Parse skinvar configsettingsedit
2200 * @param string $type type of global configuration
2203 public function parse_configsettingsedit($type)
2208 case 'DefaultListSize':
2209 if ( !array_key_exists('DefaultListSize', $CONF) )
2211 $query = "INSERT INTO %s VALUES (DefaultListSize, 10);";
2212 $query = sprintf($query, sql_table('config'));
2214 $CONF['DefaultListSize'] = 10;
2216 elseif ( intval($CONF['DefaultListSize']) < 1 )
2218 $CONF['DefaultListSize'] = 10;
2220 echo intval($CONF['DefaultListSize']);
2222 case 'SessionCookie':
2223 $value = $CONF['SessionCookie'];
2224 $txt1 = _SETTINGS_COOKIESESSION;
2225 $txt2 = _SETTINGS_COOKIEMONTH;
2226 $this->parse_inputyesno('SessionCookie', $value, 10190, 1, 0, $txt1, $txt2);
2229 $value = $CONF['URLMode'];
2230 $txt1 = _SETTINGS_URLMODE_NORMAL;
2231 $txt2 = _SETTINGS_URLMODE_PATHINFO;
2232 $this->parse_inputyesno('URLMode', $value, 10077, 'normal', 'pathinfo', $txt1, $txt2);
2235 if ( array_key_exists($type, $CONF) && is_string($CONF[$type]) )
2237 echo Entity::hsc($CONF[$type]);
2245 * AdminActions::parse_configsettingsyesno()
2246 * Parse skinvar configsettingsyesno
2248 * @param string $type type of global setting
2249 * @param integer $tabindex tabindex attribute of input element
2252 public function parse_configsettingsyesno($type, $tabindex)
2255 if ( array_key_exists($type, $CONF) )
2257 $this->parse_inputyesno($type, $CONF[$type], $tabindex);
2263 * AdminActions::parse_contents()
2264 * Parse skinvar contents
2266 * @param string $which part for item
2269 function parse_contents($which)
2274 $contents = array();
2276 if ( requestVar('action') == 'itemedit' )
2278 $itemid = intRequestVar('itemid');
2279 $item =& $manager->getItem($itemid, 1, 1);
2281 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
2283 if ( $item && $blog->convertBreaks() )
2285 $item['body'] = removeBreaks($item['body']);
2286 $item['more'] = removeBreaks($item['more']);
2290 elseif ( requestVar('action') == 'createitem' )
2292 $blogid = intRequestVar('blogid');
2293 $blog =& $manager->getBlog($blogid);
2297 'contents' => &$contents,
2303 if ( !array_key_exists($which, $contents) )
2305 $contents[$which] = '';
2307 echo Entity::hsc($contents[$which],ENT_QUOTES);
2311 * AdminActions::parse_currenttime()
2312 * Parse skinvar currenttime
2314 * @param string $what
2317 function parse_currenttime($what)
2320 if ( requestVar('action') == 'itemedit' )
2322 $itemid = intRequestVar('itemid');
2323 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
2325 elseif ( requestVar('action') == 'createitem' )
2327 $blog =& $manager->getBlog(intRequestVar('blogid'));
2329 $nu = getdate($blog->getCorrectTime());
2334 * AdminActions::parse_customhelplink()
2335 * Parse skinvar customhelplink
2337 * @param string $topic name of topic
2338 * @param string $tplName name of template
2339 * @param string $url string as URI
2340 * @param string $iconURL string as URI for icon
2341 * @param string $alt alternative text for image element
2342 * @param string $title title for anchor element
2345 public function parse_customhelplink($topic, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
2347 $this->customHelp($topic, $url, $iconURL);
2352 * AdminActions::parse_date()
2353 * Parse skinvar date
2355 public function parse_date($format = 'c')
2357 global $CONF, $manager;
2358 echo i18n::formatted_datetime($format, time(), 'iso8601', $manager->getBlog((integer) $CONF['DefaultBlog']));
2363 * AdminActions::parse_defaultadminskintypes()
2364 * Parse skinvar defaultadminskintypes
2366 * @param string $tabindex index number for tabindex attribute of input element
2367 * @param string $templateName name of template
2370 public function parse_defaultadminskintypes($tabindex, $templateName = '')
2372 $templates = array();
2374 if ( $templateName )
2376 $templates = Template::read($templateName);
2379 $types = $this->skin->getAvailableTypes();
2382 /* NOTE: set templates for HEAD/BODY/FOOT */
2383 if ( !array_key_exists('ADMINSKINTYPELIST_HEAD', $templates) || empty($templates['ADMINSKINTYPELIST_HEAD']) )
2385 $template['head'] = "<ul>\n";
2389 $template['head'] = $templates['ADMINSKINTYPELIST_HEAD'];
2391 if ( !array_key_exists('ADMINSKINTYPELIST_BODY', $templates) || empty($templates['ADMINSKINTYPELIST_BODY']) )
2393 $template['body'] = "<li>"
2394 . "<a tabindex=\"<%tabindex%>\" href=\"index.php?action=adminskinedittype&skinid=<%skinid%>&type=<%skintype%>\"><%name%></a> <%help%>"
2399 $template['body'] = $templates['ADMINSKINTYPELIST_BODY'];
2401 if ( !array_key_exists('ADMINSKINTYPELIST_FOOT', $templates) || empty($templates['ADMINSKINTYPELIST_FOOT']) )
2403 $template['foot'] = "</ul>\n";
2407 $template['foot'] = $templates['ADMINSKINTYPELIST_FOOT'];
2410 $handler = new AdminActions('template');
2411 $parser = new PARSER($handler);
2413 /* NOTE: do output */
2414 echo $template['head'];
2415 foreach ( $types as $type => $fName )
2417 $helplink = $this->customHelpHtml("skinpart{$type}{$templateName}");
2419 'tabindex' => $tabindex,
2420 'skintype' => $type,
2422 'help' => $helplink,
2423 'skinid' => intrequestVar('skinid'),
2425 $parser->parse(Template::fill($template['body'], $data));
2428 echo $template['foot'];
2434 * AdminActions::parse_defblogselect()
2435 * Parse skinvar defblogselect
2437 * @param string $templateName name of template
2440 public function parse_defblogselect($templateName = '')
2444 $query = "SELECT bname as text, bnumber as value FROM %s;";
2445 $query = sprintf($query, sql_table('blog'));
2447 $template['name'] = 'DefaultBlog';
2448 $template['selected'] = $CONF['DefaultBlog'];
2449 $template['tabindex'] = 10;
2451 Showlist($query, 'select', $template, $templateName);
2457 * AdminActions::parse_defcatselect()
2458 * Parse skinvar defcatselect
2460 * @param string $templateName name of template
2463 public function parse_defcatselect($templateName = '')
2467 $blogid = intRequestVar('blogid');
2468 $blog = $manager->getBlog($blogid);
2470 $query = "SELECT cname as text, catid as value FROM %s WHERE cblog=%d;";
2471 $query = sprintf($query, sql_table('category'), (integer) $blog->getID());
2473 $template['name'] = 'defcat';
2474 $template['selected'] = $blog->getDefaultCategory();
2475 $template['tabindex'] = 110;
2477 Showlist($query, 'select', $template, $templateName);
2483 * AdminActions::parse_defskinselect()
2484 * Parse skinvar defskinselect
2486 * @param string $type type of skin
2487 * @param string $templateName name of template
2490 public function parse_defskinselect($type = 'blog', $templateName = '')
2492 global $CONF, $manager;
2494 $query = "SELECT sdname as text, sdnumber as value FROM %s WHERE sdname NOT LIKE 'admin/%%';";
2495 $query = sprintf($query, sql_table('skin_desc'));
2497 $blogid = intRequestVar('blogid');
2501 $template['selected'] = $CONF['BaseSkin'];
2505 $blog = $manager->getBlog($blogid);
2506 $template['selected'] = $blog->getDefaultSkin();
2509 if ( $type != 'blog' )
2511 $nname = 'BaseSkin';
2518 $template['name'] = $nname;
2519 $template['tabindex'] = 50;
2521 Showlist($query, 'select', $template, $templateName);
2527 * AdminActions::parse_deletecomment()
2528 * Parse skinvar deletecomment
2530 * @param string $type type of infomation for comment
2533 public function parse_deletecomment($type = 'id')
2535 $commentid = intRequestVar('commentid');
2536 $comment = COMMENT::getComment($commentid);
2541 echo intRequestVar('commentid');
2544 if ( array_key_exists('member', $comment) && !empty($comment['member']) )
2546 echo $comment['member'];
2550 echo $comment['user'];
2554 $body = strip_tags($comment['body']);
2555 echo Entity::hsc(shorten($body, 300, '...'));
2561 * AdminActions::parse_deleteitembody()
2562 * Parse skinvar deleteitembody
2567 public function parse_deleteitembody()
2571 $itemid = intRequestVar('itemid');
2572 $item =& $manager->getItem($itemid, 1, 1);
2574 $body = strip_tags($item['body']);
2576 echo Entity::hsc(shorten($body, 300, '...'));
2582 * AdminActions::parse_deleteitemid()
2583 * Parse skinvar deleteitemid
2588 public function parse_deleteitemid()
2590 echo (integer) intRequestVar('itemid');
2595 * AdminActions::parse_deleteitemtitle()
2596 * Parse skinvar deleteitemtitle
2601 public function parse_deleteitemtitle()
2605 $itemid = intRequestVar('itemid');
2606 $item =& $manager->getItem($itemid, 1, 1);
2608 echo Entity::hsc(strip_tags($item['title']));
2614 * AdminActions::parse_editadminskin()
2615 * Parse skinvar editadminskin
2617 * @param string $type type of skin setting
2620 public function parse_editadminskin($type = 'id')
2622 $skinid = intRequestVar('skinid');
2623 $skin = new Skin($skinid);
2627 echo intRequestVar('skinid');
2630 echo Entity::hsc($skin->getName());
2633 echo Entity::hsc($skin->getDescription());
2636 echo Entity::hsc($skin->getContentType());
2639 echo Entity::hsc($skin->getIncludePrefix());
2642 $this->parse_inputyesno('inc_mode', $skin->getIncludeMode(), 120, 'skindir', 'normal', _PARSER_INCMODE_SKINDIR, _PARSER_INCMODE_NORMAL);
2650 * AdminActions::parse_editadminskintype()
2651 * Parse skinvar editadminskintype
2653 * @param string $type name of skin type
2656 public function parse_editadminskintype($type = 'id')
2658 global $CONF, $manager, $member;
2660 $fNames = $this->skin->getAvailableTypes();
2661 $sType = strtolower(trim(requestVar('type')));
2666 echo intRequestVar('skinid');
2669 echo Entity::hsc($this->skin->getName());
2672 echo Entity::hsc($this->skin->getDescription());
2675 echo Entity::hsc($this->skin->getContentType());
2678 echo Entity::hsc($this->skin->getContentFromDB($sType));
2681 $skinType = !array_key_exists($sType, $fNames) ? ucfirst($sType) : $fNames[$sType];
2682 echo Entity::hsc($skinType);
2685 echo Entity::hsc($sType);
2688 echo Entity::hsc($this->skin->getIncludePrefix());
2691 $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;
2692 echo Entity::hsc($incMode);
2701 * AdminActions::parse_editcomment()
2702 * Parse skinvar editcomment
2704 * @param string $type type of comment setting
2707 public function parse_editcomment($type = 'id')
2711 $commentid = intRequestVar('commentid');
2712 $comment = COMMENT::getComment($commentid);
2714 $manager->notify('PrepareCommentForEdit', array('comment' => &$comment));
2719 echo intRequestVar('commentid');
2722 if ( !array_key_exists('member', $comment) || empty($comment['member']) )
2724 echo $comment['user'] . " (" . _EDITC_NONMEMBER . ")";
2728 echo $comment['member'] . " (" . _EDITC_MEMBER . ")";
2732 echo date("Y-m-d @ H:i", $comment['timestamp']);
2735 $comment['body'] = str_replace('<br />', '', $comment['body']);
2736 $comment['body'] = preg_replace("#<a href=['\"]([^'\"]+)['\"]( rel=\"nofollow\")?>[^<]*</a>#", "\\1", $comment['body']);
2737 echo $comment['body'];
2739 echo $comment[$type];
2746 * AdminActions::parse_editdesturl()
2747 * Parse skinvar editdesturl
2749 public function parse_editdesturl()
2751 if ( requestVar('desturl') )
2753 echo Entity::hsc(requestVar('desturl'));
2759 * AdminActions::parse_editmemberlist()
2760 * Parse skinvar editmemberlist
2762 * @param string $templateName name of template
2765 public function parse_editmemberlist($templateName = '')
2768 // show list of members with actions
2769 $query = 'SELECT * FROM '.sql_table('member');
2770 $template['content'] = 'memberlist';
2771 $template['tabindex'] = 10;
2773 $batch = new Batch('member');
2774 $batch->showlist($query, 'table', $template, _LISTS_NOMORE, $templateName);
2779 * AdminActions::parse_editmember()
2780 * Parse skinvar editmember
2782 * @param string $type type of information for member
2783 * @return string $tempateName name of template to use
2786 public function parse_editmember($type = 'id', $templateName = '')
2788 global $CONF, $manager, $member;
2790 $memberid = intRequestVar('memberid');
2791 $mem = MEMBER::createFromID($memberid);
2796 echo intRequestVar('memberid');
2799 if ( $this->skintype == 'teamdelete' || $this->skintype == 'memberdelete' )
2801 echo Entity::hsc($mem->getDisplayName());
2805 $dispName = Entity::hsc($mem->getDisplayName());
2806 if ( $CONF['AllowLoginEdit'] || $member->isAdmin() )
2808 echo '<input name="name" tabindex="10" maxlength="32" size="32" value="' . $dispName . "\" />\n";
2817 echo Entity::hsc($mem->getRealName());
2820 echo Entity::hsc($mem->getEmail());
2823 echo Entity::hsc($mem->getURL());
2826 $this->parse_inputyesno('admin', $mem->isAdmin(), 60, 1, 0, _YES, _NO, 0, $templateName);
2829 $this->parse_inputyesno('canlogin', $mem->canLogin(), 70, 1, 0, _YES, _NO, $mem->isAdmin(), $templateName);
2832 echo Entity::hsc($mem->getNotes());
2835 $this->parse_inputyesno('autosave', $mem->getAutosave(), 87, 1, 0, _YES, _NO, 0, $templateName);
2844 * AdminActions::parse_editpluginfo()
2845 * Parse skinvar editpluginfo
2847 * @param string $type type of plugin info
2850 public function parse_editpluginfo($type)
2852 $pid = intRequestVar('plugid');
2859 echo Entity::hsc(getPluginNameFromPid($pid));
2866 * AdminActions::parse_editplugoptionslist()
2867 * Parse skinvar editplugoptionslist
2869 * @param string $templateName name of template
2872 public function parse_editplugoptionslist($templateName = '')
2876 $pid = intRequestVar('plugid');
2877 $aOptions = array();
2880 $query = "SELECT * FROM %s WHERE ocontext='global' AND opid=%d ORDER BY oid ASC;";
2881 $query = sprintf($query, sql_table('plugin_option_desc'), (integer) $pid);
2882 $resource = sql_query($query);
2884 while ( $o = sql_fetch_object($resource) )
2886 array_push($aOIDs, $o->oid);
2887 $aOptions[$o->oid] = array(
2889 'value' => $o->odef,
2890 'name' => $o->oname,
2891 'description' => $o->odesc,
2892 'type' => $o->otype,
2893 'typeinfo' => $o->oextra,
2898 // fill out actual values
2899 if ( count($aOIDs) > 0 )
2901 $query = 'SELECT oid, ovalue FROM %s WHERE oid in (%s)';
2902 $query = sprintf($query, sql_table('plugin_option'), implode(',', $aOIDs));
2904 $result = sql_query($query);
2906 while ( $o = sql_fetch_object($result) )
2908 $aOptions[$o->oid]['value'] = $o->ovalue;
2914 'context' => 'global',
2916 'options' => &$aOptions
2918 $manager->notify('PrePluginOptionsEdit', $data);
2920 $template['content'] = 'plugoptionlist';
2922 $amount = Showlist($aOptions, 'table', $template, $templateName);
2926 echo '<p>' . _ERROR_NOPLUGOPTIONS . "</p>\n";
2932 * AdminActions::parse_editskin()
2933 * Parse skinvar editskin
2935 * @param string $type type of skin
2938 public function parse_editskin($type = 'id')
2940 $skinid = intRequestVar('skinid');
2941 $skin = new SKIN($skinid);
2945 echo intRequestVar('skinid');
2948 echo Entity::hsc($skin->getName());
2951 echo Entity::hsc($skin->getDescription());
2954 echo Entity::hsc($skin->getContentType());
2957 echo Entity::hsc($skin->getIncludePrefix());
2960 $this->parse_inputyesno('inc_mode', $skin->getIncludeMode(), 120, 'skindir', 'normal', _PARSER_INCMODE_SKINDIR, _PARSER_INCMODE_NORMAL);
2968 * AdminActions::parse_editskintype()
2969 * Parse skinvar editskintype
2971 * @param string $type name of type for skin type
2974 public function parse_editskintype($type = 'id')
2976 global $CONF, $manager, $member;
2977 $skinid = intRequestVar('skinid');
2978 $skin = new SKIN($skinid);
2979 $fNames = $skin->getAvailableTypes();
2980 $sType = strtolower(trim(requestVar('type')));
2985 echo intRequestVar('skinid');
2988 echo Entity::hsc($skin->getName());
2991 echo Entity::hsc($skin->getDescription());
2994 echo Entity::hsc($skin->getContentType());
2997 echo Entity::hsc($skin->getContentFromDB($sType));
3000 $skinType = !array_key_exists($sType, $fNames) ? ucfirst($sType) : $fNames[$sType];
3001 echo Entity::hsc($skinType);
3004 echo Entity::hsc($sType);
3007 echo Entity::hsc($skin->getIncludePrefix());
3010 $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;
3011 echo Entity::hsc($incMode);
3020 * AdminActions::parse_adminurl()
3021 * Parse skinvar adminurl
3022 * (shortcut for admin url)
3027 public function parse_adminurl()
3029 $this->parse_sitevar('adminurl');
3034 * AdminActions::parse_edittemplateinfo()
3035 * Parse skinvar edittemplateinfo
3037 * @param string $type name of type for skin
3038 * @param string $description description for skin
3039 * @param string $name name of skin
3040 * @param string $help
3041 * @param string $tabindex index value for tabindex attribute of input element
3042 * @param string $big
3043 * @param string $tplt name of template
3046 public function parse_edittemplateinfo($type, $desc = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')
3050 $t_id = intRequestVar('templateid');
3051 $t_name = Template::getNameFromId($t_id);
3052 $t_desc = Template::getDesc($t_id);
3053 $template = &Template::read($t_name);
3061 echo Entity::hsc($t_name);
3064 echo Entity::hsc($t_desc);
3066 case 'extratemplate':
3068 $pluginfields = array();
3069 $manager->notify('TemplateExtraFields', array('fields' => &$pluginfields));
3074 $tmplt = Template::read($desc);
3076 if ( !array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) || empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )
3080 . '<th colspan="2"><%explugtplname%>' . "</th>\n";
3084 $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];
3087 foreach ( $pluginfields as $pfkey => $pfvalue )
3089 $data = array('explugtplname' => Entity::hsc($pfkey));
3091 echo Template::fill($base, $data);
3093 foreach ( $pfvalue as $pffield => $pfdesc )
3095 $this->templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);
3100 $desc = defined($desc) ? constant($desc) : $desc;
3101 $name = defined($name) ? constant($name) : $name;
3102 $this->templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);
3110 * AdminActions::parse_editadmintemplateinfo()
3111 * Parse skinvar editadmintemplateinfo
3113 * @param string $type type of skin template
3114 * @param string $description description of template
3115 * @param string $name name of stemplate
3116 * @param string $tabindex index number for tabindex attribute of input element
3117 * @param string $big
3118 * @param string $tplt
3120 public function parse_editadmintemplateinfo($type, $desc = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')
3124 $t_id = intRequestVar('templateid');
3125 $t_name = Template::getNameFromId($t_id);
3126 $t_desc = Template::getDesc($t_id);
3127 $template = &Template::read($t_name);
3135 echo Entity::hsc($t_name);
3138 echo Entity::hsc($t_desc);
3140 case 'extratemplate':
3142 $pluginfields = array();
3143 $manager->notify('AdminTemplateExtraFields', array('fields' => &$pluginfields));
3148 $tmplt = Template::read($desc);
3150 if ( !array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) || empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )
3154 . '<th colspan="2"><%explugtplname%>' . "</th>\n";
3158 $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];
3161 foreach ( $pluginfields as $pfkey => $pfvalue )
3163 $data = array('explugtplname' => Entity::hsc($pfkey));
3165 echo Template::fill($base, $data);
3167 foreach ( $pfvalue as $pffield => $pfdesc )
3169 $this->templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);
3174 $desc = defined($desc) ? constant($desc) : $desc;
3175 $name = defined($name) ? constant($name) : $name;
3176 $this->templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);
3183 * AdminActions::parse_eventformextra()
3184 * Parse skinvar eventformextra
3186 * @param string $type name of type for event form extra
3189 public function parse_eventformextra($type = 'activation')
3198 $key = requestVar('ackey');
3201 Admin::error(_ERROR_ACTIVATE);
3203 $info = MEMBER::getActivationInfo($key);
3206 Admin::error(_ERROR_ACTIVATE);
3208 $mem = MEMBER::createFromId($info->vmember);
3211 Admin::error(_ERROR_ACTIVATE);
3214 'type' => 'activation',
3218 case 'membermailform-notloggedin':
3219 $data = array('type' => 'membermailform-notloggedin',);
3222 $manager->notify('FormExtra', $data);
3227 * AdminActions::parse_extrahead()
3228 * Parse skinvar extrahead
3230 public function parse_extrahead()
3234 $extrahead = Admin::getAdminextrahead();
3237 'extrahead' => &$extrahead,
3238 'action' => Admin::getAdminAction()
3241 $manager->notify('AdminPrePageHead', $data);
3247 * AdminActions::parse_member()
3248 * Parse skinvar member
3249 * (includes a member info thingie)
3251 * @param string $what which memberdata is needed
3254 public function parse_member($what)
3256 global $memberinfo, $member, $CONF;
3258 // 1. only allow the member-details-page specific variables on member pages
3259 if ( $this->skintype == 'member' )
3264 echo Entity::hsc($memberinfo->getDisplayName());
3267 echo Entity::hsc($memberinfo->getRealName());
3270 echo Entity::hsc($memberinfo->getNotes());
3273 echo Entity::hsc($memberinfo->getURL());
3276 echo Entity::hsc($memberinfo->getEmail());
3279 echo Entity::hsc($memberinfo->getID());
3284 // 2. the next bunch of options is available everywhere, as long as the user is logged in
3285 if ( $member->isLoggedIn() )
3290 echo $member->getDisplayName();
3292 case 'yourrealname':
3293 echo $member->getRealName();
3296 echo $member->getNotes();
3299 echo $member->getURL();
3302 echo $member->getEmail();
3305 echo $member->getID();
3307 case 'yourprofileurl':
3308 if ( $CONF['URLMode'] == 'pathinfo' )
3310 echo Link::create_member_link($member->getID());
3314 echo $CONF['IndexURL'] . Link::create_member_link($member->getID());
3323 * AdminActions::parse_version()
3324 * Parse skinvar version
3325 * (include nucleus versionnumber)
3330 public function parse_version()
3333 echo 'Nucleus CMS ' . $nucleus['version'];
3338 * AdminActions::parse_sitevar()
3339 * Parse skinvar sitevar
3340 * (include a sitevar)
3342 * @param string $which
3345 public function parse_sitevar($which)
3351 echo $CONF['IndexURL'];
3354 echo $CONF['SiteName'];
3357 echo $CONF['AdminEmail'];
3360 echo $CONF['AdminURL'];
3366 * AdminActions::parse_charset()
3367 * Parse skinvar charset
3372 public function parse_charset()
3374 echo i18n::get_current_charset();
3379 * AdminActions::parse_getblogsetting()
3380 * Parse skinvar getblogsetting
3382 public function parse_getblogsetting($which)
3390 elseif ( $bid = intRequestVar('blogid') )
3393 $b = $manager->getBlog($bid);
3403 return Entity::hsc($b->getID());
3406 return Entity::hsc($b->getURL());
3409 return Entity::hsc($b->getName());
3412 return Entity::hsc($b->getDescription());
3415 return Entity::hsc($b->getShortName());
3417 case 'notifyaddress':
3418 return Entity::hsc($b->getNotifyAddress());
3421 return Entity::hsc($b->getMaxComments());
3424 return Entity::hsc($b->getUpdateFile());
3427 return Entity::hsc($b->getTimeOffset());
3434 * AdminActions::parse_geteditpluginfo()
3435 * Parse skinvar geteditpluginfo
3437 * @param string $type name of setting for edit plugin info
3440 public function parse_geteditpluginfo($type)
3442 $pid = intRequestVar('plugid');
3449 return Entity::hsc(getPluginNameFromPid($pid));
3456 * AdminActions::parse_getmember()
3457 * Parse skinvar getmember
3458 * (includes a member info thingie)
3460 * @param string $what name of setting for member
3463 public function parse_getmember($what)
3465 global $memberinfo, $member;
3466 // 1. only allow the member-details-page specific variables on member pages
3467 if ( $this->skintype == 'member' )
3472 return Entity::hsc($memberinfo->getDisplayName());
3475 return Entity::hsc($memberinfo->getRealName());
3478 return Entity::hsc($memberinfo->getNotes());
3481 return Entity::hsc($memberinfo->getURL());
3484 return Entity::hsc($memberinfo->getEmail());
3487 return Entity::hsc($memberinfo->getID());
3491 // 2. the next bunch of options is available everywhere, as long as the user is logged in
3492 if ( $member->isLoggedIn() )
3497 return $member->getDisplayName();
3499 case 'yourrealname':
3500 return $member->getRealName();
3503 return $member->getNotes();
3506 return $member->getURL();
3509 return $member->getEmail();
3512 return $member->getID();
3520 * AdminActions::parse_headmessage()
3521 * Parse skinvar headmessage
3526 public function parse_headmessage()
3528 if ( !empty(Admin::$headMess) )
3530 echo '<p>' . _MESSAGE . ': ' . Entity::hsc(Admin::$headMess) . "</p>\n";
3536 * AdminActions::parse_helplink()
3537 * Parse skinvar helplink
3539 * @param string $topic name of topic for help
3542 public function parse_helplink($topic = '')
3544 if ( !empty($topic) )
3552 * AdminActions::parse_helpplugname()
3553 * Parse skinvar helpplugname
3558 public function parse_helpplugname()
3560 $plugid = intGetVar('plugid');
3561 Entity::hsc(getPluginNameFromPid($plugid));
3566 * AdminActions::parse_ilistaddnew()
3567 * Parse skinvar ilistaddnew
3572 public function parse_ilistaddnew()
3574 $blogid = intRequestVar('blogid');
3575 if ( intPostVar('start') == 0 )
3577 echo '<p><a href="index.php?action=createitem&blogid=' . $blogid . '">' . _ITEMLIST_ADDNEW . "</a></p>\n";
3583 * AdminActions::parse_importskininfo()
3584 * Parse skinvar importskininfo
3586 * @param string $type name of information for imported skin
3589 public function parse_importskininfo($type)
3594 echo Entity::hsc(requestVar('skininfo'));
3597 $dataArr = requestArray('skinnames');
3598 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3601 $dataArr = requestArray('tpltnames');
3602 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3605 $dataArr = requestArray('skinclashes');
3606 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3609 $dataArr = requestArray('tpltclashes');
3610 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3613 echo Entity::hsc(requestVar('skinfile'));
3616 echo Entity::hsc(requestVar('mode'));
3623 * AdminActions::parse_inputyesno()
3624 * Parse skinvar inputyesno
3626 * some init stuff for all forms
3631 function parse_init()
3636 if ( requestVar('action') == 'itemedit' )
3638 $itemid = intRequestVar('itemid');
3639 $item =& $manager->getItem($itemid, 1, 1);
3641 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
3642 if ( $item && $blog->convertBreaks() )
3644 $item['body'] = removeBreaks($item['body']);
3645 $item['more'] = removeBreaks($item['more']);
3648 $authorid = $contents['authorid'];
3650 elseif ( requestVar('action') == 'createitem' )
3652 $blogid = intRequestVar('blogid');
3653 $blog =& $manager->getBlog($blogid);
3656 $blog->insertJavaScriptInfo($authorid);
3661 * AdminActions::parse_inputyesno()
3662 * Parse skinvar inputyesno
3664 * @param string $name
3665 * @param string $checkedval
3666 * @param string $tabindex
3667 * @param string $value1
3668 * @param string $value2
3669 * @param string $yesval
3670 * @param string $noval
3671 * @param string $isAdmin
3672 * @param string $templateName
3675 public function parse_inputyesno($name, $checkedval, $tabindex = 0, $value1 = 1, $value2 = 0, $yesval = _YES, $noval = _NO, $isAdmin = 0, $templateName = '')
3677 self::input_yesno($name, $checkedval, $tabindex, $value1, $value2, $yesval, $noval, $isAdmin, $templateName );
3682 * AdminActions::parse_insertpluginfo()
3683 * Parse templatevar insertpluginfo
3685 public function parse_insertpluginfo($type)
3687 $option = Admin::$aOptions;
3691 return $option['pid'];
3694 return Entity::hsc($option['pfile']);
3701 * AdminActions::parse_insertpluginoptions()
3702 * Parse skinvar insertpluginoptions
3704 * @param string $templateName name of template
3707 public function parse_insertpluginoptions($templateName = '')
3709 $options = Admin::getAdminaOption();
3710 $template = array();
3711 $templats = array();
3713 if ( $templateName )
3715 $templates = Template::read($templateName);
3717 if ( !array_key_exists('INSERT_PLUGOPTION_TITLE', $templates) || empty($templates['INSERT_PLUGOPTION_TITLE']) )
3719 $template['title'] = "<tr>"
3720 . "<th colspan=\"2\"><%sprinttext(_PLUGIN_OPTIONS_TITLE, <|%insertpluginfo(name)%|>)%></th>"
3725 $template['title'] = $templates['INSERT_PLUGOPTION_TITLE'];
3727 if ( !array_key_exists('INSERT_PLUGOPTION_BODY', $templates) || empty($templates['INSERT_PLUGOPTION_BODY']) )
3729 $template['body'] = "<tr>"
3730 . "<%listplugplugoptionrow%>"
3735 $template['body'] = $templates['INSERT_PLUGOPTION_BODY'];
3740 include_libs('ACTIONS.php');
3741 $handler = new Actions($this->skintype);
3742 $parser = new PARSER($handler);
3744 foreach ( $options as $option )
3748 if ( $prevPid != $option['pid'] )
3750 $prevPid = $option['pid'];
3751 $parser->parse($template['title']);
3754 $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);
3756 if ( @$meta['access'] != 'hidden' )
3758 $parsed = $parser->parse($template['body']);
3765 * AdminActions::parse_insplugoptcontent()
3766 * Parse skinvar insplugoptcontent
3771 public function parse_insplugoptcontent()
3773 $option = Admin::$aOption;
3775 $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);
3776 if ( array_key_exists('access', $meta) && $meta['access'] != 'hidden' )
3779 listplug_plugOptionRow($option);
3786 * AdminActions::parse_iprangeinput()
3787 * Parse skinvar iprangeinput
3792 public function parse_iprangeinput()
3794 if ( requestVar('ip') )
3796 $iprangeVal = Entity::hsc(requestVar('ip'));
3797 echo "<input name=\"iprange\" type=\"radio\" value=\"{$iprangeVal}\" checked=\"checked\" id=\"ip_fixed\" />\n";
3798 echo "<label for=\"ip_fixed\">{$iprangeVal}</label><br />\n";
3799 echo '<input name="iprange" type="radio" value="custom" id="ip_custom" />' . "\n";
3800 echo '<label for="ip_custom">' . _BAN_IP_CUSTOM . '</label>' . "\n";
3801 echo "<input name=\"customiprange\" value=\"{$iprangeVal}\" maxlength=\"15\" size=\"15\" />\n";
3805 echo '<input name="iprange" value="custom" type="hidden" />' . "\n";
3806 echo '<input name="customiprange" value="" maxlength="15" size="15" />' . "\n";
3812 * AdminActions::parse_itemnavlist()
3813 * Parse skinvar itemnavlist
3818 public function parse_itemnavlist()
3820 global $CONF, $manager, $member;
3821 if ( $this->skintype == 'itemlist' )
3823 $blogid = intRequestVar('blogid');
3824 $blog =& $manager->getBlog($blogid);
3826 if ( postVar('start') )
3828 $start = intPostVar('start');
3835 // amount of items to show
3836 if ( postVar('amount') )
3838 $amount = intPostVar('amount');
3842 $amount = intval($CONF['DefaultListSize']);
3848 $query = "SELECT bshortname, cname, mname, ititle, ibody, inumber, idraft, itime"
3849 . " FROM %s, %s, %s, %s"
3850 . " WHERE iblog=bnumber AND iauthor=mnumber AND icat=catid";
3852 $query = sprintf($query, sql_table('item'), sql_table('blog'), sql_table('member'), sql_table('category'));
3854 if ( $this->skintype == 'itemlist' )
3856 $query .= ' AND iblog = ' . $blogid;
3857 $template['now'] = $blog->getCorrectTime(time());
3859 // non-blog-admins can only edit/delete their own items
3860 if ( !$member->blogAdminRights($blogid) )
3862 $query .= ' AND iauthor = ' . $member->getID();
3865 elseif ( $this->skintype == 'browseownitems' )
3867 $query .= ' AND iauthor = ' . $member->getID();
3869 $template['now'] = time();
3872 // search through items
3873 $search = postVar('search');
3875 if ( !empty($search) )
3877 $query .= ' AND ((ititle LIKE "%' . sql_real_escape_string($search) . '%") '
3878 . ' OR (ibody LIKE "%' . sql_real_escape_string($search) . '%") '
3879 . ' OR (imore LIKE "%' . sql_real_escape_string($search) . '%"))';
3881 $query .= ' ORDER BY itime DESC'
3882 . " LIMIT {$start},{$amount}";
3884 $template['content'] = 'itemlist';
3886 $navList = new Navlist($this->skintype, $start, $amount, 0, 1000, $blogid, $search, 0);
3887 $navList->showBatchList('item', $query, 'table', $template);
3892 * AdminActions::parse_itemoptions()
3893 * Parse skinvar itemoptions
3894 * Adds the itemOptions of a plugin to a page
3897 function parse_itemoptions()
3899 $this->parse_pluginoptions('item');
3904 * AdminActions::parse_itemoptions()
3906 * date change on edit item
3908 * Parse skinvar itemoptions
3909 * Adds the itemOptions of a plugin to a page
3912 function parse_itemtime($what)
3917 $itemid = intRequestVar('itemid');
3918 $item =& $manager->getItem($itemid, 1, 1);
3920 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
3922 if ( $item && $blog->convertBreaks() && requestVar('action') == 'itemedit' )
3924 $item['body'] = removeBreaks($item['body']);
3925 $item['more'] = removeBreaks($item['more']);
3928 $contents = array();
3929 if ( requestVar('action') == 'itemedit' )
3933 elseif ( requestVar('action') == 'createitem' )
3936 'contents' => &$contents,
3937 'blog' => &$this->blog
3939 $manager->notify('PreAddItemForm', $data);
3941 $itemtime = getdate($contents['timestamp']);
3942 echo $itemtime[$what];
3947 * AdminActions::parse_jstoolbaroptions()
3948 * Parse skinvar jstoolbaroptions
3953 public function parse_jstoolbaroptions()
3957 _SETTINGS_JSTOOLBAR_NONE,
3958 _SETTINGS_JSTOOLBAR_SIMPLE,
3959 _SETTINGS_JSTOOLBAR_FULL
3963 foreach ( $options as $option )
3965 $text = "<option value=\"%d\"%s>%s</option>\n";
3966 $extra = ($CONF['DisableJsTools'] == $i) ? ' selected="selected"' : '';
3967 echo sprintf($text, $i, $extra, $option);
3973 * AdminActions::parse_localeselectoptions()
3974 * Parse skinvar localeselectoptions
3979 public function parse_localeselectoptions()
3981 $locales = i18n::get_available_locale_list();
3983 $memid = intRequestVar('memberid');
3986 $mem = MEMBER::createFromID($memid);
3987 if ( !$mem->getLocale() || !in_array($mem->getLocale(), $locales) )
3989 echo "<option value=\"\" selected=\"selected\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";
3993 echo "<option value=\"\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";
3998 if ( !i18n::get_current_locale() || !in_array(i18n::get_current_locale(), $locales) )
4000 echo "<option value=\"\" selected=\"selected\">en_Latn_US</option>\n";
4004 echo "<option value=\"\">en_Latn_US</option>\n";
4007 foreach ( $locales as $locale )
4009 if ( $locale == 'en_Latn_US' )
4015 if ( $locale == $mem->getLocale() )
4017 echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";
4021 echo "<option value=\"{$locale}\">{$locale}</option>\n";
4026 if ( $locale == i18n::get_current_locale() )
4028 echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";
4032 echo "<option value=\"{$locale}\">{$locale}</option>\n";
4040 * AdminActions::parse_listplugplugoptionrow()
4041 * Parse templatevar listplugplugoptionrow
4043 * @param string $templateName name of template
4046 public function parse_listplugplugoptionrow($templateName = '')
4048 echo listplug_plugOptionRow(Admin::$aOptions, $templateName);
4053 * AdminActions::parse_mediadirwarning()
4054 * Parse skinvar mediadirwarning
4059 public function parse_mediadirwarning()
4062 if ( !is_dir($DIR_MEDIA) )
4064 echo "<br /><b>" . _WARNING_NOTADIR . "</b>\n";
4066 if ( !is_readable($DIR_MEDIA) )
4068 echo "<br /><b>" . _WARNING_NOTREADABLE . "</b>\n";
4070 if ( !is_writeable($DIR_MEDIA) )
4072 echo "<br /><b>" . _WARNING_NOTWRITABLE . "</b>\n";
4078 * AdminActions::parse_movedistselect()
4079 * Parse skinvar movedistselect
4081 public function parse_movedistselect()
4083 $actionType = requestVar('action');
4084 switch ( $actionType )
4087 Admin::selectBlogCategory('destcatid');
4089 case 'batchcategory':
4090 Admin::selectBlog('destblogid');
4093 if ( $this->skintype == 'itemmove' )
4095 $query = "SELECT icat as result FROM %s WHERE inumber=%d;";
4096 $query = sprintf($query, sql_table('item'), intRequestVar('itemid'));
4097 $catid = quickQuery(sprintf($query, intRequestVar('itemid')));
4098 Admin::selectBlogCategory('catid', $catid, 10, 1);
4106 * AdminActions::parse_moveitemid()
4107 * Parse skinvar moveitemid
4112 public function parse_moveitemid()
4114 echo intRequestVar('itemid');
4119 * AdminActions::parse_newestcompare()
4120 * Parse skinvar newestcompare
4125 public function parse_newestcompare()
4129 $newestVersion = getLatestVersion();
4130 $newestCompare = str_replace('/', '.', $newestVersion);
4131 $currentVersion = str_replace(array('/', 'v'), array('.', ''), $nucleus['version']);
4133 if ( $newestVersion && version_compare($newestCompare, $currentVersion, '>') )
4135 echo '<br /><a style="color:red" href="http://nucleuscms.org/upgrade.php" title="' . _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE . '">';
4136 echo _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT . $newestVersion . '</a>';
4142 * AdminActions::parse_newmemberselect()
4143 * Parse skinvar newmemberselect
4145 * @param string $templateName name of template to use
4148 public function parse_newmemberselect($templateName = '')
4150 $blogid = intRequestVar('blogid');
4152 $query = "SELECT tmember FROM %s WHERE tblog=%d;";
4153 $query = sprintf($query, sql_table('team'), (integer) $blogid);
4154 $res = sql_query($query);
4157 while ( $tmember = sql_fetch_object($res) )
4159 $tmem[] = intval($tmember->tmember);
4162 $query = "SELECT mname as text, mnumber as value FROM %s WHERE mnumber NOT IN (%s);";
4163 $query = sprintf($query, sql_table('member'), implode(', ', $tmem));
4165 $template['name'] = 'memberid';
4166 $template['tabindex'] = 10000;
4167 Showlist($query, 'select', $template, $templateName);
4172 * AdminActions::parse_newpluginlist()
4173 * Parse skinvar newpluginlist
4178 public function parse_newpluginlist()
4180 $candidates = $this->newPlugCandidates;
4181 foreach ( $candidates as $name )
4183 echo '<option value="NP_' . $name . '">' . Entity::hsc($name) . "</option>\n";
4189 * AdminActions::parse_outputspecialdirs()
4190 * Parse skinvar outputspecialdirs
4192 * @param string $type type of setting for directory
4195 public function parse_outputspecialdirs($type)
4197 global $DIR_MEDIA, $DIR_NUCLEUS;
4202 echo Entity::hsc($DIR_NUCLEUS);
4205 echo Entity::hsc($DIR_MEDIA);
4212 * AdminActions::parse_passrequestvars()
4213 * Parse skinvar passrequestvars
4218 public function parse_passrequestvars()
4220 $passvar = Admin::getAdminpassvar();
4221 $oldaction = postVar('oldaction');
4223 if ( ($oldaction != 'logout')
4224 && ($oldaction != 'login')
4226 && !postVar('customaction') )
4234 * AdminActions::parse_pluginextras()
4235 * Parse skinvar pluginextras
4237 * @param string $type type of plugin context
4240 public function parse_pluginextras($type = 'global')
4246 $id = intRequestVar('memberid');
4247 $mem = MEMBER::createFromID($id);
4248 $manager->notify('MemberSettingsFormExtras', array('member' => &$mem));
4251 $id = intRequestVar('blogid');
4252 $blg = $manager->getBlog($id);
4253 $manager->notify('BlogSettingsFormExtras', array('member' => &$blg));
4257 'GeneralSettingsFormExtras',
4267 * AdminActions::parse_pluginhelp()
4268 * Parse skinvar pluginhelp
4273 public function parse_pluginhelp()
4275 global $manager, $DIR_PLUGINS;
4277 $plugid = intGetVar('plugid');
4278 $plugName = getPluginNameFromPid($plugid);
4279 $plug =& $manager->getPlugin($plugName);
4281 if ( $plug->supportsFeature('HelpPage') > 0 )
4283 $helpfile = $DIR_PLUGINS . $plug->getShortName() . '/help.';
4284 if ( @file_exists($helpfile . 'php') )
4286 @include($helpfile . 'php');
4289 elseif ( @file_exists($helpfile . 'html') )
4291 @include($helpfile . 'html');
4295 echo '<p>' . _ERROR . ': ' . _ERROR_PLUGNOHELPFILE . "</p>\n";
4296 echo '<p><a href="index.php?action=pluginlist">(' . _BACK . ")</a></p>\n";
4301 * AdminActions::parse_pluginlistlist()
4302 * Parse skinvar pluginlistlist
4304 * @param string $templateName name of template to use
4307 public function parse_pluginlistlist($templateName = '')
4309 $query = "SELECT * FROM %s ORDER BY porder ASC;";
4310 $query = sprintf($query, sql_table('plugin'));
4312 $template['content'] = 'pluginlist';
4313 $template['tabindex'] = 10;
4315 Showlist($query, 'table', $template, $templateName);
4321 * AdminActions::parse_pluginoptions()
4322 * Parse skinvar pluginoptions
4324 * @param string $type type of plugin option
4327 public function parse_pluginoptions($type = 'global')
4334 $id = intRequestVar('memberid');
4337 $id = intRequestVar('blogid');
4340 $id = intRequestVar('catid');
4346 Admin::insertPluginOptions($type, $id);
4351 * AdminActions::parse_qmenuaddselect()
4352 * Parse skinvar qmanuaddselect
4354 * @param string $templateName name of template to use
4357 public function parse_qmenuaddselect($templateName = '')
4360 $showAll = requestVar('showall');
4361 if ( $member->isAdmin() && ($showAll == 'yes') )
4363 // Super-Admins have access to all blogs! (no add item support though)
4364 $query = 'SELECT bnumber as value, bname as text'
4365 . ' FROM ' . sql_table('blog')
4366 . ' ORDER BY bname';
4370 $query = 'SELECT bnumber as value, bname as text'
4371 . ' FROM ' . sql_table('blog') . ', ' . sql_table('team')
4372 . ' WHERE tblog=bnumber and tmember=' . $member->getID()
4373 . ' ORDER BY bname';
4376 $template['name'] = 'blogid';
4377 $template['tabindex'] = 15000;
4378 $template['extra'] = _QMENU_ADD_SELECT;
4379 $template['selected'] = -1;
4380 $template['shorten'] = 10;
4381 $template['shortenel'] = '';
4382 $template['javascript'] = 'onchange="return form.submit()"';
4384 Showlist($query, 'select', $template, $templateName);
4390 * AdminActions::parse_quickmenu()
4391 * Parse skinvar quickmenu
4393 * @param string $templateName name of template to use
4396 public function parse_quickmenu($templateName = '')
4399 $templates = array();
4400 $template = array();
4401 if ( !empty($templateName) )
4403 $templates = Template::read($templateName);
4405 $pluginExtras = array();
4409 'options' => &$pluginExtras
4412 if ( count($pluginExtras) > 0 )
4414 if ( !array_key_exists('PLUGIN_QUICKMENU_TITLE', $templates) || empty($templates['PLUGIN_QUICKMENU_TITLE']) )
4416 $template['title'] = "<h2><%text(_QMENU_PLUGINS)%></h2>\n";
4420 $template['title'] = $templates['PLUGIN_QUICKMENU_TITLE'];
4422 if ( !array_key_exists('PLUGIN_QUICKMENU_HEAD', $templates) || empty($templates['PLUGIN_QUICKMENU_HEAD']) )
4424 $template['head'] = "<ul>\n";
4428 $template['head'] = $templates['PLUGIN_QUICKMENU_HEAD'];
4430 if ( !array_key_exists('PLUGIN_QUICKMENU_BODY', $templates) && empty($templates['PLUGIN_QUICKMENU_BODY']) )
4432 $template['body'] = "<li><a href=\"<%plugadminurl%>\" title=\"<%plugadmintooltip%>\"><%plugadmintitle%></a></li>\n";
4436 $template['body'] = $templates['PLUGIN_QUICKMENU_BODY'];
4438 if ( !array_key_exists('PLUGIN_QUICKMENU_FOOT', $templates) || empty($templates['PLUGIN_QUICKMENU_FOOT']) )
4440 $template['foot'] = "</ul>\n";
4444 $template['foot'] = $templates['PLUGIN_QUICKMENU_FOOT'];
4447 $handler = new Actions($this->skintype);
4448 $parser = new PARSER($handler);
4450 $parser->parse($template['title']);
4451 echo $template['head'];
4452 foreach ( $pluginExtras as $aInfo )
4455 'plugadminurl' => Entity::hsc($aInfo['url']),
4456 'plugadmintooltip' => Entity::hsc($aInfo['tooltip']),
4457 'plugadmintitle' => Entity::hsc($aInfo['title']),
4459 echo Template::fill($template['body'], $data);
4461 echo $template['foot'];
4467 * AdminActions::parse_requestblogid()
4468 * Parse skinvar requestblogid
4473 public function parse_requestblogid()
4475 echo intRequestVar('blogid');
4480 * AdminActions::parse_requestiprange()
4481 * Parse skinvar requestiprange
4486 public function parse_requestiprange()
4488 if ( requestVar('iprange') )
4490 echo Entity::hsc(requestVar('iprange'));
4492 elseif ( requestVar('ip') )
4494 echo Entity::hsc(requestVar('ip'));
4500 * AdminActions::parse_selectlocaladminskinfiles()
4501 * Parse skinvar selectlocaladminskinfiles
4506 public function parse_selectlocaladminskinfiles()
4508 global $DIR_SKINS, $manager;
4510 $adminskindir = $DIR_SKINS . 'admin/';
4511 $candidates = SkinImport::searchForCandidates($adminskindir);
4513 foreach ( $candidates as $skinname => $skinfile )
4515 $html = Entity::hsc($skinfile);
4516 echo '<option value="' . $html . '">' . $skinname . "</option>\n";
4523 * AdminActions::parse_selectlocalskinfiles()
4524 * Parse skinvar selectlocalskinfiles
4529 public function parse_selectlocalskinfiles()
4533 $candidates = SkinImport::searchForCandidates($DIR_SKINS);
4535 foreach ( $candidates as $skinname => $skinfile )
4537 $html = Entity::hsc($skinfile);
4538 echo '<option value="' . $html . '">' . $skinname . "</option>\n";
4545 * AdminActions::parse_skineditallowedlist()
4546 * Parse skinvar skineditallowedlist
4548 * @param string $type type of skin
4549 * @param string $templateName name of template
4552 public function parse_skineditallowedlist($type, $templateName = '')
4557 $query = "SELECT bshortname, bname FROM %s;";
4559 'content' => 'shortblognames'
4561 $query = sprintf($query, sql_table('blog'));
4562 Showlist($query, 'table', $show, $templateName);
4565 $query = "SELECT tdname as name, tddesc as description FROM %s WHERE tdname NOT LIKE 'admin/%%';";
4567 'content' => 'shortnames'
4569 $query = sprintf($query, sql_table('template_desc'));
4570 Showlist($query, 'table', $show, $templateName);
4577 * AdminActions::parse_skinielist()
4578 * Parse skinvar skinielist
4580 * @param string $type type of skin
4581 * @param string $templateName name of template to use
4584 public function parse_skinielist($type, $templateName = '')
4586 $templates = array();
4587 if ( $templateName )
4589 $templates = Template::read($templateName);
4591 if ( array_key_exists('SKINIE_EXPORT_LIST', $templates) && !empty($templates['SKINIE_EXPORT_LIST']) )
4593 $template = $templates['SKINIE_EXPORT_LIST'];
4598 . "<input type=\"checkbox\" name=\"<%typeid%>\" id=\"<%expid%>\" />\n"
4599 . "<label for=\"<%expid%>\"><%expname%></label>\n"
4601 . "<td><%expdesc%></td>\n"
4608 $res = sql_query('SELECT * FROM ' . sql_table('skin_desc'));
4609 while ( $skinObj = sql_fetch_object($res) )
4612 'typeid' => 'skin[' . $skinObj->sdnumber . ']',
4613 'expid' => 'skinexp' . $skinObj->sdnumber,
4614 'expname' => Entity::hsc($skinObj->sdname),
4615 'expdesc' => Entity::hsc($skinObj->sddesc),
4617 echo Template::fill($template, $data);
4621 $res = sql_query('SELECT * FROM '.sql_table('template_desc'). " WHERE tdname NOT LIKE 'admin/%%';");
4622 while ($templateObj = sql_fetch_object($res)) {
4624 'typeid' => 'template[' . $templateObj->tdnumber . ']',
4625 'expid' => 'templateexp' . $templateObj->tdnumber,
4626 'expname' => Entity::hsc($templateObj->tdname),
4627 'expdesc' => Entity::hsc($templateObj->tddesc),
4629 echo Template::fill($template, $data);
4637 * AdminActions::parse_skinoverview()
4638 * Parse skinvar skinoverview
4640 * @param string $templateName name of template to use
4643 public function parse_skinoverview($templateName = '')
4646 $query = "SELECT * FROM %s WHERE sdname NOT LIKE 'admin/%%';";
4647 $query = sprintf($query, sql_table('skin_desc'));
4649 $template['content'] = 'skinlist';
4650 $template['tabindex'] = 10;
4652 Showlist($query, 'table', $template, $templateName);
4657 * AdminActions::parse_skintypehelp()
4658 * Check editing skintypehelp
4663 public function parse_skintypehelp()
4665 $nowSkinType = strtolower(trim(requestVar('type')));
4667 /* TODO: use Skin class */
4668 $regularType = array(
4679 if ( in_array($nowSkinType, $regularType) )
4681 help('skinpart' . $nowSkinType);
4685 help('skinpartspecial');
4691 * AdminActions::parse_specialskinlist()
4692 * Parse skinvar specialskinlist
4694 * @param string $templateName name of template to use
4697 public function parse_specialskinlist($templateName = '')
4699 $templates = array();
4700 if ( $templateName )
4702 $templates = Template::read($templateName);
4705 /* TODO: use Skin class */
4716 $skinid = intRequestVar('skinid');
4717 $query = "SELECT stype FROM %s WHERE stype NOT IN ('%s') AND sdesc = %d;";
4718 $query = sprintf($query, sql_table('skin'), implode("', '", $nType), $skinid);
4720 $res = sql_query($query);
4721 if ( $res && sql_num_rows($res) > 0 )
4724 if ( array_key_exists('SPECIALSKINLIST_HEAD', $templates) && !empty($templates['SPECIALSKINLIST_HEAD']) )
4726 $template['head'] = $templates['SPECIALSKINLIST_HEAD'];
4730 $template['head'] = "<ul>\n";
4732 echo Template::fill($template['head'], $data);
4733 if ( !array_key_exists('SPECIALSKINLIST_BODY', $templates) || empty($templates['SPECIALSKINLIST_BODY']) )
4735 $template['body'] = '<li><a tabindex="<%tabindex%>" href="index.php?action=skinedittype&skinid=<%skinid%>'
4736 . '&type=<%skintype%>"><%skintype%></a> (<a tabindex="<%tabindex%>" href="index.php?'
4737 . 'action=skinremovetype&skinid=<%skinid%>&type=<%skintype%>">remove</a>)</li>';
4741 $template['body'] = $templates['SPECIALSKINLIST_BODY'];
4745 while ( $row = sql_fetch_assoc($res) )
4748 'tabindex' => $tabstart++,
4749 'skinid' => $skinid,
4750 'skintype' => Entity::hsc(strtolower($row['stype']))
4752 echo Template::fill($template['body'], $data);
4755 if (array_key_exists('SPECIALSKINLIST_FOOT', $templates) && !empty($templates['SPECIALSKINLIST_FOOT']) )
4757 $template['foot'] = $templates['SPECIALSKINLIST_FOOT'];
4761 $template['foot'] = "</ul>\n";
4763 echo Template::fill($template['foot'], $data);
4769 * AdminActions::parse_sprinttext()
4772 * @param string $which
4773 * @param string $val
4776 public function parse_sprinttext($which, $val)
4778 if ( !defined($which) )
4784 $base = constant($which);
4787 if ( preg_match('#[^<|%].*[^%|>]#', $val, $matchies) )
4789 if ( !preg_match('#[(].*[^)]#', $matchies[0], $args) )
4791 $met = 'parse_' . $matchies[0];
4795 $arg = trim($args[0], '()');
4796 $met = 'parse_' . substr($matchies[0], 0, strpos($matchies[0], '('));
4799 if ( method_exists($this, $met) )
4801 $value = call_user_func(array(&$this, $met), $arg);
4805 if ( !isset($value) || empty($value) )
4809 echo sprintf($base, $value);
4814 * AdminActions::parse_systemsettings()
4815 * Parse skinvar systemsettings
4817 * @param string $type type of settings for system
4818 * @param string $templateName name of template to use
4821 public function parse_systemsettings($type = 'phpinfo', $templateName = '')
4823 global $member, $CONF, $nucleus;
4825 $member->isAdmin() or Admin::disallow();
4827 $enable = _ADMIN_SYSTEMOVERVIEW_ENABLE;
4828 $disable = _ADMIN_SYSTEMOVERVIEW_DISABLE;
4835 case 'sqlserverinfo':
4836 echo sql_get_server_info();
4838 case 'sqlclientinfo':
4839 echo sql_get_client_info();
4841 case 'magicquotesgpc':
4842 echo ini_get('magic_quotes_gpc') ? 'On' : 'Off';
4844 case 'magicquotesruntime':
4845 echo ini_get('magic_quotes_runtime') ? 'On' : 'Off';
4847 case 'registerglobals':
4848 echo ini_get('register_globals') ? 'On' : 'Off';
4851 $templates = array();
4852 if ( $templateName )
4854 $templates = Template::read($templateName);
4856 if ( !array_key_exists('SYSTEMINFO_GDSETTINGS', $templates) || empty($templates['SYSTEMINFO_GDSETTINGS']) )
4858 $template = "<tr>\n"
4859 . "<td><%key%></td>\n"
4860 . "<td><%value%></td>\n"
4865 $template = $templates['SYSTEMINFO_GDSETTINGS'];
4868 $gdinfo = gd_info();
4870 foreach ( $gdinfo as $key => $value )
4872 if ( is_bool($value) )
4874 $value = $value ? $enable : $disable;
4878 $value = Entity::hsc($value);
4884 echo Template::fill($template, $data);
4889 phpinfo(INFO_MODULES);
4890 $im = ob_get_contents();
4892 echo ( i18n::strpos($im, 'mod_rewrite') !== FALSE ) ? $enable : $disable;
4894 case 'nucleusversion':
4895 echo getNucleusVersion() / 100 . '(' . $nucleus['version'] . ')';
4897 case 'nucleuspatchlevel':
4898 echo getNucleusPatchLevel();
4904 echo $CONF['ItemURL'];
4906 case 'alertonheaderssent':
4907 echo $CONF['alertOnHeadersSent'] ? $enable : $disable;
4909 case 'nucleuscodename':
4910 if ( $nucleus['codename'] != '' )
4912 echo ' "' . $nucleus['codename'] . '"';
4915 case 'versioncheckurl':
4916 echo sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
4923 * AdminActions::parse_templateoverview()
4924 * Parse skinvar templateoverview
4926 * @param string $templateName name of template to use
4929 public function parse_templateoverview($templateName = '')
4931 $query = "SELECT * FROM %s WHERE tdname NOT LIKE 'admin/%%' ORDER BY tdname";
4932 $query = sprintf($query, sql_table('template_desc'));
4934 $template['content'] = 'templatelist';
4935 $template['tabindex'] = 10;
4937 Showlist($query, 'table', $template, $templateName);
4943 * AdminActions::parse_ticket()
4949 public function parse_ticket()
4952 $manager->addTicketHidden();
4957 * AdminActions::parse_versioncheckurl()
4958 * Parse skinvar versioncheckurl
4963 public function parse_versioncheckurl()
4965 echo sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
4970 * AdminActions::parse_yrbloglist()
4971 * Parse skinvar yrbloglist
4973 * @param string $templateName name of template to use
4976 public function parse_yrbloglist($templateName = '')
4979 $showAll = requestVar('showall');
4981 if ( $member->isAdmin() && ($showAll == 'yes') )
4983 // Super-Admins have access to all blogs! (no add item support though)
4984 $query = "SELECT bnumber, bname, 1 as tadmin, burl, bshortname"
4986 . " ORDER BY bnumber;";
4987 $query = sprintf($query, sql_table('blog'));
4991 $query = "SELECT bnumber, bname, tadmin, burl, bshortname"
4993 . " WHERE tblog=bnumber and tmember=%d"
4994 . " ORDER BY bnumber;";
4995 $query = sprintf($query, sql_table('blog'), sql_table('team'), (integer) $member->getID());
4998 $template['content'] = 'bloglist';
4999 $template['superadmin'] = $member->isAdmin();
5001 $amount = Showlist($query, 'table', $template, $templateName);
5003 if ( ($showAll != 'yes') && ($member->isAdmin()) )
5005 $query = 'SELECT COUNT(*) as result FROM ' . sql_table('blog');
5007 $total = quickQuery($query);
5008 if ( $total > $amount )
5010 echo '<p><a href="index.php?action=overview&showall=yes">' . _OVERVIEW_SHOWALL . '</a></p>';
5016 echo _OVERVIEW_NOBLOGS;
5018 elseif( $amount != 0 )
5020 echo '<h2>' . _OVERVIEW_YRDRAFTS . '</h2>';
5022 $query = "SELECT ititle, inumber, bshortname"
5024 . ' WHERE iauthor=%d AND iblog=bnumber AND idraft=1;';
5025 $query = sprintf($query, sql_table('item'), sql_table('blog'), (integer) $member->getID());
5027 $template['content'] = 'draftlist';
5029 $amountdrafts = Showlist($query, 'table', $template, $templateName);
5030 if ( $amountdrafts == 0 )
5032 echo _OVERVIEW_NODRAFTS;
5039 * AdminActions::checkCondition()
5040 * Checks conditions for if statements
5042 * @param string $field type of <%if%>
5043 * @param string $name property of field
5044 * @param string $value value of property
5045 * @return boolean condition
5047 protected function checkCondition($field, $name='', $value = '')
5049 global $CONF, $catid, $blog, $member, $itemidnext, $itemidprev, $manager, $archiveprevexists, $archivenextexists;
5060 $blog =& $manager->getBlog($blogid);
5064 $blogid = getBlogIDFromCatID($catid);
5066 $blog =& $manager->getBlog($blogid);
5068 elseif ( intRequestVar('catid') )
5070 $catid = intRequestVar('catid');
5071 $blogid = getBlogIDFromCatID($catid);
5073 $blog =& $manager->getBlog($blogid);
5080 $condition = ($blog && $this->ifCategory($name, $value));
5083 $condition = ($blog && ($blog->getSetting($name) == $value));
5086 $condition = $member->isLoggedIn();
5089 $condition = $member->isLoggedIn() && $this->ifOnTeam($name);
5092 $condition = $member->isLoggedIn() && $this->ifAdmin($name);
5095 $condition = $member->isLoggedIn() && $member->isAdmin();
5097 case 'allowloginedit':
5098 $condition = $member->isLoggedIn() && ($CONF['AllowLoginEdit'] || $member->isAdmin());
5101 $condition = ($itemidnext != '');
5104 $condition = ($itemidprev != '');
5106 case 'archiveprevexists':
5107 $condition = ($archiveprevexists == true);
5109 case 'archivenextexists':
5110 $condition = ($archivenextexists == true);
5113 $condition = (($name == $this->skintype) || ($name == requestVar('action')));
5116 $condition = $this->ifHasPlugin($name, $value);
5119 $condition = (Admin::getAdminAction() == $name);
5121 case 'adminoldaction':
5122 $condition = (Admin::getAdminAction() == $name);
5124 case 'addresschange':
5125 $condition = ($this->ifAddresscange());
5127 case 'bechangepass':
5128 $condition = ($this->beChangePassword());
5130 case 'skincandidates':
5131 $condition = ($this->ifSkincandidates());
5134 $condition = requestVar('nameclashes');
5136 case 'existsnewplugin':
5137 $condition = ($this->existsNewPlugin());
5140 $condition = (boolean) ($member->getAutosave() == $value);
5143 $condition = $manager->pluginInstalled("NP_{$field}") && $this->ifPlugin($field, $name, $value);
5150 * Actions::_ifHasPlugin()
5151 * hasplugin,PlugName
5152 * -> checks if plugin exists
5153 * hasplugin,PlugName,OptionName
5154 * -> checks if the option OptionName from plugin PlugName is not set to 'no'
5155 * hasplugin,PlugName,OptionName=value
5156 * -> checks if the option OptionName from plugin PlugName is set to value
5158 * @param string $name name of plugin
5159 * @param string $value
5162 private function ifHasPlugin($name, $value)
5166 // (pluginInstalled method won't write a message in the actionlog on failure)
5167 if ( $manager->pluginInstalled("NP_{$name}") )
5169 $plugin =& $manager->getPlugin("NP_{$name}");
5170 if ( $plugin != NULL )
5178 list($name2, $value2) = preg_split('#=#', $value, 2);
5179 if ( $value2 == "" && $plugin->getOption($name2) != 'no' )
5183 else if ( $plugin->getOption($name2) == $value2 )
5194 * Actions::beChangePassword()
5199 private function beChangePassword()
5201 return intRequestVar('bNeedsPasswordChange');
5205 * Actions::ifSkincandidates()
5206 * Checks if a plugin exists and call its doIf function
5212 private function ifSkincandidates()
5215 $candidates = SKINIMPORT::searchForCandidates($DIR_SKINS);
5216 return (count($candidates) > 0);
5220 * Actions::ifPlugin()
5221 * Checks if a plugin exists and call its doIf function
5223 * @param string $name name of plugin
5224 * @param string $key
5225 * @param string $value
5228 private function ifPlugin($name, $key = '', $value = '')
5232 $plugin =& $manager->getPlugin("NP_{$name}");
5238 $params = func_get_args();
5239 array_shift($params);
5241 return call_user_func_array(array(&$plugin, 'doIf'), $params);
5245 * AdminActions::ifCategory()
5246 * Different checks for a category
5248 * @param string $key key for information of category
5249 * @param string $value value for information of category
5252 private function ifCategory($key = '', $value='')
5254 global $blog, $catid;
5256 // when no parameter is defined, just check if a category is selected
5257 if (($key != 'catname' && $key != 'catid') || ($value == ''))
5259 return $blog->isValidCategory($catid);
5262 // check category name
5263 if ( $key == 'catname' )
5265 $value = $blog->getCategoryIdFromName($value);
5266 if ($value == $catid)
5268 return $blog->isValidCategory($catid);
5272 // check category id
5273 if (($key == 'catid') && ($value == $catid))
5275 return $blog->isValidCategory($catid);
5282 * AdminActions::ifOnTeam()
5283 * Checks if a member is on the team of a blog and return his rights
5285 * @param string $blogName name of weblog
5288 private function ifOnTeam($blogName = '')
5290 global $blog, $member, $manager;
5292 // when no blog found
5293 if ( ($blogName == '') && !is_object($blog) )
5298 // explicit blog selection
5299 if ($blogName != '')
5301 $blogid = getBlogIDFromName($blogName);
5304 if (($blogName == '') || !$manager->existsBlogID($blogid))
5307 $blogid = $blog->getID();
5309 return $member->teamRights($blogid);
5313 * AdminActions::ifAdmin()
5314 * Checks if a member is admin of a blog
5316 * @param string $blogName name of weblog
5319 private function ifAdmin($blogName = '')
5321 global $blog, $member, $manager;
5323 // when no blog found
5324 if (($blogName == '') && (!is_object($blog)))
5329 // explicit blog selection
5330 if ($blogName != '')
5332 $blogid = getBlogIDFromName($blogName);
5335 if (($blogName == '') || !$manager->existsBlogID($blogid))
5338 $blogid = $blog->getID();
5341 return $member->isBlogAdmin($blogid);
5345 * AdminActions::ifAddresscange()
5346 * Check e-Mail address is changed
5351 private function ifAddresscange()
5353 $key = $this->objAdmin->sessionVar("{$CONF['CookiePrefix']}ackey");
5358 $info = MEMBER::getActivationInfo($key);
5363 $mem = MEMBER::createFromId($info->vmember);
5368 if ( $info->vtype == 'addresschange' )
5376 * AdminActions::templateEditRow()
5379 * @param array $template
5380 * @param string $desc
5381 * @param string $name
5382 * @param string $help
5383 * @param integer $tabindex
5384 * @param boolean $big
5385 * @param array $tmplt
5388 private function templateEditRow(&$template, $desc, $name, $help = '', $tabindex = 0, $big = 0, $tplt = '')
5392 if ( !array_key_exists($name, $template) )
5394 $template[$name] = '';
5402 $tmplt = skinableTEMPLATE::read($tplt);
5406 'description' => $desc,
5407 'help' => empty($help) ? '' : helpHtml('template' . $help),
5410 'tabindex' => $tabindex,
5411 'rows' => $big ? 10 : 5,
5414 if ( !array_key_exists('TEMPLATE_EDIT_ROW_HEAD', $tmplt) || empty($tmplt['TEMPLATE_EDIT_ROW_HEAD']) )
5416 $base['head'] = "</tr>"
5418 . "<td><%description%><%help%></td>\n"
5419 . "<td id=\"td<%count%>\">\n"
5420 . "<textarea class=\"templateedit\" name=\"<%name%>\" tabindex=\"<%tabindex%>\" cols=\"50\" rows=\"<%rows%>\" id=\"textarea<%count%>\">\n";
5424 $base['head'] = $tmplt['TEMPLATE_EDIT_ROW_HEAD'];
5427 if ( !array_key_exists('TEMPLATE_EDIT_ROW_TAIL', $tmplt) || empty($tmplt['TEMPLATE_EDIT_ROW_TAIL']) )
5429 $base['tail'] = "</textarea>\n"
5434 $base['tail'] = $tmplt['TEMPLATE_EDIT_ROW_TAIL'];
5437 echo TEMPLATE::fill($base['head'], $data);
5438 echo ENTITY::hsc($template[$name]);
5439 echo TEMPLATE::fill($base['tail'], $data);
5447 * AdminActions::customHelp()
5448 * shows a link to custom help file
5451 * @param string $tplName
5452 * @param string $url
5453 * @param string $iconURL
5454 * @param string $alt
5455 * @param string $title
5459 private function customHelp($id, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
5461 echo self::customHelpHtml($id, $tplName, $url, $iconURL, $alt, $title, $onclick);
5465 * AdminActions::customHelp()
5466 * shows a link to custom help file
5469 * @param string $tplName
5470 * @param string $url
5471 * @param string $iconURL
5472 * @param string $alt
5473 * @param string $title
5477 static function customHelplink($id, $tplName = '', $url = '', $title = '', $onclick = '')
5481 $templates = array();
5485 $templates = Template::read($tplName);
5488 if ( !array_key_exists('ADMIN_CUSTOMHELPLINK_ANCHOR', $templates) || empty($templates['ADMIN_CUSTOMHELPLINK_ANCHOR']) )
5490 $template = "<a href=\"<%helpurl%>#<%helptarget%>\" title=\"<%title%>\" <%onclick%>>\n";
5494 $template = $templates['ADMIN_CUSTOMHELPLINK_ANCHOR'];
5499 $url = $CONF['AdminURL'] . 'documentation/customHelp.html';
5502 if ( empty($onclick) )
5504 $onclick = 'onclick="if (event && event.preventDefault) event.preventDefault(); return help(this.href);"';
5506 elseif ( preg_match('#^onclick#', $onclick) )
5508 $onclick = $onclick;
5512 $onclick = 'onclick="' . $onclick . '"';
5517 'helptarget' => $id,
5518 'onclick' => $onclick,
5519 'title' => (isset($title) && !empty($title)) ? $title : _HELP_TT,
5521 return Template::fill($template, $data);
5525 * AdminActions::customHelpHtml()
5528 * @param string $tplName
5529 * @param string $url
5530 * @param string $iconURL
5531 * @param string $alt
5532 * @param string $title
5533 * @param string $onclick
5534 * @return string anchor element with help uri
5536 private function customHelpHtml($id, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
5540 $templates = array();
5544 $templates = Template::read($tplName);
5546 if ( !array_key_exists('ADMIN_CUSTOMHELPLINK_ICON', $templates) || !empty($templates['ADMIN_CUSTOMHELPLINK_ICON']) )
5548 $template = "<img src=\"<%iconurl%>\" <%width%><%height%>alt=\"<%alt%>\" title=\"<%title%>\" /></a>\n";
5552 $template = $templates['ADMIN_CUSTOMHELPLINK_ICON'];
5555 if ( empty($iconURL) )
5557 $iconURL = $CONF['AdminURL'] . 'documentation/icon-help.gif';
5560 if ( function_exists('getimagesize') )
5562 $size = getimagesize($iconURL);
5563 $width = 'width="' . $size[0] . '" ';
5564 $height = 'height="' . $size[1] . '" ';
5568 'iconurl' => $iconURL,
5570 'height' => $height,
5571 'alt' => (isset($alt) && !empty($alt)) ? $alt : _HELP_TT,
5572 'title' => (isset($title) && !empty($title)) ? $title : _HELP_TT,
5575 $icon = Template::fill($template, $data);
5576 $help = self::customHelplink($id, $tplName, $url, $title, $onclick);
5578 return $help . $icon;
5582 * AdminActions::input_yesno
5585 * @param $checkedval
5592 * @param $templateName
5595 private function input_yesno($name,
5606 $templates = array();
5607 if ( $templateName )
5609 $templates = Template::read($templateName);
5612 if ( $name == 'admin' )
5614 if ( !array_key_exists('INPUTYESNO_TEMPLATE_ADMIN', $templates) || empty($templates['INPUTYESNO_TEMPLATE_ADMIN']) )
5616 $template = '<input onclick="selectCanLogin(true);" type="radio" name="<%name%>" value="<%yesval%>" <%yescheckedval%> id="<%yesid%>" />' . "\n"
5617 . '<label for="<%yesid%>"><%yesvaltext%></label>' . "\n"
5618 . '<input onclick="selectCanLogin(false);" type="radio" name="<%name%>" value="<%noval%>" <%nocheckedval%> id="<%noid%>"<%disabled%> />' . "\n"
5619 . '<label for="<%noid%>"><%novaltext%></label>' . "\n";
5623 $template = $templates['INPUTYESNO_TEMPLATE_ADMIN'];
5628 if ( array_key_exists('INPUTYESNO_TEMPLATE_NORMAL', $templates) && !empty($templates['INPUTYESNO_TEMPLATE_NORMAL']) )
5630 $template = $templates['INPUTYESNO_TEMPLATE_NORMAL'];
5634 if ( array_key_exists('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO', $templates) && !empty($templates['SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO']) )
5636 $template = $templates['SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO'];
5639 if ( !isset($template) )
5641 $template = '<input type="radio" name="<%name%>" value="<%yesval%>" <%yescheckedval%> id="<%yesid%>" />' . "\n"
5642 . '<label for="<%yesid%>"><%yesvaltext%></label>' . "\n"
5643 . '<input type="radio" name="<%name%>" value="<%noval%>" <%nocheckedval%> id="<%noid%>"<%disabled%> />' . "\n"
5644 . '<label for="<%noid%>"><%novaltext%></label>' . "\n";
5649 $id = Entity::hsc($name);
5650 $id = str_replace('[', '-', $id);
5651 $id = str_replace(']', '-', $id);
5652 $id1 = $id . Entity::hsc($value1);
5653 $id2 = $id . Entity::hsc($value2);
5655 'name' => Entity::hsc($name),
5656 'yesval' => Entity::hsc($value1),
5657 'noval' => Entity::hsc($value2),
5660 'yesvaltext' => $yesval,
5661 'novaltext' => $noval,
5662 'yescheckedval' => ($checkedval == $value1) ? ' checked="checked" tabindex="' . $tabindex . '"': '',
5663 'nocheckedval' => ($checkedval != $value1) ? ' checked="checked" tabindex="' . $tabindex . '"': '',
5664 'disabled' => ($isAdmin && $name == 'canlogin') ? ' disabled="disabled"' : '',
5669 return Template::fill($template, $dat);
5673 echo Template::fill($template, $dat);
5679 * AdminActions::existsNewPlugin()
5680 * Check exists new plugin
5683 * @return boolean exists or not
5685 private function existsNewPlugin()
5687 global $DIR_PLUGINS;
5689 $candidates = array();
5690 $files = scandir($DIR_PLUGINS);
5692 foreach ( $files as $file )
5694 if ( preg_match("#^NP_(.*)\.php$#", $file, $matches) )
5696 $name = $matches[1];
5697 $query = "SELECT * FROM %s WHERE pfile='%s';";
5698 $query = sprintf($query, sql_table('plugin'), sql_real_escape_string("{NP_{$name}"));
5699 $res = sql_query($query);
5701 if ( sql_num_rows($res) == 0 )
5703 $candidates[] = $name;
5708 $this->newPlugCandidates = $candidates;
5709 return (count($candidates) > 0);