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'];
1983 $blog = &$manager->getBlog($blogid);
1985 if ( $item && $blog->convertBreaks() && requestVar('action') == 'itemedit' )
1987 $item['body'] = removeBreaks($item['body']);
1988 $item['more'] = removeBreaks($item['more']);
1991 $contents = array();
1992 if ( requestVar('action') == 'itemedit' )
1997 if ( !array_key_exists('catid', $contents) || empty($contents['catid']) )
2000 $catid = $blog->getDefaultCategory();
2005 $catid = $contents['catid'];
2008 Admin::selectBlogCategory('catid', $catid, $startidx, 1, $blog->getID());
2014 * AdminActions::parse_category()
2015 * Parse skinvar category
2017 * @param string $type name of setting for category
2020 public function parse_category($type = 'name')
2022 echo $this->parse_getcategory($type);
2027 * AdminActions::parse_categorysetting()
2028 * Parse skinvar categorysetting
2030 * @param string $type type in category setting
2033 public function parse_categorysetting($type)
2035 $catid = intRequestVar('catid');
2036 if ( $type == 'id' )
2041 $blogid = intRequestVar('blogid');
2042 $query = "SELECT * FROM %s WHERE cblog = %d AND catid = %d;";
2043 $query = sprintf($query, sql_table('category'), (integer) $blogid, (integer) $catid);
2044 $res = sql_query($query);
2045 $obj = sql_fetch_object($res);
2047 if ( $type != 'name' )
2049 echo Entity::hsc($obj->cdesc);
2053 echo Entity::hsc($obj->cname);
2060 * AdminActions::parse_codename()
2061 * Parse templatevar codename
2067 function parse_checkedonval($value, $name)
2072 $itemid = intRequestVar('itemid');
2073 $item =& $manager->getItem($itemid, 1, 1);
2075 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
2077 if ( $item && $blog->convertBreaks() && requestVar('action') == 'itemedit' )
2079 $item['body'] = removeBreaks($item['body']);
2080 $item['more'] = removeBreaks($item['more']);
2083 $contents = array();
2084 if ( requestVar('action') == 'itemedit' )
2088 if ( !isset($contents[$name]) )
2090 $contents[$name] = '';
2092 if ($contents[$name] == $value)
2094 echo 'checked="checked"';
2100 * AdminActions::parse_codename()
2101 * Parse templatevar codename
2106 * TODO: is this need???
2108 public function parse_codename()
2111 echo $nucleus['codename'];
2116 * AdminActions::parse_commentnavlist()
2117 * Parse skinvar commentnavlist
2122 public function parse_commentnavlist()
2124 global $CONF, $manager, $member;
2127 if ( postVar('start') )
2129 $start = intPostVar('start');
2136 // amount of items to show
2137 if ( postVar('amount') )
2139 $amount = intPostVar('amount');
2143 $amount = (integer) $CONF['DefaultListSize'];
2149 $query = 'SELECT cbody, cuser, cmail, cemail, mname, ctime, chost, cnumber, cip, citem '
2151 . 'LEFT OUTER JOIN %s ON mnumber=cmember '
2153 $query = sprintf($query, sql_table('comment'), sql_table('member'));
2155 if ( $this->skintype == 'itemcommentlist' )
2157 $itemid = intRequestVar('itemid');
2158 $query .= " citem={$itemid}";
2159 $template['canAddBan'] = $member->blogAdminRights(intRequestVar('blogid'));
2161 $nonComments = _NOCOMMENTS;
2163 elseif ( $this->skintype == 'browseowncomments' )
2166 $query .= ' cmember=' . $member->getID();
2167 $template['canAddBan'] = 0;
2169 $nonComments = _NOCOMMENTS_YOUR;
2171 elseif ( $this->skintype == 'blogcommentlist' )
2174 $query .= ' cblog=' . intRequestVar('blogid');
2175 $template['canAddBan'] = $member->blogAdminRights(intRequestVar('blogid'));
2176 $bid = intRequestVar('blogid');
2177 $nonComments = _NOCOMMENTS_BLOG;
2180 $search = postVar('search');
2181 if ( !empty($search) )
2183 $query .= ' and cbody LIKE "%' . sql_real_escape_string($search) . '%"';
2186 $query .= " ORDER BY ctime ASC LIMIT {$start},{$amount}";
2188 $template['content'] = 'commentlist';
2190 $navList = new Navlist($this->skintype, $start, $amount, 0, 1000, $bid, $search, $itemid);
2191 $navList->showBatchList('comment', $query, 'table', $template, $nonComments);
2196 * AdminActions::parse_configsettingsedit()
2197 * Parse skinvar configsettingsedit
2199 * @param string $type type of global configuration
2202 public function parse_configsettingsedit($type)
2207 case 'DefaultListSize':
2208 if ( !array_key_exists('DefaultListSize', $CONF) )
2210 $query = "INSERT INTO %s VALUES (DefaultListSize, 10);";
2211 $query = sprintf($query, sql_table('config'));
2213 $CONF['DefaultListSize'] = 10;
2215 elseif ( intval($CONF['DefaultListSize']) < 1 )
2217 $CONF['DefaultListSize'] = 10;
2219 echo intval($CONF['DefaultListSize']);
2221 case 'SessionCookie':
2222 $value = $CONF['SessionCookie'];
2223 $txt1 = _SETTINGS_COOKIESESSION;
2224 $txt2 = _SETTINGS_COOKIEMONTH;
2225 $this->parse_inputyesno('SessionCookie', $value, 10190, 1, 0, $txt1, $txt2);
2228 $value = $CONF['URLMode'];
2229 $txt1 = _SETTINGS_URLMODE_NORMAL;
2230 $txt2 = _SETTINGS_URLMODE_PATHINFO;
2231 $this->parse_inputyesno('URLMode', $value, 10077, 'normal', 'pathinfo', $txt1, $txt2);
2234 if ( array_key_exists($type, $CONF) && is_string($CONF[$type]) )
2236 echo Entity::hsc($CONF[$type]);
2244 * AdminActions::parse_configsettingsyesno()
2245 * Parse skinvar configsettingsyesno
2247 * @param string $type type of global setting
2248 * @param integer $tabindex tabindex attribute of input element
2251 public function parse_configsettingsyesno($type, $tabindex)
2254 if ( array_key_exists($type, $CONF) )
2256 $this->parse_inputyesno($type, $CONF[$type], $tabindex);
2262 * AdminActions::parse_contents()
2263 * Parse skinvar contents
2265 * @param string $which part for item
2268 function parse_contents($which)
2273 $contents = array();
2275 if ( requestVar('action') == 'itemedit' )
2277 $itemid = intRequestVar('itemid');
2278 $item =& $manager->getItem($itemid, 1, 1);
2280 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
2282 if ( $item && $blog->convertBreaks() )
2284 $item['body'] = removeBreaks($item['body']);
2285 $item['more'] = removeBreaks($item['more']);
2289 elseif ( requestVar('action') == 'createitem' )
2291 $blogid = intRequestVar('blogid');
2292 $blog =& $manager->getBlog($blogid);
2296 'contents' => &$contents,
2302 if ( !array_key_exists($which, $contents) )
2304 $contents[$which] = '';
2306 echo Entity::hsc($contents[$which],ENT_QUOTES);
2310 * AdminActions::parse_currenttime()
2311 * Parse skinvar currenttime
2313 * @param string $what
2316 function parse_currenttime($what)
2319 if ( requestVar('action') == 'itemedit' )
2321 $itemid = intRequestVar('itemid');
2322 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
2324 elseif ( requestVar('action') == 'createitem' )
2326 $blog =& $manager->getBlog(intRequestVar('blogid'));
2328 $nu = getdate($blog->getCorrectTime());
2333 * AdminActions::parse_customhelplink()
2334 * Parse skinvar customhelplink
2336 * @param string $topic name of topic
2337 * @param string $tplName name of template
2338 * @param string $url string as URI
2339 * @param string $iconURL string as URI for icon
2340 * @param string $alt alternative text for image element
2341 * @param string $title title for anchor element
2344 public function parse_customhelplink($topic, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
2346 $this->customHelp($topic, $url, $iconURL);
2351 * AdminActions::parse_date()
2352 * Parse skinvar date
2354 public function parse_date($format = 'c')
2356 global $CONF, $manager;
2357 echo i18n::formatted_datetime($format, time(), 'iso8601', $manager->getBlog((integer) $CONF['DefaultBlog']));
2362 * AdminActions::parse_defaultadminskintypes()
2363 * Parse skinvar defaultadminskintypes
2365 * @param string $tabindex index number for tabindex attribute of input element
2366 * @param string $templateName name of template
2369 public function parse_defaultadminskintypes($tabindex, $templateName = '')
2371 $templates = array();
2373 if ( $templateName )
2375 $templates = Template::read($templateName);
2378 $types = $this->skin->getAvailableTypes();
2381 /* NOTE: set templates for HEAD/BODY/FOOT */
2382 if ( !array_key_exists('ADMINSKINTYPELIST_HEAD', $templates) || empty($templates['ADMINSKINTYPELIST_HEAD']) )
2384 $template['head'] = "<ul>\n";
2388 $template['head'] = $templates['ADMINSKINTYPELIST_HEAD'];
2390 if ( !array_key_exists('ADMINSKINTYPELIST_BODY', $templates) || empty($templates['ADMINSKINTYPELIST_BODY']) )
2392 $template['body'] = "<li>"
2393 . "<a tabindex=\"<%tabindex%>\" href=\"index.php?action=adminskinedittype&skinid=<%skinid%>&type=<%skintype%>\"><%name%></a> <%help%>"
2398 $template['body'] = $templates['ADMINSKINTYPELIST_BODY'];
2400 if ( !array_key_exists('ADMINSKINTYPELIST_FOOT', $templates) || empty($templates['ADMINSKINTYPELIST_FOOT']) )
2402 $template['foot'] = "</ul>\n";
2406 $template['foot'] = $templates['ADMINSKINTYPELIST_FOOT'];
2409 $handler = new AdminActions('template');
2410 $parser = new PARSER($handler);
2412 /* NOTE: do output */
2413 echo $template['head'];
2414 foreach ( $types as $type => $fName )
2416 $helplink = $this->customHelpHtml("skinpart{$type}{$templateName}");
2418 'tabindex' => $tabindex,
2419 'skintype' => $type,
2421 'help' => $helplink,
2422 'skinid' => intrequestVar('skinid'),
2424 $parser->parse(Template::fill($template['body'], $data));
2427 echo $template['foot'];
2433 * AdminActions::parse_defblogselect()
2434 * Parse skinvar defblogselect
2436 * @param string $templateName name of template
2439 public function parse_defblogselect($templateName = '')
2443 $query = "SELECT bname as text, bnumber as value FROM %s;";
2444 $query = sprintf($query, sql_table('blog'));
2446 $template['name'] = 'DefaultBlog';
2447 $template['selected'] = $CONF['DefaultBlog'];
2448 $template['tabindex'] = 10;
2450 Showlist($query, 'select', $template, $templateName);
2456 * AdminActions::parse_defcatselect()
2457 * Parse skinvar defcatselect
2459 * @param string $templateName name of template
2462 public function parse_defcatselect($templateName = '')
2466 $blogid = intRequestVar('blogid');
2467 $blog = $manager->getBlog($blogid);
2469 $query = "SELECT cname as text, catid as value FROM %s WHERE cblog=%d;";
2470 $query = sprintf($query, sql_table('category'), (integer) $blog->getID());
2472 $template['name'] = 'defcat';
2473 $template['selected'] = $blog->getDefaultCategory();
2474 $template['tabindex'] = 110;
2476 Showlist($query, 'select', $template, $templateName);
2482 * AdminActions::parse_defskinselect()
2483 * Parse skinvar defskinselect
2485 * @param string $type type of skin
2486 * @param string $templateName name of template
2489 public function parse_defskinselect($type = 'blog', $templateName = '')
2491 global $CONF, $manager;
2493 $query = "SELECT sdname as text, sdnumber as value FROM %s WHERE sdname NOT LIKE 'admin/%%';";
2494 $query = sprintf($query, sql_table('skin_desc'));
2496 $blogid = intRequestVar('blogid');
2500 $template['selected'] = $CONF['BaseSkin'];
2504 $blog = $manager->getBlog($blogid);
2505 $template['selected'] = $blog->getDefaultSkin();
2508 if ( $type != 'blog' )
2510 $nname = 'BaseSkin';
2517 $template['name'] = $nname;
2518 $template['tabindex'] = 50;
2520 Showlist($query, 'select', $template, $templateName);
2526 * AdminActions::parse_deletecomment()
2527 * Parse skinvar deletecomment
2529 * @param string $type type of infomation for comment
2532 public function parse_deletecomment($type = 'id')
2534 $commentid = intRequestVar('commentid');
2535 $comment = COMMENT::getComment($commentid);
2540 echo intRequestVar('commentid');
2543 if ( array_key_exists('member', $comment) && !empty($comment['member']) )
2545 echo $comment['member'];
2549 echo $comment['user'];
2553 $body = strip_tags($comment['body']);
2554 echo Entity::hsc(shorten($body, 300, '...'));
2560 * AdminActions::parse_deleteitembody()
2561 * Parse skinvar deleteitembody
2566 public function parse_deleteitembody()
2570 $itemid = intRequestVar('itemid');
2571 $item =& $manager->getItem($itemid, 1, 1);
2573 $body = strip_tags($item['body']);
2575 echo Entity::hsc(shorten($body, 300, '...'));
2581 * AdminActions::parse_deleteitemid()
2582 * Parse skinvar deleteitemid
2587 public function parse_deleteitemid()
2589 echo (integer) intRequestVar('itemid');
2594 * AdminActions::parse_deleteitemtitle()
2595 * Parse skinvar deleteitemtitle
2600 public function parse_deleteitemtitle()
2604 $itemid = intRequestVar('itemid');
2605 $item =& $manager->getItem($itemid, 1, 1);
2607 echo Entity::hsc(strip_tags($item['title']));
2613 * AdminActions::parse_editadminskin()
2614 * Parse skinvar editadminskin
2616 * @param string $type type of skin setting
2619 public function parse_editadminskin($type = 'id')
2621 $skinid = intRequestVar('skinid');
2622 $skin = new Skin($skinid);
2626 echo intRequestVar('skinid');
2629 echo Entity::hsc($skin->getName());
2632 echo Entity::hsc($skin->getDescription());
2635 echo Entity::hsc($skin->getContentType());
2638 echo Entity::hsc($skin->getIncludePrefix());
2641 $this->parse_inputyesno('inc_mode', $skin->getIncludeMode(), 120, 'skindir', 'normal', _PARSER_INCMODE_SKINDIR, _PARSER_INCMODE_NORMAL);
2649 * AdminActions::parse_editadminskintype()
2650 * Parse skinvar editadminskintype
2652 * @param string $type name of skin type
2655 public function parse_editadminskintype($type = 'id')
2657 global $CONF, $manager, $member;
2659 $fNames = $this->skin->getAvailableTypes();
2660 $sType = strtolower(trim(requestVar('type')));
2665 echo intRequestVar('skinid');
2668 echo Entity::hsc($this->skin->getName());
2671 echo Entity::hsc($this->skin->getDescription());
2674 echo Entity::hsc($this->skin->getContentType());
2677 echo Entity::hsc($this->skin->getContentFromDB($sType));
2680 $skinType = !array_key_exists($sType, $fNames) ? ucfirst($sType) : $fNames[$sType];
2681 echo Entity::hsc($skinType);
2684 echo Entity::hsc($sType);
2687 echo Entity::hsc($this->skin->getIncludePrefix());
2690 $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;
2691 echo Entity::hsc($incMode);
2700 * AdminActions::parse_editcomment()
2701 * Parse skinvar editcomment
2703 * @param string $type type of comment setting
2706 public function parse_editcomment($type = 'id')
2710 $commentid = intRequestVar('commentid');
2711 $comment = COMMENT::getComment($commentid);
2713 $manager->notify('PrepareCommentForEdit', array('comment' => &$comment));
2718 echo intRequestVar('commentid');
2721 if ( !array_key_exists('member', $comment) || empty($comment['member']) )
2723 echo $comment['user'] . " (" . _EDITC_NONMEMBER . ")";
2727 echo $comment['member'] . " (" . _EDITC_MEMBER . ")";
2731 echo date("Y-m-d @ H:i", $comment['timestamp']);
2734 $comment['body'] = str_replace('<br />', '', $comment['body']);
2735 $comment['body'] = preg_replace("#<a href=['\"]([^'\"]+)['\"]( rel=\"nofollow\")?>[^<]*</a>#", "\\1", $comment['body']);
2736 echo $comment['body'];
2738 echo $comment[$type];
2745 * AdminActions::parse_editdesturl()
2746 * Parse skinvar editdesturl
2748 public function parse_editdesturl()
2750 if ( requestVar('desturl') )
2752 echo Entity::hsc(requestVar('desturl'));
2758 * AdminActions::parse_editmemberlist()
2759 * Parse skinvar editmemberlist
2761 * @param string $templateName name of template
2764 public function parse_editmemberlist($templateName = '')
2767 // show list of members with actions
2768 $query = 'SELECT * FROM '.sql_table('member');
2769 $template['content'] = 'memberlist';
2770 $template['tabindex'] = 10;
2772 $batch = new Batch('member');
2773 $batch->showlist($query, 'table', $template, _LISTS_NOMORE, $templateName);
2778 * AdminActions::parse_editmember()
2779 * Parse skinvar editmember
2781 * @param string $type type of information for member
2782 * @return string $tempateName name of template to use
2785 public function parse_editmember($type = 'id', $templateName = '')
2787 global $CONF, $manager, $member;
2789 $memberid = intRequestVar('memberid');
2790 $mem = MEMBER::createFromID($memberid);
2795 echo intRequestVar('memberid');
2798 if ( $this->skintype == 'teamdelete' || $this->skintype == 'memberdelete' )
2800 echo Entity::hsc($mem->getDisplayName());
2804 $dispName = Entity::hsc($mem->getDisplayName());
2805 if ( $CONF['AllowLoginEdit'] || $member->isAdmin() )
2807 echo '<input name="name" tabindex="10" maxlength="32" size="32" value="' . $dispName . "\" />\n";
2816 echo Entity::hsc($mem->getRealName());
2819 echo Entity::hsc($mem->getEmail());
2822 echo Entity::hsc($mem->getURL());
2825 $this->parse_inputyesno('admin', $mem->isAdmin(), 60, 1, 0, _YES, _NO, 0, $templateName);
2828 $this->parse_inputyesno('canlogin', $mem->canLogin(), 70, 1, 0, _YES, _NO, $mem->isAdmin(), $templateName);
2831 echo Entity::hsc($mem->getNotes());
2834 $this->parse_inputyesno('autosave', $mem->getAutosave(), 87, 1, 0, _YES, _NO, 0, $templateName);
2843 * AdminActions::parse_editpluginfo()
2844 * Parse skinvar editpluginfo
2846 * @param string $type type of plugin info
2849 public function parse_editpluginfo($type)
2851 $pid = intRequestVar('plugid');
2858 echo Entity::hsc(getPluginNameFromPid($pid));
2865 * AdminActions::parse_editplugoptionslist()
2866 * Parse skinvar editplugoptionslist
2868 * @param string $templateName name of template
2871 public function parse_editplugoptionslist($templateName = '')
2875 $pid = intRequestVar('plugid');
2876 $aOptions = array();
2879 $query = "SELECT * FROM %s WHERE ocontext='global' AND opid=%d ORDER BY oid ASC;";
2880 $query = sprintf($query, sql_table('plugin_option_desc'), (integer) $pid);
2881 $resource = sql_query($query);
2883 while ( $o = sql_fetch_object($resource) )
2885 array_push($aOIDs, $o->oid);
2886 $aOptions[$o->oid] = array(
2888 'value' => $o->odef,
2889 'name' => $o->oname,
2890 'description' => $o->odesc,
2891 'type' => $o->otype,
2892 'typeinfo' => $o->oextra,
2897 // fill out actual values
2898 if ( count($aOIDs) > 0 )
2900 $query = 'SELECT oid, ovalue FROM %s WHERE oid in (%s)';
2901 $query = sprintf($query, sql_table('plugin_option'), implode(',', $aOIDs));
2903 $result = sql_query($query);
2905 while ( $o = sql_fetch_object($result) )
2907 $aOptions[$o->oid]['value'] = $o->ovalue;
2913 'context' => 'global',
2915 'options' => &$aOptions
2917 $manager->notify('PrePluginOptionsEdit', $data);
2919 $template['content'] = 'plugoptionlist';
2921 $amount = Showlist($aOptions, 'table', $template, $templateName);
2925 echo '<p>' . _ERROR_NOPLUGOPTIONS . "</p>\n";
2931 * AdminActions::parse_editskin()
2932 * Parse skinvar editskin
2934 * @param string $type type of skin
2937 public function parse_editskin($type = 'id')
2939 $skinid = intRequestVar('skinid');
2940 $skin = new SKIN($skinid);
2944 echo intRequestVar('skinid');
2947 echo Entity::hsc($skin->getName());
2950 echo Entity::hsc($skin->getDescription());
2953 echo Entity::hsc($skin->getContentType());
2956 echo Entity::hsc($skin->getIncludePrefix());
2959 $this->parse_inputyesno('inc_mode', $skin->getIncludeMode(), 120, 'skindir', 'normal', _PARSER_INCMODE_SKINDIR, _PARSER_INCMODE_NORMAL);
2967 * AdminActions::parse_editskintype()
2968 * Parse skinvar editskintype
2970 * @param string $type name of type for skin type
2973 public function parse_editskintype($type = 'id')
2975 global $CONF, $manager, $member;
2976 $skinid = intRequestVar('skinid');
2977 $skin = new SKIN($skinid);
2978 $fNames = $skin->getAvailableTypes();
2979 $sType = strtolower(trim(requestVar('type')));
2984 echo intRequestVar('skinid');
2987 echo Entity::hsc($skin->getName());
2990 echo Entity::hsc($skin->getDescription());
2993 echo Entity::hsc($skin->getContentType());
2996 echo Entity::hsc($skin->getContentFromDB($sType));
2999 $skinType = !array_key_exists($sType, $fNames) ? ucfirst($sType) : $fNames[$sType];
3000 echo Entity::hsc($skinType);
3003 echo Entity::hsc($sType);
3006 echo Entity::hsc($skin->getIncludePrefix());
3009 $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;
3010 echo Entity::hsc($incMode);
3019 * AdminActions::parse_adminurl()
3020 * Parse skinvar adminurl
3021 * (shortcut for admin url)
3026 public function parse_adminurl()
3028 $this->parse_sitevar('adminurl');
3033 * AdminActions::parse_edittemplateinfo()
3034 * Parse skinvar edittemplateinfo
3036 * @param string $type name of type for skin
3037 * @param string $description description for skin
3038 * @param string $name name of skin
3039 * @param string $help
3040 * @param string $tabindex index value for tabindex attribute of input element
3041 * @param string $big
3042 * @param string $tplt name of template
3045 public function parse_edittemplateinfo($type, $desc = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')
3049 $t_id = intRequestVar('templateid');
3050 $t_name = Template::getNameFromId($t_id);
3051 $t_desc = Template::getDesc($t_id);
3052 $template = &Template::read($t_name);
3060 echo Entity::hsc($t_name);
3063 echo Entity::hsc($t_desc);
3065 case 'extratemplate':
3067 $pluginfields = array();
3068 $manager->notify('TemplateExtraFields', array('fields' => &$pluginfields));
3073 $tmplt = Template::read($desc);
3075 if ( !array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) || empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )
3079 . '<th colspan="2"><%explugtplname%>' . "</th>\n";
3083 $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];
3086 foreach ( $pluginfields as $pfkey => $pfvalue )
3088 $data = array('explugtplname' => Entity::hsc($pfkey));
3090 echo Template::fill($base, $data);
3092 foreach ( $pfvalue as $pffield => $pfdesc )
3094 $this->templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);
3099 $desc = defined($desc) ? constant($desc) : $desc;
3100 $name = defined($name) ? constant($name) : $name;
3101 $this->templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);
3109 * AdminActions::parse_editadmintemplateinfo()
3110 * Parse skinvar editadmintemplateinfo
3112 * @param string $type type of skin template
3113 * @param string $description description of template
3114 * @param string $name name of stemplate
3115 * @param string $tabindex index number for tabindex attribute of input element
3116 * @param string $big
3117 * @param string $tplt
3119 public function parse_editadmintemplateinfo($type, $desc = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')
3123 $t_id = intRequestVar('templateid');
3124 $t_name = Template::getNameFromId($t_id);
3125 $t_desc = Template::getDesc($t_id);
3126 $template = &Template::read($t_name);
3134 echo Entity::hsc($t_name);
3137 echo Entity::hsc($t_desc);
3139 case 'extratemplate':
3141 $pluginfields = array();
3142 $manager->notify('AdminTemplateExtraFields', array('fields' => &$pluginfields));
3147 $tmplt = Template::read($desc);
3149 if ( !array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) || empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )
3153 . '<th colspan="2"><%explugtplname%>' . "</th>\n";
3157 $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];
3160 foreach ( $pluginfields as $pfkey => $pfvalue )
3162 $data = array('explugtplname' => Entity::hsc($pfkey));
3164 echo Template::fill($base, $data);
3166 foreach ( $pfvalue as $pffield => $pfdesc )
3168 $this->templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);
3173 $desc = defined($desc) ? constant($desc) : $desc;
3174 $name = defined($name) ? constant($name) : $name;
3175 $this->templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);
3182 * AdminActions::parse_eventformextra()
3183 * Parse skinvar eventformextra
3185 * @param string $type name of type for event form extra
3188 public function parse_eventformextra($type = 'activation')
3197 $key = requestVar('ackey');
3200 Admin::error(_ERROR_ACTIVATE);
3202 $info = MEMBER::getActivationInfo($key);
3205 Admin::error(_ERROR_ACTIVATE);
3207 $mem = MEMBER::createFromId($info->vmember);
3210 Admin::error(_ERROR_ACTIVATE);
3213 'type' => 'activation',
3217 case 'membermailform-notloggedin':
3218 $data = array('type' => 'membermailform-notloggedin',);
3221 $manager->notify('FormExtra', $data);
3226 * AdminActions::parse_extrahead()
3227 * Parse skinvar extrahead
3229 public function parse_extrahead()
3233 $extrahead = Admin::getAdminextrahead();
3236 'extrahead' => &$extrahead,
3237 'action' => Admin::getAdminAction()
3240 $manager->notify('AdminPrePageHead', $data);
3246 * AdminActions::parse_member()
3247 * Parse skinvar member
3248 * (includes a member info thingie)
3250 * @param string $what which memberdata is needed
3253 public function parse_member($what)
3255 global $memberinfo, $member, $CONF;
3257 // 1. only allow the member-details-page specific variables on member pages
3258 if ( $this->skintype == 'member' )
3263 echo Entity::hsc($memberinfo->getDisplayName());
3266 echo Entity::hsc($memberinfo->getRealName());
3269 echo Entity::hsc($memberinfo->getNotes());
3272 echo Entity::hsc($memberinfo->getURL());
3275 echo Entity::hsc($memberinfo->getEmail());
3278 echo Entity::hsc($memberinfo->getID());
3283 // 2. the next bunch of options is available everywhere, as long as the user is logged in
3284 if ( $member->isLoggedIn() )
3289 echo $member->getDisplayName();
3291 case 'yourrealname':
3292 echo $member->getRealName();
3295 echo $member->getNotes();
3298 echo $member->getURL();
3301 echo $member->getEmail();
3304 echo $member->getID();
3306 case 'yourprofileurl':
3307 if ( $CONF['URLMode'] == 'pathinfo' )
3309 echo Link::create_member_link($member->getID());
3313 echo $CONF['IndexURL'] . Link::create_member_link($member->getID());
3322 * AdminActions::parse_version()
3323 * Parse skinvar version
3324 * (include nucleus versionnumber)
3329 public function parse_version()
3332 echo 'Nucleus CMS ' . $nucleus['version'];
3337 * AdminActions::parse_sitevar()
3338 * Parse skinvar sitevar
3339 * (include a sitevar)
3341 * @param string $which
3344 public function parse_sitevar($which)
3350 echo $CONF['IndexURL'];
3353 echo $CONF['SiteName'];
3356 echo $CONF['AdminEmail'];
3359 echo $CONF['AdminURL'];
3365 * AdminActions::parse_charset()
3366 * Parse skinvar charset
3371 public function parse_charset()
3373 echo i18n::get_current_charset();
3378 * AdminActions::parse_getblogsetting()
3379 * Parse skinvar getblogsetting
3381 public function parse_getblogsetting($which)
3389 elseif ( $bid = intRequestVar('blogid') )
3392 $b = $manager->getBlog($bid);
3402 return Entity::hsc($b->getID());
3405 return Entity::hsc($b->getURL());
3408 return Entity::hsc($b->getName());
3411 return Entity::hsc($b->getDescription());
3414 return Entity::hsc($b->getShortName());
3416 case 'notifyaddress':
3417 return Entity::hsc($b->getNotifyAddress());
3420 return Entity::hsc($b->getMaxComments());
3423 return Entity::hsc($b->getUpdateFile());
3426 return Entity::hsc($b->getTimeOffset());
3433 * AdminActions::parse_geteditpluginfo()
3434 * Parse skinvar geteditpluginfo
3436 * @param string $type name of setting for edit plugin info
3439 public function parse_geteditpluginfo($type)
3441 $pid = intRequestVar('plugid');
3448 return Entity::hsc(getPluginNameFromPid($pid));
3455 * AdminActions::parse_getmember()
3456 * Parse skinvar getmember
3457 * (includes a member info thingie)
3459 * @param string $what name of setting for member
3462 public function parse_getmember($what)
3464 global $memberinfo, $member;
3465 // 1. only allow the member-details-page specific variables on member pages
3466 if ( $this->skintype == 'member' )
3471 return Entity::hsc($memberinfo->getDisplayName());
3474 return Entity::hsc($memberinfo->getRealName());
3477 return Entity::hsc($memberinfo->getNotes());
3480 return Entity::hsc($memberinfo->getURL());
3483 return Entity::hsc($memberinfo->getEmail());
3486 return Entity::hsc($memberinfo->getID());
3490 // 2. the next bunch of options is available everywhere, as long as the user is logged in
3491 if ( $member->isLoggedIn() )
3496 return $member->getDisplayName();
3498 case 'yourrealname':
3499 return $member->getRealName();
3502 return $member->getNotes();
3505 return $member->getURL();
3508 return $member->getEmail();
3511 return $member->getID();
3519 * AdminActions::parse_headmessage()
3520 * Parse skinvar headmessage
3525 public function parse_headmessage()
3527 if ( !empty(Admin::$headMess) )
3529 echo '<p>' . _MESSAGE . ': ' . Entity::hsc(Admin::$headMess) . "</p>\n";
3535 * AdminActions::parse_helplink()
3536 * Parse skinvar helplink
3538 * @param string $topic name of topic for help
3541 public function parse_helplink($topic = '')
3543 if ( !empty($topic) )
3551 * AdminActions::parse_helpplugname()
3552 * Parse skinvar helpplugname
3557 public function parse_helpplugname()
3559 $plugid = intGetVar('plugid');
3560 Entity::hsc(getPluginNameFromPid($plugid));
3565 * AdminActions::parse_ilistaddnew()
3566 * Parse skinvar ilistaddnew
3571 public function parse_ilistaddnew()
3573 $blogid = intRequestVar('blogid');
3574 if ( intPostVar('start') == 0 )
3576 echo '<p><a href="index.php?action=createitem&blogid=' . $blogid . '">' . _ITEMLIST_ADDNEW . "</a></p>\n";
3582 * AdminActions::parse_importskininfo()
3583 * Parse skinvar importskininfo
3585 * @param string $type name of information for imported skin
3588 public function parse_importskininfo($type)
3593 echo Entity::hsc(requestVar('skininfo'));
3596 $dataArr = requestArray('skinnames');
3597 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3600 $dataArr = requestArray('tpltnames');
3601 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3604 $dataArr = requestArray('skinclashes');
3605 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3608 $dataArr = requestArray('tpltclashes');
3609 echo implode(' <em>' . _AND . '</em> ', $dataArr);
3612 echo Entity::hsc(requestVar('skinfile'));
3615 echo Entity::hsc(requestVar('mode'));
3622 * AdminActions::parse_inputyesno()
3623 * Parse skinvar inputyesno
3625 * some init stuff for all forms
3630 function parse_init()
3635 if ( requestVar('action') == 'itemedit' )
3637 $itemid = intRequestVar('itemid');
3638 $item =& $manager->getItem($itemid, 1, 1);
3640 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
3641 if ( $item && $blog->convertBreaks() )
3643 $item['body'] = removeBreaks($item['body']);
3644 $item['more'] = removeBreaks($item['more']);
3647 $authorid = $contents['authorid'];
3649 elseif ( requestVar('action') == 'createitem' )
3651 $blogid = intRequestVar('blogid');
3652 $blog =& $manager->getBlog($blogid);
3655 $blog->insertJavaScriptInfo($authorid);
3660 * AdminActions::parse_inputyesno()
3661 * Parse skinvar inputyesno
3663 * @param string $name
3664 * @param string $checkedval
3665 * @param string $tabindex
3666 * @param string $value1
3667 * @param string $value2
3668 * @param string $yesval
3669 * @param string $noval
3670 * @param string $isAdmin
3671 * @param string $templateName
3674 public function parse_inputyesno($name, $checkedval, $tabindex = 0, $value1 = 1, $value2 = 0, $yesval = _YES, $noval = _NO, $isAdmin = 0, $templateName = '')
3676 self::input_yesno($name, $checkedval, $tabindex, $value1, $value2, $yesval, $noval, $isAdmin, $templateName );
3681 * AdminActions::parse_insertpluginfo()
3682 * Parse templatevar insertpluginfo
3684 public function parse_insertpluginfo($type)
3686 $option = Admin::$aOptions;
3690 return $option['pid'];
3693 return Entity::hsc($option['pfile']);
3700 * AdminActions::parse_insertpluginoptions()
3701 * Parse skinvar insertpluginoptions
3703 * @param string $templateName name of template
3706 public function parse_insertpluginoptions($templateName = '')
3708 $options = Admin::getAdminaOption();
3709 $template = array();
3710 $templats = array();
3712 if ( $templateName )
3714 $templates = Template::read($templateName);
3716 if ( !array_key_exists('INSERT_PLUGOPTION_TITLE', $templates) || empty($templates['INSERT_PLUGOPTION_TITLE']) )
3718 $template['title'] = "<tr>"
3719 . "<th colspan=\"2\"><%sprinttext(_PLUGIN_OPTIONS_TITLE, <|%insertpluginfo(name)%|>)%></th>"
3724 $template['title'] = $templates['INSERT_PLUGOPTION_TITLE'];
3726 if ( !array_key_exists('INSERT_PLUGOPTION_BODY', $templates) || empty($templates['INSERT_PLUGOPTION_BODY']) )
3728 $template['body'] = "<tr>"
3729 . "<%listplugplugoptionrow%>"
3734 $template['body'] = $templates['INSERT_PLUGOPTION_BODY'];
3739 include_libs('ACTIONS.php');
3740 $handler = new Actions($this->skintype);
3741 $parser = new PARSER($handler);
3743 foreach ( $options as $option )
3747 if ( $prevPid != $option['pid'] )
3749 $prevPid = $option['pid'];
3750 $parser->parse($template['title']);
3753 $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);
3755 if ( @$meta['access'] != 'hidden' )
3757 $parsed = $parser->parse($template['body']);
3764 * AdminActions::parse_insplugoptcontent()
3765 * Parse skinvar insplugoptcontent
3770 public function parse_insplugoptcontent()
3772 $option = Admin::$aOption;
3774 $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);
3775 if ( array_key_exists('access', $meta) && $meta['access'] != 'hidden' )
3778 listplug_plugOptionRow($option);
3785 * AdminActions::parse_iprangeinput()
3786 * Parse skinvar iprangeinput
3791 public function parse_iprangeinput()
3793 if ( requestVar('ip') )
3795 $iprangeVal = Entity::hsc(requestVar('ip'));
3796 echo "<input name=\"iprange\" type=\"radio\" value=\"{$iprangeVal}\" checked=\"checked\" id=\"ip_fixed\" />\n";
3797 echo "<label for=\"ip_fixed\">{$iprangeVal}</label><br />\n";
3798 echo '<input name="iprange" type="radio" value="custom" id="ip_custom" />' . "\n";
3799 echo '<label for="ip_custom">' . _BAN_IP_CUSTOM . '</label>' . "\n";
3800 echo "<input name=\"customiprange\" value=\"{$iprangeVal}\" maxlength=\"15\" size=\"15\" />\n";
3804 echo '<input name="iprange" value="custom" type="hidden" />' . "\n";
3805 echo '<input name="customiprange" value="" maxlength="15" size="15" />' . "\n";
3811 * AdminActions::parse_itemnavlist()
3812 * Parse skinvar itemnavlist
3817 public function parse_itemnavlist()
3819 global $CONF, $manager, $member;
3821 $query = "SELECT bshortname, cname, mname, ititle, ibody, inumber, idraft, itime"
3822 . " FROM %s, %s, %s, %s"
3823 . " WHERE iblog=bnumber AND iauthor=mnumber AND icat=catid";
3825 $query = sprintf($query, sql_table('item'), sql_table('blog'), sql_table('member'), sql_table('category'));
3827 if ( $this->skintype == 'itemlist' )
3830 if ( array_key_exists('blogid', $_REQUEST) )
3832 $blogid = intRequestVar('blogid');
3834 else if ( array_key_exists('itemid', $_REQUEST) )
3836 $itemid = intRequestVar('itemid');
3837 $item = &$manager->getItem($itemid, 1, 1);
3838 $blogid = (integer) $item['blogid'];
3840 $blog =& $manager->getBlog($blogid);
3842 $query .= " AND iblog={$blogid}";
3843 $template['now'] = $blog->getCorrectTime(time());
3845 // non-blog-admins can only edit/delete their own items
3846 if ( !$member->blogAdminRights($blogid) )
3848 $query .= ' AND iauthor = ' . $member->getID();
3851 elseif ( $this->skintype == 'browseownitems' )
3853 $query .= ' AND iauthor = ' . $member->getID();
3855 $template['now'] = time();
3858 // search through items
3859 $search = postVar('search');
3861 if ( !empty($search) )
3863 $query .= ' AND ((ititle LIKE "%' . sql_real_escape_string($search) . '%") '
3864 . ' OR (ibody LIKE "%' . sql_real_escape_string($search) . '%") '
3865 . ' OR (imore LIKE "%' . sql_real_escape_string($search) . '%"))';
3868 if ( postVar('start') )
3870 $start = intPostVar('start');
3877 // amount of items to show
3878 if ( postVar('amount') )
3880 $amount = intPostVar('amount');
3884 $amount = (integer) $CONF['DefaultListSize'];
3891 $query .= ' ORDER BY itime DESC'
3892 . " LIMIT {$start},{$amount}";
3894 $template['content'] = 'itemlist';
3896 $navList = new Navlist($this->skintype, $start, $amount, 0, 1000, $blogid, $search, 0);
3897 $navList->showBatchList('item', $query, 'table', $template);
3902 * AdminActions::parse_itemoptions()
3903 * Parse skinvar itemoptions
3904 * Adds the itemOptions of a plugin to a page
3907 function parse_itemoptions()
3909 $this->parse_pluginoptions('item');
3914 * AdminActions::parse_itemoptions()
3916 * date change on edit item
3918 * Parse skinvar itemoptions
3919 * Adds the itemOptions of a plugin to a page
3922 function parse_itemtime($what)
3927 $itemid = intRequestVar('itemid');
3928 $item =& $manager->getItem($itemid, 1, 1);
3930 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
3932 if ( $item && $blog->convertBreaks() && requestVar('action') == 'itemedit' )
3934 $item['body'] = removeBreaks($item['body']);
3935 $item['more'] = removeBreaks($item['more']);
3938 $contents = array();
3939 if ( requestVar('action') == 'itemedit' )
3943 elseif ( requestVar('action') == 'createitem' )
3946 'contents' => &$contents,
3947 'blog' => &$this->blog
3949 $manager->notify('PreAddItemForm', $data);
3951 $itemtime = getdate($contents['timestamp']);
3952 echo $itemtime[$what];
3957 * AdminActions::parse_jstoolbaroptions()
3958 * Parse skinvar jstoolbaroptions
3963 public function parse_jstoolbaroptions()
3967 _SETTINGS_JSTOOLBAR_NONE,
3968 _SETTINGS_JSTOOLBAR_SIMPLE,
3969 _SETTINGS_JSTOOLBAR_FULL
3973 foreach ( $options as $option )
3975 $text = "<option value=\"%d\"%s>%s</option>\n";
3976 $extra = ($CONF['DisableJsTools'] == $i) ? ' selected="selected"' : '';
3977 echo sprintf($text, $i, $extra, $option);
3983 * AdminActions::parse_localeselectoptions()
3984 * Parse skinvar localeselectoptions
3989 public function parse_localeselectoptions()
3991 $locales = i18n::get_available_locale_list();
3993 $memid = intRequestVar('memberid');
3996 $mem = MEMBER::createFromID($memid);
3997 if ( !$mem->getLocale() || !in_array($mem->getLocale(), $locales) )
3999 echo "<option value=\"\" selected=\"selected\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";
4003 echo "<option value=\"\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";
4008 if ( !i18n::get_current_locale() || !in_array(i18n::get_current_locale(), $locales) )
4010 echo "<option value=\"\" selected=\"selected\">en_Latn_US</option>\n";
4014 echo "<option value=\"\">en_Latn_US</option>\n";
4017 foreach ( $locales as $locale )
4019 if ( $locale == 'en_Latn_US' )
4025 if ( $locale == $mem->getLocale() )
4027 echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";
4031 echo "<option value=\"{$locale}\">{$locale}</option>\n";
4036 if ( $locale == i18n::get_current_locale() )
4038 echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";
4042 echo "<option value=\"{$locale}\">{$locale}</option>\n";
4050 * AdminActions::parse_listplugplugoptionrow()
4051 * Parse templatevar listplugplugoptionrow
4053 * @param string $templateName name of template
4056 public function parse_listplugplugoptionrow($templateName = '')
4058 echo listplug_plugOptionRow(Admin::$aOptions, $templateName);
4063 * AdminActions::parse_mediadirwarning()
4064 * Parse skinvar mediadirwarning
4069 public function parse_mediadirwarning()
4072 if ( !is_dir($DIR_MEDIA) )
4074 echo "<br /><b>" . _WARNING_NOTADIR . "</b>\n";
4076 if ( !is_readable($DIR_MEDIA) )
4078 echo "<br /><b>" . _WARNING_NOTREADABLE . "</b>\n";
4080 if ( !is_writeable($DIR_MEDIA) )
4082 echo "<br /><b>" . _WARNING_NOTWRITABLE . "</b>\n";
4088 * AdminActions::parse_movedistselect()
4089 * Parse skinvar movedistselect
4091 public function parse_movedistselect()
4093 $actionType = requestVar('action');
4094 switch ( $actionType )
4097 Admin::selectBlogCategory('destcatid');
4099 case 'batchcategory':
4100 Admin::selectBlog('destblogid');
4103 if ( $this->skintype == 'itemmove' )
4105 $query = "SELECT icat as result FROM %s WHERE inumber=%d;";
4106 $query = sprintf($query, sql_table('item'), intRequestVar('itemid'));
4107 $catid = quickQuery(sprintf($query, intRequestVar('itemid')));
4108 Admin::selectBlogCategory('catid', $catid, 10, 1);
4116 * AdminActions::parse_moveitemid()
4117 * Parse skinvar moveitemid
4122 public function parse_moveitemid()
4124 echo intRequestVar('itemid');
4129 * AdminActions::parse_newestcompare()
4130 * Parse skinvar newestcompare
4135 public function parse_newestcompare()
4139 $newestVersion = getLatestVersion();
4140 $newestCompare = str_replace('/', '.', $newestVersion);
4141 $currentVersion = str_replace(array('/', 'v'), array('.', ''), $nucleus['version']);
4143 if ( $newestVersion && version_compare($newestCompare, $currentVersion, '>') )
4145 echo '<br /><a style="color:red" href="http://nucleuscms.org/upgrade.php" title="' . _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE . '">';
4146 echo _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT . $newestVersion . '</a>';
4152 * AdminActions::parse_newmemberselect()
4153 * Parse skinvar newmemberselect
4155 * @param string $templateName name of template to use
4158 public function parse_newmemberselect($templateName = '')
4160 $blogid = intRequestVar('blogid');
4162 $query = "SELECT tmember FROM %s WHERE tblog=%d;";
4163 $query = sprintf($query, sql_table('team'), (integer) $blogid);
4164 $res = sql_query($query);
4167 while ( $tmember = sql_fetch_object($res) )
4169 $tmem[] = intval($tmember->tmember);
4172 $query = "SELECT mname as text, mnumber as value FROM %s WHERE mnumber NOT IN (%s);";
4173 $query = sprintf($query, sql_table('member'), implode(', ', $tmem));
4175 $template['name'] = 'memberid';
4176 $template['tabindex'] = 10000;
4177 Showlist($query, 'select', $template, $templateName);
4182 * AdminActions::parse_newpluginlist()
4183 * Parse skinvar newpluginlist
4188 public function parse_newpluginlist()
4190 $candidates = $this->newPlugCandidates;
4191 foreach ( $candidates as $name )
4193 echo '<option value="NP_' . $name . '">' . Entity::hsc($name) . "</option>\n";
4199 * AdminActions::parse_outputspecialdirs()
4200 * Parse skinvar outputspecialdirs
4202 * @param string $type type of setting for directory
4205 public function parse_outputspecialdirs($type)
4207 global $DIR_MEDIA, $DIR_NUCLEUS;
4212 echo Entity::hsc($DIR_NUCLEUS);
4215 echo Entity::hsc($DIR_MEDIA);
4222 * AdminActions::parse_passrequestvars()
4223 * Parse skinvar passrequestvars
4228 public function parse_passrequestvars()
4230 $passvar = Admin::getAdminpassvar();
4231 $oldaction = postVar('oldaction');
4233 if ( ($oldaction != 'logout')
4234 && ($oldaction != 'login')
4236 && !postVar('customaction') )
4244 * AdminActions::parse_pluginextras()
4245 * Parse skinvar pluginextras
4247 * @param string $type type of plugin context
4250 public function parse_pluginextras($type = 'global')
4256 $id = intRequestVar('memberid');
4257 $mem = MEMBER::createFromID($id);
4258 $manager->notify('MemberSettingsFormExtras', array('member' => &$mem));
4261 $id = intRequestVar('blogid');
4262 $blg = $manager->getBlog($id);
4263 $manager->notify('BlogSettingsFormExtras', array('member' => &$blg));
4267 'GeneralSettingsFormExtras',
4277 * AdminActions::parse_pluginhelp()
4278 * Parse skinvar pluginhelp
4283 public function parse_pluginhelp()
4285 global $manager, $DIR_PLUGINS;
4287 $plugid = intGetVar('plugid');
4288 $plugName = getPluginNameFromPid($plugid);
4289 $plug =& $manager->getPlugin($plugName);
4291 if ( $plug->supportsFeature('HelpPage') > 0 )
4293 $helpfile = $DIR_PLUGINS . $plug->getShortName() . '/help.';
4294 if ( @file_exists($helpfile . 'php') )
4296 @include($helpfile . 'php');
4299 elseif ( @file_exists($helpfile . 'html') )
4301 @include($helpfile . 'html');
4305 echo '<p>' . _ERROR . ': ' . _ERROR_PLUGNOHELPFILE . "</p>\n";
4306 echo '<p><a href="index.php?action=pluginlist">(' . _BACK . ")</a></p>\n";
4311 * AdminActions::parse_pluginlistlist()
4312 * Parse skinvar pluginlistlist
4314 * @param string $templateName name of template to use
4317 public function parse_pluginlistlist($templateName = '')
4319 $query = "SELECT * FROM %s ORDER BY porder ASC;";
4320 $query = sprintf($query, sql_table('plugin'));
4322 $template['content'] = 'pluginlist';
4323 $template['tabindex'] = 10;
4325 Showlist($query, 'table', $template, $templateName);
4331 * AdminActions::parse_pluginoptions()
4332 * Parse skinvar pluginoptions
4334 * @param string $type type of plugin option
4337 public function parse_pluginoptions($type = 'global')
4344 $id = intRequestVar('memberid');
4347 $id = intRequestVar('blogid');
4350 $id = intRequestVar('catid');
4356 Admin::insertPluginOptions($type, $id);
4361 * AdminActions::parse_qmenuaddselect()
4362 * Parse skinvar qmanuaddselect
4364 * @param string $templateName name of template to use
4367 public function parse_qmenuaddselect($templateName = '')
4370 $showAll = requestVar('showall');
4371 if ( $member->isAdmin() && ($showAll == 'yes') )
4373 // Super-Admins have access to all blogs! (no add item support though)
4374 $query = 'SELECT bnumber as value, bname as text'
4375 . ' FROM ' . sql_table('blog')
4376 . ' ORDER BY bname';
4380 $query = 'SELECT bnumber as value, bname as text'
4381 . ' FROM ' . sql_table('blog') . ', ' . sql_table('team')
4382 . ' WHERE tblog=bnumber and tmember=' . $member->getID()
4383 . ' ORDER BY bname';
4386 $template['name'] = 'blogid';
4387 $template['tabindex'] = 15000;
4388 $template['extra'] = _QMENU_ADD_SELECT;
4389 $template['selected'] = -1;
4390 $template['shorten'] = 10;
4391 $template['shortenel'] = '';
4392 $template['javascript'] = 'onchange="return form.submit()"';
4394 Showlist($query, 'select', $template, $templateName);
4400 * AdminActions::parse_quickmenu()
4401 * Parse skinvar quickmenu
4403 * @param string $templateName name of template to use
4406 public function parse_quickmenu($templateName = '')
4409 $templates = array();
4410 $template = array();
4411 if ( !empty($templateName) )
4413 $templates = Template::read($templateName);
4415 $pluginExtras = array();
4419 'options' => &$pluginExtras
4422 if ( count($pluginExtras) > 0 )
4424 if ( !array_key_exists('PLUGIN_QUICKMENU_TITLE', $templates) || empty($templates['PLUGIN_QUICKMENU_TITLE']) )
4426 $template['title'] = "<h2><%text(_QMENU_PLUGINS)%></h2>\n";
4430 $template['title'] = $templates['PLUGIN_QUICKMENU_TITLE'];
4432 if ( !array_key_exists('PLUGIN_QUICKMENU_HEAD', $templates) || empty($templates['PLUGIN_QUICKMENU_HEAD']) )
4434 $template['head'] = "<ul>\n";
4438 $template['head'] = $templates['PLUGIN_QUICKMENU_HEAD'];
4440 if ( !array_key_exists('PLUGIN_QUICKMENU_BODY', $templates) && empty($templates['PLUGIN_QUICKMENU_BODY']) )
4442 $template['body'] = "<li><a href=\"<%plugadminurl%>\" title=\"<%plugadmintooltip%>\"><%plugadmintitle%></a></li>\n";
4446 $template['body'] = $templates['PLUGIN_QUICKMENU_BODY'];
4448 if ( !array_key_exists('PLUGIN_QUICKMENU_FOOT', $templates) || empty($templates['PLUGIN_QUICKMENU_FOOT']) )
4450 $template['foot'] = "</ul>\n";
4454 $template['foot'] = $templates['PLUGIN_QUICKMENU_FOOT'];
4457 $handler = new Actions($this->skintype);
4458 $parser = new PARSER($handler);
4460 $parser->parse($template['title']);
4461 echo $template['head'];
4462 foreach ( $pluginExtras as $aInfo )
4465 'plugadminurl' => Entity::hsc($aInfo['url']),
4466 'plugadmintooltip' => Entity::hsc($aInfo['tooltip']),
4467 'plugadmintitle' => Entity::hsc($aInfo['title']),
4469 echo Template::fill($template['body'], $data);
4471 echo $template['foot'];
4477 * AdminActions::parse_requestblogid()
4478 * Parse skinvar requestblogid
4483 public function parse_requestblogid()
4485 echo intRequestVar('blogid');
4490 * AdminActions::parse_requestiprange()
4491 * Parse skinvar requestiprange
4496 public function parse_requestiprange()
4498 if ( requestVar('iprange') )
4500 echo Entity::hsc(requestVar('iprange'));
4502 elseif ( requestVar('ip') )
4504 echo Entity::hsc(requestVar('ip'));
4510 * AdminActions::parse_selectlocaladminskinfiles()
4511 * Parse skinvar selectlocaladminskinfiles
4516 public function parse_selectlocaladminskinfiles()
4518 global $DIR_SKINS, $manager;
4520 $adminskindir = $DIR_SKINS . 'admin/';
4521 $candidates = SkinImport::searchForCandidates($adminskindir);
4523 foreach ( $candidates as $skinname => $skinfile )
4525 $html = Entity::hsc($skinfile);
4526 echo '<option value="' . $html . '">' . $skinname . "</option>\n";
4533 * AdminActions::parse_selectlocalskinfiles()
4534 * Parse skinvar selectlocalskinfiles
4539 public function parse_selectlocalskinfiles()
4543 $candidates = SkinImport::searchForCandidates($DIR_SKINS);
4545 foreach ( $candidates as $skinname => $skinfile )
4547 $html = Entity::hsc($skinfile);
4548 echo '<option value="' . $html . '">' . $skinname . "</option>\n";
4555 * AdminActions::parse_skineditallowedlist()
4556 * Parse skinvar skineditallowedlist
4558 * @param string $type type of skin
4559 * @param string $templateName name of template
4562 public function parse_skineditallowedlist($type, $templateName = '')
4567 $query = "SELECT bshortname, bname FROM %s;";
4569 'content' => 'shortblognames'
4571 $query = sprintf($query, sql_table('blog'));
4572 Showlist($query, 'table', $show, $templateName);
4575 $query = "SELECT tdname as name, tddesc as description FROM %s WHERE tdname NOT LIKE 'admin/%%';";
4577 'content' => 'shortnames'
4579 $query = sprintf($query, sql_table('template_desc'));
4580 Showlist($query, 'table', $show, $templateName);
4587 * AdminActions::parse_skinielist()
4588 * Parse skinvar skinielist
4590 * @param string $type type of skin
4591 * @param string $templateName name of template to use
4594 public function parse_skinielist($type, $templateName = '')
4596 $templates = array();
4597 if ( $templateName )
4599 $templates = Template::read($templateName);
4601 if ( array_key_exists('SKINIE_EXPORT_LIST', $templates) && !empty($templates['SKINIE_EXPORT_LIST']) )
4603 $template = $templates['SKINIE_EXPORT_LIST'];
4608 . "<input type=\"checkbox\" name=\"<%typeid%>\" id=\"<%expid%>\" />\n"
4609 . "<label for=\"<%expid%>\"><%expname%></label>\n"
4611 . "<td><%expdesc%></td>\n"
4618 $res = sql_query('SELECT * FROM ' . sql_table('skin_desc'));
4619 while ( $skinObj = sql_fetch_object($res) )
4622 'typeid' => 'skin[' . $skinObj->sdnumber . ']',
4623 'expid' => 'skinexp' . $skinObj->sdnumber,
4624 'expname' => Entity::hsc($skinObj->sdname),
4625 'expdesc' => Entity::hsc($skinObj->sddesc),
4627 echo Template::fill($template, $data);
4631 $res = sql_query('SELECT * FROM '.sql_table('template_desc'). " WHERE tdname NOT LIKE 'admin/%%';");
4632 while ($templateObj = sql_fetch_object($res)) {
4634 'typeid' => 'template[' . $templateObj->tdnumber . ']',
4635 'expid' => 'templateexp' . $templateObj->tdnumber,
4636 'expname' => Entity::hsc($templateObj->tdname),
4637 'expdesc' => Entity::hsc($templateObj->tddesc),
4639 echo Template::fill($template, $data);
4647 * AdminActions::parse_skinoverview()
4648 * Parse skinvar skinoverview
4650 * @param string $templateName name of template to use
4653 public function parse_skinoverview($templateName = '')
4656 $query = "SELECT * FROM %s WHERE sdname NOT LIKE 'admin/%%';";
4657 $query = sprintf($query, sql_table('skin_desc'));
4659 $template['content'] = 'skinlist';
4660 $template['tabindex'] = 10;
4662 Showlist($query, 'table', $template, $templateName);
4667 * AdminActions::parse_skintypehelp()
4668 * Check editing skintypehelp
4673 public function parse_skintypehelp()
4675 $nowSkinType = strtolower(trim(requestVar('type')));
4677 /* TODO: use Skin class */
4678 $regularType = array(
4689 if ( in_array($nowSkinType, $regularType) )
4691 help('skinpart' . $nowSkinType);
4695 help('skinpartspecial');
4701 * AdminActions::parse_specialskinlist()
4702 * Parse skinvar specialskinlist
4704 * @param string $templateName name of template to use
4707 public function parse_specialskinlist($templateName = '')
4709 $templates = array();
4710 if ( $templateName )
4712 $templates = Template::read($templateName);
4715 /* TODO: use Skin class */
4726 $skinid = intRequestVar('skinid');
4727 $query = "SELECT stype FROM %s WHERE stype NOT IN ('%s') AND sdesc = %d;";
4728 $query = sprintf($query, sql_table('skin'), implode("', '", $nType), $skinid);
4730 $res = sql_query($query);
4731 if ( $res && sql_num_rows($res) > 0 )
4734 if ( array_key_exists('SPECIALSKINLIST_HEAD', $templates) && !empty($templates['SPECIALSKINLIST_HEAD']) )
4736 $template['head'] = $templates['SPECIALSKINLIST_HEAD'];
4740 $template['head'] = "<ul>\n";
4742 echo Template::fill($template['head'], $data);
4743 if ( !array_key_exists('SPECIALSKINLIST_BODY', $templates) || empty($templates['SPECIALSKINLIST_BODY']) )
4745 $template['body'] = '<li><a tabindex="<%tabindex%>" href="index.php?action=skinedittype&skinid=<%skinid%>'
4746 . '&type=<%skintype%>"><%skintype%></a> (<a tabindex="<%tabindex%>" href="index.php?'
4747 . 'action=skinremovetype&skinid=<%skinid%>&type=<%skintype%>">remove</a>)</li>';
4751 $template['body'] = $templates['SPECIALSKINLIST_BODY'];
4755 while ( $row = sql_fetch_assoc($res) )
4758 'tabindex' => $tabstart++,
4759 'skinid' => $skinid,
4760 'skintype' => Entity::hsc(strtolower($row['stype']))
4762 echo Template::fill($template['body'], $data);
4765 if (array_key_exists('SPECIALSKINLIST_FOOT', $templates) && !empty($templates['SPECIALSKINLIST_FOOT']) )
4767 $template['foot'] = $templates['SPECIALSKINLIST_FOOT'];
4771 $template['foot'] = "</ul>\n";
4773 echo Template::fill($template['foot'], $data);
4779 * AdminActions::parse_sprinttext()
4782 * @param string $which
4783 * @param string $val
4786 public function parse_sprinttext($which, $val)
4788 if ( !defined($which) )
4794 $base = constant($which);
4797 if ( preg_match('#[^<|%].*[^%|>]#', $val, $matchies) )
4799 if ( !preg_match('#[(].*[^)]#', $matchies[0], $args) )
4801 $met = 'parse_' . $matchies[0];
4805 $arg = trim($args[0], '()');
4806 $met = 'parse_' . substr($matchies[0], 0, strpos($matchies[0], '('));
4809 if ( method_exists($this, $met) )
4811 $value = call_user_func(array(&$this, $met), $arg);
4815 if ( !isset($value) || empty($value) )
4819 echo sprintf($base, $value);
4824 * AdminActions::parse_systemsettings()
4825 * Parse skinvar systemsettings
4827 * @param string $type type of settings for system
4828 * @param string $templateName name of template to use
4831 public function parse_systemsettings($type = 'phpinfo', $templateName = '')
4833 global $member, $CONF, $nucleus;
4835 $member->isAdmin() or Admin::disallow();
4837 $enable = _ADMIN_SYSTEMOVERVIEW_ENABLE;
4838 $disable = _ADMIN_SYSTEMOVERVIEW_DISABLE;
4845 case 'sqlserverinfo':
4846 echo sql_get_server_info();
4848 case 'sqlclientinfo':
4849 echo sql_get_client_info();
4851 case 'magicquotesgpc':
4852 echo ini_get('magic_quotes_gpc') ? 'On' : 'Off';
4854 case 'magicquotesruntime':
4855 echo ini_get('magic_quotes_runtime') ? 'On' : 'Off';
4857 case 'registerglobals':
4858 echo ini_get('register_globals') ? 'On' : 'Off';
4861 $templates = array();
4862 if ( $templateName )
4864 $templates = Template::read($templateName);
4866 if ( !array_key_exists('SYSTEMINFO_GDSETTINGS', $templates) || empty($templates['SYSTEMINFO_GDSETTINGS']) )
4868 $template = "<tr>\n"
4869 . "<td><%key%></td>\n"
4870 . "<td><%value%></td>\n"
4875 $template = $templates['SYSTEMINFO_GDSETTINGS'];
4878 $gdinfo = gd_info();
4880 foreach ( $gdinfo as $key => $value )
4882 if ( is_bool($value) )
4884 $value = $value ? $enable : $disable;
4888 $value = Entity::hsc($value);
4894 echo Template::fill($template, $data);
4899 phpinfo(INFO_MODULES);
4900 $im = ob_get_contents();
4902 echo ( i18n::strpos($im, 'mod_rewrite') !== FALSE ) ? $enable : $disable;
4904 case 'nucleusversion':
4905 echo getNucleusVersion() / 100 . '(' . $nucleus['version'] . ')';
4907 case 'nucleuspatchlevel':
4908 echo getNucleusPatchLevel();
4914 echo $CONF['ItemURL'];
4916 case 'alertonheaderssent':
4917 echo $CONF['alertOnHeadersSent'] ? $enable : $disable;
4919 case 'nucleuscodename':
4920 if ( $nucleus['codename'] != '' )
4922 echo ' "' . $nucleus['codename'] . '"';
4925 case 'versioncheckurl':
4926 echo sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
4933 * AdminActions::parse_templateoverview()
4934 * Parse skinvar templateoverview
4936 * @param string $templateName name of template to use
4939 public function parse_templateoverview($templateName = '')
4941 $query = "SELECT * FROM %s WHERE tdname NOT LIKE 'admin/%%' ORDER BY tdname";
4942 $query = sprintf($query, sql_table('template_desc'));
4944 $template['content'] = 'templatelist';
4945 $template['tabindex'] = 10;
4947 Showlist($query, 'table', $template, $templateName);
4953 * AdminActions::parse_ticket()
4959 public function parse_ticket()
4962 $manager->addTicketHidden();
4967 * AdminActions::parse_versioncheckurl()
4968 * Parse skinvar versioncheckurl
4973 public function parse_versioncheckurl()
4975 echo sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
4980 * AdminActions::parse_yrbloglist()
4981 * Parse skinvar yrbloglist
4983 * @param string $templateName name of template to use
4986 public function parse_yrbloglist($templateName = '')
4989 $showAll = requestVar('showall');
4991 if ( $member->isAdmin() && ($showAll == 'yes') )
4993 // Super-Admins have access to all blogs! (no add item support though)
4994 $query = "SELECT bnumber, bname, 1 as tadmin, burl, bshortname"
4996 . " ORDER BY bnumber;";
4997 $query = sprintf($query, sql_table('blog'));
5001 $query = "SELECT bnumber, bname, tadmin, burl, bshortname"
5003 . " WHERE tblog=bnumber and tmember=%d"
5004 . " ORDER BY bnumber;";
5005 $query = sprintf($query, sql_table('blog'), sql_table('team'), (integer) $member->getID());
5008 $template['content'] = 'bloglist';
5009 $template['superadmin'] = $member->isAdmin();
5011 $amount = Showlist($query, 'table', $template, $templateName);
5013 if ( ($showAll != 'yes') && ($member->isAdmin()) )
5015 $query = 'SELECT COUNT(*) as result FROM ' . sql_table('blog');
5017 $total = quickQuery($query);
5018 if ( $total > $amount )
5020 echo '<p><a href="index.php?action=overview&showall=yes">' . _OVERVIEW_SHOWALL . '</a></p>';
5026 echo _OVERVIEW_NOBLOGS;
5028 elseif( $amount != 0 )
5030 echo '<h2>' . _OVERVIEW_YRDRAFTS . '</h2>';
5032 $query = "SELECT ititle, inumber, bshortname"
5034 . ' WHERE iauthor=%d AND iblog=bnumber AND idraft=1;';
5035 $query = sprintf($query, sql_table('item'), sql_table('blog'), (integer) $member->getID());
5037 $template['content'] = 'draftlist';
5039 $amountdrafts = Showlist($query, 'table', $template, $templateName);
5040 if ( $amountdrafts == 0 )
5042 echo _OVERVIEW_NODRAFTS;
5049 * AdminActions::checkCondition()
5050 * Checks conditions for if statements
5052 * @param string $field type of <%if%>
5053 * @param string $name property of field
5054 * @param string $value value of property
5055 * @return boolean condition
5057 protected function checkCondition($field, $name='', $value = '')
5059 global $CONF, $catid, $blog, $member, $itemidnext, $itemidprev, $manager, $archiveprevexists, $archivenextexists;
5070 $blog =& $manager->getBlog($blogid);
5074 $blogid = getBlogIDFromCatID($catid);
5076 $blog =& $manager->getBlog($blogid);
5078 elseif ( intRequestVar('catid') )
5080 $catid = intRequestVar('catid');
5081 $blogid = getBlogIDFromCatID($catid);
5083 $blog =& $manager->getBlog($blogid);
5090 $condition = ($blog && $this->ifCategory($name, $value));
5093 $condition = ($blog && ($blog->getSetting($name) == $value));
5096 $condition = $member->isLoggedIn();
5099 $condition = $member->isLoggedIn() && $this->ifOnTeam($name);
5102 $condition = $member->isLoggedIn() && $this->ifAdmin($name);
5105 $condition = $member->isLoggedIn() && $member->isAdmin();
5107 case 'allowloginedit':
5108 $condition = $member->isLoggedIn() && ($CONF['AllowLoginEdit'] || $member->isAdmin());
5111 $condition = ($itemidnext != '');
5114 $condition = ($itemidprev != '');
5116 case 'archiveprevexists':
5117 $condition = ($archiveprevexists == true);
5119 case 'archivenextexists':
5120 $condition = ($archivenextexists == true);
5123 $condition = (($name == $this->skintype) || ($name == requestVar('action')));
5126 $condition = $this->ifHasPlugin($name, $value);
5129 $condition = (Admin::getAdminAction() == $name);
5131 case 'adminoldaction':
5132 $condition = (Admin::getAdminAction() == $name);
5134 case 'addresschange':
5135 $condition = ($this->ifAddresscange());
5137 case 'bechangepass':
5138 $condition = ($this->beChangePassword());
5140 case 'skincandidates':
5141 $condition = ($this->ifSkincandidates());
5144 $condition = requestVar('nameclashes');
5146 case 'existsnewplugin':
5147 $condition = ($this->existsNewPlugin());
5150 $condition = (boolean) ($member->getAutosave() == $value);
5153 $condition = $manager->pluginInstalled("NP_{$field}") && $this->ifPlugin($field, $name, $value);
5160 * Actions::_ifHasPlugin()
5161 * hasplugin,PlugName
5162 * -> checks if plugin exists
5163 * hasplugin,PlugName,OptionName
5164 * -> checks if the option OptionName from plugin PlugName is not set to 'no'
5165 * hasplugin,PlugName,OptionName=value
5166 * -> checks if the option OptionName from plugin PlugName is set to value
5168 * @param string $name name of plugin
5169 * @param string $value
5172 private function ifHasPlugin($name, $value)
5176 // (pluginInstalled method won't write a message in the actionlog on failure)
5177 if ( $manager->pluginInstalled("NP_{$name}") )
5179 $plugin =& $manager->getPlugin("NP_{$name}");
5180 if ( $plugin != NULL )
5188 list($name2, $value2) = preg_split('#=#', $value, 2);
5189 if ( $value2 == "" && $plugin->getOption($name2) != 'no' )
5193 else if ( $plugin->getOption($name2) == $value2 )
5204 * Actions::beChangePassword()
5209 private function beChangePassword()
5211 return intRequestVar('bNeedsPasswordChange');
5215 * Actions::ifSkincandidates()
5216 * Checks if a plugin exists and call its doIf function
5222 private function ifSkincandidates()
5225 $candidates = SKINIMPORT::searchForCandidates($DIR_SKINS);
5226 return (count($candidates) > 0);
5230 * Actions::ifPlugin()
5231 * Checks if a plugin exists and call its doIf function
5233 * @param string $name name of plugin
5234 * @param string $key
5235 * @param string $value
5238 private function ifPlugin($name, $key = '', $value = '')
5242 $plugin =& $manager->getPlugin("NP_{$name}");
5248 $params = func_get_args();
5249 array_shift($params);
5251 return call_user_func_array(array(&$plugin, 'doIf'), $params);
5255 * AdminActions::ifCategory()
5256 * Different checks for a category
5258 * @param string $key key for information of category
5259 * @param string $value value for information of category
5262 private function ifCategory($key = '', $value='')
5264 global $blog, $catid;
5266 // when no parameter is defined, just check if a category is selected
5267 if (($key != 'catname' && $key != 'catid') || ($value == ''))
5269 return $blog->isValidCategory($catid);
5272 // check category name
5273 if ( $key == 'catname' )
5275 $value = $blog->getCategoryIdFromName($value);
5276 if ($value == $catid)
5278 return $blog->isValidCategory($catid);
5282 // check category id
5283 if (($key == 'catid') && ($value == $catid))
5285 return $blog->isValidCategory($catid);
5292 * AdminActions::ifOnTeam()
5293 * Checks if a member is on the team of a blog and return his rights
5295 * @param string $blogName name of weblog
5298 private function ifOnTeam($blogName = '')
5300 global $blog, $member, $manager;
5302 // when no blog found
5303 if ( ($blogName == '') && !is_object($blog) )
5308 // explicit blog selection
5309 if ($blogName != '')
5311 $blogid = getBlogIDFromName($blogName);
5314 if (($blogName == '') || !$manager->existsBlogID($blogid))
5317 $blogid = $blog->getID();
5319 return $member->teamRights($blogid);
5323 * AdminActions::ifAdmin()
5324 * Checks if a member is admin of a blog
5326 * @param string $blogName name of weblog
5329 private function ifAdmin($blogName = '')
5331 global $blog, $member, $manager;
5333 // when no blog found
5334 if (($blogName == '') && (!is_object($blog)))
5339 // explicit blog selection
5340 if ($blogName != '')
5342 $blogid = getBlogIDFromName($blogName);
5345 if (($blogName == '') || !$manager->existsBlogID($blogid))
5348 $blogid = $blog->getID();
5351 return $member->isBlogAdmin($blogid);
5355 * AdminActions::ifAddresscange()
5356 * Check e-Mail address is changed
5361 private function ifAddresscange()
5363 $key = $this->objAdmin->sessionVar("{$CONF['CookiePrefix']}ackey");
5368 $info = MEMBER::getActivationInfo($key);
5373 $mem = MEMBER::createFromId($info->vmember);
5378 if ( $info->vtype == 'addresschange' )
5386 * AdminActions::templateEditRow()
5389 * @param array $template
5390 * @param string $desc
5391 * @param string $name
5392 * @param string $help
5393 * @param integer $tabindex
5394 * @param boolean $big
5395 * @param array $tmplt
5398 private function templateEditRow(&$template, $desc, $name, $help = '', $tabindex = 0, $big = 0, $tplt = '')
5402 if ( !array_key_exists($name, $template) )
5404 $template[$name] = '';
5412 $tmplt = skinableTEMPLATE::read($tplt);
5416 'description' => $desc,
5417 'help' => empty($help) ? '' : helpHtml('template' . $help),
5420 'tabindex' => $tabindex,
5421 'rows' => $big ? 10 : 5,
5424 if ( !array_key_exists('TEMPLATE_EDIT_ROW_HEAD', $tmplt) || empty($tmplt['TEMPLATE_EDIT_ROW_HEAD']) )
5426 $base['head'] = "</tr>"
5428 . "<td><%description%><%help%></td>\n"
5429 . "<td id=\"td<%count%>\">\n"
5430 . "<textarea class=\"templateedit\" name=\"<%name%>\" tabindex=\"<%tabindex%>\" cols=\"50\" rows=\"<%rows%>\" id=\"textarea<%count%>\">\n";
5434 $base['head'] = $tmplt['TEMPLATE_EDIT_ROW_HEAD'];
5437 if ( !array_key_exists('TEMPLATE_EDIT_ROW_TAIL', $tmplt) || empty($tmplt['TEMPLATE_EDIT_ROW_TAIL']) )
5439 $base['tail'] = "</textarea>\n"
5444 $base['tail'] = $tmplt['TEMPLATE_EDIT_ROW_TAIL'];
5447 echo TEMPLATE::fill($base['head'], $data);
5448 echo ENTITY::hsc($template[$name]);
5449 echo TEMPLATE::fill($base['tail'], $data);
5457 * AdminActions::customHelp()
5458 * shows a link to custom help file
5461 * @param string $tplName
5462 * @param string $url
5463 * @param string $iconURL
5464 * @param string $alt
5465 * @param string $title
5469 private function customHelp($id, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
5471 echo self::customHelpHtml($id, $tplName, $url, $iconURL, $alt, $title, $onclick);
5475 * AdminActions::customHelp()
5476 * shows a link to custom help file
5479 * @param string $tplName
5480 * @param string $url
5481 * @param string $iconURL
5482 * @param string $alt
5483 * @param string $title
5487 static function customHelplink($id, $tplName = '', $url = '', $title = '', $onclick = '')
5491 $templates = array();
5495 $templates = Template::read($tplName);
5498 if ( !array_key_exists('ADMIN_CUSTOMHELPLINK_ANCHOR', $templates) || empty($templates['ADMIN_CUSTOMHELPLINK_ANCHOR']) )
5500 $template = "<a href=\"<%helpurl%>#<%helptarget%>\" title=\"<%title%>\" <%onclick%>>\n";
5504 $template = $templates['ADMIN_CUSTOMHELPLINK_ANCHOR'];
5509 $url = $CONF['AdminURL'] . 'documentation/customHelp.html';
5512 if ( empty($onclick) )
5514 $onclick = 'onclick="if (event && event.preventDefault) event.preventDefault(); return help(this.href);"';
5516 elseif ( preg_match('#^onclick#', $onclick) )
5518 $onclick = $onclick;
5522 $onclick = 'onclick="' . $onclick . '"';
5527 'helptarget' => $id,
5528 'onclick' => $onclick,
5529 'title' => (isset($title) && !empty($title)) ? $title : _HELP_TT,
5531 return Template::fill($template, $data);
5535 * AdminActions::customHelpHtml()
5538 * @param string $tplName
5539 * @param string $url
5540 * @param string $iconURL
5541 * @param string $alt
5542 * @param string $title
5543 * @param string $onclick
5544 * @return string anchor element with help uri
5546 private function customHelpHtml($id, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')
5550 $templates = array();
5554 $templates = Template::read($tplName);
5556 if ( !array_key_exists('ADMIN_CUSTOMHELPLINK_ICON', $templates) || !empty($templates['ADMIN_CUSTOMHELPLINK_ICON']) )
5558 $template = "<img src=\"<%iconurl%>\" <%width%><%height%>alt=\"<%alt%>\" title=\"<%title%>\" /></a>\n";
5562 $template = $templates['ADMIN_CUSTOMHELPLINK_ICON'];
5565 if ( empty($iconURL) )
5567 $iconURL = $CONF['AdminURL'] . 'documentation/icon-help.gif';
5570 if ( function_exists('getimagesize') )
5572 $size = getimagesize($iconURL);
5573 $width = 'width="' . $size[0] . '" ';
5574 $height = 'height="' . $size[1] . '" ';
5578 'iconurl' => $iconURL,
5580 'height' => $height,
5581 'alt' => (isset($alt) && !empty($alt)) ? $alt : _HELP_TT,
5582 'title' => (isset($title) && !empty($title)) ? $title : _HELP_TT,
5585 $icon = Template::fill($template, $data);
5586 $help = self::customHelplink($id, $tplName, $url, $title, $onclick);
5588 return $help . $icon;
5592 * AdminActions::input_yesno
5595 * @param $checkedval
5602 * @param $templateName
5605 private function input_yesno($name,
5616 $templates = array();
5617 if ( $templateName )
5619 $templates = Template::read($templateName);
5622 if ( $name == 'admin' )
5624 if ( !array_key_exists('INPUTYESNO_TEMPLATE_ADMIN', $templates) || empty($templates['INPUTYESNO_TEMPLATE_ADMIN']) )
5626 $template = '<input onclick="selectCanLogin(true);" type="radio" name="<%name%>" value="<%yesval%>" <%yescheckedval%> id="<%yesid%>" />' . "\n"
5627 . '<label for="<%yesid%>"><%yesvaltext%></label>' . "\n"
5628 . '<input onclick="selectCanLogin(false);" type="radio" name="<%name%>" value="<%noval%>" <%nocheckedval%> id="<%noid%>"<%disabled%> />' . "\n"
5629 . '<label for="<%noid%>"><%novaltext%></label>' . "\n";
5633 $template = $templates['INPUTYESNO_TEMPLATE_ADMIN'];
5638 if ( array_key_exists('INPUTYESNO_TEMPLATE_NORMAL', $templates) && !empty($templates['INPUTYESNO_TEMPLATE_NORMAL']) )
5640 $template = $templates['INPUTYESNO_TEMPLATE_NORMAL'];
5644 if ( array_key_exists('SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO', $templates) && !empty($templates['SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO']) )
5646 $template = $templates['SHOWLIST_LISTPLUG_TABLE_PLGOPT_OYESNO'];
5649 if ( !isset($template) )
5651 $template = '<input type="radio" name="<%name%>" value="<%yesval%>" <%yescheckedval%> id="<%yesid%>" />' . "\n"
5652 . '<label for="<%yesid%>"><%yesvaltext%></label>' . "\n"
5653 . '<input type="radio" name="<%name%>" value="<%noval%>" <%nocheckedval%> id="<%noid%>"<%disabled%> />' . "\n"
5654 . '<label for="<%noid%>"><%novaltext%></label>' . "\n";
5659 $id = Entity::hsc($name);
5660 $id = str_replace('[', '-', $id);
5661 $id = str_replace(']', '-', $id);
5662 $id1 = $id . Entity::hsc($value1);
5663 $id2 = $id . Entity::hsc($value2);
5665 'name' => Entity::hsc($name),
5666 'yesval' => Entity::hsc($value1),
5667 'noval' => Entity::hsc($value2),
5670 'yesvaltext' => $yesval,
5671 'novaltext' => $noval,
5672 'yescheckedval' => ($checkedval == $value1) ? ' checked="checked" tabindex="' . $tabindex . '"': '',
5673 'nocheckedval' => ($checkedval != $value1) ? ' checked="checked" tabindex="' . $tabindex . '"': '',
5674 'disabled' => ($isAdmin && $name == 'canlogin') ? ' disabled="disabled"' : '',
5679 return Template::fill($template, $dat);
5683 echo Template::fill($template, $dat);
5689 * AdminActions::existsNewPlugin()
5690 * Check exists new plugin
5693 * @return boolean exists or not
5695 private function existsNewPlugin()
5697 global $DIR_PLUGINS;
5699 $candidates = array();
5700 $files = scandir($DIR_PLUGINS);
5702 foreach ( $files as $file )
5704 if ( preg_match("#^NP_(.*)\.php$#", $file, $matches) )
5706 $name = $matches[1];
5707 $query = "SELECT * FROM %s WHERE pfile='%s';";
5708 $query = sprintf($query, sql_table('plugin'), sql_real_escape_string("{NP_{$name}"));
5709 $res = sql_query($query);
5711 if ( sql_num_rows($res) == 0 )
5713 $candidates[] = $name;
5718 $this->newPlugCandidates = $candidates;
5719 return (count($candidates) > 0);