r2596 - initial P-filter draft code
authorDenis Ovsienko <infrastation@yandex.ru>
Thu, 2 Apr 2009 15:56:57 +0000 (15:56 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Thu, 2 Apr 2009 15:56:57 +0000 (15:56 +0000)
inc/functions.php
inc/interface.php

index 5ef2e3d16bdaff9fb31001ab5a41b304acbb0167..8cb3dd07fbd20925a977c0e195df7d4a1a5abc12 100644 (file)
@@ -1920,6 +1920,8 @@ function buildPredicateTable ($parsetree)
 // empty list, if there was an error.
 function filterEntityList ($list_in, $realm, $expression = array())
 {
+       if ($expression === NULL)
+               return array();
        if (!count ($expression))
                return $list_in;
        global $rackCode;
@@ -1962,4 +1964,19 @@ function getIPv4LBList()
        return $ret;
 }
 
+// If the requested predicate exists, return its [last] definition.
+// Otherwise return NULL (to signal filterEntityList() about error).
+// Also detect "not set" option selected.
+function interpretPredicate ($pname)
+{
+       if ($pname == '_')
+               return array();
+       global $rackCode;
+       $ret = NULL;
+       foreach ($rackCode as $sentence)
+               if ($sentence['type'] == 'SYNT_DEFINITION' and $sentence['term'] == $pname)
+                       $ret = $sentence['definition'];
+       return $ret;
+}
+
 ?>
index 6c9646b74df5c996d65894f5b2348ad6e9bf306a..2f7f5ca59648a32fae1505ed436887778ece4729 100644 (file)
@@ -1885,6 +1885,8 @@ function renderObjectGroup ()
        echo '</td><td class=pcleft>';
 
        $objects = getObjectList ($group_id, $tagfilter, getTFMode());
+       if (isset ($_REQUEST['pfilter']))
+               $objects = filterEntityList ($objects, 'object', interpretPredicate ($_REQUEST['pfilter']));
        startPortlet ('Objects (' . count ($objects) . ')');
        if ($objects === NULL)
        {
@@ -5126,7 +5128,7 @@ function renderTagFilterPortlet ($tagfilter, $realm, $bypass_name = '', $bypass_
 {
        global $pageno, $tabno, $taglist, $tagtree;
        $objectivetags = getObjectiveTagTree ($tagtree, $realm);
-       startPortlet ('Tag filter');
+       startPortlet ('T-filter');
        if (!count ($objectivetags))
        {
                echo "None defined for current realm.<br>";
@@ -5160,6 +5162,34 @@ function renderTagFilterPortlet ($tagfilter, $realm, $bypass_name = '', $bypass_
        printImageHREF ('clear', 'reset', TRUE);
        echo '</form></td></tr></table>';
        finishPortlet();
+       global $rackCode;
+       // underscore cannot start predicate name
+       $options = array ('_' => '-- NOT SET --');
+       foreach (array_keys (buildPredicateTable ($rackCode)) as $predicatename)
+               $options[$predicatename] = "[${predicatename}]";
+       if (!count ($options))
+               return;
+       startPortlet ('P-filter');
+       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";
+       echo '<table border=0 align=center>';
+       echo '<tr><td colspan=2>';
+       printSelect ($options, 'pfilter', isset ($_REQUEST['pfilter']) ? $_REQUEST['pfilter'] : NULL);
+       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";
+       if ($bypass_name != '')
+               echo "<input type=hidden name=${bypass_name} value='${bypass_value}'>\n";
+       printImageHREF ('clear', 'reset', TRUE);
+       echo '</form></td></tr></table>';
+       finishPortlet();
 }
 
 // Dump all tags in a single SELECT element.