r2673 - new config option: FILTER_PREDICATE_SIEVE
authorDenis Ovsienko <infrastation@yandex.ru>
Wed, 29 Apr 2009 11:24:25 +0000 (11:24 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Wed, 29 Apr 2009 11:24:25 +0000 (11:24 +0000)
 - getCellFilter(): always set pnamelist key for versions 1 and 2
 - getObjectList(): removed unused tag filter mode
 - renderCellFilterPortlet(): justify predicate rendering code
 - renderPredicateCheckbox(): gone
 - renderObjectGroup(): cleaned up a bit
 - renderCellList(): completely switch to renderCellFilterPortlet()
 - getTFMode(): gone
 - getFileList(): gone
 - getAllFiles(): gone
 - tagExistsInDatabase(): gone
 - commitCreateTag(): handle MySQL error code
 - commitUpdateTag(): idem
 - commitAddFile(): fixed condition
 - createTag(): rely on commitCreateTag() and UNIQUE
 - updateTag(): clarify error message
 - getDictStats(): updated stock chapter list
 - getUnmountedObjects(): gone
 - getProblematicObjects(): gone
 - renderUnmountedObjectsPortlet(): gone
 - renderProblematicObjectsPortlet(): gone
 - commitAddRow(): don't ignore return code
 - printRefsOfType(): gone

inc/database.php
inc/functions.php
inc/interface.php
inc/navigation.php
inc/ophandlers.php
install/init-dictbase.sql
upgrade.php

index 9e1d85c..63bbefb 100644 (file)
@@ -33,7 +33,7 @@ function escapeString ($value, $do_db_escape = TRUE)
        return $ret;
 }
 
-function getRackspace ($tagfilter = array(), $tfmode = 'any')
+function getRackspace ($tagfilter = array())
 {
        $whereclause = getWhereClause ($tagfilter);
        $query =
@@ -69,7 +69,6 @@ function getRackRowInfo ($rackrow_id)
                return NULL;
 }
 
-
 function getRackRows ()
 {
        $query = "select id, name from RackRow ";
@@ -82,12 +81,9 @@ function getRackRows ()
        return $rows;
 }
 
-
-
 function commitAddRow($rackrow_name)
 {
-       useInsertBlade('RackRow', array('name'=>"'$rackrow_name'"));
-       return TRUE;
+       return useInsertBlade('RackRow', array('name'=>"'$rackrow_name'"));
 }
 
 function commitUpdateRow($rackrow_id, $rackrow_name)
@@ -131,9 +127,6 @@ function commitDeleteRow($rackrow_id)
        return TRUE;
 }
 
-
-
-
 // This function returns id->name map for all object types. The map is used
 // to build <select> input for objects.
 function getObjectTypeList ()
@@ -189,7 +182,7 @@ function getNarrowObjectList ($varname = '')
 }
 
 // Return a filtered, detailed object list.
-function getObjectList ($type_id = 0, $tagfilter = array(), $tfmode = 'any')
+function getObjectList ($type_id = 0, $tagfilter = array())
 {
        $whereclause = getWhereClause ($tagfilter);
        if ($type_id != 0)
@@ -341,7 +334,7 @@ function amplifyCell (&$record, $dummy = NULL)
        }
 }
 
-function getRacksForRow ($row_id = 0, $tagfilter = array(), $tfmode = 'any')
+function getRacksForRow ($row_id = 0, $tagfilter = array())
 {
        $query =
                "select Rack.id, Rack.name, height, Rack.comment, row_id, RackRow.name as row_name " .
@@ -935,48 +928,6 @@ function getObjectGroupInfo ()
        return $ret;
 }
 
