diff --git a/infolog/inc/class.boinfolog.inc.php b/infolog/inc/class.boinfolog.inc.php index 04118ca7a2..2f453c79fd 100644 --- a/infolog/inc/class.boinfolog.inc.php +++ b/infolog/inc/class.boinfolog.inc.php @@ -51,8 +51,8 @@ 'both' => 'both' ), 'type' => array( 'task' => 'task','phone' => 'phone','note' => 'note', - 'confirm' => 'confirm','reject' => 'reject','email' => 'email', - 'fax' => 'fax' ) + /* 'confirm' => 'confirm','reject' => 'reject','email' => 'email', + 'fax' => 'fax' no implemented so far */ ) ); $this->so = CreateObject('infolog.soinfolog'); $this->data = &$this->so->data; diff --git a/infolog/inc/class.soinfolog.inc.php b/infolog/inc/class.soinfolog.inc.php index 83ab781fb4..f1742f050a 100644 --- a/infolog/inc/class.soinfolog.inc.php +++ b/infolog/inc/class.soinfolog.inc.php @@ -18,6 +18,7 @@ var $db,$db2; var $grants; var $data = array( ); + var $filters = array( ); function soinfolog( $info_id = 0) { @@ -87,12 +88,16 @@ } // sql to be AND into a query to ensure ACL is respected (incl. _PRIVATE) - // filter: none - list all entrys user have rights to see - // private - list only his personal entrys + // filter: none|all - list all entrys user have rights to see + // private|own - list only his personal entrys // (incl. those he is responsible for !!!) function aclFilter($filter = 'none') { global $phpgw_info; + + ereg('.*(own|privat|all|none).*',$filter,$vars); + $filter = $vars[1]; + if (isset($this->acl_filter[$filter])) { return $this->acl_filter[$filter]; // used cached filter if found @@ -122,7 +127,7 @@ $filtermethod = " (info_owner=$user"; // user has all rights // private: own entries plus the one user is responsible for - if ($filter == 'private') + if ($filter == 'private' || $filter == 'own') { $filtermethod .= " OR info_responsible=$user AND (info_access='public'".($has_private_access?" OR $has_private_access":'').')'; } @@ -139,11 +144,40 @@ } $filtermethod .= ') '; - // echo "

aclFilter('$filter')(user='$user') = '$filtermethod'

"; - return $this->acl_filter[$filter] = $filtermethod; // cache the filter } + function statusFilter($filter = '') + { + ereg('.*(done|open|offer).*',$filter,$vars); + $filter = $vars[1]; + + switch ($filter) + { + case 'done': return " AND info_status IN ('done','billed')"; + case 'open': return " AND NOT (info_status IN ('done','billed'))"; + case 'offer': return " AND info_status = 'offer'"; + } + return ''; + } + + function dateFilter($filter = '') + { + ereg('.*(upcoming|today|overdue).*',$filter,$vars); + $filter = $vars[1]; + + $now = getdate(time()); + $tomorrow = mktime(0,0,0,$now['mon'],$now['mday']+1,$now['year']); + + switch ($filter) + { + case 'upcoming': return " AND info_startdate >= '$tomorrow'"; + case 'today': return " AND info_startdate < '$tomorrow'"; + case 'overdue': return " AND (info_enddate != 0 AND info_enddate < '$tomorrow')"; + } + return ''; + } + function init() { global $phpgw_info; @@ -236,11 +270,10 @@ { $ordermethod = 'order by info_datecreated desc'; // newest first } - if (!$filter) - { - $filter = 'none'; - } $filtermethod = $this->aclFilter($filter); + $filtermethod .= $this->statusFilter($filter); + $filtermethod .= $this->dateFilter($filter); + // echo "

filtermethod='$filtermethod'

