r3015 - only require chapter_id when it makes sense; don't store meaningless values...
authorDenis Ovsienko <infrastation@yandex.ru>
Wed, 29 Jul 2009 16:25:24 +0000 (16:25 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Wed, 29 Jul 2009 16:25:24 +0000 (16:25 +0000)
inc/database.php
inc/interface.php
inc/ophandlers.php
install/init-structure.sql
upgrade.php

index 00c47e6d6be56acf8e7802f82103461ec627220e..d6e499d80bc66743778a3e1f381ed157e1e79eaf 100644 (file)
@@ -2192,7 +2192,7 @@ function commitDeleteAttribute ($attr_id = 0)
 // FIXME: don't store garbage in chapter_no for non-dictionary types.
 function commitSupplementAttrMap ($attr_id = 0, $objtype_id = 0, $chapter_no = 0)
 {
-       if ($attr_id <= 0 or $objtype_id <= 0 or $chapter_no <= 0)
+       if ($attr_id <= 0 or $objtype_id <= 0)
        {
                showError ('Invalid args', __FUNCTION__);
                die;
index 7314581e1cb1fe9aa15d9d7535e23c7d8a277977..bdca27164ee780b9d54428dc198abc4206ebda24 100644 (file)
@@ -3468,7 +3468,7 @@ function renderEditAttrMapForm ()
                printImageHREF ('add', '', TRUE);
                echo ' ';
                printNiftySelect (cookOptgroups (readChapter (CHAP_OBJTYPE, 'o')), 'objtype_id', NULL, 101);
-               echo ' <select name=chapter_no tabindex=102>';
+               echo ' <select name=chapter_no tabindex=102><option value=0>-- dictionary chapter for [D] attributes --</option>';
                foreach (getChapterList() as $chapter)
                        if ($chapter['sticky'] != 'yes')
                                echo "<option value='${chapter['id']}'>${chapter['name']}</option>";
index 06b951a109eaad7ff5ba46aab505289f406ca331..1659ff825798d4f3f0f58777a2215efa65373d5b 100644 (file)
@@ -652,16 +652,25 @@ function deleteAttribute ()
 }
 
 $msgcode['supplementAttrMap']['OK'] = 48;
-$msgcode['supplementAttrMap']['ERR'] = 118;
+$msgcode['supplementAttrMap']['ERR1'] = 154;
+$msgcode['supplementAttrMap']['ERR2'] = 118;
 function supplementAttrMap ()
 {
        assertUIntArg ('attr_id', __FUNCTION__);
        assertUIntArg ('objtype_id', __FUNCTION__);
-       assertUIntArg ('chapter_no', __FUNCTION__);
-       if (commitSupplementAttrMap ($_REQUEST['attr_id'], $_REQUEST['objtype_id'], $_REQUEST['chapter_no']) === TRUE)
+       $attrMap = getAttrMap();
+       if ($attrMap[$_REQUEST['attr_id']]['type'] != 'dict')
+               $chapter_id = 'NULL';
+       else
+       {
+               assertUIntArg ('chapter_no', __FUNCTION__); // FIXME: this doesn't fail on 0 (ticket:272)
+               if (0 == ($chapter_id = $_REQUEST['chapter_no']))
+                       return buildRedirectURL (__FUNCTION__, 'ERR1', array ('chapter not selected'));
+       }
+       if (commitSupplementAttrMap ($_REQUEST['attr_id'], $_REQUEST['objtype_id'], $chapter_id) === TRUE)
                return buildRedirectURL (__FUNCTION__, 'OK');
        else
-               return buildRedirectURL (__FUNCTION__, 'ERR');
+               return buildRedirectURL (__FUNCTION__, 'ERR2');
 }
 
 $msgcode['reduceAttrMap']['OK'] = 49;
index 849dd615ecf8b3bad3d7ba350e2544374f357b9b..d7d2a7731ec71475919e3bf1a019408fa5af3a69 100644 (file)
@@ -19,7 +19,7 @@ CREATE TABLE `Attribute` (
 CREATE TABLE `AttributeMap` (
   `objtype_id` int(10) unsigned NOT NULL default '1',
   `attr_id` int(10) unsigned NOT NULL default '1',
-  `chapter_id` int(10) unsigned NOT NULL,
+  `chapter_id` int(10) unsigned NULL,
   UNIQUE KEY `objtype_id` (`objtype_id`,`attr_id`)
 ) ENGINE=MyISAM;
 
index 3ba492821551ea1968242cf208cfbdaf1e6d5827..74906edd9370e4ef1db7d83dba83e215c50b2bac 100644 (file)
@@ -260,6 +260,8 @@ CREATE TABLE `LDAPCache` (
                        $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('TAGS_TOPLIST_SIZE','50','uint','yes','no','Tags top list size')";
                        $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('TAGS_QUICKLIST_SIZE','20','uint','no','no','Tags quick list size')";
                        $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('TAGS_QUICKLIST_THRESHOLD','50','uint','yes','no','Tags quick list threshold')";
+                       $query[] = "ALTER TABLE AttributeMap MODIFY COLUMN chapter_id int(10) unsigned NULL'";
+                       $query[] = "UPDATE AttributeMap SET chapter_id = NULL WHERE attr_id IN (SELECT id FROM Attribute WHERE type != 'dict')";
                        $query[] = "UPDATE Config SET varvalue = '0.17.3' WHERE varname = 'DB_VERSION'";
                        break;
                default: