Update of /cvsroot/php-blog/serendipity
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7509
Modified Files:
serendipity_admin_category.inc.php
Log Message:
Fixed a couple of bombing queries. Please review, and test on MySQL.
There are two issues remaining: a TODO that was there before I started messing with this file, and a new TODO listing another issue. Would whomever wrote this code step forward and either ask for help, or fix it?
We should not release until these issues have been resolved.
Is there a better way to represent subcategories? What are the category_left, category_right fields for?
Index: serendipity_admin_category.inc.php
===================================================================
RCS file: /cvsroot/php-blog/serendipity/serendipity_admin_category.inc.php,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- serendipity_admin_category.inc.php 13 Jul 2004 15:04:33 -0000 1.17
+++ serendipity_admin_category.inc.php 15 Jul 2004 03:15:02 -0000 1.18
@@ -19,8 +19,9 @@
if ($cat_to_edit == 0) {
if ($parentid != 0) {
// TODO: This doesn't seem to work as expected, serendipity_rebuildCategoryTree(); is still needed!
- $res = serendipity_db_query("SELECT category_right FROM {$serendipity['dbPrefix']}category WHERE parentid={$parentid};");
- serendipity_db_query("UPDATE {$serendipity['dbPrefix']}category SET category_left=category_left+2, category_right=category_right+2 WHERE category_right>{$res['right']};");
+ // TODO: This works if only one subcategory exists. Otherwise, the first query will return an array.
+ $res = serendipity_db_query("SELECT category_right FROM {$serendipity['dbPrefix']}category WHERE parentid={$parentid}");
+ serendipity_db_query("UPDATE {$serendipity['dbPrefix']}category SET category_left=category_left+2, category_right=category_right+2 WHERE category_right>{$res}");
}
$query = "INSERT INTO {$serendipity['dbPrefix']}category (category_name, category_description, authorid, category_icon, parentid) values ('$name', '$desc', $authorid, '$icon', $parentid)";
} else {
@@ -46,14 +47,24 @@
if ($cat_to_edit != 0) {
$remaining_cat = (int)$_POST['serendipity']['cat']['remaining_catid'];
$category_range = implode(' AND ', serendipity_fetchCategoryRange($cat_to_edit));
- $query = "UPDATE {$serendipity['dbPrefix']}entries e,
+ #TODO: Does the revised query work on MySQL? Does it do the same thing?
+ /*$query = "UPDATE {$serendipity['dbPrefix']}entries e,
{$serendipity['dbPrefix']}entrycat ec,
{$serendipity['dbPrefix']}category c
SET ec.categoryid={$remaining_cat}
WHERE e.id = ec.entryid
AND c.categoryid = ec.categoryid
- AND category_left BETWEEN {$category_range}
- {$admin_category}";
+ AND c.category_left BETWEEN {$category_range}
+ {$admin_category}";*/
+ $query = "UPDATE {$serendipity['dbPrefix']}entrycat
+ SET categoryid={$remaining_cat} WHERE entryid IN
+ (
+ SELECT DISTINCT(e.id) FROM {$serendipity['dbPrefix']}entries e,
+ {$serendipity['dbPrefix']}category c,
+ {$serendipity['dbPrefix']}entrycat ec
+ WHERE e.id=ec.entryid AND c.categoryid=ec.categoryid
+ AND c.category_left BETWEEN {$category_range} {$admin_category}
+ )";
if ( serendipity_db_query($query) ) {
if ( serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}category WHERE category_left BETWEEN {$category_range} {$admin_category}") ) {
$msg = $remaining_cat ? sprintf(CATEGORY_DELETED_ARTICLES_MOVED, $cat_to_edit, $remaining_cat) : sprintf(CATEGORY_DELETED, $cat_to_edit);
|