Code

Updated post handling
authorhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Thu, 29 Jul 2010 13:19:45 +0000 (13:19 +0000)
committerhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Thu, 29 Jul 2010 13:19:45 +0000 (13:19 +0000)
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@19243 594d385d-05f5-0310-b6e9-bd551577e9d8

gosa-core/include/class_filter.inc

index 04de2dae2c5cb13fce48ef21f3638fe6ce823937..38c4faf4d7e6628979a50cccbc4f628d5f3a9d36 100644 (file)
 
 class filter {
 
-  var $searches= array();
-  var $xmlSearches= array();
-  var $attributes= array();
-  var $search;
-  var $defaultSearch;
-  var $category= "";
-  var $objectStorage= array();
-  var $base= "";
-  var $scope= "";
-  var $query;
-  var $value= "";
-  var $initial= false;
-  var $scopeMode= "auto";
-  var $converter= null;
-  var $pid;
-
-
-  function filter($filename)
-  {
-    global $config;
-
-    // Load eventually passed filename
-    if (!$this->load($filename)) {
-      die("Cannot parse $filename!");
+    var $searches= array();
+    var $xmlSearches= array();
+    var $attributes= array();
+    var $search;
+    var $defaultSearch;
+    var $category= "";
+    var $objectStorage= array();
+    var $base= "";
+    var $scope= "";
+    var $query;
+    var $value= "";
+    var $initial= false;
+    var $scopeMode= "auto";
+    var $converter= null;
+    var $pid;
+
+
+    function filter($filename)
+    {
+        global $config;
+
+        // Load eventually passed filename
+        if (!$this->load($filename)) {
+            die("Cannot parse $filename!");
+        }
+
+        $this->pid= preg_replace("/[^0-9]/", "", microtime(TRUE)); 
     }
 
-    $this->pid= preg_replace("/[^0-9]/", "", microtime(TRUE)); 
-  }
 
+    function load($filename)
+    {
+        $contents = file_get_contents($filename);
+        $xmlData= xml::xml2array($contents, 1);
 
-  function load($filename)
-  {
-    $contents = file_get_contents($filename);
-    $xmlData= xml::xml2array($contents, 1);
+        if (!isset($xmlData['filterdef'])) {
+            return false;
+        }
 
-    if (!isset($xmlData['filterdef'])) {
-      return false;
-    }
+        $xmlData= $xmlData["filterdef"];
+
+        // Load filter
+        if (isset($xmlData['search'])) {
 
-    $xmlData= $xmlData["filterdef"];
+            // Array conversion
+            if (!isset($xmlData['search'][0])) {
+                $searches= array($xmlData['search']);
+            } else {
+                $searches= $xmlData['search'];
+            }
+
+            /* Store available searches */
+            foreach ($searches as $search) {
+
+                /* Do multi conversation */ 
+                if (!isset($search['query'][0])){
+                    $search['query']= array($search['query']);
+                }
 
-    // Load filter
-    if (isset($xmlData['search'])) {
+                /* Store search */
+                $this->xmlSearches[$search['tag']]= $search;
 
-      // Array conversion
-      if (!isset($xmlData['search'][0])) {
-        $searches= array($xmlData['search']);
-      } else {
-        $searches= $xmlData['search'];
-      }
+            }
+        } else {
+            return false;
+        }
 
-      /* Store available searches */
-      foreach ($searches as $search) {
+        // Transfer scope
+        $this->scopeMode= $xmlData['definition']['scope'];
+        if ($this->scopeMode == "auto") {
+            $this->scope= "one";
+        } else {
+            $this->scope= $this->scopeMode;
+        }
 
-        /* Do multi conversation */ 
-        if (!isset($search['query'][0])){
-          $search['query']= array($search['query']);
+        // Transfer attributes
+        $this->attributes= $xmlData['definition']['attribute'];
+        if (!is_array($this->attributes)) {
+            $this->attributes= array($this->attributes);
         }
 
-        /* Store search */
-        $this->xmlSearches[$search['tag']]= $search;
+        // Transfer initial value
+        if (isset($xmlData['definition']['initial']) && $xmlData['definition']['initial'] == "true"){
+            $this->initial= true;
+        }
 
-      }
-    } else {
-      return false;
-    }
+        // Transfer category
+        if (isset($xmlData['definition']['category'])){
+            $this->category= $xmlData['definition']['category'];
+        }
+        if (!is_array($this->category)) {
+            $this->category= array($this->category);
+        }
 
-    // Transfer scope
-    $this->scopeMode= $xmlData['definition']['scope'];
-    if ($this->scopeMode == "auto") {
-      $this->scope= "one";
-    } else {
-      $this->scope= $this->scopeMode;
-    }
+        // Initialize searches and default search mode
+        $this->defaultSearch= $xmlData['definition']['default'];
+        $this->reloadFilters();
+        $this->setSearch($this->defaultSearch);
 
-    // Transfer attributes
-    $this->attributes= $xmlData['definition']['attribute'];
-    if (!is_array($this->attributes)) {
-      $this->attributes= array($this->attributes);
+        return true;  
     }
 
-    // Transfer initial value
-    if (isset($xmlData['definition']['initial']) && $xmlData['definition']['initial'] == "true"){
-      $this->initial= true;
-    }
 
-    // Transfer category
-    if (isset($xmlData['definition']['category'])){
-      $this->category= $xmlData['definition']['category'];
-    }
-    if (!is_array($this->category)) {
-      $this->category= array($this->category);
+    function reloadFilters()
+    {
+        $this->searches= array_merge($this->xmlSearches, userFilter::getFilter($this->category));
+        $this->setSearch($this->search);
     }
 
-    // Initialize searches and default search mode
-    $this->defaultSearch= $xmlData['definition']['default'];
-    $this->reloadFilters();
-    $this->setSearch($this->defaultSearch);
 
-    return true;  
-  }
+    function setSearch($method= null)
+    {
+        $patch= null;
 
+        // Maybe our search method has gone?
+        if (!isset($this->searches[$method])) {
+            $method= $this->defaultSearch;
+        }
 
-  function reloadFilters()
-  {
-    $this->searches= array_merge($this->xmlSearches, userFilter::getFilter($this->category));
-    $this->setSearch($this->search);
-  }
+        // Try to use it, but bail out if there's no help...
+        if (isset($this->searches[$method])) {
+            $this->query= $this->searches[$method]['query'];
+            $this->search= $method;
+        } else {
+            die ("Invalid search module!");
+        }
+    }
 
 
-  function setSearch($method= null)
-  {
-    $patch= null;
+    function getTextfield($tag, $value= "", $element= null)
+    {
+        $size= 30;
+        $maxlength= 30;
+        $result= "<input class='filter_textfield' placeholder='"._("Search")."...' id='$tag' name='$tag' type='text' size='$size' maxlength='{$maxlength}' value='".$value."'>";
+        if ($element && isset($element['autocomplete'])) {
+            $frequency= "0.5";
+            $characters= "1";
+            if (isset($element['autocomplete']['frequency'])) {
+                $frequency= $element['autocomplete']['frequency'];
+            }
+            if (isset($element['autocomplete']['characters'])) {
+                $characters= $element['autocomplete']['characters'];
+            }
+            $result.= "<div id='autocomplete$tag' class='autocomplete'></div>".
+                "<script type='text/javascript'>".
+                "new Ajax.Autocompleter('$tag', 'autocomplete$tag', 'autocomplete.php', { minChars: $characters, frequency: $frequency });".
+                "</script>";
 
-    // Maybe our search method has gone?
-    if (!isset($this->searches[$method])) {
-      $method= $this->defaultSearch;
+            $this->autocompleters[$tag]= $element;
+        }
+        return $result;
     }
 
-    // Try to use it, but bail out if there's no help...
-    if (isset($this->searches[$method])) {
-      $this->query= $this->searches[$method]['query'];
-      $this->search= $method;
-    } else {
-      die ("Invalid search module!");
-    }
-  }
-
-
-  function getTextfield($tag, $value= "", $element= null)
-  {
-    $size= 30;
-    $maxlength= 30;
-    $result= "<input class='filter_textfield' placeholder='"._("Search")."...' id='$tag' name='$tag' type='text' size='$size' maxlength='{$maxlength}' value='".$value."'>";
-    if ($element && isset($element['autocomplete'])) {
-      $frequency= "0.5";
-      $characters= "1";
-      if (isset($element['autocomplete']['frequency'])) {
-        $frequency= $element['autocomplete']['frequency'];
-      }
-      if (isset($element['autocomplete']['characters'])) {
-        $characters= $element['autocomplete']['characters'];
-      }
-      $result.= "<div id='autocomplete$tag' class='autocomplete'></div>".
-        "<script type='text/javascript'>".
-        "new Ajax.Autocompleter('$tag', 'autocomplete$tag', 'autocomplete.php', { minChars: $characters, frequency: $frequency });".
-        "</script>";
-
-      $this->autocompleters[$tag]= $element;
+
+    function getCurrentBase()
+    {
+        if (isset($this->search->base) && (string)$this->search->scope != "auto") {
+            return false;
+        }
+
+        return $this->base;
     }
-    return $result;
-  }
 
 
-  function getCurrentBase()
-  {
-    if (isset($this->search->base) && (string)$this->search->scope != "auto") {
-      return false;
+    function getCurrentScope()
+    {
+        if (isset($this->search->scope) && (string)$this->search->scope != "auto") {
+            return (string)$this->search->scope;
+        }
+
+        return $this->scope;
     }
 
-    return $this->base;
-  }
+
+    function setConverter($hook)
+    {
+        $this->converter= $hook;
+    }
 
 
-  function getCurrentScope()
-  {
-    if (isset($this->search->scope) && (string)$this->search->scope != "auto") {
-      return (string)$this->search->scope;
+    function setObjectStorage($storage)
+    {
+        $this->objectStorage= $storage;    
     }
 
-    return $this->scope;
-  }
 
+    function setBase($base)
+    {
+        $this->base= $base;
+    }
 
-  function setConverter($hook)
-  {
-    $this->converter= $hook;
-  }
 
+    function setCurrentScope($scope)
+    {
+        $this->scope= $scope;
+    }
 
-  function setObjectStorage($storage)
-  {
-    $this->objectStorage= $storage;    
-  }
 
 
-  function setBase($base)
-  {
-    $this->base= $base;
-  }
+    function render()
+    {
+        $content= "<table class='filter-wrapper' summary='"._("Search filter")."'><tr><td>".$this->renderFilterMenu()."</td><td>";
+        $content.= "<div class='search-filter'>".$this->getTextfield('search_filter', $this->value, $this->searches[$this->search])."</div>".
+            "&nbsp;<button class='search-filter' type='submit' title='"._("Search")."'>".image("images/find.png")."</button></td></tr></table>";
 
+        // Return meta data
+        return ("<input type='hidden' name='FILTER_PID' value='".$this->pid."'>".$content);
+    }
 
-  function setCurrentScope($scope)
-  {
-    $this->scope= $scope;
-  }
 
+    function query()
+    {
+        global $class_mapping;
+        $result= array();
 
+        // Return empty list if initial is not set
+        if (!$this->initial) {
+            $this->initial= true;
+            return $result;
+        }
+        // Go thru all queries and merge results
+        foreach ($this->query as $query) {
+            if (!isset($query['backend']) || !isset($query['filter'])) {
+                die("No backend specified in search config.");
+            }
 
-  function render()
-  {
-    $content= "<table class='filter-wrapper' summary='"._("Search filter")."'><tr><td>".$this->renderFilterMenu()."</td><td>";
-    $content.= "<div class='search-filter'>".$this->getTextfield('search_filter', $this->value, $this->searches[$this->search])."</div>".
-      "&nbsp;<button class='search-filter' type='submit' title='"._("Search")."'>".image("images/find.png")."</button></td></tr></table>";
+            // Is backend available?
+            $backend= "filter".$query['backend'];
+            if (!isset($class_mapping["$backend"])) {
+                die("Invalid backend specified in search config.");
+            }
 
-    // Return meta data
-    return ("<input type='hidden' name='FILTER_PID' value='".$this->pid."'>".$content);
-  }
+            // Load filter and attributes
+            $filter= $query['filter'];
+
+            // Handle converters if present
+            if ($this->converter) {
+                preg_match('/([^:]+)::(.*)$/', $this->converter, $m);
+                if ($this->value == "") {
+                    $filter= call_user_func(array($m[1], $m[2]), preg_replace('/\$/', "*", $filter));
+                } else {
+                    $filter= call_user_func(array($m[1], $m[2]), preg_replace('/\$/', $this->value, $filter));
+                }
+            }
 
+            // Do not replace escaped \$ - This is required to be able to search for e.g. windows machines.
+            if ($this->value == "") {
+                $filter= preg_replace("/\\$/", '*', $filter);
+            } else {
+                $filter= preg_replace("/\\$/", "*".normalizeLdap($this->value)."*", $filter);
+            }
 
-  function query()
-  {
-    global $class_mapping;
-    $result= array();
+            $result= array_merge($result, call_user_func(array($backend, 'query'), $this->base, $this->scope, $filter, $this->attributes, $this->category, $this->objectStorage));
+        }
 
-    // Return empty list if initial is not set
-    if (!$this->initial) {
-      $this->initial= true;
-      return $result;
+        return ($result);
     }
-    // Go thru all queries and merge results
-    foreach ($this->query as $query) {
-      if (!isset($query['backend']) || !isset($query['filter'])) {
-        die("No backend specified in search config.");
-      }
-
-      // Is backend available?
-      $backend= "filter".$query['backend'];
-      if (!isset($class_mapping["$backend"])) {
-        die("Invalid backend specified in search config.");
-      }
-
-      // Load filter and attributes
-      $filter= $query['filter'];
-
-      // Handle converters if present
-      if ($this->converter) {
-        preg_match('/([^:]+)::(.*)$/', $this->converter, $m);
-        if ($this->value == "") {
-          $filter= call_user_func(array($m[1], $m[2]), preg_replace('/\$/', "*", $filter));
-        } else {
-          $filter= call_user_func(array($m[1], $m[2]), preg_replace('/\$/', $this->value, $filter));
-        }
-      }
 
-      // Do not replace escaped \$ - This is required to be able to search for e.g. windows machines.
-      if ($this->value == "") {
-        $filter= preg_replace("/\\$/", '*', $filter);
-      } else {
-        $filter= preg_replace("/\\$/", "*".normalizeLdap($this->value)."*", $filter);
-      }
 
-      $result= array_merge($result, call_user_func(array($backend, 'query'), $this->base, $this->scope, $filter, $this->attributes, $this->category, $this->objectStorage));
-    }
+    function update()
+    {
+        if (isset($_POST['FILTER_PID']) && $_POST['FILTER_PID'] == $this->pid) {
+            // Save input field
+            if (isset($_POST['search_filter'])) {
+                $this->value= get_post('search_filter');
+            }
+
+            // Save scope if needed
+            if ($this->scopeMode == "auto" && isset($_POST['act']) && $_POST['act'] == "toggle-subtree") {
+                $this->scope= ($this->scope == "one")?"sub":"one";
+            }
 
-    return ($result);
-  }
-
-
-  function update()
-  {
-    if (isset($_POST['FILTER_PID']) && $_POST['FILTER_PID'] == $this->pid) {
-      // Save input field
-      if (isset($_POST['search_filter'])) {
-        $this->value= validate($_POST['search_filter']);
-      }
-
-      // Save scope if needed
-      if ($this->scopeMode == "auto" && isset($_POST['act']) && $_POST['act'] == "toggle-subtree") {
-        $this->scope= ($this->scope == "one")?"sub":"one";
-      }
-
-      // Switch filter?
-      if (isset($_POST['act'])) {
-        foreach ($this->searches as $tag => $cfg) {
-          if ($_POST['act'] == "filter-$tag") {
-            $this->setSearch($tag);
-            break;
-          }
+            // Switch filter?
+            if (isset($_POST['act'])) {
+                foreach ($this->searches as $tag => $cfg) {
+                    if ($_POST['act'] == "filter-$tag") {
+                        $this->setSearch($tag);
+                        break;
+                    }
+                }
+            }
         }
-      }
+
     }
 
-  }
 
+    function getCompletitionList($config, $value="*")
+    {
+        global $class_mapping;
+        $res= array();
 
-  function getCompletitionList($config, $value="*")
-  {
-    global $class_mapping;
-    $res= array();
+        // Load result attributes
+        $attributes= $config['autocomplete']['attribute'];
+        if (!is_array($attributes)) {
+            $attributes= array($attributes);
+        }
 
-    // Load result attributes
-    $attributes= $config['autocomplete']['attribute'];
-    if (!is_array($attributes)) {
-      $attributes= array($attributes);
-    }
+        // Do the query
+        $result= array();
 
-    // Do the query
-    $result= array();
+        // Is backend available?
+# FIXME
+        $queries= $config['query'];
+        if (!isset($queries[0])){
+            $queries= array($queries);
+        }
+        foreach ($queries as $query) {
+            $backend= "filter".$query['backend'];
+            if (!isset($class_mapping["$backend"])) {
+                die("Invalid backend specified in search config.");
+            }
+            $filter= preg_replace("/\\$/", "*".normalizeLdap($value)."*", $query['filter']);
 
-    // Is backend available?
-    # FIXME
-    $queries= $config['query'];
-    if (!isset($queries[0])){
-      $queries= array($queries);
-    }
-    foreach ($queries as $query) {
-      $backend= "filter".$query['backend'];
-      if (!isset($class_mapping["$backend"])) {
-        die("Invalid backend specified in search config.");
-      }
-      $filter= preg_replace("/\\$/", "*".normalizeLdap($value)."*", $query['filter']);
-
-      $result= array_merge($result, call_user_func(array($backend, 'query'), $this->base, $this->scope, $filter, $attributes,
-          $this->category, $this->objectStorage));
-    }
+            $result= array_merge($result, call_user_func(array($backend, 'query'), $this->base, $this->scope, $filter, $attributes,
+                        $this->category, $this->objectStorage));
+        }
 
-    foreach ($result as $entry) {
-      foreach ($attributes as $attribute) {
-        if (is_array($entry[$attribute])) {
-          for ($i= 0; $i<$entry[$attribute]['count']; $i++) {
-            if (mb_stristr($entry[$attribute][$i], $value)) {
-              $res[]= $entry[$attribute][$i];
+        foreach ($result as $entry) {
+            foreach ($attributes as $attribute) {
+                if (is_array($entry[$attribute])) {
+                    for ($i= 0; $i<$entry[$attribute]['count']; $i++) {
+                        if (mb_stristr($entry[$attribute][$i], $value)) {
+                            $res[]= $entry[$attribute][$i];
+                        }
+                    }
+                } else {
+                    $res[]= $entry[$attribute];
+                }
             }
-          }
-        } else {
-          $res[]= $entry[$attribute];
         }
-      }
+
+        return $res;
     }
 
-    return $res;
-  }
 
+    function processAutocomplete()
+    {
+        global $class_mapping;
+        $result= array();
 
-  function processAutocomplete()
-  {
-    global $class_mapping;
-    $result= array();
+        // Introduce maximum number of entries
+        $max= 25;
 
-    // Introduce maximum number of entries
-    $max= 25;
+        if(isset($this->searches[$this->search]['autocomplete'])){
+            $result= $this->getCompletitionList($this->searches[$this->search], get_post('search_filter'));
+            $result= array_unique($result);
+            asort($result);
 
-    if(isset($this->searches[$this->search]['autocomplete'])){
-      $result= $this->getCompletitionList($this->searches[$this->search], $_POST['search_filter']);
-      $result= array_unique($result);
-      asort($result);
+            echo '<ul>';
+            foreach ($result as $entry) {
+                echo '<li>'.mark(get_post('search_filter'), $entry).'</li>';
+                if ($max-- == 0) {
+                    break;
+                }
+            }
 
-      echo '<ul>';
-      foreach ($result as $entry) {
-        echo '<li>'.mark($_POST['search_filter'], $entry).'</li>';
-        if ($max-- == 0) {
-          break;
+            echo '</ul>';
         }
-      }
-
-      echo '</ul>';
     }
-  }
 
 
-  function getObjectBase($dn)
-  {
-    global $config;
-    $base= "";
+    function getObjectBase($dn)
+    {
+        global $config;
+        $base= "";
 
-    // Try every object storage
-    $storage= $this->objectStorage;
-    if (!is_array($storage)){
-      $storage= array($storage);
-    }
-    foreach ($storage as $location) {
-      $pattern= "/^[^,]+,".preg_quote($location, '/')."/i";
-      $base= preg_replace($pattern, '', $dn);
-    }
+        // Try every object storage
+        $storage= $this->objectStorage;
+        if (!is_array($storage)){
+            $storage= array($storage);
+        }
+        foreach ($storage as $location) {
+            $pattern= "/^[^,]+,".preg_quote($location, '/')."/i";
+            $base= preg_replace($pattern, '', $dn);
+        }
 
-    /* Set to base, if we're not on a correct subtree */
-    if (!isset($config->idepartments[$base])){
-      $base= $config->current['BASE'];
-    }
+        /* Set to base, if we're not on a correct subtree */
+        if (!isset($config->idepartments[$base])){
+            $base= $config->current['BASE'];
+        }
 
-    return $base;
-  }
+        return $base;
+    }
 
 
 
-  function renderFilterMenu()
-  {
-    // Load shortcut
-    $result= "<ul class='level1' id='filter-root'><li><a href='#'>".image("images/filter.png").image("images/lists/sort-down.png")."</a>";
+    function renderFilterMenu()
+    {
+        // Load shortcut
+        $result= "<ul class='level1' id='filter-root'><li><a href='#'>".image("images/filter.png").image("images/lists/sort-down.png")."</a>";
 
-    // Build ul/li list
-    $separator= " style='border-top:1px solid #AAA' ";
-    $result.= "<ul class='level2'>";
+        // Build ul/li list
+        $separator= " style='border-top:1px solid #AAA' ";
+        $result.= "<ul class='level2'>";
 
-    // Build in filters
-    foreach ($this->xmlSearches as $tag => $config) {
-      $label = htmlentities(_($config['label']),ENT_COMPAT,'UTF-8');
-      if ($tag == $this->search) {
-        $result.= "<li><a href='#'>".image("images/checked.png")."&nbsp;".$label."</a></li>";
-      } else {
-        $result.= "<li><a href='#' onClick='\$(\"act\").value= \"filter-$tag\";\$(\"exec_act\").click();'>".image("images/empty.png")."&nbsp;".$label."</a></li>";
-      }
-    }
+        // Build in filters
+        foreach ($this->xmlSearches as $tag => $config) {
+            $label = htmlentities(_($config['label']),ENT_COMPAT,'UTF-8');
+            if ($tag == $this->search) {
+                $result.= "<li><a href='#'>".image("images/checked.png")."&nbsp;".$label."</a></li>";
+            } else {
+                $result.= "<li><a href='#' onClick='\$(\"act\").value= \"filter-$tag\";\$(\"exec_act\").click();'>".image("images/empty.png")."&nbsp;".$label."</a></li>";
+            }
+        }
 
-    // User defined filters
-    $first= true;
-    foreach (userFilter::getFilter($this->category) as $tag => $config) {
-      if ($tag == $this->search) {
-        $result.= "<li".($first?$separator:"")."><a href='#'>".image("images/checked.png")."&nbsp;"._($config['description'])."</a></li>";
-      } else {
-        $result.= "<li".($first?$separator:"")."><a href='#' onClick='\$(\"act\").value= \"filter-$tag\";\$(\"exec_act\").click();'>".image("images/empty.png")."&nbsp;"._($config['description'])."</a></li>";
-      }
+        // User defined filters
+        $first= true;
+        foreach (userFilter::getFilter($this->category) as $tag => $config) {
+            if ($tag == $this->search) {
+                $result.= "<li".($first?$separator:"")."><a href='#'>".image("images/checked.png")."&nbsp;"._($config['description'])."</a></li>";
+            } else {
+                $result.= "<li".($first?$separator:"")."><a href='#' onClick='\$(\"act\").value= \"filter-$tag\";\$(\"exec_act\").click();'>".image("images/empty.png")."&nbsp;"._($config['description'])."</a></li>";
+            }
 
-      $first= false;
-    }
+            $first= false;
+        }
 
-    // Render scope if set to auto
-    if ($this->scopeMode == "auto") {
-      $result.= "<li$separator><a href='#' onClick='\$(\"act\").value= \"toggle-subtree\";\$(\"exec_act\").click();'>".($this->scope=="one"?image("images/empty.png"):image("images/checked.png"))."&nbsp;"._("Search in subtrees")."</a></li>";
-    }
+        // Render scope if set to auto
+        if ($this->scopeMode == "auto") {
+            $result.= "<li$separator><a href='#' onClick='\$(\"act\").value= \"toggle-subtree\";\$(\"exec_act\").click();'>".($this->scope=="one"?image("images/empty.png"):image("images/checked.png"))."&nbsp;"._("Search in subtrees")."</a></li>";
+        }
 
 
-    // Edit filter menu
-    $result.= "<li$separator><a href='#' onClick='\$(\"act\").value= \"config-filter\";\$(\"exec_act\").click();'>".image("images/configure.png")."&nbsp;"._("Edit filters")."...</a></li>";
+        // Edit filter menu
+        $result.= "<li$separator><a href='#' onClick='\$(\"act\").value= \"config-filter\";\$(\"exec_act\").click();'>".image("images/configure.png")."&nbsp;"._("Edit filters")."...</a></li>";
 
-    $result.= "</ul>";
+        $result.= "</ul>";
 
-    $script= '<script type="text/javascript" language="JavaScript">var menu2; menu2= new Menu("filter-root", "menu2", configMenu)</script>';
+        $script= '<script type="text/javascript" language="JavaScript">var menu2; menu2= new Menu("filter-root", "menu2", configMenu)</script>';
 
-    return "<div id='filtermenu'>".$result."</li></ul></div>$script";
-  }
+        return "<div id='filtermenu'>".$result."</li></ul></div>$script";
+    }
 
 
-  function getFixedFilters()
-  {
-    return array_keys($this->searches);
-  }
+    function getFixedFilters()
+    {
+        return array_keys($this->searches);
+    }
 
 }