r2676 - buildCellFilter(): replaced by getCellFilter()
authorDenis Ovsienko <infrastation@yandex.ru>
Thu, 30 Apr 2009 10:57:03 +0000 (10:57 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Thu, 30 Apr 2009 10:57:03 +0000 (10:57 +0000)
 - getCellFilter(): toss code around once more
 - renderCellFilterPortlet(): idem
 - renderDepot(): new prototype function
 - listCells(): master 'object' real to replace getObjectList()
 - getAllIPv4Allocations(): not a function any more, code moves to popup.php

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

index 63bbefb..816d87c 100644 (file)
@@ -221,7 +221,15 @@ function listCells ($realm)
                (
                        'id' => 'id',
                        'name' => 'name',
-                       'objtype_id' => 'objtype_id'
+                       'label' => 'label',
+                       'barcode' => 'barcode',
+                       'asset_no' => 'asset_no',
+                       'objtype_id' => 'objtype_id',
+                       'rack_id' => '(select rack_id from RackSpace where object_id = id order by rack_id asc limit 1)',
+                       'Rack_name' => '(select name from Rack where id = rack_id)',
+                       'row_id' => '(select row_id from Rack where id = rack_id)',
+                       'Row_name' => '(select name from RackRow where id = row_id)',
+                       'objtype_name' => '(select dict_value from Dictionary where dict_key = objtype_id)',
                );
                $keycolumn = 'id';
                break;
@@ -303,10 +311,19 @@ function listCells ($realm)
                                'parent_id' => $taglist[$row['tag_id']]['parent_id'],
                        );
        }
+       // Add necessary finish to the list before returning it.
        foreach (array_keys ($ret) as $entity_id)
        {
                $ret[$entity_id]['itags'] = getImplicitTags ($ret[$entity_id]['etags']);
                $ret[$entity_id]['atags'] = generateEntityAutoTags ($realm, $entity_id);
+               switch ($realm)
+               {
+               case 'object':
+                       $ret[$entity_id]['dname'] = displayedName ($ret[$entity_id]);
+                       break;
+               default:
+                       break;
+               }
        }
        return $ret;
 }
index d1a4fc5..2d485dd 100644 (file)
@@ -1218,105 +1218,74 @@ function getTagFilterStr ($tagfilter = array())
        return $ret;
 }
 
