Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/setup/upgrade/0.9.9/convert_categories.php
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2020-02-01 09:05:48 +0100
committerAndreas Baumann <mail@andreasbaumann.cc>2020-02-01 09:05:48 +0100
commit6854cb3f4d8219cf1829e32122eb2502a916eae9 (patch)
tree350feb504587d932e02837a1442b059759927646 /setup/upgrade/0.9.9/convert_categories.php
initial checkin
Diffstat (limited to 'setup/upgrade/0.9.9/convert_categories.php')
-rw-r--r--setup/upgrade/0.9.9/convert_categories.php43
1 files changed, 43 insertions, 0 deletions
diff --git a/setup/upgrade/0.9.9/convert_categories.php b/setup/upgrade/0.9.9/convert_categories.php
new file mode 100644
index 0000000..99789ad
--- /dev/null
+++ b/setup/upgrade/0.9.9/convert_categories.php
@@ -0,0 +1,43 @@
+<?php
+ /**********************************************************\
+ | This script converts the categories table to the new |
+ | format. |
+ \***********************************************************/
+
+function rebuild_tree($parent, $left, $pr) {
+ global $db;
+ // the right value of this node is the left value + 1
+ $right = $left+1;
+
+ // get all children of this node
+ $result = $db->query('SELECT category_id FROM {list_category} WHERE parent_id = ? AND project_id = ?', array($parent, $pr));
+
+ while ($row = $db->fetchRow($result)) {
+ // recursive execution of this function for each
+ // child of this node
+ // $right is the current right value, which is
+ // incremented by the rebuild_tree function
+ $right = rebuild_tree($row['category_id'], $right, $pr);
+ }
+
+ // we've got the left value, and now that we've processed
+ // the children of this node we also know the right value
+ $db->query('UPDATE {list_category} SET lft= ?, rgt= ? WHERE category_id = ?', array($left, $right, $parent));
+ $sql = $db->query('SELECT * FROM {list_category} WHERE category_id = ? OR project_id=? AND parent_id=-1', array($parent, $pr));
+ if (!$db->countRows($sql)) {
+ $db->query('INSERT INTO {list_category} (project_id, lft, rgt, category_name, parent_id) VALUES(?,?,?,?,-1)',
+ array($pr,$left,$right,'root'));
+ }
+ // return the right value of this node + 1
+ return $right+1;
+}
+
+$projects = $db->query('SELECT project_id FROM {projects}');
+
+// Global project
+rebuild_tree(0, 1, 0);
+while ($pr = $db->fetchRow($projects)) {
+ rebuild_tree(0, 1, $pr['project_id']);
+}
+
+?>