-// This function returns objects, which have no rackspace assigned to them.
-// Additionally it keeps rack_id parameter, so we can silently pre-select
-// the rack required.
-function getUnmountedObjects ()
-{
-       $query =
-               'select dict_value as objtype_name, dict_key as objtype_id, name, label, barcode, id, asset_no from ' .
-               'RackObject inner join Dictionary on objtype_id = dict_key join Chapter on Chapter.id = Dictionary.chapter_id ' .
-               'left join RackSpace on id = object_id '.
-               'where rack_id is null and Chapter.name = "RackObjectType" order by dict_value, name, label, asset_no, barcode';
-       $result = useSelectBlade ($query, __FUNCTION__);
-       $ret = array();
-       $clist = array ('id', 'name', 'label', 'barcode', 'objtype_name', 'objtype_id', 'asset_no');
-       while ($row = $result->fetch (PDO::FETCH_ASSOC))
-       {
-               foreach ($clist as $cname)
-                       $ret[$row['id']][$cname] = $row[$cname];
-               $ret[$row['id']]['dname'] = displayedName ($ret[$row['id']]);
-       }
-       $result->closeCursor();
-       return $ret;
-}
-
-function getProblematicObjects ()
-{
-       $query =
-               'select dict_value as objtype_name, dict_key as objtype_id, name, id, asset_no from ' .
-               'RackObject inner join Dictionary on objtype_id = dict_key join Chapter on Chapter.id = Dictionary.chapter_id '.
-               'where has_problems = "yes" and Chapter.name = "RackObjectType" order by objtype_name, name';
-       $result = useSelectBlade ($query, __FUNCTION__);
-       $ret = array();
-       $clist = array ('id', 'name', 'objtype_name', 'objtype_id', 'asset_no');
-       while ($row = $result->fetch (PDO::FETCH_ASSOC))
-       {
-               foreach ($clist as $cname)
-                       $ret[$row['id']][$cname] = $row[$cname];
-               $ret[$row['id']]['dname'] = displayedName ($ret[$row['id']]);
-       }
-       $result->closeCursor();
-       return $ret;
-}
-
 function commitAddPort ($object_id = 0, $port_name, $port_type_id, $port_label, $port_l2address)
 {
        if ($object_id <= 0)
@@ -1777,7 +1728,7 @@ function getDict ($parse_links = FALSE)
 
 function getDictStats ()
 {
-       $stock_chapters = array (1, 2, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23);
+       $stock_chapters = array (1, 2, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25);
        $query =
                "select Chapter.id as chapter_no, Chapter.name as chapter_name, count(dict_key) as wc from " .
                "Chapter left join Dictionary on Chapter.id = Dictionary.chapter_id group by Chapter.id";
@@ -2726,7 +2677,7 @@ function commitUpdateVS ($vsid = 0, $vip = '', $vport = 0, $proto = '', $name =
 
 // Return the list of virtual services, indexed by vs_id.
 // Each record will be shown with its basic info plus RS pools counter.
-function getVSList ($tagfilter = array(), $tfmode = 'any')
+function getVSList ($tagfilter = array())
 {
        $whereclause = getWhereClause ($tagfilter);
        $query = "select vs.id, inet_ntoa(vip) as vip, vport, proto, vs.name, vs.vsconfig, vs.rsconfig, count(rspool_id) as poolcount " .
@@ -2743,7 +2694,7 @@ function getVSList ($tagfilter = array(), $tfmode = 'any')
 }
 
 // Return the list of RS pool, indexed by pool id.
-function getRSPoolList ($tagfilter = array(), $tfmode = 'any')
+function getRSPoolList ($tagfilter = array())
 {
        $whereclause = getWhereClause ($tagfilter);
        $query = "select pool.id, pool.name, count(rspool_id) as refcnt, pool.vsconfig, pool.rsconfig " .
@@ -3027,8 +2978,11 @@ function commitCreateTag ($tagname = '', $parent_id = 0)
                        'parent_id' => $parent_id
                )
        );
+       global $dbxlink;
        if ($result)
                return '';
+       elseif ($dbxlink->errorCode() == 23000)
+               return "name '${tag_name}' is already used";
        else
                return "SQL query failed in " . __FUNCTION__;
 }
@@ -3051,9 +3005,12 @@ function commitUpdateTag ($tag_id, $tag_name, $parent_id)
        $query = "update TagTree set tag = '${tag_name}', parent_id = ${parent_id} " .
                "where id = ${tag_id} limit 1";
        $result = $dbxlink->exec ($query);
-       if ($result === NULL)
+       if ($result !== FALSE)
+               return '';
+       elseif ($dbxlink->errorCode() == 23000)
+               return "name '${tag_name}' is already used";
+       else
                return 'SQL query failed in ' . __FUNCTION__;
-       return '';
 }
 
 // Drop the whole chain stored.
