4 * Plugin for Nucleus CMS (http://plugins.nucleuscms.org/)
5 * Copyright (C) 2003 The Nucleus Plugins Project
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
12 * see license.txt for the full license
26 if (!function_exists('array_key_exists')){
27 function array_key_exists($key, $array) {
28 return key_exists($key, $array);
32 class NP_MultipleCategories extends NucleusPlugin {
34 function getName() { return 'Multiple Categories [Custom Edition]'; }
35 function getAuthor() { return 'Anand + nakahara21 + Taka + sato(na) + shizuki + Katsumi'; }
36 function getURL() { return 'http://reverb.jp/vivian/download.php?itemid=NP_MultipleCategories'; }
37 function getVersion() { return '0.5.1j'; }
38 function getMinNucleusVersion() { return '220'; }
39 function getDescription() {
40 // include language file for this plugin
41 // $language = ereg_replace( '[\\|/]', '', getLanguageName());
42 $language = preg_replace( '![\\|/]!', '', getLanguageName());
43 if (file_exists($this->getDirectory().'language/'.$language.'.php')) {
44 include_once($this->getDirectory().'language/'.$language.'.php');
46 include_once($this->getDirectory().'language/'.'english.php');
48 return _NPMC_DESCRIPTION;
50 function supportsFeature($what) {
53 case 'SqlTablePrefix':
61 // include language file for this plugin
62 // $language = ereg_replace( '[\\|/]', '', getLanguageName());
63 $language = preg_replace( '![\\|/]!', '', getLanguageName());
64 if (file_exists($this->getDirectory().'language/'.$language.'.php')) {
65 include_once($this->getDirectory().'language/'.$language.'.php');
67 include_once($this->getDirectory().'language/'.'english.php');
70 $this->createOption('addindex', _NP_MCOP_ADDINDEX, "yesno", 'yes');
71 $this->createOption('addblogid_def', _NP_MCOP_ADBIDDEF, "yesno", 'no');
72 $this->createOption('addblogid', _NP_MCOP_ADBLOGID, "yesno", 'yes');
73 $this->createOption("mainsep", _NP_MCOP_MAINSEP, "text", " , ");
74 $this->createOption("addsep", _NP_MCOP_ADDSEP, "text", " , ");
75 $this->createOption("subformat", _NP_MCOP_SUBFOMT, "text", "<%category%> ( <%subcategory%> )");
76 $this->createOption("catheader", _NP_MCOP_CATHEADR, "textarea", '<ul class="nobullets">' . "\n");
77 $this->createOption("catlist", _NP_MCOP_CATLIST, "textarea", '<li<%catflag%>><a href="<%catlink%>"><%catname%></a>(<%catamount%>)<%subcategorylist%></li>'."\n");
78 $this->createOption("catfooter", _NP_MCOP_CATFOOTR, "textarea", '</ul>' . "\n");
79 $this->createOption("catflag", _NP_MCOP_CATFLAG, "textarea", ' class="current"' . "\n");
80 $this->createOption("subheader", _NP_MCOP_SUBHEADR, "textarea", '<ul>' . "\n");
81 $this->createOption("sublist", _NP_MCOP_SUBLIST, "textarea", '<li<%subflag%>><a href="<%sublink%>"><%subname%></a>(<%subamount%>)</li>'."\n");
82 $this->createOption("subfooter", _NP_MCOP_SUBFOOTR, "textarea", '</ul>' . "\n");
83 $this->createOption("subflag", _NP_MCOP_SUBFLAG, "textarea", ' class="current"' . "\n");
84 $this->createOption("replace", _NP_MCOP_REPLACE, 'yesno', 'no');
85 $this->createOption("replacechar", _NP_MCOP_REPRCHAR, 'text', '+');
86 $this->createOption("archeader", _NP_MCOP_ARCHEADR, "textarea", '<ul>' . "\n");
87 $this->createOption("arclist", _NP_MCOP_ARCLIST, "textarea", '<li><a href="<%archivelink%>">%Y-%m</a></li>'."\n");
88 $this->createOption("arcfooter", _NP_MCOP_ARCFOOTR, "textarea", '</ul>'."\n");
89 $this->createOption("locale", _NP_MCOP_LOCALE, "text", 'ja_JP');
90 $this->createOption("quickmenu", _NP_MCOP_QICKMENU, "yesno", "no");
91 $this->createOption("del_uninstall", _NP_MCOP_DELTABLE, "yesno", "no");
93 $this->createOption('addindex', '[When URL-Mode is normal] If a blog URL ends with "/", add "index.php" before query strings.', 'yesno', 'yes');
94 $this->createOption('addblogid_def', 'Add blogid to default blog\'s category URLs.', 'yesno', 'no');
95 $this->createOption('addblogid', 'When a blog URL is different from default blog URL, add blogid to its category URLs.', 'yesno', 'yes');
96 $this->createOption("mainsep", "Separate character between a category and additional categories", "text", " , ");
97 $this->createOption("addsep", "Separate character between additional categories", "text", " , ");
98 $this->createOption("subformat", "Display form of a category name when the item belongs to one or more sub categories.", "text", "<%category%> ( <%subcategory%> )");
99 $this->createOption("catheader", "[Category list] Header Template. You can use <%blogid%>, <%blogurl%>, <%self%>", "textarea",'<ul class="nobullets">'."\n");
100 $this->createOption("catlist", "[Category list] List item Template. You can use <%catname%>, <%catdesc%>, <%catid%>, <%catlink%>, <%catflag%>, <%catamount%>, <%subcategorylist%>", "textarea",'<li<%catflag%>><a href="<%catlink%>"><%catname%></a>(<%catamount%>)<%subcategorylist%></li>'."\n");
101 $this->createOption("catfooter", "[Category list] Footer Template. You can use <%blogid%>, <%blogurl%>, <%self%>", "textarea",'</ul>'."\n");
102 $this->createOption("catflag", "[Category list] Flag Template", "textarea",' class="current"'."\n");
103 $this->createOption("subheader", "[Category list] Sub-Category Header Template", "textarea",'<ul>'."\n");
104 $this->createOption("sublist", "[Category list] Sub-Category List item Template. You can use <%subname%>, <%subdesc%>, <%subcatid%>, <%sublink%>, <%subflag%>, <%subamount%>", "textarea",'<li<%subflag%>><a href="<%sublink%>"><%subname%></a>(<%subamount%>)</li>'."\n");
105 $this->createOption("subfooter", "[Category list] Sub-Category Footer Template", "textarea",'</ul>'."\n");
106 $this->createOption("subflag", "[Category list] Sub-Category Flag Template", "textarea",' class="current"'."\n");
107 $this->createOption("replace", '[Category list] a-1: When a category has sub categories, replace "<%amount%>" of category list template to another character.', 'yesno','no');
108 $this->createOption("replacechar", '[Category list] a-2: The character to replace.', 'text','+');
109 $this->createOption("archeader", "[Archive list] Header Template. You can use <%blogid%>", "textarea",'<ul>'."\n");
110 $this->createOption("arclist", "[Archive list] List item Template. You can use <%archivelink%>,<%blogid%>, month/year/day like \"%B, %Y\"", "textarea",'<li><a href="<%archivelink%>">%Y-%m</a></li>'."\n");
111 $this->createOption("arcfooter", "[Archive list] Footer Template. You can use <%blogid%>", "textarea",'</ul>'."\n");
112 $this->createOption("locale", "[Archive list] Locale", "text",'ja_JP');
113 $this->createOption("quickmenu", "Show in quick menu", "yesno", "no");
114 $this->createOption("del_uninstall", "Delete tables on uninstall?", "yesno", "no");
118 ALTER TABLE `000_nucleus_plug_multiple_categories_sub` ADD `parentid` INT( 11 ) DEFAULT '0' NOT NULL AFTER `scatid` ,
119 ADD `ordid` INT( 11 ) DEFAULT '100' NOT NULL AFTER `parentid` ;
123 // create the table that will keep track of notifications
124 $query = 'CREATE TABLE IF NOT EXISTS '. sql_table('plug_multiple_categories'). '(';
125 $query .= ' item_id int(11) NOT NULL,';
126 $query .= ' categories varchar(255) not null,';
127 $query .= ' subcategories varchar(255) not null,';
128 $query .= ' PRIMARY KEY (item_id)';
129 $query .= ') TYPE=MyISAM;';
132 $check_column = sql_query('SELECT * FROM '. sql_table('plug_multiple_categories'). ' WHERE 1=0');
133 for ($i=0; $i<mysql_num_fields($check_column); $i++) {
134 if ($meta = mysql_fetch_field($check_column)) {
135 $names[] = $meta->name;
138 if (!in_array("subcategories",$names)) {
139 sql_query ('ALTER TABLE '.sql_table('plug_multiple_categories').' ADD subcategories varchar(255) not null');
140 sql_query('ALTER TABLE ' .sql_table('plug_multiple_categories').' MODIFY categories varchar(255) not null');
142 $query = 'CREATE TABLE IF NOT EXISTS '. sql_table('plug_multiple_categories_sub'). '('
143 . 'scatid int(11) not null auto_increment,'
144 . 'catid int(11) not null,'
145 . 'sname varchar(40) not null,'
146 . 'sdesc varchar(200) not null,'
147 . ' PRIMARY KEY (scatid)'
153 if ($this->checkMSCVersion() == 2){
156 `".sql_table('plug_multiple_categories_sub')."`
157 ADD `parentid` INT( 11 ) DEFAULT '0' NOT NULL AFTER `scatid` ,
158 ADD `ordid` INT( 11 ) DEFAULT '100' NOT NULL AFTER `parentid`
160 } elseif ($this->version == 3){
163 `".sql_table('plug_multiple_categories_sub')."`
164 ADD `ordid` INT( 11 ) DEFAULT '100' NOT NULL AFTER `parentid`
167 if ($q) sql_query($q);
171 function unInstall() {
172 if ($this->getOption('del_uninstall') == "yes") {
173 sql_query('DROP TABLE ' .sql_table('plug_multiple_categories'));
174 sql_query('DROP TABLE ' .sql_table('plug_multiple_categories_sub'));
178 function getTableList() {
179 return array(sql_table('plug_multiple_categories'), sql_table('plug_multiple_categories_sub'));
182 function hasAdminArea() { return 1; }
184 function getEventList() {
185 return array('PreSkinParse','PostAddItem','AddItemFormExtras', 'EditItemFormExtras', 'PreUpdateItem', 'PostDeleteItem', 'PostDeleteCategory','QuickMenu');
188 function event_QuickMenu(&$data) {
189 // only show when option enabled
190 if ($this->getOption('quickmenu') != 'yes') return;
192 // only show to admins
193 if (!($member->isLoggedIn() && $member->isAdmin())) return;
197 'title' => 'Multiple Categories',
198 'url' => $this->getAdminURL(),
199 'tooltip' => 'Edit sub categories'
204 function getRequestName() {
209 $this->setglobal = 0;
210 $this->subOrderArray = $this->_setSubOrder();//<sato(na)t1855 />
213 function event_PreSkinParse($data) {
214 global $catid, $subcatid, $CONF;
216 if ($this->setglobal == 1) return;
218 if ($CONF['URLMode'] == 'pathinfo') {
221 $pathdata = explode("/",serverVar('PATH_INFO'));
222 for ($i=0;$i<sizeof($pathdata);$i++) {
223 switch ($pathdata[$i]) {
224 case $this->getRequestName():
226 if ($i<sizeof($pathdata)) $sid = $pathdata[$i];
230 if ($sid) $subcatid = intval($sid);
233 $subcatid = intRequestVar($this->getRequestName());
235 if ($subcatid && !$catid) {
236 $catid = intval($this->_getParentCatID($subcatid));//Intval is not needed. ($subcatid) <sato(na)0.5j />
241 } elseif ($subcatid) {
242 $pcatid = intval($this->_getParentCatID($subcatid));//Intval is not needed. ($subcatid) <sato(na)0.5j />
243 if ($pcatid != $catid) $subcatid = null;
246 $this->setglobal = 1;
249 //modify start+++++++++
250 function checkMSCVersion(){
251 $res = sql_query("SHOW FIELDS from ".sql_table('plug_multiple_categories_sub') );
252 $fieldnames = array();
253 while ($co = mysql_fetch_assoc($res)) {
254 $fieldnames[] = $co['Field'];
256 if(in_array('ordid',$fieldnames)) return 4;
257 if(in_array('parentid',$fieldnames)) return 3;
260 //modify end+++++++++
262 function _getCategories($id){
264 $query = 'SELECT catid, cname as name, cdesc FROM '.sql_table('category').' WHERE cblog=' . intval($id);
265 $res = sql_query($query);
266 while ($a = mysql_fetch_assoc($res)){
267 array_push($aResult,$a);
272 function _getDefinedScats($id){
274 $query = 'SELECT * FROM '.sql_table('plug_multiple_categories_sub').' WHERE catid=' . intval($id);
275 $res = sql_query($query);
276 while ($a = mysql_fetch_assoc($res)){
277 array_push($aResult,$a);
282 function _getScatIDs($id){
284 $query = 'SELECT scatid FROM '.sql_table('plug_multiple_categories_sub').' WHERE catid=' . intval($id);
285 $res = sql_query($query);
286 while ($row = mysql_fetch_row($res)){
287 $aResult[] = intval($row[0]); //<sato(na)0.5j />ultrarich
292 function _getCatNameFromID($id){
293 return quickQuery('SELECT cname as result FROM '.sql_table('category').' WHERE catid='.intval($id));
296 function _getScatNameFromID($id) {
297 return quickQuery('SELECT sname as result FROM '.sql_table('plug_multiple_categories_sub').' WHERE scatid='.intval($id));
300 function _getScatDescFromID($id) {
301 return quickQuery('SELECT sdesc as result FROM '.sql_table('plug_multiple_categories_sub').' WHERE scatid='.intval($id));
304 function _getScatIDFromName($name) {
305 return quickQuery('SELECT scatid as result FROM '.sql_table('plug_multiple_categories_sub').' WHERE sname="'.addslashes($name).'"');
308 function _getParentCatID($id) {
309 return quickQuery('SELECT catid as result FROM '.sql_table('plug_multiple_categories_sub').' WHERE scatid='.intval($id));
312 function _getScatMap($numarray) {
314 $numstr = implode(",",array_map("intval",$numarray));
316 $numstr = $this->permuteSubcategories($numstr);
317 if (!$numstr) $numstr = 0;//<mod by shizuki>
318 //$res = sql_query("SELECT catid, scatid, sname FROM ". sql_table("plug_multiple_categories_sub") ." WHERE scatid in (".$numstr.")");
319 $sql_str = "SELECT catid, scatid, sname FROM ". sql_table("plug_multiple_categories_sub").
320 " WHERE scatid in (".$numstr.") ORDER BY FIND_IN_SET(scatid,'".$numstr."')";
321 $res = sql_query($sql_str);
323 while ($o = mysql_fetch_object($res)) {
324 if (!isset($aResult[$o->catid])) $aResult[$o->catid] = array();
325 $aResult[$o->catid][$o->scatid] = $o->sname;
330 function _getMultiCategories($itemid){
331 $query = "SELECT categories FROM ".sql_table('plug_multiple_categories')." WHERE item_id=".intval($itemid);
332 $result = sql_query($query);
333 if(mysql_num_rows($result)==0) return;
334 $row = mysql_fetch_row($result);
338 function _getSubCategories($itemid){
339 $query = "SELECT subcategories FROM ".sql_table('plug_multiple_categories')." WHERE item_id=".intval($itemid);
340 $result = sql_query($query);
341 if(mysql_num_rows($result)==0) return;
342 $row = mysql_fetch_row($result);
346 function _setSubOrder(){
347 $subOrderString = substr($this->_getSubOrder(0), 1);
348 return explode(",", $subOrderString);
350 function _getSubOrder($pid){
351 $sql_str = 'SELECT scatid FROM '.sql_table('plug_multiple_categories_sub').' WHERE parentid='.intval($pid).' ORDER BY ordid'; //<sato(na)0.5j />
352 $qid_scat = mysql_query($sql_str);
353 if ($qid_scat === FALSE) return ''; //<sato(na)0.403j />
355 while ($row_scat = mysql_fetch_object($qid_scat)) $scat_str .= ',' . intval($row_scat->scatid) . $this->_getSubOrder($row_scat->scatid); //<sato(na)0.5j />
358 function permuteSubcategories($subcategories){
359 $itemScats = explode(",", $subcategories);
360 $retArray = array_intersect($this->subOrderArray, $itemScats);
361 $ret = implode(",", $retArray);
366 function doAction($type) {
367 $catid = intRequestVar('catid');
368 $subcatid = intRequestVar('subcatid');
370 function orderKey(key, sequence) {
371 var scatDat = new Array();';
372 $query = "SELECT scatid, sname, sdesc FROM ".sql_table('plug_multiple_categories_sub')." WHERE parentid=$subcatid AND catid=$catid";
373 $res = sql_query($query);
375 while($row = mysql_fetch_array($res)) {
377 echo 'scatDat['.($i++).'] = new setScatDat('.
378 intval($row['scatid']).
380 htmlspecialchars($row['sname'], ENT_QUOTES).
382 htmlspecialchars($row['sdesc'], ENT_QUOTES).
387 scatDat.sort(eval("sort" + key + sequence));
388 scatListRefresh(scatDat);
393 function _getItemObject($id) {
394 $res = sql_query("SELECT inumber as itemid, icat as catid FROM ".sql_table('item')." WHERE inumber=".intval($id));
396 return mysql_fetch_object($res);
400 function event_AddItemFormExtras($data) {
401 $aCategories = $this->_getCategories($data['blog']->blogid);
402 if(count($aCategories) > 1) {
403 $this->showForm($aCategories,$data['itemid']);
404 } elseif (count($aCategories) > 0) {
405 $this->showSubForm($aCategories,$data['itemid']);
409 function event_EditItemFormExtras($data) {
410 $aCategories = $this->_getCategories($data['blog']->blogid);
411 if(count($aCategories) > 1) {
412 $this->showForm($aCategories,$data['itemid']);
413 } elseif (count($aCategories) > 0) {
414 $this->showSubForm($aCategories,$data['itemid']);
418 function showSubForm($aCategories, $itemid) {
419 $aDefinedScats = $this->_getDefinedScats($aCategories[0]['catid']);
420 if (!count($aDefinedScats)) return;
422 $itemScats = array();
423 if($subcatlist = $this->_getSubCategories($itemid))//Intval is not needed. ($itemid) <sato(na)0.5j />
424 $itemScats = explode(",",$subcatlist);
426 //<sato(na)>$snum = 0;</sato(na)>
427 echo '<h3>Multiple Categories</h3>';
428 echo "<fieldset><legend>Sub Categories</legend>";
430 $sql_str = 'SELECT * FROM '.sql_table('plug_multiple_categories_sub').' WHERE catid='.intval($aCategories[0]['catid']).' AND parentid=0'; //<sato(na)0.5j />
431 $qid = sql_query($sql_str);
432 while ($aSub = mysql_fetch_assoc($qid)) {
433 $schecked = (in_array($aSub['scatid'], $itemScats)) ? " checked=checked" : "";
434 echo '<input type="checkbox" id="npmc_scat'.$aSub['scatid'].'" name="npmc_scat['.$aSub['scatid'].']"'.$schecked.' value="'.$aSub['scatid'].'" />';
435 echo '<label for="npmc_scat'.$aSub['scatid'].'">'.htmlspecialchars($aSub['sname'], ENT_QUOTES).'</label><br />'; //<sato(na)0.5j />
436 $this->showFormHierarchical($aSub['scatid'], $itemScats); //<sato(na)0.5j />
442 function showForm($aCategories,$itemid) {
444 $itemScats = array();
445 if($multicatlist = $this->_getMultiCategories($itemid))//Intval is not needed. ($itemid) <sato(na)0.5j />
446 $itemcats = explode(",",$multicatlist);
447 if($subcatlist = $this->_getSubCategories($itemid))//Intval is not needed. ($itemid) <sato(na)0.5j />
448 $itemScats = explode(",",$subcatlist);
450 echo '<h3 style="margin-bottom:0px;">Multiple Categories</h3>';
454 echo '<div style="height: 300px;overflow: auto;"><table><tbody>';
456 foreach ($aCategories as $aCategory){
458 if(in_array($aCategory['catid'],$itemcats)) $checked = " checked=checked";
460 echo '<input type="checkbox" id="npmc_cat'.$num.'" name="npmc_cat['.$num.']"'.$checked.' value="'.$aCategory['catid'].'" />';
461 echo '<label for="npmc_cat'.$num.'">'.htmlspecialchars($aCategory['name'], ENT_QUOTES); //<sato(na)0.5j />
462 if ($aCategory['cdesc']) echo "(".htmlspecialchars($aCategory['cdesc'], ENT_QUOTES).")"; //<sato(na)0.5j />
466 $sql_str = 'SELECT * FROM '.sql_table('plug_multiple_categories_sub').' WHERE catid='.intval($aCategory['catid']).' AND parentid=0'; //<sato(na)0.5j />
467 $qid = sql_query($sql_str);
468 if (mysql_num_rows($qid)) {
469 echo "<fieldset style=\"margin-left:1.5em;border:none\">";
470 while ($aSub = mysql_fetch_assoc($qid)) {
471 $schecked = (in_array($aSub['scatid'], $itemScats)) ? " checked=checked" : "";
472 echo '<input type="checkbox" id="npmc_scat'.$aSub['scatid'].'" name="npmc_scat['.$aSub['scatid'].']"'.$schecked.' value="'.$aSub['scatid'].'" />';
473 echo '<label for="npmc_scat'.$aSub['scatid'].'">'.htmlspecialchars($aSub['sname'], ENT_QUOTES).'</label><br />'; //<sato(na)0.5j />
474 $this->showFormHierarchical($aSub['scatid'], $itemScats); //<sato(na)0.5j />
481 echo "</tbody></table></div>";//<sato(na) />
484 function showFormHierarchical($parentid, $itemScats) {
485 $qid = sql_query('SELECT * FROM '.sql_table('plug_multiple_categories_sub').' WHERE parentid='.intval($parentid));
486 if (mysql_num_rows($qid)){
487 echo "<div style=\"margin-left:3em;border:none\">";
488 while ($aSub = mysql_fetch_assoc($qid)) {
489 $schecked = (in_array($aSub['scatid'], $itemScats)) ? " checked=checked" : "";
490 echo '<input type="checkbox" id="npmc_scat'.$aSub['scatid'].'" name="npmc_scat['.$aSub['scatid'].']"'.$schecked.' value="'.$aSub['scatid'].'" />';
491 echo '<label for="npmc_scat'.$aSub['scatid'].'">'.htmlspecialchars($aSub['sname'], ENT_QUOTES).'</label><br />'; //<sato(na)0.5j />
492 $this->showFormHierarchical($aSub['scatid'], $itemScats); //<sato(na)0.5j />
499 function event_PostAddItem($data) {
500 $selected = requestIntArray('npmc_cat');
501 $s_selected = requestIntArray('npmc_scat');
502 if (count($selected) == 0 && count($s_selected) == 0) return;
504 $pcatid = quickQuery("SELECT icat as result FROM ".sql_table('item')." WHERE inumber=".intval($data['itemid']));
506 $this->updateData($data['itemid'], $pcatid, $selected, $s_selected);
509 function event_PreUpdateItem($data) {
510 $selected = requestIntArray('npmc_cat');
511 $s_selected = requestIntArray('npmc_scat');
513 if(($this->_getMultiCategories($data['itemid']) || $this->_getSubCategories($data['itemid'])) && count($selected) == 0 && count($s_selected) == 0 ){
514 sql_query('DELETE FROM ' . sql_table('plug_multiple_categories') . ' WHERE item_id=' . intval($data['itemid']));
516 } elseif (count($selected) == 0 && count($s_selected) == 0) {
520 $this->updateData($data['itemid'],$data['catid'],$selected,$s_selected);
523 function updateData($itemid, $pcatid, $selected, $s_selected) {
527 if (is_array($selected) && count($selected) > 0) {
531 if (is_array($s_selected) && count($s_selected) > 0) {
532 foreach ($s_selected as $v) {
534 $mycatid = $this->_getParentCatID($v);
537 if (!in_array($mycatid,$aMulti)) {
538 $aMulti[] = $mycatid;
544 if (count($aMulti) > 0) {
545 $aMulti = array_map("intval",$aMulti);
546 $cat_string = join(",",$aMulti);
547 $value .= ', "'.addslashes($cat_string).'"';
552 if (count($aSub) > 0) {
553 $scat_string = join(",",$aSub);
554 $value .= ', "'.addslashes($scat_string).'"';
559 $query = 'REPLACE INTO '.sql_table('plug_multiple_categories').' (item_id,categories,subcategories) VALUES('.intval($itemid).$value.');'; //$value : addslashes
563 function event_PostDeleteItem($data){
564 $query = 'DELETE FROM ' . sql_table('plug_multiple_categories') . ' WHERE item_id=' . intval($data['itemid']);
568 function event_PostDeleteCategory($data) {
569 $catid = intval($data['catid']);
570 $subcats = $this->_getScatIDs($catid);
571 if (count($subcats > 0)) {
572 sql_query("DELETE FROM ". sql_table("plug_multiple_categories_sub") ." WHERE catid=$catid");
574 foreach ($subcats as $val) {
584 $query = "SELECT categories, subcategories, item_id FROM ". sql_table("plug_multiple_categories") ." WHERE categories REGEXP '(^|,)$catid(,|$)'";
585 if (count($subcats > 0)) {
586 $query .= " or subcategories REGEXP '(^|,)(".implode("|",$subcats).")(,|$)'";
588 $res = sql_query($query);
592 while ($o = mysql_fetch_object($res)) {
593 $o->categories = preg_replace("/^(?:(.*),)?$catid(?:,(.*))?$/","$1,$2",$o->categories);
594 $o->subcategories = preg_replace("/^(?:(.*),)?$catid(?:,(.*))?$/","$1,$2",$o->subcategories);
595 if ((!$o->categories || $o->categories == ',') && (!$o->subcategories || $o->subcategories == ',')) {
596 $del[] = intval($o->item_id); //<sato(na)0.5j />ultrarich
598 $o->categories = preg_replace("/(^,+|(?<=,),+|,+$)/","",$o->categories);
599 $o->subcategories = preg_replace("/(^,+|(?<=,),+|,+$)/","",$o->subcategories);
600 $up[] = "UPDATE ". sql_table("plug_multiple_categories") ." SET categories='".addslashes($o->categories).
601 "', subcategories='".addslashes($o->subcategories)."' WHERE item_id=".intval($o->item_id); //<sato(na)0.5j />ultrarich
605 if (count($del) > 0) {
606 sql_query("DELETE FROM ". sql_table("plug_multiple_categories") . " WHERE item_id in (".implode(",",$del).")");
608 if (count($up) > 0) {
609 foreach ($up as $v) {
615 function doSKinVar(){
616 global $blog, $catid, $CONF, $manager, $itemid, $subcatid, $startpos, $archive;
618 $params = func_get_args();
620 if ($params[0] == 'item' && $params[1] != "1") {
621 if ($itemid) $this->_parseItem($params[1], intval($itemid));//<sato(na)0.5j />
625 if (intval($params[1]) == 1) {
626 switch ($params[2]) {
628 if (!$subcatid || !$catid) return;
629 echo intval($subcatid);//<sato(na)0.5j />
633 if (!$subcatid || !$catid) return;
634 echo htmlspecialchars($this->_getScatDescFromID($subcatid), ENT_QUOTES);//Intval is not needed. ($subcatid) <sato(na)0.5j />
638 if (!$subcatid || !$catid) return;
639 echo htmlspecialchars($this->_getScatNameFromID($subcatid), ENT_QUOTES);//Intval is not needed. ($subcatid) <sato(na)0.5j />
643 if (!$subcatid || !$catid) return;
647 $b =& $manager->getBlog($CONF['DefaultBlog']);
649 $this->_setCommonData($b->getID());
650 $sparams = array_merge($this->param, array($this->getRequestName() => intval($subcatid)));//<sato(na)0.5j />
651 $url = createCategoryLink(intval($catid), $sparams);//<sato(na)0.5j />
652 if ($CONF['URLMode'] != 'pathinfo') {
653 list(,$temp_param) = explode("?",$url);
654 $url = $this->url. "?" . $temp_param;
656 $url = preg_replace(array("/</", "/>/"), array("<", ">"), $url); //<sato(na)0.5j />
657 echo $url; //$sparams escape OK <sato(na)0.5j />
661 if ($params[0] != 'item') return;
662 $item = $this->_getItemObject(intval($itemid));//<sato(na)0.5j />
664 $this->doTemplateVar(&$item);
672 $b =& $manager->getBlog($CONF['DefaultBlog']);
675 $this->_setCommonData($bid);
676 $cur_params = array();
677 if ($catid) $cur_params['catid'] = intval($catid);//<sato(na)0.5j />
679 $rname = $this->getRequestName();
680 $cur_params[$rname] = intval($subcatid);//<sato(na)0.5j />
682 $url = createArchiveListLink($bid, $cur_params);
683 if ($CONF['URLMode'] != 'pathinfo') {
684 list(,$temp_param) = explode("?",$url);
685 $url = $this->url. "?" . $temp_param;
687 $url = preg_replace(array("/</", "/>/"), array("<", ">"), $url); //<sato(na)0.5j />
688 echo $url; //$cur_params escape OK <sato(na)0.5j />
692 $this->showCategoryList();
697 if (isset($params[3]) && $params[3] == 'day') {
701 if (isset($params[4]) && intval($params[4])) {
702 $arclimit = intval($params[4]);
704 $this->showArchiveList($arcmode,$arclimit);
713 $b =& $manager->getBlog($CONF['DefaultBlog']);
716 $mycatid = ($catid) ? intval($catid) : 0;//<sato(na)0.5j />
717 $mysubcatid = ($subcatid) ? intval($subcatid) : 0;//<sato(na)0.5j />
718 $templateName = $params[1];
721 $startpos = intval($startpos);//<sato(na)0.5j />
722 if (isset($params[2])) {
723 list($amountEntries, $offset) = sscanf($params[2], '%d(%d)');
725 $startpos += $offset;
728 if (isset($params[3]) && $params[3])
729 $mycatid = getCatIDFromName($params[3]);
730 if (isset($params[4]) && $params[4])
731 $mysubcatid = $this->_getScatIDFromName($params[4]);
733 if (!$templateName) $templateName = 'grey/short';
734 if (!$amountEntries) $amountEntries = 10;
736 $mycatid = intval($mycatid);
737 $mysubcatid = intval($mysubcatid);
738 if (!$mycatid && $mysubcatid) $mysubcatid = 0;
740 $query = 'SELECT i.inumber as itemid, i.ititle as title, i.ibody as body, m.mname as author, m.mrealname as authorname, UNIX_TIMESTAMP(i.itime) as timestamp, i.itime, i.imore as more, m.mnumber as authorid, c.cname as category, i.icat as catid, i.iclosed as closed' ;
742 //$query .= ' FROM '.sql_table('item').' as i, '.sql_table('member').' as m, '.sql_table('category').' as c';
743 $query .= ' FROM '.sql_table('category').' as c, '.sql_table('member').' as m, '.sql_table('item').' as i';
747 $query .= ' LEFT JOIN '.sql_table('plug_multiple_categories').' as p ON i.inumber=p.item_id';
750 $query .= ' WHERE i.iauthor=m.mnumber'
751 . ' and i.iblog='.intval($b->getID()) //<sato(na)0.5j />
752 . ' and i.icat=c.catid'
754 if ($params[0] == 'archive' && $archive) {
755 sscanf($archive,'%d-%d-%d',$y,$m,$d);
757 $timestamp_start = mktime(0,0,0,$m,$d,$y);
758 $timestamp_end = mktime(0,0,0,$m,$d+1,$y);
760 $timestamp_start = mktime(0,0,0,$m,1,$y);
761 $timestamp_end = mktime(0,0,0,$m+1,1,$y);
764 $query .= ' and i.itime>=' . mysqldate($timestamp_start)
765 . ' and i.itime<' . mysqldate($timestamp_end);
768 $query .= ' and i.itime<=' . mysqldate($b->getCorrectTime());
772 $query .= ' and ((i.inumber=p.item_id and (p.categories REGEXP "(^|,)'.$mycatid.'(,|$)" or i.icat='.$mycatid.')) or (i.icat='.$mycatid.' and p.item_id IS NULL))';
775 $query .= ' and p.subcategories REGEXP "(^|,)'.$mysubcatid.'(,|$)"';
778 $query .= ' ORDER BY i.itime DESC';
780 $query .= ' LIMIT ' . intval($startpos).',' . intval($amountEntries);
782 $b->showUsingQuery($templateName, $query, 0, 1, 1);
786 function doTemplateCommentsVar(&$item, &$comment, $what='') {
787 if ($what == 'itemlink') {
788 $this->doTemplateVar(&$item, $what);
792 function doTemplateVar(&$item, $what='') {
793 global $CONF, $catid, $subcatid;
795 $bid = getBlogIDFromItemID($item->itemid);
796 if (!isset($this->defurl)) $this->_setCommonData($bid);
797 if ($bid != $this->bid) $this->_setBlogData($bid);
799 if ($what == 'itemlink') {
802 $sparams['catid'] = intval($catid);//<sato(na)0.5j />
804 $sparams[$this->getRequestName()] = intval($subcatid);//<sato(na)0.5j />
807 $url = createItemLink($item->itemid, $sparams);
808 if ($CONF['URLMode'] != 'pathinfo') {
809 list(,$temp_param) = explode("?",$url);
810 $url = $this->url. "?" . $temp_param;
812 $url = preg_replace(array("/</", "/>/"), array("<", ">"), $url); //<sato(na)0.5j />
813 echo $url; //$cur_params escape OK <sato(na)0.5j />
817 $url = createCategoryLink($item->catid, $this->param);
818 if ($CONF['URLMode'] != 'pathinfo') {
819 list(,$temp_param) = explode("?",$url);
820 $url = $this->url. "?" . $temp_param;
822 $mcat_string = '<a href="'.$this->cnvHtmlUrlAttribute($url).'">'.htmlspecialchars($this->_getCatNameFromID($item->catid), ENT_QUOTES).'</a>'; //<sato(na)0.5j />
824 $itemScats = array();
825 if ($itemscatstr = $this->_getSubCategories($item->itemid)) {
826 $itemScats = explode(",",$itemscatstr);
827 $scatMaps = $this->_getScatMap($itemScats);
829 if ($itemscatstr && array_key_exists($item->catid,$scatMaps)) {
830 $extra_scat_string = array();
831 foreach ($scatMaps[$item->catid] as $id => $name) {
832 if ($CONF['URLMode'] == 'pathinfo') {
833 $sparams = array_merge($this->param, array($this->getRequestName() => $id));
834 $surl = createCategoryLink($item->catid, $sparams);
836 $surl = addLinkParams($url,array($this->getRequestName() => $id));
838 $extra_scat_string[] = '<a href="'.$this->cnvHtmlUrlAttribute($surl).'">'.htmlspecialchars($name, ENT_QUOTES).'</a>'; //<sato(na)0.5j />
840 $scat_string = implode($this->ssep,$extra_scat_string);
841 $cat_string = str_replace(array("<%category%>","<%subcategory%>"), array($mcat_string,$scat_string), $this->sform);
843 $cat_string = $mcat_string;
846 if ($multicatstr = $this->_getMultiCategories($item->itemid)) {
847 $itemcats = explode(",",$multicatstr);
848 $extra_cat_string = array();
849 foreach ($itemcats as $icat){
850 if ($icat != $item->catid) {
851 $url = createCategoryLink($icat,$this->param);
852 if ($CONF['URLMode'] != 'pathinfo') {
853 list(,$temp_param) = explode("?",$url);
854 $url = $this->url. "?" . $temp_param;
856 $mcat_string = '<a href="'.$this->cnvHtmlUrlAttribute($url).'">'.htmlspecialchars($this->_getCatNameFromID($icat), ENT_QUOTES).'</a>'; //<sato(na)0.5j />
858 if (count($itemScats) > 0 && array_key_exists($icat,$scatMaps)) {
859 $extra_scat_string = array();
860 foreach ($scatMaps[$icat] as $id => $name) {
861 if ($CONF['URLMode'] == 'pathinfo') {
862 $sparams = array_merge($this->param, array($this->getRequestName() => $id));
863 $surl = createCategoryLink($icat,$sparams);
865 $surl = addLinkParams($url,array($this->getRequestName() => $id));
867 $extra_scat_string[] = '<a href="'.$this->cnvHtmlUrlAttribute($surl).'">'.htmlspecialchars($name, ENT_QUOTES).'</a>'; //<sato(na)0.5j />
869 $scat_string = implode($this->ssep,$extra_scat_string);
870 $extra_cat_string[] = str_replace(array("<%category%>","<%subcategory%>"), array($mcat_string,$scat_string), $this->sform);
872 $extra_cat_string[] = $mcat_string;
876 if (count($extra_cat_string) > 0) {
877 $cat_string .= $this->msep . implode($this->ssep,$extra_cat_string);
880 echo $cat_string;//$mcat_string, $scat_string escape OK <sato(na)0.5j />
883 function cnvHtmlUrlAttribute($forHtmlAtt__str)
886 $forHtmlAtt__str = preg_replace('/[\'"]/', '', $forHtmlAtt__str);
889 $forHtmlAtt__str = preg_replace('/javascript/i', '', preg_replace('/[\x00-\x20\x22\x27]/', '', $forHtmlAtt__str));
891 return $forHtmlAtt__str;
895 function _setCommonData($bid) {
897 $this->msep = $this->getOption('mainsep');
898 $this->ssep = $this->getOption('addsep');
899 $this->sform = $this->getOption('subformat');
900 $this->addindex = ($this->getOption('addindex') == 'yes');
901 $this->addbiddef = ($this->getOption('addblogid_def') == 'yes');
902 $this->addbid = ($this->getOption('addblogid') == 'yes');
903 $this->defurl = quickQuery("SELECT burl as result from ".sql_table('blog')." WHERE bnumber=".addslashes($CONF['DefaultBlog'])); //<sato(na)0.5j />
904 if (!$this->defurl) $this->defurl = $CONF['Self'];
905 $this->_setBlogData($bid);
908 function _setBlogData($bid) {
910 $this->param = array();
911 $this->bid = intval($bid);
912 if ($bid != $CONF['DefaultBlog']) {
913 $this->url = quickQuery("SELECT burl as result from ".sql_table('blog')." WHERE bnumber=".$this->bid);
914 if (!$this->url) $this->url = $this->defurl;
916 $this->url = $this->defurl;
918 if ($CONF['URLMode'] == 'normal' && substr($this->url,-1) == "/" && $this->addindex) {
919 $this->url .= "index.php";
921 if ($this->bid == $CONF['DefaultBlog'] && $this->addbiddef) {
922 $this->param['blogid'] = $this->bid; //$this->bid intval OK
923 } elseif ($this->bid != $CONF['DefaultBlog'] && ($this->url == $this->defurl || $this->addbid)){
924 $this->param['blogid'] = $this->bid; //$this->bid intval OK
928 function _parseItem($template, $itemid) {
931 $b =& $manager->getBlog(getBlogIDFromItemID($itemid));//Intval is not needed. ($itemid) <sato(na)0.5j />
933 $query = 'SELECT i.inumber as itemid, i.ititle as title, i.ibody as body, m.mname as author, m.mrealname as authorname, i.itime, i.imore as more, m.mnumber as authorid, m.memail as authormail, m.murl as authorurl, c.cname as category, i.icat as catid, i.iclosed as closed';
936 //$query .= ' FROM '.sql_table('item').' as i, '.sql_table('member').' as m, '.sql_table('category').' as c'
937 $query .= ' FROM '.sql_table('category').' as c, '.sql_table('member').' as m, '.sql_table('item').' as i'
939 . ' WHERE i.iblog='.intval($b->getID()) //<sato(na)0.5j />
940 . ' and i.iauthor=m.mnumber'
941 . ' and i.icat=c.catid'
942 . ' and i.idraft=0' // exclude drafts
943 // don't show future items
944 . ' and i.itime<=' . mysqldate($b->getCorrectTime())
945 . ' and i.inumber='.intval($itemid)
946 . ' ORDER BY i.itime DESC LIMIT 0,1';
948 $b->showUsingQuery($template, $query, 0, 0, 0);
952 function showCategoryList() {
953 global $CONF, $manager, $blog, $catid, $subcatid;
954 global $archive, $archivelist;
958 sscanf ($archive,'%d-%d-%d', $y, $m, $d);
960 $archive = sprintf ('%04d-%02d-%02d', $y, $m, $d);
962 $archive = sprintf ('%4d-%02d', $y, $m);
966 if (! is_numeric($archivelist)) $archivelist = getBlogIDFromName($archivelist);
972 $b =& $manager->getBlog($CONF['DefaultBlog']);
974 $blogid = $b->getID();
975 $blogid = (is_numeric($blogid)) ? intval($blogid) : getBlogIDFromName($blogid); //<sato(na)0.5j />
977 if (!isset($this->defurl)) $this->_setCommonData($blogid);
979 $linkparams = array();
981 $blogurl = createArchiveLink($blogid, $archive, '');
982 if ($CONF['URLMode'] != 'pathinfo') {
983 list(,$temp_param) = explode("?",$url);
984 $blogurl = $this->url. "?" . $temp_param;
986 $linkparams['blogid'] = $blogid;
987 $linkparams['archive'] = $archive;
988 } else if ($archivelist) {
989 $blogurl = createArchiveListLink($blogid, '');
990 if ($CONF['URLMode'] != 'pathinfo') {
991 list(,$temp_param) = explode("?",$blogurl);
992 $blogurl = $this->url. "?" . $temp_param;
994 $linkparams['archivelist'] = $archivelist;
996 $blogurl = $this->url;
997 $linkparams = $this->param;
1001 echo TEMPLATE::fill($this->getOption('catheader'),
1003 'blogid' => $blogid,
1004 'blogurl' => $blogurl,
1005 'self' => $CONF['Self']
1007 /* begin modification by kat */
1011 $query = 'SELECT inumber,icat FROM '.sql_table('item').
1012 ' WHERE iblog='.(int)$blogid;
1013 $res = sql_query($query);
1014 while ($row=mysql_fetch_row($res)) {
1015 $items[$row[0]]=true;
1016 $catdata[$row[1]][$row[0]]=true;
1019 $query = 'SELECT item_id, categories, subcategories FROM '.sql_table('plug_multiple_categories');
1020 $res = sql_query($query);
1021 while ($row=mysql_fetch_row($res)) {
1022 if (!$items[$row[0]]) continue;
1023 foreach(explode(',',$row[1]) as $cat) if ($cat) $catdata[$cat][$row[0]]=true;
1024 foreach(explode(',',$row[2]) as $scat) if ($scat) $scatdata[$scat][$row[0]]=true;
1026 /* end modification by kat */
1028 $query = 'SELECT c.catid, c.cdesc as catdesc, c.cname as catname FROM '.sql_table('category').
1029 ' as c WHERE c.cblog=' . intval($blogid) . ' GROUP BY c.cname ORDER BY c.cname ASC'; //<sato(na)0.5j />
1030 $res = sql_query($query);
1033 $tp['catlist'] = $this->getOption('catlist');
1034 $tp['subheader'] = $this->getOption('subheader');
1035 $tp['sublist'] = $this->getOption('sublist');
1036 $tp['subfooter'] = $this->getOption('subfooter');
1037 $replace = ($this->getOption('replace') == 'yes');
1039 $rchar = $this->getOption('replacechar');
1042 while ($data = mysql_fetch_assoc($res)) {
1043 $data['catid'] = intval($data['catid']); //<sato(na)0.5j />ultrarich
1044 $data['blogid'] = $blogid;
1045 $data['blogurl'] = $blogurl;
1046 $data['catlink'] = createCategoryLink($data['catid'], $linkparams);
1047 if ($CONF['URLMode'] != 'pathinfo') {
1048 list(,$temp_param) = explode("?",$data['catlink']);
1049 $data['catlink'] = $this->url. "?" . $temp_param;
1051 $data['self'] = $CONF['Self'];
1052 if ($data['catid'] == intval($catid)) { //<sato(na)0.5j />
1053 $data['catflag'] = $this->getOption('catflag');
1055 /* begin modification by kat */
1057 $cq = 'SELECT count(*) as result FROM '.sql_table('item').' as i';
1058 $cq .= ' LEFT JOIN '.sql_table('plug_multiple_categories').' as p ON i.inumber=p.item_id';
1059 $cq .= ' WHERE ((i.inumber=p.item_id and (p.categories REGEXP "(^|,)'.$data['catid'].'(,|$)" or i.icat='.$data['catid'].')) or (p.item_id IS NULL and i.icat='.$data['catid'].'))';
1060 $cq .= ' and i.itime<=' . mysqldate($b->getCorrectTime()) . ' and i.idraft=0';
1062 $data['catamount'] = quickQuery($cq);
1064 $data['catamount']=count($catdata[$data['catid']]);
1065 /* end modification by kat */
1066 if (intval($data['catamount']) < 1) {
1070 $query = 'SELECT scatid as subcatid, sname as subname, sdesc as subdesc FROM '.sql_table('plug_multiple_categories_sub').' WHERE catid='.$data['catid']. ' ORDER BY sname ASC';
1071 $sres = sql_query($query);
1072 if (mysql_num_rows($sres) > 0) {
1075 while ($sdata = mysql_fetch_assoc($sres)) {
1076 $sdata['subcatid'] = intval($sdata['subcatid']); //<sato(na)0.5j />ultrarich
1077 /* begin modification by kat */
1080 'SELECT count(i.inumber) FROM '
1081 . sql_table('item').' as i, '
1082 . sql_table('plug_multiple_categories').' as p'
1083 . ' WHERE i.idraft=0 and i.itime<='.mysqldate($b->getCorrectTime())
1084 . ' and i.inumber=p.item_id'
1085 . ' and p.subcategories REGEXP "(^|,)'.$sdata['subcatid'].'(,|$)"'
1087 if ($ares && $row = mysql_fetch_row($ares)) {
1089 if ($row[0]=count($scatdata[$sdata['subcatid']])) {
1090 /* end modification by kat */
1091 $sdata['subamount'] = $row[0];
1092 if ($sdata['subamount'] > 0) {
1093 if ($CONF['URLMode'] == 'pathinfo') {
1094 $sparams = array_merge($linkparams, array($this->getRequestName() => $sdata['subcatid']));
1095 $sdata['sublink'] = createCategoryLink($data['catid'],$sparams);
1097 $sdata['sublink'] = addLinkParams($data['catlink'], array($this->getRequestName() => $sdata['subcatid']));
1099 if ($sdata['subcatid'] == $subcatid) {
1100 $sdata['subflag']= $this->getOption('subflag');
1102 $subliststr .= TEMPLATE::fill($tp['sublist'],$sdata);
1107 $data['subcategorylist'] = $tp['subheader'];
1108 $data['subcategorylist'] .= $subliststr;
1109 $data['subcategorylist'] .= $tp['subfooter'];
1111 $data['amount'] = $rchar;
1115 mysql_free_result($sres);
1117 echo TEMPLATE::fill($tp['catlist'],$data);
1121 mysql_free_result($res);
1123 echo TEMPLATE::fill($this->getOption('catfooter'),
1125 'blogid' => $blogid,
1126 'blogurl' => $blogurl,
1127 'self' => $CONF['Self']
1131 function showArchiveList($mode = 'month', $limit = 0) {
1132 global $CONF, $manager, $blog, $catid, $subcatid;
1137 $b =& $manager->getBlog($CONF['DefaultBlog']);
1140 if ($catid) $linkparams = array('catid' => intval($catid)); //<sato(na)0.5j />
1141 if ($subcatid) $linkparams['subcatid'] = intval($subcatid); //<sato(na)0.5j />
1142 if ($lc = $this->getOption('locale')) {
1143 setlocale(LC_TIME,$lc);
1146 $template['header'] = $this->getOption('archeader');
1147 $template['list'] = $this->getOption('arclist');
1148 $template['footer'] = $this->getOption('arcfooter');
1150 echo TEMPLATE::fill($template['header'],array('blogid'=>$b->getID()));
1152 $query = 'SELECT i.itime, SUBSTRING(i.itime,1,4) AS Year, SUBSTRING(i.itime,6,2) AS Month, SUBSTRING(i.itime,9,2) as Day FROM '.sql_table('item').' as i';
1154 $query .= ' LEFT JOIN '.sql_table('plug_multiple_categories').' as p ON i.inumber=p.item_id';
1156 $query .= ' WHERE i.iblog=' . intval($b->getID()) //<sato(na)0.5j />
1157 . ' and i.itime <=' . mysqldate($b->getCorrectTime()) // don't show future items!
1158 . ' and i.idraft=0'; // don't show draft items
1161 $query .= ' and ((i.inumber=p.item_id and (p.categories REGEXP "(^|,)'.intval($catid).'(,|$)" or i.icat='.intval($catid).')) or (i.icat='.intval($catid).' and p.item_id IS NULL))';
1164 $query .= ' and p.subcategories REGEXP "(^|,)'.intval($subcatid).'(,|$)"';
1167 $query .= ' GROUP BY Year, Month';
1171 $query .= ' ORDER BY i.itime DESC';
1174 $query .= ' LIMIT ' . intval($limit);
1176 $res = sql_query($query);
1178 while ($current = mysql_fetch_object($res)) {
1179 $current->itime = strtotime($current->itime); // string time -> unix timestamp
1180 $data = array('blogid'=>$b->getID());
1182 if ($mode == 'day') {
1183 $archivedate = date('Y-m-d',$current->itime);
1184 $data['day'] = date('d',$current->itime);
1186 $archivedate = date('Y-m',$current->itime);
1188 $data['month'] = date('m',$current->itime);
1189 $data['year'] = date('Y',$current->itime);
1190 $data['archivelink'] = createArchiveLink($b->getID(),$archivedate,$linkparams);
1191 if ($CONF['URLMode'] != 'pathinfo') {
1192 list(,$temp_param) = explode("?",$data['archivelink']);
1193 $data['archivelink'] = $this->url. "?" . $temp_param;
1196 $temp = TEMPLATE::fill($template['list'], $data);
1197 echo strftime($temp,$current->itime);
1199 mysql_free_result($res);
1201 echo TEMPLATE::fill($template['footer'],array('blogid'=>$b->getID()));
1205 function doIf($name='', $value = '')
1209 if ($name == 'subcategory' || ($value == ''))
1210 return $this->isValidSubCategory($subcatid);
1212 if ($name == 'subcatname') {
1213 //Even as for "subcategory" with same "parent", the name is not unique either.
1214 $scatname = _getScatNameFromID($subcatid);
1215 if ($value == $scatname)
1216 return $this->isValidSubCategory($subcatid);
1219 if (($name == 'subcatid') && ($value == $subcatid))
1220 return $this->isValidSubCategory($subcatid);
1224 function isValidSubCategory($subcatid) {
1227 // $catid = quickQuery('SELECT catid AS result FROM '.sql_table('plug_multiple_categories_sub').' WHERE scatid=' . intval($subcatid));
1229 $catid = $this->_getParentCatID($subcatid);
1230 $bid = getBlogIDFromCatID($catid);
1231 $b = $manager->getBlog($bid);
1232 // return $blog->isValidCategory($catid);
1233 return $b->isValidCategory($catid);
1234 // </ mod by shizuki>