X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-plugins%2Fgofon%2Fgofon%2Ffonreports%2Fclass_fonreport.inc;h=e5aecb7d63e37c5776230acc42102161c391d78c;hb=99b7a2fd477a201dbaf128f17601fc66a64cd844;hp=a5e932a3dbffd05b912196a6f0909774eb8e6d3a;hpb=792df68b67d2cab3ec41e8c70606fcfb38ad1b6e;p=gosa.git diff --git a/gosa-plugins/gofon/gofon/fonreports/class_fonreport.inc b/gosa-plugins/gofon/gofon/fonreports/class_fonreport.inc index a5e932a3d..e5aecb7d6 100644 --- a/gosa-plugins/gofon/gofon/fonreports/class_fonreport.inc +++ b/gosa-plugins/gofon/gofon/fonreports/class_fonreport.inc @@ -2,419 +2,457 @@ 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; - - /* 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") as $type){ - if (isset($_POST[$type])){ - $this->$type= $_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']; + } + 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; + } } - } - $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)); - - foreach($this->attributes_SO as $name){ - $fonfilter[$name] = $this->$name; + /* 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; + } + 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(); - /* GVet template engine */ - $smarty= get_smarty(); + // Use the configured global timezone settings + timezone::get_default_timezone(); - /* Log view */ - if(!$this->view_logged){ - $this->view_logged = TRUE; - new log("view","fonreport/".get_class($this),$this->dn); - } + /* 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); + } /***************** 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", $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 - *****************/ - - /* 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{ - - $cfg= $this->config->data['SERVERS']['FON'][0]; - $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))); - } - } + *****************/ + + // 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))); + } + } /***************** Get Query String && Search - *****************/ + *****************/ - $query = $this->CreateQuerySyntax(); - $cfg = $this->config->data['SERVERS']['FON'][0]; - $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"); - $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 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))); + } /***************** Fetch results - *****************/ - - $report_list= array(); - - /* Restricted attributes will not be displayed, this will be displayed instead */ - $no_acl = ""; + *****************/ + + $report_list= array(); + + /* Restricted attributes will not be displayed, this will be displayed instead */ + $no_acl = ""; + + $no_acl = " "; + + 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 = "