Code

Updated FAX report ACLs.
authorhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Thu, 1 Apr 2010 13:12:13 +0000 (13:12 +0000)
committerhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Thu, 1 Apr 2010 13:12:13 +0000 (13:12 +0000)
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@17462 594d385d-05f5-0310-b6e9-bd551577e9d8

gosa-plugins/gofon/gofon/fonreports/class_fonreport.inc

index 5ed8b622eb7acc88850665242eb231d2f2382dc7..e5aecb7d63e37c5776230acc42102161c391d78c 100644 (file)
 
 class fonreport extends plugin
 {
-  /* Definitions */
-  var $plHeadline= "Phone Reports";
-  var $plDescription= "This does something";
-  var $plIcon       = "plugins/gofon/images/phonereport.png";
-
-  /* For internal use */
-  var $start                             = 0;
-  var $search_for                = "*";
-  var $search_base       = "";
-  var $fields                            = array("calldate", "src", "dst", "channel", "lastapp", "disposition", "duration");
-  var $year                                      = "";
-  var $month                             = "";
-  var $sort                                      = 0;
-  var $sort_direction  = "down";
-  var $report_list             = array();
-  var $userfilter                      = "";
-  var $ui                                          = NULL;
-  var $range                             = 20;
-  var $EntryPerPage   = 20;
-
-  var $selected_server = "";
-
-  /* attribute list for save action */
-  var $attributes_SO  = array("start","search_for","search_base","range","month","sort_direction","sort","year");
-  var $objectclasses  = array();
-  var $view_logged = FALSE;
-  
-  /* Construct class */
-  function fonreport (&$config, $ui)
-  {
-    /* Include config object */
-    $this->config                      = $config;
-    $this->ui                            = $ui;
-    $this->search_base= get_base_from_people($ui->dn);
-  
-    $this->month      = date("m");
-    $this->year       = date("Y");
-
-    /* Use filter settings if we have already searched */
-    if (!session::is_set("fonfilter")){
-      $fonfilter = array();
-      foreach($this->attributes_SO as $name){
-        $fonfilter[$name]=$this->$name;
-      }
-      session::set("fonfilter", $fonfilter);
-    }else{
-      $fonfilter = session::get("fonfilter");
-      foreach($this->attributes_SO as $name){
-        $this->$name = $fonfilter[$name];
-      }
+    /* Definitions */
+    var $plHeadline= "Phone Reports";
+    var $plDescription= "This does something";
+    var $plIcon       = "plugins/gofon/images/phonereport.png";
+
+    /* For internal use */
+    var $start                           = 0;
+    var $search_for              = "*";
+    var $search_base     = "";
+    var $fields                                  = array("calldate", "src", "dst", "channel", "lastapp", "disposition", "duration");
+    var $year                                    = "";
+    var $month                           = "";
+    var $sort                                    = 0;
+    var $sort_direction        = "down";
+    var $report_list           = array();
+    var $userfilter                    = "";
+    var $ui                                        = NULL;
+    var $range                                   = 20;
+    var $EntryPerPage   = 20;
+
+    var $selected_server = "";
+
+    /* attribute list for save action */
+    var $attributes_SO  = array("start","search_for","search_base","range","month","sort_direction","sort","year");
+    var $objectclasses  = array();
+    var $view_logged = FALSE;
+
+    /* Construct class */
+    function fonreport (&$config, $ui)
+    {
+        /* Include config object */
+        $this->config                  = $config;
+        $this->ui                                = $ui;
+        $this->search_base= get_base_from_people($ui->dn);
+
+        $this->month      = date("m");
+        $this->year       = date("Y");
+
+        /* Use filter settings if we have already searched */
+        if (!session::is_set("fonfilter")){
+            $fonfilter = array();
+            foreach($this->attributes_SO as $name){
+                $fonfilter[$name]=$this->$name;
+            }
+            session::set("fonfilter", $fonfilter);
+        }else{
+            $fonfilter = session::get("fonfilter");
+            foreach($this->attributes_SO as $name){
+                $this->$name = $fonfilter[$name];
+            }
+        }
     }
-  }
 
 
   /* Save ui interactions and store results in session, 
-      to remember settings */
-  function save_object()
-  {
-    $fonfilter= session::get("fonfilter");
-    if(isset($_POST['EntryPerPage'])){
-      $this->range = $_POST['EntryPerPage'];
-    }
-    if (isset($_GET['start'])){
-      $this->start= (int)$_GET['start'];
-    }
-    foreach( array("year", "month", "search_for", "search_base","selected_server") as $type){
-      if (isset($_POST[$type])){
-        $this->$type= get_post($type);
-      }
-    }
-    
-    /* Adapt sorting */
-    if (isset($_GET['sort'])){
-      if ($this->sort == (int)$_GET['sort']){
-        if ($this->sort_direction == "down"){
-          $this->sort_direction= "up";
-        } else {
-          $this->sort_direction= "down";
+  to remember settings */
+    function save_object()
+    {
+        $fonfilter= session::get("fonfilter");
+        if(isset($_POST['EntryPerPage'])){
+            $this->range = $_POST['EntryPerPage'];
         }
-      }
-      $this->sort= (int)$_GET['sort'];
-      if ($this->sort < 0 || $this->sort > 6){
-        $this->sort= 0;
-      }
-    }
+        if (isset($_GET['start'])){
+            $this->start= (int)$_GET['start'];
+        }
+        foreach( array("year", "month", "search_for", "search_base","selected_server") as $type){
+            if (isset($_POST[$type])){
+                $this->$type= get_post($type);
+            }
+        }
+
+        /* Adapt sorting */
+        if (isset($_GET['sort'])){
+            if ($this->sort == (int)$_GET['sort']){
+                if ($this->sort_direction == "down"){
+                    $this->sort_direction= "up";
+                } else {
+                    $this->sort_direction= "down";
+                }
+            }
+            $this->sort= (int)$_GET['sort'];
+            if ($this->sort < 0 || $this->sort > 6){
+                $this->sort= 0;
+            }
+        }
+
+        /* remove unwanted tags */
+        $this->search_for = stripslashes(preg_replace("/[^0-9a-z\*\+ \-\/]/i","",$this->search_for));
 
-    /* remove unwanted tags */
-    $this->search_for = stripslashes(preg_replace("/[^0-9a-z\*\+ \-\/]/i","",$this->search_for));
-  
-    foreach($this->attributes_SO as $name){
-      $fonfilter[$name] = $this->$name;
+        foreach($this->attributes_SO as $name){
+            $fonfilter[$name] = $this->$name;
+        }
+        session::set("fonfilter", $fonfilter);
     }
-    session::set("fonfilter", $fonfilter);
-  }
 
 
-  /* Search & display results */
-  function execute()
-  {
-    /* Call parent execute */
-    plugin::execute();
+    /* Search & display results */
+    function execute()
+    {
+        /* Call parent execute */
+        plugin::execute();
 
-    // Use the configured global timezone settings 
-    timezone::get_default_timezone();
+        // Use the configured global timezone settings 
+        timezone::get_default_timezone();
 
-    /* GVet template engine */
-    $smarty= get_smarty();
+        /* GVet template engine */
+        $smarty= get_smarty();
 
-    /* Log view */
-    if(!$this->view_logged){
-      $this->view_logged = TRUE;
-      new log("view","fonreport/".get_class($this),$this->dn);
-    }
+        /* Log view */
+        if(!$this->view_logged){
+            $this->view_logged = TRUE;
+            new log("view","fonreport/".get_class($this),$this->dn);
+        }
 
     /*****************
       Variable Init
-     *****************/
+    *****************/
 
-    $fields_str = "";
+        $fields_str = "";
 
-    $months= array();
-    for($i = 1 ; $i <= 12 ; $i ++ ){
-      $months[$i] = _(date("F",gmmktime(0,0,0,$i)));
-    }
+        $months= array();
+        for($i = 1 ; $i <= 12 ; $i ++ ){
+            $months[$i] = _(date("F",gmmktime(0,0,0,$i)));
+        }
 
-    /* Prepare template */
-    $current= date("Y");
-    $years= array();
-    for ($y= $current - 5; $y<=$current; $y++){
-      $years[$y]= $y;
-    }
+        /* Prepare template */
+        $current= date("Y");
+        $years= array();
+        for ($y= $current - 5; $y<=$current; $y++){
+            $years[$y]= $y;
+        }
 
     /*****************
       Smarty 
-     *****************/
-    $bases      = array();
-    $cat_bases  = $this->ui->get_module_departments("fonreport");
-    foreach($this->config->idepartments as $dn => $name){
-      if(in_array_ics($dn,$cat_bases)){
-        $bases[$dn] = $name;
-      }
-    }
+    *****************/
+        $bases      = array();
+        $cat_bases  = $this->ui->get_module_departments("fonreport");
+        foreach($this->config->idepartments as $dn => $name){
+            if(in_array_ics($dn,$cat_bases)){
+                $bases[$dn] = $name;
+            }
+        }
 
-    if(!isset($bases[$this->search_base])){
-      $this->search_base = key($bases);
-    }
+        if(!isset($bases[$this->search_base])){
+            $this->search_base = key($bases);
+        }
 
-    $smarty->assign("plug",           "?plug=".validate($_GET['plug']));
-    $smarty->assign("launchimage",    get_template_path('images/launch.png'));
-    $smarty->assign("search_image",   get_template_path('images/lists/search.png'));
-    $smarty->assign("search_for",     htmlentities($this->search_for));
-    $smarty->assign("bases",          $bases);
-    $smarty->assign("base_select",    $this->search_base);
-    $smarty->assign("months",         $months);
-    $smarty->assign("month_select",   $this->month);
-    $smarty->assign("years",          $years);
-    $smarty->assign("year_select",    $this->year);
-    $smarty->assign("search_result",  "");
+        $smarty->assign("plug",           "?plug=".validate($_GET['plug']));
+        $smarty->assign("launchimage",    get_template_path('images/launch.png'));
+        $smarty->assign("search_image",   get_template_path('images/lists/search.png'));
+        $smarty->assign("search_for",     htmlentities($this->search_for));
+        $smarty->assign("bases",          $bases);
+        $smarty->assign("base_select",    $this->search_base);
+        $smarty->assign("months",         $months);
+        $smarty->assign("month_select",   $this->month);
+        $smarty->assign("years",          $years);
+        $smarty->assign("year_select",    $this->year);
+        $smarty->assign("search_result",  "");
 
 
     /*****************
       Check Database , Table , Connection 
-     *****************/
+    *****************/
 
-    // Collect servers and allow to select the server in the ui.
-    $servers = array();
-    foreach($this->config->data['SERVERS']['FON'] as $key => $server){
-      $servers[$server['SERVER']] = $server['SERVER'];
-    }
-    $smarty->assign("servers",  $servers);
-    $smarty->assign("selected_server",  $this->selected_server);
-
-    /* Connecting, selecting database */
-    if (!isset($this->config->data['SERVERS']['FON'][0])){
-      msg_dialog::display(_("Configuration error"), msgPool::noserver(_("GOfon")), WARNING_DIALOG);
-      return($smarty->fetch(get_template_path('contents.tpl', TRUE)));
-    }elseif(!is_callable("mysql_connect")){
-      msg_dialog::display(_("Configuration error"), msgPool::missingext("php-mysql"), WARNING_DIALOG);
-      return($smarty->fetch(get_template_path('contents.tpl', TRUE)));
-    }else{
-
-      // Get CFG for the selected server, if empty use first.
-      if($this->selected_server == ""){
-        $cfg= $this->config->data['SERVERS']['FON'][0];
-      }else{
-        foreach($this->config->data['SERVERS']['FON'] as $server){
-          if($server['SERVER'] == $this->selected_server){
-            $cfg = $server;
-          }
+        // Collect servers and allow to select the server in the ui.
+        $servers = array();
+        foreach($this->config->data['SERVERS']['FON'] as $key => $server){
+            $servers[$server['SERVER']] = $server['SERVER'];
+        }
+        $smarty->assign("servers",  $servers);
+        $smarty->assign("selected_server",  $this->selected_server);
+
+        /* Connecting, selecting database */
+        if (!isset($this->config->data['SERVERS']['FON'][0])){
+            msg_dialog::display(_("Configuration error"), msgPool::noserver(_("GOfon")), WARNING_DIALOG);
+            return($smarty->fetch(get_template_path('contents.tpl', TRUE)));
+        }elseif(!is_callable("mysql_connect")){
+            msg_dialog::display(_("Configuration error"), msgPool::missingext("php-mysql"), WARNING_DIALOG);
+            return($smarty->fetch(get_template_path('contents.tpl', TRUE)));
+        }else{
+
+            // Get CFG for the selected server, if empty use first.
+            if($this->selected_server == ""){
+                $cfg= $this->config->data['SERVERS']['FON'][0];
+            }else{
+                foreach($this->config->data['SERVERS']['FON'] as $server){
+                    if($server['SERVER'] == $this->selected_server){
+                        $cfg = $server;
+                    }
+                }
+            }
+
+            $link = @mysql_pconnect($cfg['SERVER'], $cfg['LOGIN'], $cfg['PASSWORD']);
+            if ($link === FALSE){
+                msg_dialog::display(_("Error"), msgPool::dbconnect(_("GOfon"),@mysql_error(),$cfg['SERVER']),ERROR_DIALOG);
+                return($smarty->fetch(get_template_path('contents.tpl', TRUE)));
+            }
+            if (! @mysql_select_db("gophone")){
+                msg_dialog::display(_("Error"), msgPool::dbselect(_("GOfon"),@mysql_error(),$cfg['DB']),ERROR_DIALOG);
+                return($smarty->fetch(get_template_path('contents.tpl', TRUE)));
+            }
         }
-      }
-
-      $link = @mysql_pconnect($cfg['SERVER'], $cfg['LOGIN'], $cfg['PASSWORD']);
-      if ($link === FALSE){
-        msg_dialog::display(_("Error"), msgPool::dbconnect(_("GOfon"),@mysql_error(),$cfg['SERVER']),ERROR_DIALOG);
-        return($smarty->fetch(get_template_path('contents.tpl', TRUE)));
-      }
-      if (! @mysql_select_db("gophone")){
-        msg_dialog::display(_("Error"), msgPool::dbselect(_("GOfon"),@mysql_error(),$cfg['DB']),ERROR_DIALOG);
-        return($smarty->fetch(get_template_path('contents.tpl', TRUE)));
-      }
-    }
 
 
     /*****************
       Get Query String && Search
-     *****************/
+    *****************/
 
-    $link   = @mysql_pconnect($cfg['SERVER'], $cfg['LOGIN'], $cfg['PASSWORD']);
+        $link   = @mysql_pconnect($cfg['SERVER'], $cfg['LOGIN'], $cfg['PASSWORD']);
 
-    @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__,$query, "Database query");
+        @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__,$query, "Database query");
 
-    // Get all matching entries to be able to fill the pager
-    $query  = $this->CreateQuerySyntax($limit = FALSE);
-    $count = @mysql_query($query);
-    if ($count === false){
-      msg_dialog::display(_("Error"), msgPool::dbquery(_("GOfon"),@mysql_error(),$cfg['SERVER']),ERROR_DIALOG);
-      return($smarty->fetch(get_template_path('contents.tpl', TRUE)));
-    }
-    $tmp = mysql_fetch_array($count, MYSQL_ASSOC);
-    $res_count = $tmp['count']; 
-    if($res_count < $this->start){
-      $this->start = 0;
-    }
+        // Get all matching entries to be able to fill the pager
+        $query  = $this->CreateQuerySyntax($limit = FALSE);
+        $count = @mysql_query($query);
+        if ($count === false){
+            msg_dialog::display(_("Error"), msgPool::dbquery(_("GOfon"),@mysql_error(),$cfg['SERVER']),ERROR_DIALOG);
+            return($smarty->fetch(get_template_path('contents.tpl', TRUE)));
+        }
+        $tmp = mysql_fetch_array($count, MYSQL_ASSOC);
+        $res_count = $tmp['count']; 
+        if($res_count < $this->start){
+            $this->start = 0;
+        }
 
-    // Get entries for the selected range only.
-    $query  = $this->CreateQuerySyntax($limit = TRUE);
-    $result = @mysql_query($query);
-    if ($result === false){
-      msg_dialog::display(_("Error"), msgPool::dbquery(_("GOfon"),@mysql_error(),$cfg['SERVER']),ERROR_DIALOG);
-      return($smarty->fetch(get_template_path('contents.tpl', TRUE)));
-    }
+        // Get entries for the selected range only.
+        $query  = $this->CreateQuerySyntax($limit = TRUE);
+        $result = @mysql_query($query);
+        if ($result === false){
+            msg_dialog::display(_("Error"), msgPool::dbquery(_("GOfon"),@mysql_error(),$cfg['SERVER']),ERROR_DIALOG);
+            return($smarty->fetch(get_template_path('contents.tpl', TRUE)));
+        }
 
     /*****************
       Fetch results 
-     *****************/
-  
-    $report_list= array();
-    
-    /* Restricted attributes will not be displayed, this will be displayed instead */
-    $no_acl = "<img class='center' src='images/lists/locked.png'
-      title='".msgPool::permView()."' alt='"._("Insufficient permissions")."'>";
-
-    $no_acl = "&nbsp;";
-
-    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
-
-      // Check attribute permissions
-      foreach($line as $attr => $value){
-        if($attr == "duration") continue;
-        $acl = $this->ui->get_permissions($this->search_base,"fonreport/fonreport",$attr);
-        if(!preg_match("/r/",$acl)){
-          $line[$attr] = $no_acl;
-        }
-      }
-
-      // Check date permissions
-      if($this->ui->get_permissions($this->search_base,"fonreport/fonreport","calldate")){
-        $hour=  substr($line["calldate"], 11, 2);
-        $minute=substr($line["calldate"], 14, 2);
-        $format= _("Y-M-D");
-        $date= preg_replace("/Y/", substr($line["calldate"], 0, 4), $format);
-        $date= preg_replace("/M/", substr($line["calldate"], 5, 2), $date);
-        $date= preg_replace("/D/", substr($line["calldate"], 8, 2), $date);
-        $date_str = $date." ".$hour.":".$minute;
-      }else{
-        $date_str = $no_acl;
-      }
-  
-      $append_str =    "<td class='list1'>".$date_str."</td>";
-      foreach(array("src","dst","channel","lastapp","disposition") as $atr){
-        if(isset($line[$atr])){
-          $append_str .=       "<td class='list1'>".$line[$atr]."</td>";
+    *****************/
+
+        $report_list= array();
+
+        /* Restricted attributes will not be displayed, this will be displayed instead */
+        $no_acl = "<img class='center' src='images/lists/locked.png'
+            title='".msgPool::permView()."' alt='"._("Insufficient permissions")."'>";
+
+        $no_acl = "&nbsp;";
+
+        while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
+
+            // Check attribute permissions
+            foreach($line as $attr => $value){
+                if($attr == "duration") continue;
+                $acl = $this->ui->get_permissions($this->search_base,"fonreport/fonreport",$attr);
+                if(!preg_match("/r/",$acl)){
+                    $line[$attr] = $no_acl;
+                }
+            }
+
+            // Check date permissions
+            if($this->ui->get_permissions($this->search_base,"fonreport/fonreport","calldate")){
+                $hour=  substr($line["calldate"], 11, 2);
+                $minute=substr($line["calldate"], 14, 2);
+                $format= _("Y-M-D");
+                $date= preg_replace("/Y/", substr($line["calldate"], 0, 4), $format);
+                $date= preg_replace("/M/", substr($line["calldate"], 5, 2), $date);
+                $date= preg_replace("/D/", substr($line["calldate"], 8, 2), $date);
+                $date_str = $date." ".$hour.":".$minute;
+            }else{
+                $date_str = $no_acl;
+            }
+
+            $append_str =      "<td class='list1'>".$date_str."</td>";
+            foreach(array("src","dst","channel","lastapp","disposition") as $atr){
+                if(isset($line[$atr])){
+                    $append_str .=     "<td class='list1'>".$line[$atr]."</td>";
+                }
+            }
+            if($this->ui->get_permissions($this->search_base,"fonreport/fonreport","duration")){
+                $append_str .=         "<td class='list1' style='border-right: 0pt none;'>".$this->gen_duration($line["duration"])."</td>";
+            }else{
+                $append_str .=         "<td class='list1' style='border-right: 0pt none;'>".$no_acl."</td>";
+            }
+            $report_list[] = $append_str;
         }
-      }
-      if($this->ui->get_permissions($this->search_base,"fonreport/fonreport","duration")){
-        $append_str .=         "<td class='list1'>".$this->gen_duration($line["duration"])."</td>";
-      }else{
-        $append_str .=         "<td class='list1'>".$no_acl."</td>";
-      }
-      $report_list[] = $append_str;
-    }
 
-    $this->report_list= $report_list;
-    @mysql_close($link);
+        $this->report_list= $report_list;
+        @mysql_close($link);
 
 
     /*****************
       Create list of results  
-     *****************/
+    *****************/
 
-    /* Generate output */
-    $mod      = 0;
-    $output   = "";
-    foreach($this->report_list as $val){
-      $output.= "<tr>$val</tr>";
-    }
+        /* Generate output */
+        $mod      = 0;
+        $output   = "";
+        foreach($this->report_list as $val){
+            $output.= "<tr>$val</tr>";
+        }
 
     /*****************
       Tell smarty what we have found  
-     *****************/
+    *****************/
 
-    if ($output != ""){
-      $smarty->assign("search_result", $output);
-      $smarty->assign("range_selector", range_selector($res_count, $this->start,$this->range,"EntryPerPage"));
-    } else {
-      $smarty->assign("search_result", "");
-    }
+        if ($output != ""){
+            $smarty->assign("search_result", $output);
+            $smarty->assign("range_selector", range_selector($res_count, $this->start,$this->range,"EntryPerPage"));
+        } else {
+            $smarty->assign("search_result", "");
+        }
 
-    /* Show main page */
-    for($i= 0; $i<7; $i++){
-      $smarty->assign("mode$i", "");
-    }
-    $smarty->assign("mode".$this->sort, image("images/lists/sort-".$this->sort_direction.".png"));
-
-    return($smarty->fetch(get_template_path('contents.tpl', TRUE)));
-  }
-
-  
-  /* Create duration string   12'11" */
-  function gen_duration($seconds)
-  {
-    if ($seconds / 60 > 1){
-      $minutes= (int)($seconds / 60);
-      $seconds= $seconds % 60;
-      return ("$minutes&rsquo;$seconds&rdquo;");
-    }
-    return ("$seconds&rdquo;");
-  }
-
-
-  /* Create WHERE part for our mysql serach */
-  function GetUidMatchingFilter()
-  {
-    $ldap= $this->config->get_ldap_link();
-    $ldap->cd($this->search_base);
-    $s = $this->search_for;
-
-    $s = preg_replace("/\%/","",$s);  
-    $s2 = preg_replace("/\*/","%",$s);  
-
-    $filter = "(&(objectClass=gosaAccount)(!(objectClass=gosaUserTemplate))".
-        "(|(uid=$s)(l=$s)(homePhone=$s)(telephoneNumber=$s)(facsimileTelephoneNumber=$s)(mobile=$s)".
-        "(pager=$s)(cn=$s)(givenName=$s)(sn=$s)(personalTitle=$s)(title=$s)))";
-
-    $attrs  = array("uid");
-    $res    = get_list($filter,"users/user",$this->search_base,$attrs);
-    
-    $str = " AND (";
-    $fields = array("dstchannel","channel");
-    if(count($res)){
-      foreach($res as $attrs){
-        $uid =  $attrs["uid"][0];
-        foreach($fields as $name){
-          $str .= $name." like '%".$uid."%' OR ";
+        /* Show main page */
+        for($i= 0; $i<7; $i++){
+            $smarty->assign("mode$i", "");
         }
-      }
-    }
-    $str .= " channel     like '%".$s."%' OR  
-              dstchannel  like '%".$s."%' OR  
-              dst         like '".$s2."' OR 
-              src         like '".$s2."' OR 
-              lastapp     like '".$s2."')"; 
-    return($str);
-  }
-
-
-  /* Create query string */
-  function CreateQuerySyntax($limit = TRUE)
-  {
-    /* Get extended search filter which contain uids and so on */
-    $uidstring = $this->GetUidMatchingFilter();
-
-    /* Create string with all fields seperated by ,*/
-    $fields_str ="";
-    foreach($this->fields as $field){
-      if($field == "calldate") {
-        continue;      
-      }
-      $fields_str .= $field.", ";
+        $smarty->assign("mode".$this->sort, image("images/lists/sort-".$this->sort_direction.".png"));
+
+        return($smarty->fetch(get_template_path('contents.tpl', TRUE)));
     }
-    $fields_str = preg_replace("/, $/","",$fields_str);
 
-    /* Create Sort tag */
-    if ($this->sort_direction == "down"){
-      $desc= "DESC";
-    } else {
-      $desc= "ASC";
+
+    /* Create duration string   12'11" */
+    function gen_duration($seconds)
+    {
+        if ($seconds / 60 > 1){
+            $minutes= (int)($seconds / 60);
+            $seconds= $seconds % 60;
+            return ("$minutes&rsquo;$seconds&rdquo;");
+        }
+        return ("$seconds&rdquo;");
     }
-    /* Create times */
-    $start= date ("YmdHis", mktime(0,0,0,$this->month,1,$this->year));
-    $end=   date ("YmdHis", mktime(23,59,59,($this->month +1),0,$this->year));
-
-    if(!$limit){
-      $fieldset = "count(dst) as `count`";
-    }else{
-
-      /* Create string with all fields seperated by ,*/
-      $fields_str ="";
-      foreach($this->fields as $field){
-        if($field == "calldate") continue;
-        $fields_str .= $field.", ";
-      }
-      $fields_str = preg_replace("/, $/","",$fields_str);
-      $fieldset = $fields_str.",calldate"; 
+
+
+    /* Create WHERE part for our mysql serach */
+    function GetUidMatchingFilter()
+    {
+        $ldap= $this->config->get_ldap_link();
+        $ldap->cd($this->search_base);
+        $s = $this->search_for;
+
+        $s = preg_replace("/\%/","",$s);  
+        $s2 = preg_replace("/\*/","%",$s);  
+
+        $filter = "(&(objectClass=gosaAccount)(!(objectClass=gosaUserTemplate))".
+            "(|(uid=$s)(l=$s)(homePhone=$s)(telephoneNumber=$s)(facsimileTelephoneNumber=$s)(mobile=$s)".
+            "(pager=$s)(cn=$s)(givenName=$s)(sn=$s)(personalTitle=$s)(title=$s)))";
+
+        $attrs  = array("uid");
+        $res    = get_list($filter,"users/user",$this->search_base,$attrs);
+
+        $str = " AND (";
+        $fields = array("dstchannel","channel");
+        if(count($res)){
+            foreach($res as $attrs){
+                $uid =  $attrs["uid"][0];
+                foreach($fields as $name){
+                    $str .= $name." like '%".$uid."%' OR ";
+                }
+            }
+        }
+        $str .= " channel     like '%".$s."%' OR  
+            dstchannel  like '%".$s."%' OR  
+            dst         like '".$s2."' OR 
+            src         like '".$s2."' OR 
+            lastapp     like '".$s2."')"; 
+        return($str);
     }
 
-    $query = "SELECT {$fieldset} FROM cdr ".
-      "WHERE   
-      calldate <= $end 
-      AND 
-      calldate >= $start 
-      ". $uidstring." 
-      ORDER BY ".$this->fields[$this->sort]." $desc";
-   
-    // Set limitations  
-    if($limit){
-      $query.=" LIMIT ".($this->start).", ".$this->range;
+
+    /* Create query string */
+    function CreateQuerySyntax($limit = TRUE)
+    {
+        /* Get extended search filter which contain uids and so on */
+        $uidstring = $this->GetUidMatchingFilter();
+
+        /* Create string with all fields seperated by ,*/
+        $fields_str ="";
+        foreach($this->fields as $field){
+            if($field == "calldate") {
+                continue;      
+            }
+            $fields_str .= $field.", ";
+        }
+        $fields_str = preg_replace("/, $/","",$fields_str);
+
+        /* Create Sort tag */
+        if ($this->sort_direction == "down"){
+            $desc= "DESC";
+        } else {
+            $desc= "ASC";
+        }
+        /* Create times */
+        $start= date ("YmdHis", mktime(0,0,0,$this->month,1,$this->year));
+        $end=   date ("YmdHis", mktime(23,59,59,($this->month +1),0,$this->year));
+
+        if(!$limit){
+            $fieldset = "count(dst) as `count`";
+        }else{
+
+            /* Create string with all fields seperated by ,*/
+            $fields_str ="";
+            foreach($this->fields as $field){
+                if($field == "calldate") continue;
+                $fields_str .= $field.", ";
+            }
+            $fields_str = preg_replace("/, $/","",$fields_str);
+            $fieldset = $fields_str.",calldate"; 
+        }
+
+        $query = "SELECT {$fieldset} FROM cdr ".
+            "WHERE   
+            calldate <= $end 
+            AND 
+            calldate >= $start 
+            ". $uidstring." 
+            ORDER BY ".$this->fields[$this->sort]." $desc";
+
+        // Set limitations  
+        if($limit){
+            $query.=" LIMIT ".($this->start).", ".$this->range;
+        }
+        $query.=";";
+        return($query);
     }
-    $query.=";";
-    return($query);
-  }
 
 
   /* Return plugin informations for acl handling 
-     #FIXME You can only read attributes within this report plugin */
-  static function plInfo()
-  {
-    return (array(
-        "plShortName"   => _("Phone reports"),
-        "plDescription" => _("Phone reports")."&nbsp;<i>"._("All entries are readonly")."</i>",
-        "plSelfModify"  => TRUE,
-        "plDepends"     => array(),
-        "plPriority"    => 0,
-        "plSection"     => array("administration"),
-        "plCategory"    => array(
-          "fonreport" => array(
-            "description" => _("Phone reports"),
-            "objectClass" => "None")),
-
-  
-        "plProvidedAcls" => array(
-          "calldate"      =>_("Date"), 
-          "src"           =>_("Source"), 
-          "dst"           =>_("Destination"), 
-          "channel"       =>_("Channel"), 
-          "lastapp"       =>_("Application called"),
-          "disposition"   =>_("Disposition"), 
-          "duration"      =>_("Duration"))
-        ));
-  }
+  #FIXME You can only read attributes within this report plugin */
+      static function plInfo()
+      {
+          return (array(
+              "plShortName"   => _("Phone reports"),
+              "plDescription" => _("Phone reports")."&nbsp;<i>"._("All entries are readonly")."</i>",
+              "plSelfModify"  => TRUE,
+              "plDepends"     => array(),
+              "plPriority"    => 0,
+              "plSection"     => array("administration"),
+              "plCategory"    => array(
+                  "fonreport" => array(
+                      "description" => _("Phone reports"),
+                      "objectClass" => "None")),
+
+
+              "plProvidedAcls" => array(
+                  "calldate"      =>_("Date"), 
+                  "src"           =>_("Source"), 
+                  "dst"           =>_("Destination"), 
+                  "channel"       =>_("Channel"), 
+                  "lastapp"       =>_("Application called"),
+                  "disposition"   =>_("Disposition"), 
+                  "duration"      =>_("Duration"))
+              ));
+      }
 }
 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
 ?>