@@ -3299,16 +3256,6 @@ function recordExists ($id = 0, $realm = 'object')
        return $count === '1';
 }
 
-function tagExistsInDatabase ($tname)
-{
-       $result = useSelectBlade ("select count(*) from TagTree where lower(tag) = lower('${tname}')");
-       $row = $result->fetch (PDO::FETCH_NUM);
-       $count = $row[0];
-       $result->closeCursor();
-       unset ($result);
-       return $count !== '0';
-}
-
 function newPortForwarding ($object_id, $localip, $localport, $remoteip, $remoteport, $proto, $description)
 {
        if (NULL === getIPv4AddressNetworkId ($localip))
@@ -3437,8 +3384,6 @@ function mergeSearchResults (&$objects, $terms, $fieldname)
        }
        $query .= " order by ${fieldname}";
        $result = useSelectBlade ($query, __FUNCTION__);
-// FIXME: this dead call was executed 4 times per 1 object search!
-//     $typeList = getObjectTypeList();
        $clist = array ('id', 'name', 'label', 'asset_no', 'barcode', 'objtype_id', 'objtype_name');
        while ($row = $result->fetch (PDO::FETCH_ASSOC))
        {
@@ -3464,29 +3409,6 @@ function getLostIPv4Addresses ()
        dragon();
 }
 
-// File-related functions
-function getAllFiles ()
-{
-       $query = "SELECT id, name, type, size, ctime, mtime, atime, comment FROM File ORDER BY name";
-       $result = useSelectBlade ($query, __FUNCTION__);
-       $ret=array();
-       $count=0;
-       while ($row = $result->fetch (PDO::FETCH_ASSOC))
-       {
-               $ret[$count]['id'] = $row['id'];
-               $ret[$count]['name'] = $row['name'];
-               $ret[$count]['type'] = $row['type'];
-               $ret[$count]['size'] = $row['size'];
-               $ret[$count]['ctime'] = $row['ctime'];
-               $ret[$count]['mtime'] = $row['mtime'];
-               $ret[$count]['atime'] = $row['atime'];
-               $ret[$count]['comment'] = $row['comment'];
-               $count++;
-       }
-       $result->closeCursor();
-       return $ret;
-}
-
 // Return a list of files which are not linked to the specified record. This list
 // will be used by printSelect().
 function getAllUnlinkedFiles ($entity_type = NULL, $entity_id = 0)
@@ -3511,47 +3433,6 @@ function getAllUnlinkedFiles ($entity_type = NULL, $entity_id = 0)
        return $ret;
 }
 
