--- branches/paul/admin/include/scribe_fix.php 2004/03/07 19:15:27 66 +++ branches/paul/admin/include/scribe_fix.php 2004/03/18 19:24:54 67 @@ -1,13 +1,14 @@ -Last Modified: 10.29.2003 +Original Author: Paul Bramscher +Last Modified: 03.16.2004 *********************************************************** Comments: This library brings together CourseLib/PageScribe page debugging and fixing algorithms. *********************************************************** +Table of Contents: errorTrap genCalc isOrphan @@ -22,7 +23,7 @@ /********************************************************** Function: errorTrap Author: Paul Bramscher -Last Modified: 10.28.2003 +Last Modified: 03.04.2004 *********************************************************** Purpose: Debugger available for CLPS system, to check for various @@ -31,52 +32,52 @@ scribe.phtml automatically. Otherwise, it's called manually from the DBA console. **********************************************************/ -function errorTrap($con, $page_id){ +function errorTrap($page_id){ // Fetch title - $page_title = lookupField($con, "page", "page_id", $page_id, "page_title"); + $page_title = lookupField("page", "page_id", $page_id, "page_title"); // Overall status $passed = 1; printf("
\n"); printf("\n"); - printf("\n", $page_title, $page_id); + printf("\n", $page_title, $page_id); printf("
Debug Data: %s (#%d)
Debug Data: %s (ID# %d)

\n"); /*********************** ** Basic Element Data ** ***********************/ - printf("Element Data:
"); + printf("Element Data:
\n"); // Distinct orders $sql = "SELECT DISTINCT element_order FROM element WHERE page_id =" . $page_id; - $rs = mysql_query($sql, $con); + $rs = mysql_tryquery($sql); $num_orders = mysql_num_rows($rs); printf("Unique orders: %d
\n", $num_orders); // Number of rows (should be the same) $sql = "SELECT element_id FROM element WHERE page_id = " . $page_id; - $rs = mysql_query($sql, $con); + $rs = mysql_tryquery($sql); $num_rows = mysql_num_rows($rs); printf("Number of rows: %d
\n", $num_rows); // Smallest order (if rows present, should be 1) $sql = "SELECT MIN(element_order) as min_order FROM element WHERE page_id = " . $page_id; - $rs = mysql_query($sql, $con); - $row = mysql_fetch_array ($rs); + $rs = mysql_tryquery($sql); + $row = mysql_fetch_array ($rs, MYSQL_ASSOC); $min_order = $row["min_order"]; printf("First order: %d
\n", $min_order); // Largest order (should equal distinct rows and number of rows $sql = "SELECT MAX(element_order) as max_order FROM element WHERE page_id = " . $page_id; - $rs = mysql_query($sql, $con); - $row = mysql_fetch_array ($rs); + $rs = mysql_tryquery($sql); + $row = mysql_fetch_array ($rs, MYSQL_ASSOC); $max_order = $row["max_order"]; printf("Last order: %d

\n", $max_order); @@ -88,9 +89,9 @@ $c1_sql = "SELECT element_id, parent_id, element_order, indent_level FROM element WHERE page_id = " . $page_id . " AND parent_id > 0 ORDER BY element_order"; - $c1_rs = mysql_query($c1_sql, $con); + $c1_rs = mysql_tryquery($c1_sql); - while ($c1_row = mysql_fetch_array ($c1_rs)) { + while ($c1_row = mysql_fetch_array ($c1_rs, MYSQL_ASSOC)) { $parent_id = $c1_row["parent_id"]; $indent_level = $c1_row["indent_level"]; $element_id = $c1_row["element_id"]; @@ -99,8 +100,8 @@ // For each row returned, hunt for the parent $c2_sql ="SELECT element_id, element_order, indent_level FROM element WHERE element_id = " . $parent_id; - $c2_rs = mysql_query($c2_sql, $con); - $c2_row = mysql_fetch_array ($c2_rs); + $c2_rs = mysql_tryquery($c2_sql); + $c2_row = mysql_fetch_array ($c2_rs, MYSQL_ASSOC); $c2_indent_level = $c2_row["indent_level"]; $c2_element_id = $c2_row["element_id"]; $c2_element_order = $c2_row["element_order"]; @@ -172,16 +173,16 @@ . $page_id . " ORDER BY element_order"; - $rs = mysql_query($sql, $con); + $rs = mysql_tryquery($sql); - while ($row = mysql_fetch_array ($rs)) { + while ($row = mysql_fetch_array ($rs, MYSQL_ASSOC)) { $element_id = $row["element_id"]; $indent_level = $row["indent_level"]; $parent_id = $row["parent_id"]; $gen_level = 0; // Call the generational calculator for each element - $gen_level = genCalc($con, $element_id, $gen_level, $page_id, $parent_id); + $gen_level = genCalc($element_id, $gen_level, $page_id, $parent_id); if ($gen_level != $indent_level) { printf("Failed. Element ID#%d reported generation of %d, but calculated at %d.
\n", $element_id, $indent_level, $gen_level); @@ -214,7 +215,7 @@ /********************************************************** Function: genCalc Author: Paul Bramscher -Last Modified: 10.27.2003 +Last Modified: 03.04.2004 *********************************************************** Purpose: Recursively calculate the traversable generational level of @@ -223,7 +224,7 @@ will update the indent_level value in the elements table with the calculated value determined here. **********************************************************/ -function genCalc($con, $element_id, $gen_level, $page_id, $parent_id) { +function genCalc($element_id, $gen_level, $page_id, $parent_id) { // If there is a parent to probe if ($parent_id > 0) { @@ -236,14 +237,14 @@ . " AND page_id = " . $page_id; - $rs = mysql_query($sql, $con); - $row = mysql_fetch_array ($rs); + $rs = mysql_tryquery($sql); + $row = mysql_fetch_array ($rs, MYSQL_ASSOC); $probe_parent_id = $row["parent_id"]; $probe_element_id = $row["parent_id"]; // See if the probed element has any parents to probe further if ($probe_element_id > 0) { - return 1 + genCalc($con, $probe_element_id, $gen_level, $page_id, $probe_parent_id); + return 1 + genCalc($probe_element_id, $gen_level, $page_id, $probe_parent_id); } @@ -260,7 +261,7 @@ /********************************************************** Function: isOrphan Author: Paul Bramscher -Last Modified: 08.27.2003 +Last Modified: 03.04.2004 *********************************************************** Purpose: Determines if the supplied PageScribe/CourseLib element is @@ -270,7 +271,7 @@ fails, the element is said to be orphaned, a bastard or otherwise of problematic ancestry. **********************************************************/ -function isOrphan($con, $element_id, $element_order, $page_id, $parent_id) { +function isOrphan($element_id, $element_order, $page_id, $parent_id) { //Initialize $orphan = 0; @@ -290,8 +291,8 @@ // testing // printf("orphan probe sql was: %s ", $sql); - $rs = mysql_query($sql, $con); - $row = mysql_fetch_array ($rs); + $rs = mysql_tryquery($sql); + $row = mysql_fetch_array ($rs, MYSQL_ASSOC); $par_found = $row["par_found"]; // Should have only one match. If none (or multiple) set to 0. @@ -299,7 +300,7 @@ else $orphan = 1; // Output - if ($orphan == 1) printf("Found orphan: ID#%d.
", $element_id); + if ($orphan == 1) printf("Found orphan: ID#%d.
\n", $element_id); } @@ -310,13 +311,12 @@ /********************************************************** Function: purgeOrphans Author: Paul Bramscher -Last Modified: 10.28.2003 +Last Modified: 03.04.2004 *********************************************************** Purpose: Purges and orphans found on the page. **********************************************************/ - -function purgeOrphans($con, $page_id) { +function purgeOrphans($page_id) { printf("Method #2 Delete fostered children and their descendants

\n"); printf("Messages:
\n"); @@ -331,9 +331,9 @@ . $page_id . " ORDER BY element_order"; - $rs = mysql_query($sql, $con); + $rs = mysql_tryquery($sql); - while ($row = mysql_fetch_array ($rs)) { + while ($row = mysql_fetch_array ($rs, MYSQL_ASSOC)) { $element_id = $row["element_id"]; $element_order = $row["element_order"]; $parent_id = $row["parent_id"]; @@ -341,7 +341,7 @@ /* If an orphan, delete it and its first generation. Recall some Egyptian/Biblical curse here.*/ - if ($parent_id > 0 && isOrphan($con, $element_id, $element_order, $page_id, $parent_id)) { + if ($parent_id > 0 && isOrphan($element_id, $element_order, $page_id, $parent_id)) { $sub_sql = "DELETE FROM element WHERE page_id = " @@ -350,21 +350,7 @@ . $element_id . " AND parent_id = " . $parent_id; - - // printf("delete sql wasd: %s
", $sql); - - if (!mysql_query ($sub_sql, $con)){ - sql_err($sub_sql); - mysql_query ("UNLOCK TABLES", $con); - bailout(); - } - else { - - // Output - printf("Element %d was an orphan. Deleted it.
\n", $element_id); - - mysql_query ("UNLOCK TABLES", $con); - } // deleted this element + if (mysql_tryquery ($sub_sql)) printf("Element %d was an orphan. Deleted it.
\n", $element_id); } // delete all elements which are orphaned @@ -376,7 +362,7 @@ /********************************************************** Function: purgeRelationships Author: Paul Bramscher -Last Modified: 10.28.2003 +Last Modified: 03.04.2004 *********************************************************** Purpose: Purges all parent-child relationships on the page, and @@ -384,7 +370,7 @@ destructive, but virtually guaranteed to fix a page. **********************************************************/ -function purgeRelationships($con, $page_id) { +function purgeRelationships($page_id) { printf("Method #3 Purge all parent-child relationships!

\n"); printf("Messages:
\n"); @@ -393,18 +379,7 @@ SET parent_id = 0, indent_level = 0 WHERE page_id = " . $page_id; - - if (!mysql_query ($sql, $con)){ - sql_err($sql); - mysql_query ("UNLOCK TABLES", $con); - bailout(); - } - else { - - printf("Purged all!
\n"); - mysql_query ("UNLOCK TABLES", $con); - } // purged all! - + if (mysql_tryquery ($sql)) printf("Purged all!
\n"); } // end purgeRelationships @@ -428,25 +403,25 @@ (b) Fill in any "holes" in the element order. (c) Clean up all indent levels. **********************************************************/ -function scribeFix($con, $method, $page_id){ +function scribeFix($method, $page_id){ printf("
\n"); printf("\n"); - printf("\n", $page_id); + printf("\n", $page_id); printf("
Page Fix Dialog (#%d)
Page Fix Dialog (ID# %d)

\n"); switch ($method) { // Update orphans - case 1: updateOrphans($con, $page_id); + case 1: updateOrphans($page_id); break; // Purge orphans - case 2: purgeOrphans($con, $page_id); + case 2: purgeOrphans($page_id); break; // Purge all parent-child relationships - case 3: purgeRelationships($con, $page_id); + case 3: purgeRelationships($page_id); break; default: @@ -455,8 +430,8 @@ } // Required cleanup, regardless of fix methodology - updateOrders($con, $page_id); - updateGenerations($con, $page_id); + updateOrders($page_id); + updateGenerations($page_id); printf("
Done. Re-run the debugger against this page to determine success: Debug Page ID#%d

", $page_id, $page_id); printf("
\n"); @@ -468,14 +443,14 @@ /********************************************************** Function: updateGenerations Author: Paul Bramscher -Last Modified: 10.28.2003 +Last Modified: 03.04.2004 *********************************************************** Purpose: Walks through a page and compares calculated generation with reported indent level. When a discrepancy is found, fix it according to the calculated generation. **********************************************************/ -function updateGenerations($con, $page_id) { +function updateGenerations($page_id) { printf("
Analyzing generational structure:
\n"); @@ -494,9 +469,9 @@ . $page_id . " ORDER BY element_order"; - $rs = mysql_query($sql, $con); + $rs = mysql_tryquery($sql); - while ($row = mysql_fetch_array ($rs)) { + while ($row = mysql_fetch_array ($rs, MYSQL_ASSOC)) { $element_id = $row["element_id"]; $indent_level = $row["indent_level"]; $parent_id = $row["parent_id"]; @@ -505,7 +480,7 @@ $gen_level = 0; // Call the generational calculator for each element - $gen_level = genCalc($con, $element_id, $gen_level, $page_id, $parent_id); + $gen_level = genCalc($element_id, $gen_level, $page_id, $parent_id); // A discrepancy was founnd if ($gen_level != $indent_level) { @@ -521,18 +496,7 @@ . $page_id . " AND element_id = " . $element_id; - - if (!mysql_query ($sub_sql, $con)){ - sql_err($sub_sql); - mysql_query ("UNLOCK TABLES", $con); - bailout(); - } - else { - // Output - printf("Element #%d reported generation of %d, but calculated at %d. Fixed.
\n", $element_id, $indent_level, $gen_level); - mysql_query ("UNLOCK TABLES", $con); - - } // fixed this element's indent + if (mysql_tryquery ($sub_sql)) printf("Element #%d reported generation of %d, but calculated at %d. Fixed.
\n", $element_id, $indent_level, $gen_level); } // if there is a discrepancy with calculated generation level @@ -546,14 +510,14 @@ /********************************************************** Function: updateOrders Author: Paul Bramscher -Last Modified: 10.28.2003 +Last Modified: 03.04.2004 *********************************************************** Purpose: Walks through a page and compares calculated order with reported order. When a discrepancy is found, fix it according to the calculated order. **********************************************************/ -function updateOrders($con, $page_id) { +function updateOrders($page_id) { printf("
Analyzing cardinal orders:
\n"); @@ -571,9 +535,9 @@ . $page_id . " ORDER BY element_order"; - $rs = mysql_query($sql, $con); + $rs = mysql_tryquery($sql); - while ($row = mysql_fetch_array ($rs)) { + while ($row = mysql_fetch_array ($rs, MYSQL_ASSOC)) { $element_id = $row["element_id"]; $element_order = $row["element_order"]; @@ -594,18 +558,7 @@ . $page_id . " AND element_id = " . $element_id; - - if (!mysql_query ($sub_sql, $con)){ - sql_err($sub_sql); - mysql_query ("UNLOCK TABLES", $con); - bailout(); - } - else { - - // Output - printf("Row #%d reported cardinal order of %d, but calculated at %d. Fixed.
\n", $element_count, $element_order, $element_count); - mysql_query ("UNLOCK TABLES", $con); - } // fixed this element's order + if (mysql_tryquery ($sub_sql)) printf("Row #%d reported cardinal order of %d, but calculated at %d. Fixed.
\n", $element_count, $element_order, $element_count); } // if an order discrepancy was found @@ -620,14 +573,14 @@ /********************************************************** Function: updateOrphans Author: Paul Bramscher -Last Modified: 10.28.2003 +Last Modified: 03.04.2004 *********************************************************** Purpose: Walks through a page and hunts for orphaned/bastard children. Hunts for most likely parent and attaches the child to it. **********************************************************/ -function updateOrphans($con, $page_id) { +function updateOrphans($page_id) { // Initialize $passed_orphan = 1; @@ -645,17 +598,17 @@ . $page_id . " ORDER BY element_order"; - $rs = mysql_query($sql, $con); + $rs = mysql_tryquery($sql); - while ($row = mysql_fetch_array ($rs)) { + while ($row = mysql_fetch_array ($rs, MYSQL_ASSOC)) { $element_id = $row["element_id"]; $element_order = $row["element_order"]; $parent_id = $row["parent_id"]; $indent_level = $row["indent_level"]; - $new_parent_id = parentProbe($con, $page_id, $element_order, $indent_level); + $new_parent_id = parentProbe($page_id, $element_order, $indent_level); $orphaned = 0; - $orphaned = isOrphan($con, $element_id, $element_order, $page_id, $parent_id); + $orphaned = isOrphan($element_id, $element_order, $page_id, $parent_id); // Hunt for most likely parent, and assign to it instead. if ($parent_id > 0 && $orphaned == 1) { @@ -670,19 +623,7 @@ . $page_id . " AND element_id = " . $element_id; - - if (!mysql_query ($sub_sql, $con)){ - sql_err($sub_sql); - mysql_query ("UNLOCK TABLES", $con); - bailout(); - } - else { - - // Output - printf("Element #%d orphaned. Reassigned to parent #%d
\n", $element_id, $new_parent_id); - - mysql_query ("UNLOCK TABLES", $con); - } // reassigned this element + if (mysql_tryquery ($sub_sql)) printf("Element #%d orphaned. Reassigned to parent #%d
\n", $element_id, $new_parent_id); } // reassign problematic elements @@ -691,4 +632,4 @@ if ($passed_orphan == 1) printf("No orphans found.
\n"); } // end updateOrphans -?> +?> \ No newline at end of file