r3036 - reloadDictionary(): act off target release name (or nothing)
authorDenis Ovsienko <infrastation@yandex.ru>
Tue, 4 Aug 2009 13:45:56 +0000 (13:45 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Tue, 4 Aug 2009 13:45:56 +0000 (13:45 +0000)
 - MAX_DICT_KEY: replace constant with $max_dict_key array
 - executeUpgradeBatch(): update accordingly
 - renderChapterEditor(): ditto
 - renderChapter(): ditto
 - init_database_static(): ditto

inc/config.php
inc/dictionary.php
inc/interface.php
install.php
upgrade.php

index 3dcaf7b1360626b8a38c658451c966c3adcb039c..9cb9d9f92089c26c7effff11fc7981bf32fbd9c0 100644 (file)
 
 // Current code version is subject to change with each new release.
 define ('CODE_VERSION', '0.17.2');
-define ('MAX_DICT_KEY', 1150);
 define ('CHAP_OBJTYPE', 1);
 define ('CHAP_PORTTYPE', 2);
 
+$max_dict_key = array
+(
+       '0.17.0' => 988,
+       '0.17.1' => 988,
+       '0.17.2' => 1150,
+//     '0.17.3' => 1150,
+);
+
 define ('TAGNAME_REGEXP', '^[[:alnum:]]([\. _~-]?[[:alnum:]])*$');
 define ('AUTOTAGNAME_REGEXP', '^\$[[:alnum:]]([\. _~-]?[[:alnum:]])*$');
 // The latter matches both SunOS and Linux-styled formats.
index e0cae593e28eb6e750596984ac3fa699ffc35b7d..eb1fa7d1c0aa414f58037e1e1042e1e6ef967438 100644 (file)
@@ -1,27 +1,26 @@
 <?php
 
-function reloadDictionary ($from_key, $to_key)
+function reloadDictionary ($release = NULL)
 {
-       $ret = array();
-       global $dictionary;
-       foreach ($dictionary as $dict_key => $tmp)
-               if ($dict_key >= $from_key and $dict_key <= $to_key)
-               {
-                       $chapter_id = $tmp['chapter_id'];
-                       $dict_value = $tmp['dict_value'];
-                       $ret[] = "DELETE FROM Dictionary WHERE dict_key = ${dict_key}";
-                       $ret[] = "INSERT INTO Dictionary (dict_key, chapter_id, dict_value) VALUES (" .
-                               "${dict_key}, ${chapter_id}, '${dict_value}')";
-               }
+       global $dictionary, $max_dict_key;
+       if ($release === NULL)
+               $maxkey = max (array_keys ($dictionary));
+       else
+               $maxkey = $max_dict_key[$release];
+       // Not only update existing stuff, but make sure all obsolete records are gone.
+       $ret = array ("DELETE FROM Dictionary WHERE dict_key BETWEEN 1 AND ${maxkey}");
+       for ($i = 1; $i <= $maxkey; $i++)
+       {
+               if (!array_key_exists ($i, $dictionary))
+                       continue;
+               $chapter_id = $dictionary[$i]['chapter_id'];
+               $dict_value = $dictionary[$i]['dict_value'];
+               $ret[] = "INSERT INTO Dictionary (dict_key, chapter_id, dict_value) VALUES (" .
+                       "${i}, ${chapter_id}, '${dict_value}')";
+       }
        return $ret;
 }
 
-$dictreload = array
-(
-       '0.17.0' => array ('from' => 1, 'to' => 988),
-       '0.17.2' => array ('from' => 562, 'to' => 1150),
-);
-
 $dictionary = array
 (
        1 => array ('chapter_id' => 1, 'dict_value' => 'BlackBox'),
index c9c8afabc8179e25d1c6fb7e9a333d45ca7441e3..57886d29337e05db21504108489cc8f1434d9fa2 100644 (file)
@@ -3279,7 +3279,7 @@ function renderDictionary ()
 
 function renderChapter ($tgt_chapter_no)
 {
-       global $nextorder;
+       global $nextorder, $max_dict_key;
        $words = readChapter ($tgt_chapter_no, 'a');
        $wc = count ($words);
        if (!$wc)
@@ -3295,7 +3295,7 @@ function renderChapter ($tgt_chapter_no)
        foreach ($words as $key => $value)
        {
                echo "<tr class=row_${order}><td>";
-               printImageHREF (($key <= MAX_DICT_KEY) ? 'computer' : 'favorite');
+               printImageHREF (($key <= $max_dict_key[CODE_VERSION]) ? 'computer' : 'favorite');
                echo '</td><td>';
                if ($refcnt[$key])
                        echo $refcnt[$key];
@@ -3307,7 +3307,7 @@ function renderChapter ($tgt_chapter_no)
 
 function renderChapterEditor ($tgt_chapter_no)
 {
-       global $nextorder;
+       global $nextorder, $max_dict_key;
        function printNewItemTR ()
        {
                printOpFormIntro ('add');
@@ -3330,7 +3330,7 @@ function renderChapterEditor ($tgt_chapter_no)
                echo "<tr class=row_${order}><td>";
                $order = $nextorder[$order];
                // Show plain row for stock records, render a form for user's ones.
-               if ($key <= MAX_DICT_KEY)
+               if ($key <= $max_dict_key[CODE_VERSION])
                {
                        printImageHREF ('computer');
                        echo "</td><td>&nbsp;</td><td>${value}</td><td>&nbsp;</td></tr>";
index aa5dcb89e17522742c6909ea34f23dd3960e7c23..f680f7ce20bae5b4779bff9daa871435ffc45854 100644 (file)
@@ -335,18 +335,16 @@ function init_database_static ()
        // (re)load dictionary by pure PHP means w/o any external file
        echo "<tr><th>dictionary</th>";
        $nq = $nerrs = 0;
-       global $dictreload;
        $dictq = array();
-       foreach ($dictreload as $tmp)
-               foreach (reloadDictionary ($tmp['from'], $tmp['to']) as $query)
+       foreach (reloadDictionary() as $query)
+       {
+               $nq++;
+               if ($dbxlink->exec ($query) === FALSE)
                {
-                       $nq++;
-                       if ($dbxlink->exec ($query) === FALSE)
-                       {
-                               $nerrs++;
-                               $errlist[] = $query;
-                       }
+                       $nerrs++;
+                       $errlist[] = $query;
                }
+       }
        echo "<td>${nq}</td><td>${nerrs}</td></tr>\n";
                        
        echo '</table>';
index d98420dee7d89866dce3792dbb777810597d8371..e182761fe8c0dbfedd92a193cc5499992d19fcc7 100644 (file)
@@ -63,7 +63,7 @@ function getDBUpgradePath ($v1, $v2)
 function executeUpgradeBatch ($batchid)
 {
        $query = array();
-       global $dbxlink, $dictreload;
+       global $dbxlink;
        switch ($batchid)
        {
                case '0.16.5':
@@ -93,8 +93,7 @@ function executeUpgradeBatch ($batchid)
                        $query[] = "alter table AttributeMap change chapter_no chapter_id int(10) unsigned NOT NULL";
                        $query[] = "alter table Dictionary change chapter_no chapter_id int(10) unsigned NOT NULL";
                        // Only after the above call it is Ok to use reloadDictionary()
-                       if (isset ($dictreload[$batchid]))
-                               $query = array_merge ($query, reloadDictionary ($dictreload[$batchid]['from'], $dictreload[$batchid]['to']));
+                       $query = array_merge ($query, reloadDictionary ($batchid));
                        // schema changes for file management
                        $query[] = "
 CREATE TABLE `File` (
@@ -224,16 +223,14 @@ CREATE TABLE `LDAPCache` (
                        break;
                case '0.17.1':
                        $query[] = "ALTER TABLE Dictionary DROP KEY `chap_to_key`";
-                       if (isset ($dictreload[$batchid]))
-                               $query = array_merge ($query, reloadDictionary ($dictreload[$batchid]['from'], $dictreload[$batchid]['to']));
+                       $query = array_merge ($query, reloadDictionary ($batchid));
                        // Token set has changed, so the cache isn't valid any more.
                        $query[] = "UPDATE Script SET script_text = NULL WHERE script_name = 'RackCodeCache'";
                        $query[] = "UPDATE Config SET varvalue = '0.17.1' WHERE varname = 'DB_VERSION'";
                        break;
                case '0.17.2':
                        $query[] = "INSERT INTO `Chapter` (`id`, `sticky`, `name`) VALUES (26,'no','fibre channel switch models')";
-                       if (isset ($dictreload[$batchid]))
-                               $query = array_merge ($query, reloadDictionary ($dictreload[$batchid]['from'], $dictreload[$batchid]['to']));
+                       $query = array_merge ($query, reloadDictionary ($batchid));
                        $query[] = "INSERT INTO `AttributeMap` (`objtype_id`, `attr_id`, `chapter_id`) VALUES (1055,2,26)";
                        $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('DEFAULT_SNMP_COMMUNITY','public','string','no','no','Default SNMP Community string')";
                        // wipe irrelevant records (ticket:250)