-// Return a filtered, detailed file list.  Used on the main Files listing page.
-function getFileList ($entity_type = NULL, $tagfilter = array(), $tfmode = 'any')
-{
-       $whereclause = getWhereClause ($tagfilter);
-
-       if ($entity_type == 'no_links')
-               $whereclause .= 'AND File.id NOT IN (SELECT file_id FROM FileLink) ';
-       elseif ($entity_type != 'all')
-               $whereclause .= "AND entity_type = '${entity_type}' ";
-
-       $query =
-               'SELECT File.id, name, type, size, ctime, mtime, atime, comment ' .
-               'FROM File ' .
-               'LEFT JOIN FileLink ' .
-               'ON File.id = FileLink.file_id ' .
-               'LEFT JOIN TagStorage ' .
-               "ON File.id = TagStorage.entity_id AND entity_realm = 'file' " .
-               'WHERE size >= 0 ' .
-               $whereclause .
-               'ORDER BY name';
-
-       $result = useSelectBlade ($query, __FUNCTION__);
-       $ret = array();
-       while ($row = $result->fetch (PDO::FETCH_ASSOC))
-       {
-               foreach (array (
-                       'id',
-                       'name',
-                       'type',
-                       'size',
-                       'ctime',
-                       'mtime',
-                       'atime',
-                       'comment'
-                       ) as $cname)
-                       $ret[$row['id']][$cname] = $row[$cname];
-       }
-       $result->closeCursor();
-       return $ret;
-}
-
 function getFilesOfEntity ($entity_type = NULL, $entity_id = 0)
 {
        if ($entity_type == NULL || $entity_id == 0)
@@ -3790,7 +3671,7 @@ function commitAddFile ($name, $type, $size, $contents, $comment)
 
        if ($result)
                return '';
-       elseif ($query->errorCode = 23000)
+       elseif ($query->errorCode() == 23000)
                return "commitAddFile: File named '${name}' already exists";
        else
                return 'commitAddFile: SQL query failed';
index b530558..723bee6 100644 (file)
@@ -1246,6 +1246,7 @@ function getCellFilter ()
                        'version' => 1,
                        'tagidlist' => array(),
                        'tnamelist' => array(),
+                       'pnamelist' => array(),
                        'text' => '',
                        'expression' => array() 
                );
@@ -1264,7 +1265,6 @@ function getCellFilter ()
                if ($_REQUEST['cfv'] == 2)
                {
                        $ret['version'] = 2;
-                       $ret['pnamelist'] = array();
                        global $pTable;
                        if (isset ($_REQUEST['cfp']) and is_array ($_REQUEST['cfp']))
                                foreach ($_REQUEST['cfp'] as $req_name)
index 2f12830..0e4d6a0 100644 (file)
@@ -806,23 +806,6 @@ function finishPortlet ()
        echo "</div>\n";
 }
 
-function printRefsOfType ($refs, $type, $eq)
-{
-       $gotone=0;
-       foreach ($refs as $ref)
-       {
-               if ($eq($ref['type'], $type))
-               {
-                       if ($gotone) echo ', ';
-                       echo "<a href='".makeHref(array('page'=>'object', 'object_id'=>$ref['object_id']))."'>";
-                       if (!empty ($ref['name']))
-                               echo $ref['name'] . '@';
-                       echo "${ref['object_name']}</a>";
-                       $gotone=1;
-               }
-       }
-}
-
 function renderRackObject ($object_id = 0)
 {
        global $nextorder, $aac;
@@ -1491,9 +1474,9 @@ function printLog ($log)
                                143 => array ('code' => 'error', 'format' => 'Tried chaining %u tags, but experienced %u errors.'),
                                144 => array ('code' => 'error', 'format' => "Error deleting tag: '%s'"),
                                145 => array ('code' => 'error', 'format' => "Invalid tag name '%s'"),
-                               146 => array ('code' => 'error', 'format' => "Tag '%s' (or similar name) already exists"),
-                               147 => array ('code' => 'error', 'format' => "Could not create tag '%s' because of error '%s'"),
-                               148 => array ('code' => 'error', 'format' => "Could not update tag '%s' because of error '%s'"),
+// ...
+                               147 => array ('code' => 'error', 'format' => "Could not create tag '%s': %s"),
+                               148 => array ('code' => 'error', 'format' => "Could not update tag '%s': %s"),
                                149 => array ('code' => 'error', 'format' => 'Turing test failed'),
                                150 => array ('code' => 'error', 'format' => 'Can only change password under DB authentication.'),
                                151 => array ('code' => 'error', 'format' => 'Old password doesn\'t match.'),
@@ -1787,55 +1770,6 @@ function renderMolecule ($mdata, $object_id)
        }
 }
 