"; if ($cat_id) { diff --git a/infolog/inc/class.uiinfolog.inc.php b/infolog/inc/class.uiinfolog.inc.php index d99f6819e7..b96152c737 100644 --- a/infolog/inc/class.uiinfolog.inc.php +++ b/infolog/inc/class.uiinfolog.inc.php @@ -59,6 +59,18 @@ 'offer' => 'offer.gif', 'offer_alt' => 'offer' ) ); + $this->filters = array( + 'none' => lang('no Filter'), + 'done' => lang('done'), + 'own' => lang('own'), + 'own+open+today' => lang('own open'), + 'own+open+overdue'=> lang('own overdue'), + 'own+upcoming' => lang('own upcoming'), + 'open+today' => lang('open'), + 'open+overdue' => lang('overdue'), + 'upcoming' => lang('upcoming'), + ); + $this->html = CreateObject('infolog.html'); $this->template = CreateObject('phpgwapi.Template', $phpgw->common->get_tpl_dir('infolog')); @@ -274,6 +286,11 @@ if ($cat_filter) $cat_id = $cat_filter; + if (!$filter) + { + $filter = $phpgw_info['user']['preferences']['infolog']['defaultFilter']; + } + $hidden_vars = array( 'sort' => $sort,'order' => $order,'query' => $query, 'start' => $start,'filter' => $filter,'cat_id' => $cat_id @@ -304,9 +321,13 @@ $this->bo->addr2name($addr)); break; default: - $t->set_var(lang_info_action,lang('Info Log')); + if ($filter && $filter != 'none') + { + $filter_name = ': '.$this->filters[ $filter ]; + } + $t->set_var(lang_info_action,lang('Info Log').$filter_name); break; - } + } $t->set_var($this->setStyleSheet( )); if (!$for_include) @@ -344,8 +365,6 @@ $t->set_var(h_lang_action,lang('Action')); // -------------- end header declaration ----------------- - if (!$filter) $filter = 'none'; - $ids = $this->bo->readIdArray($order,$sort,$filter,$cat_id,$query, $action,$addr_id,$proj_id,$info_id, $ordermethod,$start,$total); @@ -388,7 +407,7 @@ $t->set_block('info_list_t','cat_selection','cat_selectionhandle'); if (!$for_include || $total > $maxmatchs || - $query || $filter != 'none' || $cat_id) + $query || $cat_id) { $t->parse('cat_selectionhandle','cat_selection',True); @@ -403,8 +422,13 @@ { $q_string .= "&cat_id=$cat_id"; } + while (list($f,$lang) = each ($this->filters)) + { + $filters[] = array( $f,$lang ); + } $next_matchs = $this->nextmatchs->show_tpl('/index.php',$start, - $total,'&'.$q_string,'95%',$phpgw_info['theme']['th_bg']); + $total,'&'.$q_string,'95%',$phpgw_info['theme']['th_bg'], + 0,$filters); $t->set_var('next_matchs',$next_matchs); @@ -849,9 +873,14 @@ $prefs = array( 'homeShowEvents' => 'Show open Events: Tasks/Calls/Notes on main screen', + 'defaultFilter' => 'Default Filter for InfoLog', 'listNoSubs' => 'List no Subs/Childs', 'longNames' => 'Show full usernames' ); + $allowed_values = array ( + 'defaultFilter' => $this->filters, + ); + $phpgw->preferences->read_repository(); if ($save) @@ -888,8 +917,20 @@ { $t->set_var('bg_nm_color',$this->nextmatchs->alternate_row_color()); $t->set_var('field',lang($lang)); - $t->set_var('data',$html->checkbox($pref, + + if (is_array($allowed_values[$pref])) + { + if (!is_object($sbox)) $sbox = CreateObject('phpgwapi.sbox2'); + + $t->set_var('data',$sbox->getArrayItem($pref, + $phpgw_info['user']['preferences']['infolog'][$pref], + $allowed_values[$pref],1)); + } + else + { + $t->set_var('data',$html->checkbox($pref, $phpgw_info['user']['preferences']['infolog'][$pref])); + } $t->parse('pref_linehandle','pref_line',True); } $t->pfp('out','info_prefs'); diff --git a/infolog/inc/hook_home.inc.php b/infolog/inc/hook_home.inc.php new file mode 100644 index 0000000000..5fd53a1389 --- /dev/null +++ b/infolog/inc/hook_home.inc.php @@ -0,0 +1,29 @@ +translation->add_app('infolog'); + + global $filter; + $filter = 'own+open+today'; + $infolog = CreateObject('infolog.uiinfolog'); + $infolog->get_list(True); + + $phpgw_info['flags']['currentapp'] = $save_app; + } diff --git a/infolog/setup/phpgw_de.lang b/infolog/setup/phpgw_de.lang index bc0db6f1f8..d281f34756 100644 --- a/infolog/setup/phpgw_de.lang +++ b/infolog/setup/phpgw_de.lang @@ -81,3 +81,12 @@ no entries found, try again ... infolog de Kein Eintr Show open Events: Tasks/Calls/Notes on main screen infolog de Nicht erledigte Einträge: Aufgaben/Anrufe/Notizen auf Startseite anzeigen List no Subs/Childs infolog de Teilprojekte/Antwortdokumente nicht anzeigen Show full usernames infolog de Kompletten Benutzernamen anzeigen +no Filter infolog de kein Filter +own infolog de eigene +own open infolog de eigene offen +own overdue infolog de eigene überfällig +own upcoming infolog de eigene zukünftig +open infolog de offen +overdue infolog de überfällig +upcoming infolog de zukünftig +Default Filter for InfoLog infolog de Standard-Filter für InfoLog