-// Generate RackCode expression according to provided tag filter.
-function buildCellFilter ()
-{
-       if (!isset ($_REQUEST['tagfilter']) or !is_array ($_REQUEST['tagfilter']))
-               return array();
-       $ret = array();
-       $or = $text = '';
-       global $taglist;
-       foreach ($_REQUEST['tagfilter'] as $req_id)
-               if (isset ($taglist[$req_id]))
-               {
-                       $text .= $or . '{' . $taglist[$req_id]['tag'] . '}';
-                       $or = ' or ';
-               }
-       $expr = spotPayload ($text, 'SYNT_EXPR');
-       return $expr['load'];
-}
-
 function getCellFilter ()
 {
-       // cfv variable isn't present in URLs generated by RackTables versions
-       // prior to 0.17.0. We treat those URLs as format type 1.
        if (isset ($_REQUEST['tagfilter']) and is_array ($_REQUEST['tagfilter']))
-               $format = 1;
-       elseif (isset ($_REQUEST['cfv']))
-               $format = $_REQUEST['cfv'];
-       else
-               $format = getConfigVar ('DEFAULT_FILTER_FORMAT');
+       {
+               $_REQUEST['cft'] = $_REQUEST['tagfilter'];
+               unset ($_REQUEST['tagfilter']);
+       }
        $ret = array
        (
-               'version' => $format,
+               'tagidlist' => array(),
+               'tnamelist' => array(),
+               'pnamelist' => array(),
+               'andor' => '',
                'text' => '',
-               'expression' => array()
+               'extratext' => '',
+               'expression' => array(),
        );
-       $text = '';
-       switch ($format)
+       switch (TRUE)
        {
-       case 1:
-               $boolop = '';
-               $ret['tagidlist'] = array();
-               $ret['tnamelist'] = array();
-               $ret['boolop'] = getConfigVar ('DEFAULT_FILTER_BOOLOP');
-               global $taglist;
-               if (isset ($_REQUEST['tagfilter']) and is_array ($_REQUEST['tagfilter']))
-                       foreach ($_REQUEST['tagfilter'] as $req_id)
-                               if (isset ($taglist[$req_id]))
-                               {
-                                       $ret['tagidlist'][] = $req_id;
-                                       $ret['tnamelist'][] = $taglist[$req_id]['tag'];
-                                       $text .= $boolop . '{' . $taglist[$req_id]['tag'] . '}';
-                                       $boolop = ' ' . $ret['boolop'] . ' ';
-                               }
-               break;
-       case 2:
-               $boolop = '';
-               $ret['tagidlist'] = array();
-               $ret['tnamelist'] = array();
-               $ret['pnamelist'] = array();
-               $ret['boolop'] = getConfigVar ('DEFAULT_FILTER_BOOLOP');
-               global $taglist;
-               // Both tags and predicates, which don't exist, should be
-               // handled somehow. Discard them silently for now.
-               if (isset ($_REQUEST['cft']) and is_array ($_REQUEST['cft']))
-                       foreach ($_REQUEST['cft'] as $req_id)
-                               if (isset ($taglist[$req_id]))
-                               {
-                                       $ret['tagidlist'][] = $req_id;
-                                       $ret['tnamelist'][] = $taglist[$req_id]['tag'];
-                                       $text .= $boolop . '{' . $taglist[$req_id]['tag'] . '}';
-                                       $boolop = ' ' . $ret['boolop'] . ' ';
-                               }
-               if (isset ($_REQUEST['cfp']) and is_array ($_REQUEST['cfp']))
-               {
-                       global $pTable;
-                       foreach ($_REQUEST['cfp'] as $req_name)
-                               if (isset ($pTable[$req_name]))
-                               {
-                                       $ret['pnamelist'][] = $req_name;
-                                       $text .= $boolop . '[' . $req_name . ']';
-                                       $boolop = ' ' . $ret['boolop'] . ' ';
-                               }
-               }
+       case (!isset ($_REQUEST['andor'])):
+               $andor2 = getConfigVar ('FILTER_DEFAULT_ANDOR');
                break;
-       case 3:
-               if (isset ($_REQUEST['cfe']))
-                       $text = $_REQUEST['cfe'];
+       case ($_REQUEST['andor'] == 'and'):
+       case ($_REQUEST['andor'] == 'or'):
+               $ret['andor'] = $andor2 = $_REQUEST['andor'];
                break;
        default:
-               showError ('Configuration error (filter version number)', __FUNCTION__);
+               showError ('Invalid and/or switch value in submitted form', __FUNCTION__);
                return NULL;
        }
-       if (strlen ($text))
+       $andor1 = '';
+       // Both tags and predicates, which don't exist, should be
+       // handled somehow. Discard them silently for now.
+       if (isset ($_REQUEST['cft']) and is_array ($_REQUEST['cft']))
        {
-               $parse = spotPayload ($text, 'SYNT_EXPR');
-               if ($parse['result'] == 'ACK')
-               {
-                       $ret['text'] = $text;
-                       $ret['expression'] = $parse['load'];
-               }
+               global $taglist;
+               foreach ($_REQUEST['cft'] as $req_id)
+                       if (isset ($taglist[$req_id]))
+                       {
+                               $ret['tagidlist'][] = $req_id;
+                               $ret['tnamelist'][] = $taglist[$req_id]['tag'];
+                               $ret['text'] .= $andor1 . '{' . $taglist[$req_id]['tag'] . '}';
+                               $andor1 = ' ' . $andor2 . ' ';
+                       }
+       }
+       if (isset ($_REQUEST['cfp']) and is_array ($_REQUEST['cfp']))
+       {
+               global $pTable;
+               foreach ($_REQUEST['cfp'] as $req_name)
+                       if (isset ($pTable[$req_name]))
+                       {
+                               $ret['pnamelist'][] = $req_name;
+                               $ret['text'] .= $andor1 . '[' . $req_name . ']';
+                               $andor1 = ' ' . $andor2 . ' ';
+                       }
+       }
+       if (isset ($_REQUEST['cfe']))
+               $ret['extratext'] = $_REQUEST['cfe'];
+       $finaltext = array();
+       if (strlen ($ret['text']))
+               $finaltext[] = '(' . $ret['text'] . ')';
+       if (strlen ($ret['extratext']))
+               $finaltext[] = '(' . $ret['extratext'] . ')';
+       $finaltext = implode (' ' . $andor2 . ' ', $finaltext);
+       if (strlen ($finaltext))
+       {
+               $parse = spotPayload ($finaltext, 'SYNT_EXPR');
+               $ret['expression'] = $parse['result'] == 'ACK' ? $parse['load'] : NULL;
        }
        return $ret;
 }