-function renderUnmountedObjectsPortlet ()
-{
-       startPortlet ('Unmounted objects');
-       $objs = getUnmountedObjects();
-       if ($objs === NULL)
-       {
-               showError ('getUnmountedObjects() failed', __FUNCTION__);
-               return;
-       }
-       global $nextorder;
-       $order = 'odd';
-       echo '<br><br><table border=0 cellpadding=5 cellspacing=0 align=center class=cooltable>';
-       echo '<tr><th>Common name</th><th>Visible label</th><th>Asset number</th><th>Barcode</th></tr>';
-       foreach ($objs as $obj)
-       {
-               echo "<tr class=row_${order}><td><a href='".makeHref(array('page'=>'object', 'object_id'=>$obj['id']))."'>${obj['dname']}</a></td>";
-               echo "<td>${obj['label']}</td>";
-               echo "<td>${obj['asset_no']}</td>";
-               echo "<td>${obj['barcode']}</td>";
-               echo "</tr>";
-               $order = $nextorder[$order];
-       }
-       echo "</table><br>\n";
-       finishPortlet();
-}
-
-function renderProblematicObjectsPortlet ()
-{
-       startPortlet ('Problematic objects');
-       $objs = getProblematicObjects();
-       if ($objs === NULL)
-       {
-               showError ('getProblematicObjects() failed', __FUNCTION__);
-               return;
-       }
-       global $nextorder;
-       $order = 'odd';
-       echo '<br><br><table border=0 cellpadding=5 cellspacing=0 align=center class=cooltable>';
-       echo '<tr><th>Type</th><th>Common name</th></tr>';
-       foreach ($objs as $obj)
-       {
-               echo "<tr class=row_${order}><td>${obj['objtype_name']}</td>";
-               echo "<td><a href='".makeHref(array('page'=>'object', 'object_id'=>$obj['id']))."'>${obj['dname']}</a></tr>";
-               $order = $nextorder[$order];
-       }
-       echo "</table><br>\n";
-       finishPortlet();
-}
-
 function renderObjectSpace ()
 {
        global $taglist, $tagtree;
@@ -1873,7 +1807,7 @@ function renderObjectSpace ()
 
 function renderObjectGroup ()
 {
-       global $pageno, $nextorder, $taglist, $tagtree;
+       global $pageno, $nextorder;
        showMessageOrError();
        assertUIntArg ('group_id', __FUNCTION__, TRUE);
        $group_id = $_REQUEST['group_id'];
@@ -1912,7 +1846,7 @@ function renderObjectGroup ()
 
        echo '</td><td class=pcleft>';
 
-       $objects = getObjectList ($group_id, $tagfilter, getTFMode());
+       $objects = getObjectList ($group_id, $tagfilter);
        startPortlet ('Objects (' . count ($objects) . ')');
        if ($objects === NULL)
        {
@@ -3303,7 +3237,7 @@ function renderCellList ($realm = NULL, $title = 'items', $do_amplify = FALSE)
                array_walk ($celllist, 'amplifyCell');
        echo "<table border=0 class=objectview>\n";
        echo "<tr><td class=pcleft>";
-       startPortlet ($title . '(' . count ($celllist) . ')');
+       startPortlet ($title . ' (' . count ($celllist) . ')');
        echo "<table class=cooltable border=0 cellpadding=5 cellspacing=0 align=center>\n";
        foreach ($celllist as $cell)
        {
@@ -3315,10 +3249,7 @@ function renderCellList ($realm = NULL, $title = 'items', $do_amplify = FALSE)
        echo '</table>';
        finishPortlet();
        echo '</td><td class=pcright>';
-       if ($realm == 'file')
-               renderCellFilterPortlet ($cellfilter, $realm);
-       else
-               renderTagFilterPortlet (getTagFilter(), $realm);
+       renderCellFilterPortlet ($cellfilter, $realm);
        echo "</td></tr></table>\n";
 }
 
@@ -4510,7 +4441,7 @@ function renderVSList ()
 {
        global $nextorder;
        $tagfilter = getTagFilter();
-       $vslist = getVSList ($tagfilter, getTFMode());
+       $vslist = getVSList ($tagfilter);
        echo "<table border=0 class=objectview>\n";
        echo "<tr><td class=pcleft>";
 
@@ -4603,7 +4534,7 @@ function renderRSPoolList ()
 {
        global $pageno, $nextorder;
        $tagfilter = getTagFilter();
-       $pool_list = getRSPoolList ($tagfilter, getTFMode());
+       $pool_list = getRSPoolList ($tagfilter);
        if ($pool_list === NULL)
        {
                showError ('getRSPoolList() failed', __FUNCTION__);
@@ -5052,24 +4983,6 @@ function renderTagTreeEditor ()
        finishPortlet();
 }
 
-// FIXME: merge this code with renderTagCheckBox()
-function renderPredicateCheckbox ($inputname, $preselect, $predicatename)
-{
-       if (in_array ($predicatename, $preselect))
-       {
-               $selected = ' checked';
-               $class = 'seltagbox';
-       }
-       else
-       {
-               $selected = '';
-               $class = 'tagbox';
-       }
-       echo "<tr><td colspan=2 class=${class}>";
-       echo "<input type=checkbox name='${inputname}[]' value='${predicatename}'${selected}> ";
-       echo $predicatename . "</td></tr>\n";
-}
-
 function renderTagCheckbox ($inputname, $preselect, $taginfo, $level = 0)
 {
        $self = __FUNCTION__;
@@ -5145,14 +5058,6 @@ function printTagTRs ($baseurl = '')
        }
 }
 
-// Detect, filter and return requested tag filter mode: either 'and' or 'or'.
-function getTFMode ()
-{
-       if (isset ($_REQUEST['tfmode']) and $_REQUEST['tfmode'] == 'all')
-               return 'all';
-       return 'any';
-}
-
 // Output a portlet with currently selected tags and prepare a form for update.
 function renderTagFilterPortlet ($tagfilter, $realm, $bypass_name = '', $bypass_value = '')
 {
@@ -5221,9 +5126,24 @@ function renderCellFilterPortlet ($preselect, $realm, $bypass_name = '', $bypass
                if ($cfv == 2)
                {
                        global $pTable;
-                       foreach (array_keys ($pTable) as $predicatename)
-                               renderPredicateCheckbox ('cfp', $preselect['pnamelist'], $predicatename);
+                       $myPredicates = array();
+                       $psieve = getConfigVar ('FILTER_PREDICATE_SIEVE');
+                       // Repack matching predicates in a way, which tagOnChain() understands.
+                       foreach (array_keys ($pTable) as $pname)
+                               if (mb_ereg_match ($psieve, $pname))
+                                       $myPredicates[] = array ('id' => $pname, 'tag' => $pname, 'kids' => array());
+                       if (count ($myPredicates))
+                       {
+                               // Repack preselect likewise.
+                               $myPreselect = array();
+                               foreach ($preselect['pnamelist'] as $pname)
+                                       $myPreselect[] = array ('id' => $pname);
+                               echo '<tr><td colspan=2 class=tagbox><hr></td></tr>';
+                               foreach ($myPredicates as $pinfo)
+                                       renderTagCheckbox ('cfp', $myPreselect, $pinfo);
+                       }
                }
+               echo '<tr><td colspan=2 class=tagbox><hr></td></tr>';
                echo '</td></tr><tr><td>';
                printImageHREF ('apply', 'Apply filter', TRUE);
                echo "</form></td><td>";
index 8af9d56..9aae1b0 100644 (file)
@@ -550,7 +550,6 @@ $msgcode['destroyTag']['ERR1'] = 183;
 $msgcode['destroyTag']['ERR2'] = 144;
 $msgcode['createTag']['OK'] = 59;
 $msgcode['createTag']['ERR1'] = 145;
-$msgcode['createTag']['ERR2'] = 146;
 $msgcode['createTag']['ERR3'] = 147;
 $msgcode['updateTag']['OK'] = 60;
 $msgcode['updateTag']['ERR1'] = 145;
index 8511205..52136ee 100644 (file)
@@ -940,6 +940,7 @@ function resetUIConfig()
        setConfigVar ('ASSETWARN_LISTSRC','{$typeid_4} or {$typeid_7} or {$typeid_8}');
        setConfigVar ('NAMEWARN_LISTSRC','{$typeid_4} or {$typeid_7} or {$typeid_8}');
        setConfigVar ('RACKS_PER_ROW','12');
+       setConfigVar ('FILTER_PREDICATE_SIEVE','');
        return buildRedirectURL (__FUNCTION__, 'OK');
 }
 
@@ -1312,8 +1313,6 @@ function createTag ()
        $tagname = trim ($_REQUEST['tag_name']);
        if (!validTagName ($tagname))
                return buildRedirectURL (__FUNCTION__, 'ERR1', array ($tagname));
-       if (tagExistsInDatabase ($tagname))
-               return buildRedirectURL (__FUNCTION__, 'ERR2', array ($tagname));
        if (($parent_id = $_REQUEST['parent_id']) <= 0)
                $parent_id = 'NULL';
        if (($ret = commitCreateTag ($tagname, $parent_id)) == '')
@@ -1334,8 +1333,9 @@ function updateTag ()
                $parent_id = 'NULL';
        if (($ret = commitUpdateTag ($_REQUEST['tag_id'], $tagname, $parent_id)) == '')
                return buildRedirectURL (__FUNCTION__, 'OK', array ($tagname));
-       else
-               return buildRedirectURL (__FUNCTION__, 'ERR2', array ($tagname, $ret));
+       // Use old name in the message, cause update failed.
+       global $taglist;
+       return buildRedirectURL (__FUNCTION__, 'ERR2', array ($taglist[$_REQUEST['tag_id']]['tag'], $ret));
 }
 
 function rollTags ()
index f435e90..a9c23ca 100644 (file)
@@ -292,6 +292,7 @@ INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, descriptio
 ('ASSETWARN_LISTSRC','{$typeid_4} or {$typeid_7} or {$typeid_8}','string','yes','no','List source: object, for which asset tag should be set'),
 ('NAMEWARN_LISTSRC','{$typeid_4} or {$typeid_7} or {$typeid_8}','string','yes','no','List source: object, for which common name should be set'),
 ('RACKS_PER_ROW','12','unit','yes','no','Racks per row'),
+('FILTER_PREDICATE_SIEVE','','string','yes','no','Predicate sieve regex(7)'),
 ('DB_VERSION','0.17.0','string','no','yes','Database version.');
 
 INSERT INTO `Script` VALUES ('RackCode','allow {$userid_1}');
index 5fea4ce..3242bae 100644 (file)
@@ -183,6 +183,7 @@ CREATE TABLE `FileLink` (
                        $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('ASSETWARN_LISTSRC','{$typeid_4} or {$typeid_7} or {$typeid_8}','string','yes','no','List source: object, for which asset tag should be set')";
                        $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('NAMEWARN_LISTSRC','{$typeid_4} or {$typeid_7} or {$typeid_8}','string','yes','no','List source: object, for which common name should be set')";
                        $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('RACKS_PER_ROW','12','unit','yes','no','Racks per row')";
+                       $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('FILTER_PREDICATE_SIEVE','','string','yes','no','Predicate sieve regex(7)')";
                        $query[] = "delete from Config where varname = 'USER_AUTH_SRC'";
                        $query[] = "delete from Config where varname = 'COOKIE_TTL'";
                        $query[] = "delete from Config where varname = 'rtwidth_0'";