index 6b3623d..772f962 100644 (file)
@@ -1897,14 +1897,52 @@ function renderEmptyPortsSelect ($port_id, $type_id)
        }
 }
 
-function renderAllIPv4Allocations ()
+function renderDepot ()
 {
-       $addresses = getAllIPv4Allocations();
-       usort($addresses, 'sortObjectAddressesAndNames');
-       foreach ($addresses as $address)
+       global $pageno, $nextorder;
+       showMessageOrError();
+       $cellfilter = getCellFilter();
+       $objects = filterCellList (listCells ('object'), $cellfilter['expression']);
+
+       echo "<table border=0 class=objectview>\n";
+       echo "<tr><td class=pcleft>";
+
+       startPortlet ('Objects (' . count ($objects) . ')');
+       if ($objects === NULL)
+       {
+               showError ('getObjectList() failed', __FUNCTION__);
+               return;
+       }
+       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 tag</th><th>Barcode</th><th>Row/Rack</th></tr>';
+       $order = 'odd';
+       foreach ($objects as $obj)
        {
-               echo "<option value='${address['ip']}' onclick='getElementById(\"ip\").value=\"${address['ip']}\";'>${address['object_name']} ${address['name']} ${address['ip']}</option>\n";
+               if (isset ($_REQUEST['hl_object_id']) and $_REQUEST['hl_object_id'] == $obj['id'])
+                       $secondclass = 'tdleft port_highlight';
+               else
+                       $secondclass = 'tdleft';
+               $tags = loadEntityTags ('object', $obj['id']);
+               echo "<tr class=row_${order} valign=top><td class='${secondclass}'><a href='".makeHref(array('page'=>'object', 'object_id'=>$obj['id']))."'><strong>${obj['dname']}</strong></a>";
+               if (count ($tags))
+                       echo '<br><small>' . serializeTags ($tags, makeHref(array('page'=>$pageno, 'tab'=>'default')) . '&') . '</small>';
+               echo "</td><td class='${secondclass}'>${obj['label']}</td>";
+               echo "<td class='${secondclass}'>${obj['asset_no']}</td>";
+               echo "<td class='${secondclass}'>${obj['barcode']}</td>";
+               if ($obj['rack_id'])
+                       echo "<td class='${secondclass}'><a href='".makeHref(array('page'=>'row', 'row_id'=>$obj['row_id']))."'>${obj['Row_name']}</a>/<a href='".makeHref(array('page'=>'rack', 'rack_id'=>$obj['rack_id']))."'>${obj['Rack_name']}</a></td>";
+               else
+                       echo "<td class='${secondclass}'>Unmounted</td>";
+               echo '</tr>';
+               $order = $nextorder[$order];
        }
+       echo '</table>';
+       finishPortlet();
+
+       echo "</td><td class=pcright width='25%'>";
+
+       renderCellFilterPortlet ($cellfilter, 'object');
+       echo "</td></tr></table>\n";
 }
 
 // History viewer for history-enabled simple dictionaries.
@@ -5098,36 +5136,43 @@ function renderTagFilterPortlet ($tagfilter, $realm, $bypass_name = '', $bypass_
 // This one is going to replace the tag filter.
 function renderCellFilterPortlet ($preselect, $realm, $bypass_name = '', $bypass_value = '')
 {
-       $cfv = $preselect['version'];
        global $pageno, $tabno, $taglist, $tagtree;
        startPortlet ('filter');
        echo "<form method=get>\n";
-       echo "<input type=hidden name=page value=${pageno}>\n";
-       echo "<input type=hidden name=tab value=${tabno}>\n";
-       echo "<input type=hidden name=cfv value=${cfv}>\n";
-       if ($bypass_name != '')
-               echo "<input type=hidden name=${bypass_name} value='${bypass_value}'>\n";
        echo '<table border=0 align=center>';
-       switch ($cfv)
+       $ruler = "<tr><td colspan=2 class=tagbox><hr></td></tr>\n";
+       $hr = '';
+       // and/or block
+       if (getConfigVar ('FILTER_SUGGEST_ANDOR') == 'yes' or strlen ($preselect['andor']))
+       {
+               echo $hr;
+               $hr = $ruler;
+               $andor = strlen ($preselect['andor']) ? $preselect['andor'] : getConfigVar ('FILTER_DEFAULT_ANDOR');
+               echo '<tr><td class=tagbox><input type=radio name=andor value=and';
+               echo ($andor == 'and' ? ' checked' : '') . '>and</input></td>';
+               echo '<td class=tagbox><input type=radio name=andor value=or';
+               echo ($andor == 'or' ? ' checked' : '') . '>or</input></td>';
+               echo "</td></tr>";
+       }
+       // tags block
+       if (getConfigVar ('FILTER_SUGGEST_TAGS') == 'yes' or count ($preselect['tagidlist']))
        {
-       case 1:
-               $objectivetags = getObjectiveTagTree ($tagtree, $realm);
-               if (!count ($objectivetags))
-               {
-                       echo "None used in current realm.<br>";
-                       break;
-               }
+               echo $hr;
+               $hr = $ruler;
                // Show a tree of tags, pre-select according to currently requested list filter.
-               foreach ($objectivetags as $taginfo)
-                       renderTagCheckbox ('tagfilter', buildTagChainFromIds ($preselect['tagidlist']), $taginfo);
-               break;
-       case 2:
+               global $tagtree;
                $objectivetags = getObjectiveTagTree ($tagtree, $realm);
                if (!count ($objectivetags))
                        echo "<tr><td colspan=2 class='tagbox sparenetwork'>(nothing is tagged yet)</td></tr>";
                else
                        foreach ($objectivetags as $taginfo)
                                renderTagCheckbox ('cft', buildTagChainFromIds ($preselect['tagidlist']), $taginfo);
+       }
+       // predicates block
+       if (getConfigVar ('FILTER_SUGGEST_PREDICATES') == 'yes' or count ($preselect['pnamelist']))
+       {
+               echo $hr;
+               $hr = $ruler;
                global $pTable;
                $myPredicates = array();
                $psieve = getConfigVar ('FILTER_PREDICATE_SIEVE');
@@ -5135,7 +5180,9 @@ function renderCellFilterPortlet ($preselect, $realm, $bypass_name = '', $bypass
                foreach (array_keys ($pTable) as $pname)
                        if (mb_ereg_match ($psieve, $pname))
                                $myPredicates[] = array ('id' => $pname, 'tag' => $pname, 'kids' => array());
-               if (count ($myPredicates))
+               if (!count ($myPredicates))
+                       echo "<tr><td colspan=2 class='tagbox sparenetwork'>(no predicates to show)</td></tr>";
+               else
                {
                        // Repack preselect likewise.
                        $myPreselect = array();
@@ -5145,34 +5192,37 @@ function renderCellFilterPortlet ($preselect, $realm, $bypass_name = '', $bypass
                        foreach ($myPredicates as $pinfo)
                                renderTagCheckbox ('cfp', $myPreselect, $pinfo);
                }
-               break;
-       case 3:
-               dragon();
-               break;
-       default:
-               showError ('Format version error', __FUNCTION__);
-               break;
        }
-       echo "<input type=hidden name=page value=${pageno}>\n";
-       echo "<input type=hidden name=tab value=${tabno}>\n";
-       echo "<input type=hidden name=cfv value=${cfv}>\n";
-       if ($bypass_name != '')
-               echo "<input type=hidden name=${bypass_name} value='${bypass_value}'>\n";
-       echo '<tr><td colspan=2 class=tagbox><hr></td></tr>';
-       // "apply"
-       echo '</td></tr><tr><td>';
-       printImageHREF ('apply', 'Apply filter', TRUE);
-       echo "</form></td><td>";
-
-       // "reset"
-       echo "<form method=get>\n";
-       echo "<input type=hidden name=page value=${pageno}>\n";
-       echo "<input type=hidden name=tab value=${tabno}>\n";
-       echo "<input type=hidden name=cfv value=${cfv}>\n";
-       if ($bypass_name != '')
-               echo "<input type=hidden name=${bypass_name} value='${bypass_value}'>\n";
-       printImageHREF ('clear', 'reset', TRUE);
-       echo '</form></td></tr></table>';
+       // extra code
+       if (getConfigVar ('FILTER_SUGGEST_EXTRA') == 'yes' or strlen ($preselect['extratext']))
+       {
+               echo $hr;
+               $hr = $ruler;
+               echo "<tr><td colspan=2><textarea name=cfe>\n" . $preselect['extratext'];
+               echo "</textarea></td></tr>\n";
+       }
+       // submit block
+       {
+               echo $hr;
+               $hr = $ruler;
+               // "apply"
+               echo '<tr><td>';
+               echo "<input type=hidden name=page value=${pageno}>\n";
+               echo "<input type=hidden name=tab value=${tabno}>\n";
+               if ($bypass_name != '')
+                       echo "<input type=hidden name=${bypass_name} value='${bypass_value}'>\n";
+               printImageHREF ('apply', 'Apply filter', TRUE);
+               echo "</form></td><td>";
+               // "reset"
+               echo "<form method=get>\n";
+               echo "<input type=hidden name=page value=${pageno}>\n";
+               echo "<input type=hidden name=tab value=${tabno}>\n";
+               if ($bypass_name != '')
+                       echo "<input type=hidden name=${bypass_name} value='${bypass_value}'>\n";
+               printImageHREF ('clear', 'reset', TRUE);
+               echo '</form></td></tr>';
+       }
+       echo '</table>';
        finishPortlet();
 }
 
index 9aae1b0..3a5ee4d 100644 (file)
@@ -47,6 +47,22 @@ $ophandler['objects']['default']['deleteObject'] = 'deleteObject';
 $msgcode['deleteObject']['OK'] = 76;
 $msgcode['deleteObject']['ERR'] = 100;
 
+$page['depot'] = array
+(
+       'parent' => 'index',
+       'title' => 'Depot',
+);
+$tab['depot'] = array
+(
+       'default' => 'Browse',
+       'addmore' => 'Add more',
+);
+$tabhandler['depot'] = array
+(
+       'default' => 'renderDepot',
+       'addmore' => 'renderAddMultipleObjectsForm',
+);
+
 $page['row']['title_handler'] = 'dynamic_title_row';
 $page['row']['bypass'] = 'row_id';
 $page['row']['bypass_type'] = 'uint';
index 57ac322..636a8bd 100644 (file)
@@ -941,8 +941,11 @@ function resetUIConfig()
        setConfigVar ('NAMEWARN_LISTSRC','{$typeid_4} or {$typeid_7} or {$typeid_8}');
        setConfigVar ('RACKS_PER_ROW','12');
        setConfigVar ('FILTER_PREDICATE_SIEVE','');
-       setConfigVar ('DEFAULT_FILTER_FORMAT','2');
-       setConfigVar ('DEFAULT_FILTER_BOOLOP','or');
+       setConfigVar ('FILTER_DEFAULT_ANDOR','or');
+       setConfigVar ('FILTER_SUGGEST_ANDOR','yes');
+       setConfigVar ('FILTER_SUGGEST_TAGS','yes');
+       setConfigVar ('FILTER_SUGGEST_PREDICATES','yes');
+       setConfigVar ('FILTER_SUGGEST_EXTRA','no');
        return buildRedirectURL (__FUNCTION__, 'OK');
 }
 
index 1ac72b4..af3a9b7 100644 (file)
@@ -293,8 +293,11 @@ INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, descriptio
 ('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)'),
-('DEFAULT_FILTER_FORMAT','2','string','no','no','Default list filter format'),
-('DEFAULT_FILTER_BOOLOP','or','string','no','no','Default list filter boolean operation (or/and)'),
+('FILTER_DEFAULT_ANDOR','or','string','no','no','Default list filter boolean operation (or/and)'),
+('FILTER_SUGGEST_ANDOR','yes','string','no','no','Suggest and/or selector in list filter'),
+('FILTER_SUGGEST_TAGS','yes','string','no','no','Suggest tags in list filter'),
+('FILTER_SUGGEST_PREDICATES','yes','string','no','no','Suggest predicates in list filter'),
+('FILTER_SUGGEST_EXTRA','no','string','no','no','Suggest extra expression in list filter'),
 ('DB_VERSION','0.17.0','string','no','yes','Database version.');
 
 INSERT INTO `Script` VALUES ('RackCode','allow {$userid_1}');
index 15ce356..be8a29e 100644 (file)
--- a/popup.php
+++ b/popup.php
                        echo '<input type=hidden id=ip>';
                        echo '<select size=' . getConfigVar ('MAXSELSIZE') . ' id=addresses>';
                        renderAllIPv4Allocations();
+                       $addresses = getAllIPv4Allocations();
+                       usort ($addresses, 'sortObjectAddressesAndNames');
+                       foreach ($addresses as $address)
+                               echo "<option value='${address['ip']}' onclick='getElementById(\"ip\").value=\"${address['ip']}\";'>" .
+                                       "${address['object_name']} ${address['name']} ${address['ip']}</option>\n";
                        echo '</select><br><br>';
                        echo "<input type=submit value='Proceed' onclick='".
                        "if (getElementById(\"ip\")!=\"\") {".
index e365f88..b77f9c2 100644 (file)
@@ -184,8 +184,11 @@ CREATE TABLE `FileLink` (
                        $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[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('DEFAULT_FILTER_FORMAT','2','string','no','no','Default list filter format')')";
-                       $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('DEFAULT_FILTER_BOOLOP','or','string','no','no','Default list filter boolean operation (or/and)')')";
+                       $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('FILTER_DEFAULT_ANDOR','or','string','no','no','Default list filter boolean operation (or/and)')')";
+                       $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('FILTER_SUGGEST_ANDOR','yes','string','no','no','Suggest and/or selector in list filter')')";
+                       $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('FILTER_SUGGEST_TAGS','yes','string','no','no','Suggest tags in list filter')')";
+                       $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('FILTER_SUGGEST_PREDICATES','yes','string','no','no','Suggest predicates in list filter')')";
+                       $query[] = "INSERT INTO `Config` (varname, varvalue, vartype, emptyok, is_hidden, description) VALUES ('FILTER_SUGGEST_EXTRA','no','string','no','no','Suggest extra expression in list filter')')";
                        $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'";