From 437440d48f4054e9de634cea05415854cca31f93 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Wed, 11 Jul 2001 23:17:32 +0000 Subject: [PATCH] new 3-tier design --- infolog/delete.php | 60 --- infolog/edit.php | 260 ---------- infolog/inc/class.boinfolog.inc.php | 172 +++++++ infolog/inc/class.html.inc.php | 5 + infolog/inc/class.infolog.inc.php | 376 -------------- infolog/inc/class.soinfolog.inc.php | 172 +++++++ infolog/inc/class.uiinfolog.inc.php | 736 ++++++++++++++++++++++++++++ infolog/index.php | 243 +-------- 8 files changed, 1103 insertions(+), 921 deletions(-) delete mode 100644 infolog/delete.php delete mode 100644 infolog/edit.php create mode 100644 infolog/inc/class.boinfolog.inc.php delete mode 100644 infolog/inc/class.infolog.inc.php create mode 100644 infolog/inc/class.soinfolog.inc.php create mode 100644 infolog/inc/class.uiinfolog.inc.php diff --git a/infolog/delete.php b/infolog/delete.php deleted file mode 100644 index 847cca140c..0000000000 --- a/infolog/delete.php +++ /dev/null @@ -1,60 +0,0 @@ - * - * originaly based on todo written by Joseph Engo * - * -------------------------------------------- * - * This program is free software; you can redistribute it and/or modify it * - * under the terms of the GNU General Public License as published by the * - * Free Software Foundation; either version 2 of the License, or (at your * - * option) any later version. * - \**************************************************************************/ - - /* $Id$ */ - - $phpgw_info['flags'] = array( - 'noheader' => True, - 'nonavbar' => True, - 'nofooter' => True, - 'currentapp' => 'infolog' - ); - - include('../header.inc.php'); - $phpgw->infolog = CreateObject('infolog.infolog'); - $html = $phpgw->infolog->html; - - $hidden_vars = array( 'sort' => $sort,'order' => $order,'query' => $query,'start' => $start, - 'filter' => $filter,'cat_id' => $cat_id ); - if (! $info_id) { - Header('Location: ' . $html->link('/infolog/index.php',$hidden_vars)); - } - - if (! $phpgw->infolog->check_access($info_id,PHPGW_ACL_DELETE)) { - Header('Location: ' . $html->link('/infolog/index.php',$hidden_vars)); - } - if ($confirm) { - $phpgw->infolog->delete($info_id); - - Header('Location: ' . $html->link('/infolog/index.php',$hidden_vars + array( 'cd' => 16 ))); - } else { - $phpgw->common->phpgw_header(); - echo parse_navbar(); - - $t = CreateObject('phpgwapi.Template',PHPGW_APP_TPL); - $t->set_file(array( 'info_delete' => 'delete.tpl' )); - $t->set_var( $phpgw->infolog->setStyleSheet( )); - $t->set_var( $phpgw->infolog->infoHeaders( )); - $t->set_var( $phpgw->infolog->formatInfo( $info_id )); - $t->set_var('lang_info_action',lang('Info Log - Delete')); - - $t->set_var('deleteheader',lang('Are you sure you want to delete this entry')); - $t->set_var('no_button',$html->form_1button('no_button','No - Cancel','','/infolog/index.php',$hidden_vars)); - $t->set_var('yes_button',$html->form_1button('yes_button','Yes - Delete','','/infolog/delete.php', - $hidden_vars + array('info_id' => $info_id,'confirm' => 'True'))); - $t->pfp('out','info_delete'); - - $phpgw->common->phpgw_footer(); - echo parse_navbar_end(); - } -?> \ No newline at end of file diff --git a/infolog/edit.php b/infolog/edit.php deleted file mode 100644 index a35384e866..0000000000 --- a/infolog/edit.php +++ /dev/null @@ -1,260 +0,0 @@ - * - * originaly based on todo written by Joseph Engo * - * -------------------------------------------- * - * This program is free software; you can redistribute it and/or modify it * - * under the terms of the GNU General Public License as published by the * - * Free Software Foundation; either version 2 of the License, or (at your * - * option) any later version. * - \**************************************************************************/ - - /* $Id$ */ - - $phpgw_info['flags'] = array( - 'currentapp' => 'infolog', - 'noheader' => True, - 'nofooter' => True, - 'nonavbar' => True, - 'enable_categories_class' => True - ); - include('../header.inc.php'); - $phpgw->infolog = CreateObject('infolog.infolog'); - $html = $phpgw->infolog->html; - - $hidden_vars = array( 'sort' => $sort,'order' => $order,'query' => $query,'start' => $start,'filter' => $filter, - 'cat_id' => $cat_id ); - - if ((!isset($info_id) || !$info_id) && !$action) { - Header('Location: ' . $html->link('/infolog/index.php',$hidden_vars)); - } - - // check wether to write dates or not - if ($selfortoday) { - $startdate = time(); // startdate is today (checkbox is clicked) - } else { - if ($sday) { - if ($sday && !$smonth) $smonth = date('m',time()); - if ($sday && !$syear) $syear = date('Y',time()); - if (! checkdate($smonth,$sday,$syear)) { - $error[] = lang('You have entered an invalid starting date'); - } else { - $startdate = mktime(12,0,0,$smonth, $sday, $syear); - } - } else { - if (isset($sday)) - $startdate = 0; - } - } - - // Check ending date - if ($dur_days > 0) { - $enddate = mktime(12,0,0,date('m',$startdate), date('d',$startdate)+$dur_days, date('Y',$startdate)); - } else - if ($eday) { - if ($eday && !$emonth) $emonth = date('m',time()); - if ($eday && !$eyear) $eyear = date('Y',time()); - if (!checkdate($emonth,$eday,$eyear)) { - $error[] = lang('You have entered an invalid ending date'); - } else { - $enddate = mktime(12,0,0,$emonth,$eday,$eyear); - } - } else { - if (isset($eday)) - $enddate = 0; - } - - if ($save || $add) { - if (strlen($des) >= 8000) { - $error[] = lang('Description can not exceed 8000 characters in length'); - } - if (!$subject && !$des) { - $error[] = lang('You must enter a subject or a description'); - } - - if ($enddate < $startdate && $enddate && $startdate) { - $error[] = lang('Ending date can not be before start date'); - } - - if ($access) { - $access = 'private'; - } else { - $access = 'public'; - } - - if ($status == 'done') { - $enddate = time(); - } - - if (! is_array($error)) { - $phpgw->infolog->write(array( - 'type' => $type, - 'from' => $from, - 'addr' => $addr, - 'addr_id' => $id_addr, - 'proj_id' => $id_project, - 'subject' => $subject, - 'des' => $des, - 'pri' => $pri, - 'status' => $status, - 'confirm' => $confirm, - 'access' => $access, - 'cat' => $info_cat, - 'startdate' => $startdate, - 'enddate' => $enddate, - 'info_id' => $info_id, - 'id_parent' => $id_parent, - 'responsible' => $responsible - )); - - if (!$query_addr && !$query_project) { - Header('Location: ' . $html->link('/infolog/index.php', $hidden_vars + array( 'cd' => 15 ))); - } - } - } - $phpgw->infolog->read( $info_id ); - if ($info_id && $action == 'sp') { // new SubProject - if (!$phpgw->infolog->check_access($info_id,PHPGW_ACL_ADD)) { - Header('Location: ' . $html->link('/infolog/index.php',$hidden_vars)); - $phpgw->common->phpgw_exit(); - } - $parent = $phpgw->infolog->data; - $phpgw->infolog->data['info_id'] = $info_id = 0; - $phpgw->infolog->owner = $phpgw_info['user']['account_id']; - $phpgw->infolog->data['info_id_parent'] = $parent['info_id']; - if ($parent['info_type'] == 'task' && $parent['info_status'] == 'offer') { - $phpgw->infolog->data['info_type'] = 'confirm'; - $phpgw->infolog->data['info_responsible'] = $parent['info_owner']; // confirmation to parent - } - $phpgw->infolog->data['info_status'] = 'ongoing'; - $phpgw->infolog->data['info_confirm'] = 'not'; - $phpgw->infolog->data['info_subject'] = lang('Re:').' '.$parent['info_subject']; - $phpgw->infolog->data['info_des'] = ''; - } else { - if ($info_id && !$phpgw->infolog->check_access($info_id,PHPGW_ACL_EDIT)) { - Header('Location: ' . $html->link('/infolog/index.php',$hidden_vars)); - $phpgw->common->phpgw_exit(); - } - } - $id_parent = $phpgw->infolog->data['info_id_parent']; - $common_hidden_vars = $html->input_hidden( $hidden_vars + - array('info_id' => $info_id,'action' => $action,'id_parent' => $id_parent )); - - $phpgw->common->phpgw_header(); - echo parse_navbar(); - - $t = CreateObject('phpgwapi.Template',PHPGW_APP_TPL); - $t->set_file(array('info_edit' => 'form.tpl')); - - // ==================================================================== - // create two seperate blocks, addblock will be cut off from template - // editblock contains the buttons and forms for edit - // ==================================================================== - $t->set_block('info_edit', 'add', 'addhandle'); - $t->set_block('info_edit', 'edit', 'edithandle'); - $t->set_block('info_edit', 'subpro', 'subprohandle'); - - if (is_array($error)) { - $t->set_var('error_list',$phpgw->common->error_list($error)); - } - switch ($action) { - case 'sp': - $info_action = 'Info Log - New Subproject'; break; - case 'new': - $info_action = 'Info Log - New'; - if ($info_type && isset($phpgw->infolog->enums['type'][$info_type])) - $phpgw->infolog->data['info_type'] = $info_type; - break; - default: - $info_action = 'Info Log - Edit'; break; - } - $t->set_var('lang_info_action',lang($info_action) . ($query_addr ? ' - '.lang('Search for:')." '$query_addr'" : '')); - $t->set_var($phpgw->infolog->setStyleSheet( )); - $t->set_var('lang_category',lang('Category')); - $t->set_var('lang_none',lang('None')); - if (!isset($info_cat)) $info_cat = $phpgw->infolog->data['info_cat']; - $t->set_var('cat_list',$phpgw->categories->formated_list('select','all',$info_cat,'True')); - - $t->set_var('actionurl',$phpgw->link('/infolog/edit.php')); - $t->set_var('common_hidden_vars',$common_hidden_vars); - - // get an instance of select box class - $sb = CreateObject('phpgwapi.sbox2'); - - $t->set_var('lang_owner',lang('Owner')); - $t->set_var('owner_info',$sb->accountInfo($phpgw->infolog->data['info_owner'])); - - $t->set_var('lang_type',lang('Type')); - if (!isset($type)) $type = $phpgw->infolog->data['info_type']; - $t->set_var('type_list',$sb->getArrayItem('type',$type,$phpgw->infolog->enums['type'])); - - $t->set_var('lang_prfrom', lang('From')); - if (!isset($from)) $from = $phpgw->strip_html($phpgw->infolog->data['info_from']); - $t->set_var('fromval', $from); - - $t->set_var('lang_praddr', lang('Phone/Email')); - if (!isset($addr)) $addr = $phpgw->strip_html($phpgw->infolog->data['info_addr']); - $t->set_var('addrval', $addr); - - if (!isset($id_project)) $id_project = $phpgw->infolog->data['info_proj_id']; - $t->set_var($sb->getProject('project',$id_project,$query_project)); - - if (!isset($id_addr)) $id_addr = $phpgw->infolog->data['info_addr_id']; - $t->set_var($sb->getAddress('addr',$id_addr,$query_addr)); - - $t->set_var('lang_prsubject', lang('Subject')); - if (!isset($subject)) $subject = $phpgw->strip_html($phpgw->infolog->data['info_subject']); - $t->set_var('subjectval', $subject); - - $t->set_var('lang_prdesc', lang('Description')); - if (!isset($des)) $des = $phpgw->strip_html($phpgw->infolog->data['info_des']); - $t->set_var('descval', $des); - - $t->set_var('lang_start_date',lang('Start Date')); - if (!isset($startdate)) $startdate = $phpgw->infolog->data['info_startdate']; - $t->set_var('start_select_date',$sb->getDate('syear','smonth','sday',$startdate)); - - $t->set_var('lang_end_date',lang('End Date')); - if (!isset($enddate)) $enddate = $phpgw->infolog->data['info_enddate']; - $t->set_var('end_select_date',$sb->getDate('eyear','emonth','eday',$enddate)); - - $t->set_var('lang_selfortoday',lang('Today')); - $t->set_var('selfortoday',$html->checkbox('selfortoday',0)); - $t->set_var('lang_dur_days',lang('Duration')); - $t->set_var('days',lang('days')); - - $t->set_var('lang_status',lang('Status')); - if (!isset($status)) $status = $phpgw->infolog->data['info_status']; - $t->set_var('status_list',$sb->getArrayItem('status',$status,$phpgw->infolog->enums['status'])); - - $t->set_var('lang_priority',lang('Priority')); - if (!isset($pri)) $pri = $phpgw->infolog->data['info_pri']; - $t->set_var('priority_list',$sb->getArrayItem('pri',$pri,$phpgw->infolog->enums['priority'])); - - $t->set_var('lang_confirm',lang('Confirm')); - if (!isset($confirm)) $confirm = $phpgw->infolog->data['info_confirm']; - $t->set_var('confirm_list',$sb->getArrayItem('confirm',$confirm,$phpgw->infolog->enums['confirm'])); - - $t->set_var('lang_responsible',lang('Responsible')); - if (!isset($responsible)) $responsible = $phpgw->infolog->data['info_responsible']; - $t->set_var('responsible_list',$sb->getAccount('responsible',$responsible)); - - $t->set_var('lang_access_type',lang('Private')); - if (!isset($access)) $access = $phpgw->infolog->data['info_access'] == 'private'; - $t->set_var('access_list',$html->checkbox('access',$access)); - - $t->set_var('edit_button',$html->submit_button('save','Save')); - - if (!$action && $phpgw->infolog->check_access($info_id,PHPGW_ACL_DELETE)) { - $t->set_var('delete_button',$html->form_1button('delete','Delete',$hidden_vars,'/infolog/delete.php')); - } - $t->set_var('edithandle',''); - $t->set_var('addhandle',''); - $t->set_var('subprohandle',''); - $t->pfp('out','info_edit'); - $t->pfp('edithandle','edit'); - - $phpgw->common->phpgw_footer(); - echo parse_navbar_end(); diff --git a/infolog/inc/class.boinfolog.inc.php b/infolog/inc/class.boinfolog.inc.php new file mode 100644 index 0000000000..020a7860fb --- /dev/null +++ b/infolog/inc/class.boinfolog.inc.php @@ -0,0 +1,172 @@ + * + * originaly based on todo written by Joseph Engo * + * -------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the * + * Free Software Foundation; either version 2 of the License, or (at your * + * option) any later version. * + \**************************************************************************/ + + /* $Id$ */ + + class boinfolog // BO: buiseness objects: internal logic + { + var $public_functions = array + ( + 'init' => True, // in class soinfolog + 'read' => True, + 'write' => True, + 'delete' => True, + 'check_access' => True, + 'aclFilter' => True, + 'readProj' => True, + 'readAddr' => True, + 'accountInfo' => True, // in class boinfolog (this class) + 'addr2name' => True + ); + var $enums; + var $so; + var $data; + var $grants; + + function boinfolog( $info_id = 0) { + global $phpgw; + $this->enums = array( + 'priority' => array ( + 'urgent' => 'urgent','high' => 'high','normal' => 'normal', + 'low' => 'low' ), + 'status' => array( + 'offer' => 'offer','ongoing' => 'ongoing','call' => 'call', + 'will-call' => 'will-call','done' => 'done', + 'billed' => 'billed' ), + 'confirm' => array( + 'not' => 'not','accept' => 'accept','finish' => 'finish', + 'both' => 'both' ), + 'type' => array( + 'task' => 'task','phone' => 'phone','note' => 'note', + 'confirm' => 'confirm','reject' => 'reject','email' => 'email', + 'fax' => 'fax' ) + ); + $this->longnames = 0; // should go into preferences + $this->listChilds = 1; + + $this->so = CreateObject('infolog.soinfolog'); + $this->data = &$this->so->data; + $this->grants = &$this->so->grants; + + $this->read( $info_id); + } + + function accountInfo($id,$account_data=0,$longname=0) { + global $phpgw; + + if (!$id) return ' '; + + if (!is_array($account_data)) { + $accounts = createobject('phpgwapi.accounts',$id); + $accounts->db = $phpgw->db; + $accounts->read_repository(); + $account_data = $accounts->data; + } + if ($longnames) + return $account_data['firstname'].' '.$account_data['lastname']; + + return $account_data['account_lid']; + } + + function addr2name( $addr ) { + global $phpgw; + $name = $addr['n_family']; + if ($addr['n_given']) + $name .= ', '.$addr['n_given']; + else + if ($addr['n_prefix']) + $name .= ', '.$addr['n_prefix']; + if ($addr['org_name']) + $name = $addr['org_name'].': '.$name; + return $phpgw->strip_html($name); + } + + function readProj($proj_id) { + if ($proj_id) { + if (!is_object($this->projects)) { + $this->projects = createobject('projects.projects'); + } + if (list( $proj ) = $this->projects->read_single_project( $proj_id )) + return $proj; + } + return False; + } + + function readAddr($addr_id) { + if ($addr_id) { + if (!is_object($this->contacts)) { + $this->contacts = createobject('phpgwapi.contacts'); + } + if (list( $addr ) = $this->contacts->read_single_entry( $addr_id )) + return $addr; + } + return False; + } + + /* + * check's if user has the requiered rights on entry $info_id + */ + function check_access( $info_id,$required_rights ) { + return $this->so->check_access( $info_id,$required_rights ); + } + + /* + * returns sql to be AND into query to ensure ACL is respected (incl. + * _PRIVATE), $filter: none - list all entry user have rights to see + * private - list only personal entry (incl. those + * he is responsible for + */ + function aclFilter($filter = 'none') { + return $this->so->aclFilter($filter); + } + + function init() { + $this->so->init(); + } + + function read($info_id) { + $this->so->read($info_id); + + if ($this->data['info_subject'] == (substr($this->data['info_des'],0,60).' ...')) { + $this->data['info_subject'] = ''; + } + if ($this->data['info_addr_id'] && $this->data['info_from'] == $this->addr2name( $this->readAddr( $this->data['info_addr_id'] ))) { + $this->data['info_from'] = ''; + } + return $this->data; + } + + function delete($info_id) { + $this->so->delete($info_id); + } + + function write($values) { + global $phpgw_info; + if ($values['responsible'] && $values['status'] == 'offer') { + $values['status'] = 'ongoing'; // have to match if not finished + } + if (!$values['info_id'] && !$values['owner']) { + // echo "write(value[info_id]==0,values[owner]==0) --> owner set to user"; + $values['owner'] = $phpgw_info['user']['account_id']; + } + if (!$values['info_id'] && !$values['datecreated']) + $values['datecreated'] = time(); // set creation time + + if (!$values['subject']) $values['subject'] = substr($values['des'],0,60).' ...'; + + if ($values['addr_id'] && !$values['from']) + $values['from'] = $this->addr2name( $this->readAddr( $values['addr_id'] )); + + $this->so->write($values); + } + } diff --git a/infolog/inc/class.html.inc.php b/infolog/inc/class.html.inc.php index f53eaad4d8..d32a95dff8 100644 --- a/infolog/inc/class.html.inc.php +++ b/infolog/inc/class.html.inc.php @@ -123,7 +123,12 @@ class html if ($opts) $html .= " $opts"; return $html . '>'; } + function a_href( $content,$url,$vars='') { return ''.$content.''; } + + function bold($content) { + return ''.$content.''; + } } diff --git a/infolog/inc/class.infolog.inc.php b/infolog/inc/class.infolog.inc.php deleted file mode 100644 index f14b3cca21..0000000000 --- a/infolog/inc/class.infolog.inc.php +++ /dev/null @@ -1,376 +0,0 @@ - * - * originaly based on todo written by Joseph Engo * - * -------------------------------------------- * - * This program is free software; you can redistribute it and/or modify it * - * under the terms of the GNU General Public License as published by the * - * Free Software Foundation; either version 2 of the License, or (at your * - * option) any later version. * - \**************************************************************************/ - - /* $Id$ */ - - class infolog - { - var $db,$db2; - var $grants; - var $icons; - var $enums; - var $data = array( ); - - function infolog( $info_id = 0) { - global $phpgw; - $this->db = $phpgw->db; - $this->grants = $phpgw->acl->get_grants('infolog'); - $this->enums = array( 'priority' => array( 'urgent' => 'urgent','high' => 'high','normal' => 'normal','low' => 'low' ), - 'status' => array( 'offer' => 'offer','ongoing' => 'ongoing','call' => 'call', - 'will-call' => 'will-call','done' => 'done','billed' => 'billed' ), - 'confirm' => array( 'not' => 'not','accept' => 'accept','finish' => 'finish','both' => 'both' ), - 'type' => array( 'task' => 'task','phone' => 'phone','note' => 'note','confirm' => 'confirm', - 'reject' => 'reject','email' => 'email','fax' => 'fax' )); - - $this->icons = array( 'type' => array( 'task' => 'task.gif', 'task_alt' => 'Task', - 'phone' => 'phone.gif', 'phone_alt' => 'Phonecall', - 'note' => 'note.gif', 'note_alt' => 'Note', - 'confirm' => 'confirm.gif','confirm_alt' => 'Confirmation', - 'reject' => 'reject.gif', 'reject_alt' => 'Reject', - 'email' => 'email.gif', 'email_alt' => 'Email' ), - 'action' => array( 'new' => 'new.gif', 'new_alt' => 'Add Sub', - 'view' => 'view.gif', 'view_alt' => 'View Subs', - 'parent' => 'parent.gif', 'parent_alt' => 'View other Subs', - 'edit' => 'edit.gif', 'edit_alt' => 'Edit', - 'delete' => 'delete.gif', 'delete_alt' => 'Delete' ), - 'status' => array( 'billed' => 'billed.gif', 'billed_alt' => 'billed', - 'done' => 'done.gif', 'done_alt' => 'done', - 'will-call' => 'will-call.gif', 'will-call_alt' => 'will-call', - 'call' => 'call.gif', 'call_alt' => 'call', - 'ongoing' => 'ongoing.gif','ongoing_alt' => 'ongoing', - 'offer' => 'offer.gif', 'offer_alt' => 'offer' )); - - $this->longnames = 0; // should go into preferences - $this->listChilds = 1; - - $this->html = CreateObject('infolog.html'); - - $this->read( $info_id); - } - - function icon($cat,$id,$status='') { - // echo "
icon('$cat','$id','$status')"; - global $phpgw,$DOCUMENT_ROOT; - $icons = &$this->icons[$cat]; - - if (!$status || !($icon = $icons[$id.'_'.$status])) - $icon = $icons[$id]; - if ($icon) { - $fname = $phpgw->common->get_image_dir() . '/' . $icon; - if (!is_readable($fname)) { - $icon = False; // echo "
Can't read '$fname' !!!"; - } else { - $icon = $phpgw->common->get_image_path() . '/' . $icon; - } - } - if (!$status || !($alt = $icons[$id.'_'.$status.'_alt'])) - if (!($alt = $icons[$id.'_alt'])) - $alt = $id; - - return ($icon ? "" : ' : ''); - } - - function setStyleSheet( ) { - global $phpgw; - return array ( 'info_css' => '' ); - } - - function loadStyleSheet( ) { - list( $style ) = $this->setStyleSheet(); echo $style; - } - - function accountInfo($id,$account_data=0,$longname=0) { - global $phpgw; - - if (!$id) return ' '; - - if (!is_array($account_data)) { - $accounts = createobject('phpgwapi.accounts',$id); - $accounts->db = $phpgw->db; - $accounts->read_repository(); - $account_data = $accounts->data; - } - if ($longnames) - return $account_data['firstname'].' '.$account_data['lastname']; - - return $account_data['account_lid']; - } - - function addr2name( $addr ) { - global $phpgw; - $name = $addr['n_family']; - if ($addr['n_given']) - $name .= ', '.$addr['n_given']; - else - if ($addr['n_prefix']) - $name .= ', '.$addr['n_prefix']; - if ($addr['org_name']) - $name = $addr['org_name'].': '.$name; - return $phpgw->strip_html($name); - } - - function readProj($proj_id) { - if ($proj_id) { - if (!is_object($this->projects)) { - $this->projects = createobject('projects.projects'); - } - if (list( $proj ) = $this->projects->read_single_project( $proj_id )) - return $proj; - } - return False; - } - - function readAddr($addr_id) { - if ($addr_id) { - if (!is_object($this->contacts)) { - $this->contacts = createobject('phpgwapi.contacts'); - } - if (list( $addr ) = $this->contacts->read_single_entry( $addr_id )) - return $addr; - } - return False; - } - - function formatInfo($info=0,$p_id=0,$a_id=0) { // $info: info_id or array with one row form info-db - global $phpgw,$phpgw_info; // no Proj.Info if proj_id == p_id / no Addr.Info if addr_id == a_id - - if (!is_array($info) && (!$info || !is_array($info = $this->read($info)))) - $info = $this->data; - - $done = $info['info_status'] == 'done' || $info['info_status'] == 'billed'; - $css_class = $info['info_pri'].($done ? '_done' : ''); - $subject = ""; - - if ($p_id != ($proj_id = $info['info_proj_id']) && $proj = $this->readProj($proj_id)) { - $subject .= ''.$proj['title'].''; - } - if ($a_id != ($addr_id = $info['info_addr_id']) && $addr = $this->readAddr($addr_id)) { - if ($proj) $subject .= '
'; - $addr = $this->addr2name( $addr ); - $subject .= '$addr"; - } - if (($from = $info['info_from']) && (!$addr || !strstr($addr,$from))) { - if ($addr) $subject .= '
'; - $subject .= ''.$from.''; - } - if ($info['info_addr']) { - if ($addr || $from) $subject .= ': '; - $subject .= $info['info_addr']; - } - if ($proj || $addr || $from || $info['info_addr']) { - $subject .= '
'; - } - $subject .= ''; - $subject .= $info['info_subject'] ? $info['info_subject'] : substr($info['info_des'],0,60).' ...'; - $subject .= '
'; - - if (!$info['info_enddate']) { - $enddate = ' '; - } else { - $enddate = $phpgw->common->show_date($info['info_enddate'],$phpgw_info['user']['preferences']['common']['dateformat']); - - if (!$done && $info['info_enddate'] < time()+(60*60)*$phpgw_info['user']['preferences']['common']['tz_offset']) - $enddate = "$enddate"; - } - if (!($responsible = $info['info_responsible']) && $info['info_status'] == 'offer') { - $responsible = $this->icon('status','offer'); - } else { - $responsible = $this->accountInfo($responsible); - } - $owner = $this->accountInfo($info['info_owner']); - if ($info['info_access'] == 'private') - $owner = "$owner"; - - return array( - 'type' => $this->icon('type',$info['info_type']), - 'status' => $this->icon('status',$info['info_status']), - 'pri' => lang($info['info_pri']), - 'subject' => $subject, - 'des' => $info['info_des'], - 'startdate' => $phpgw->common->show_date($info['info_startdate'],$phpgw_info['user']['preferences']['common']['dateformat']), - 'enddate' => $enddate, - 'owner' => $owner, - 'datecreated' => $phpgw->common->show_date($info['info_datecreated'],$phpgw_info['user']['preferences']['common']['dateformat']), - 'responsible' => $responsible ); - } - - function infoHeaders( $do_sort_header=0,$sort=0,$order=0) { - global $phpgw,$phpgw_info; - - $headers['th_bg'] = $phpgw_info['theme']['th_bg']; - - $fields = array( 'type','status','urgency','subject','startdate','enddate','owner','datecreated','responsible' ); - for ( ;$f = $h = current($fields); $f = next($fields)) { - $lang = lang(ucfirst( $f )); - if ($do_sort_header) { - $headers['sort_'.$f] = $phpgw->nextmatchs->show_sort_order($sort,'info_'.$f,$order,'/infolog/index.php',$lang); - } else { - $headers['lang_'.$f] = $lang; - } - } - return $headers; - } - - function debug( $str ) { - /* $stdout = fopen('/tmp/log','a'); - fwrite( $stdout,"\r\n".$str ); - fclose( $stdout ); */ - } - - function check_access( $info_id,$required_rights ) { - global $phpgw_info; - if ($info_id != $this->data['info_id']) { // already loaded? - $private_info = $this; // dont change our own internal data, dont use new as it changes $phpgw->db - $info = $private_info->read($info_id); - } else { - $info = $this->data; - } - if (!$info || !$info_id) - return False; - - $owner = $info['info_owner']; - $user = $phpgw_info['user']['account_id']; - $access_ok = $owner == $user || // user has all rights - !!($this->grants[$owner] & $required_rights) && // ACL only on public entrys || $owner granted _PRIVATE - ($info['info_access'] == 'public' || !!($this->grants[$owner] & PHPGW_ACL_PRIVATE)); - - // $this->debug("check_access(info_id=$info_id (owner=$owner, user=$user),required_rights=$required_rights): access".($access_ok?"Ok":"Denied")); - - return $access_ok; - } - - function aclFilter($filter = 'none') { // sql to be AND into a query to ensure ACL is respected (incl. _PRIVATE) - global $phpgw_info; // filter: none - list all entrys user have rights to see - // private - list only his personal entrys (incl. those he is responsible for !!!) - if (isset($this->acl_filter[$filter])) - return $this->acl_filter[$filter]; // used cached filter if found - - if (is_array($this->grants)) { - while (list($user,$grant) = each($this->grants)) { - // echo "

grants: user=$user, grant=$grant

"; - if ($grant & (PHPGW_ACL_READ|PHPGW_ACL_EDIT)) - $public_user_list[] = $user; - if ($grant & PHPGW_ACL_PRIVATE) - $private_user_list[] = $user; - } - if (count($private_user_list)) { - $has_private_access = 'info_owner IN ('.implode(',',$private_user_list).')'; - } - } - $user = $phpgw_info['user']['account_id']; - - $filtermethod = " (info_owner=$user"; // user has all rights - - if ($filter == 'private') { // private means own entrys plus the one user is responsible for (and has rights to see) - $filtermethod .= " OR info_responsible=$user AND (info_access='public'".($has_private_access?" OR $has_private_access":'').')'; - } else { // none --> all entrys user has rights to see - if ($has_private_access) { - $filtermethod .= " OR $has_private_access"; - } - if (count($public_user_list)) { - $filtermethod .= " OR (info_access='public' AND info_owner IN(" . implode(',',$public_user_list) . '))'; - } - } - $filtermethod .= ') '; - - // echo "

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

"; - - return $this->acl_filter[$filter] = $filtermethod; // cache the filter - } - - function read($info_id) { // did _not_ ensure ACL, has to be done by the calling code - if ($info_id <= 0 || $info_id != $this->data['info_id'] && - (!$this->db->query("select * FROM phpgw_infolog where info_id='$info_id'") || !$this->db->next_record())) - { - $this->init( ); - return False; - } - if ($info_id != $this->data['info_id']) { // data yet read in - $this->data = $this->db->Record; - - if ($this->data['info_subject'] == (substr($this->data['info_des'],0,60).' ...')) { - $this->data['info_subject'] = ''; - } - if ($this->data['info_addr_id'] && $this->data['info_from'] == $this->addr2name( $this->readAddr( $this->data['info_addr_id'] ))) { - $this->data['info_from'] = ''; - } - } - return $this->data; - } - - function init() { - global $phpgw_info; - - $this->data = array( 'info_owner' => $phpgw_info['user']['account_id'], - 'info_pri' => 'normal' ); - } - - function delete($info_id) { // did _not_ ensure ACL, has to be done by the calling code - global $phpgw_info; - $this->db->query("delete FROM phpgw_infolog where info_id='$info_id' or info_id_parent='" - . "$info_id' AND ((info_access='public' and info_owner != '" - . $phpgw_info['user']['account_id'] . "') or (info_owner='" - . $phpgw_info['user']['account_id'] . "'))" ,__LINE__,__FILE__); - - if ($this->data['info_id'] == $info_id) - $this->init( ); - } - - function write($values) { // did _not_ ensure ACL, has to be done by the calling code - global $phpgw_info; - if ($values['responsible'] && $values['status'] == 'offer') { - $values['status'] = 'ongoing'; // have to match if not finished - } - if (!$values['info_id'] && !$values['owner']) { - // $this->debug( "write(value[info_id]==0,values[owner]==0) --> owner set to user" ); - $values['owner'] = $phpgw_info['user']['account_id']; // user gets owner - } - if (!$values['info_id'] && !$values['datecreated']) - $values['datecreated'] = time(); // set creation time - - if (!$values['subject']) $values['subject'] = substr($values['des'],0,60).' ...'; - - if ($values['addr_id'] && !$values['from']) - $values['from'] = $this->addr2name( $this->readAddr( $values['addr_id'] )); - - while (list($key,$val) = each($values)) { - $this->data['info_'.$key] = $val; // update internal data - switch ($key) { - case 'info_id': - break; // later in where clause - case 'des': case 'subject': case 'from': case 'addr': - $val = addslashes($val); - default: - if ($query) $query .= ','; - $query .= "info_$key='$val'"; - } - } - if ($values['info_id']) { - $query = 'update phpgw_infolog set '.$query.' where info_id=\'' . $values['info_id'] .'\''; - } else { - $query = 'insert INTO phpgw_infolog set '.$query; - /* - * need to set $this->data['info_id'] with assigned autoincrement id - */ - } - - //echo '
edit(): query: '.$query; - - $this->db->query($query,__LINE__,__FILE__); - } - } diff --git a/infolog/inc/class.soinfolog.inc.php b/infolog/inc/class.soinfolog.inc.php new file mode 100644 index 0000000000..2ff9e4b726 --- /dev/null +++ b/infolog/inc/class.soinfolog.inc.php @@ -0,0 +1,172 @@ + * + * originaly based on todo written by Joseph Engo * + * -------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the * + * Free Software Foundation; either version 2 of the License, or (at your * + * option) any later version. * + \**************************************************************************/ + + /* $Id$ */ + + class soinfolog // DB-Layer + { + var $db,$db2; + var $grants; + var $data = array( ); + + function soinfolog( $info_id = 0) { + global $phpgw; + $this->db = $phpgw->db; + $this->grants = $phpgw->acl->get_grants('infolog'); + + $this->read( $info_id); + } + + + function readProj($proj_id) { + if ($proj_id) { + if (!is_object($this->projects)) { + $this->projects = createobject('projects.projects'); + } + if (list( $proj ) = $this->projects->read_single_project( $proj_id )) + return $proj; + } + return False; + } + + function readAddr($addr_id) { + if ($addr_id) { + if (!is_object($this->contacts)) { + $this->contacts = createobject('phpgwapi.contacts'); + } + if (list( $addr ) = $this->contacts->read_single_entry( $addr_id )) + return $addr; + } + return False; + } + + + function check_access( $info_id,$required_rights ) { + global $phpgw_info; + if ($info_id != $this->data['info_id']) { // already loaded? + $private_info = $this; // dont change our own internal data, dont use new as it changes $phpgw->db + $info = $private_info->read($info_id); + } else { + $info = $this->data; + } + if (!$info || !$info_id) + return False; + + $owner = $info['info_owner']; + $user = $phpgw_info['user']['account_id']; + $access_ok = $owner == $user || // user has all rights + !!($this->grants[$owner] & $required_rights) && // ACL only on public entrys || $owner granted _PRIVATE + ($info['info_access'] == 'public' || !!($this->grants[$owner] & PHPGW_ACL_PRIVATE)); + + // echo "check_access(info_id=$info_id (owner=$owner, user=$user),required_rights=$required_rights): access".($access_ok?"Ok":"Denied"); + + return $access_ok; + } + + function aclFilter($filter = 'none') { // sql to be AND into a query to ensure ACL is respected (incl. _PRIVATE) + global $phpgw_info; // filter: none - list all entrys user have rights to see + // private - list only his personal entrys (incl. those he is responsible for !!!) + if (isset($this->acl_filter[$filter])) + return $this->acl_filter[$filter]; // used cached filter if found + + if (is_array($this->grants)) { + while (list($user,$grant) = each($this->grants)) { + // echo "

grants: user=$user, grant=$grant

"; + if ($grant & (PHPGW_ACL_READ|PHPGW_ACL_EDIT)) + $public_user_list[] = $user; + if ($grant & PHPGW_ACL_PRIVATE) + $private_user_list[] = $user; + } + if (count($private_user_list)) { + $has_private_access = 'info_owner IN ('.implode(',',$private_user_list).')'; + } + } + $user = $phpgw_info['user']['account_id']; + + $filtermethod = " (info_owner=$user"; // user has all rights + + if ($filter == 'private') { // private means own entrys plus the one user is responsible for (and has rights to see) + $filtermethod .= " OR info_responsible=$user AND (info_access='public'".($has_private_access?" OR $has_private_access":'').')'; + } else { // none --> all entrys user has rights to see + if ($has_private_access) { + $filtermethod .= " OR $has_private_access"; + } + if (count($public_user_list)) { + $filtermethod .= " OR (info_access='public' AND info_owner IN(" . implode(',',$public_user_list) . '))'; + } + } + $filtermethod .= ') '; + + // echo "

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

"; + + return $this->acl_filter[$filter] = $filtermethod; // cache the filter + } + + function init() { + global $phpgw_info; + + $this->data = array( 'info_owner' => $phpgw_info['user']['account_id'], + 'info_pri' => 'normal' ); + } + + function read($info_id) { // did _not_ ensure ACL, has to be done by the calling code + if ($info_id <= 0 || $info_id != $this->data['info_id'] && + (!$this->db->query("select * FROM phpgw_infolog where info_id='$info_id'") || !$this->db->next_record())) + { + $this->init( ); + return False; + } + if ($info_id != $this->data['info_id']) { // data yet read in + $this->data = $this->db->Record; + } + return $this->data; + } + + function delete($info_id) { // did _not_ ensure ACL, has to be done by the calling code + global $phpgw_info; + $this->db->query("delete FROM phpgw_infolog where info_id='$info_id' or info_id_parent='" + . "$info_id' AND ((info_access='public' and info_owner != '" + . $phpgw_info['user']['account_id'] . "') or (info_owner='" + . $phpgw_info['user']['account_id'] . "'))" ,__LINE__,__FILE__); + + if ($this->data['info_id'] == $info_id) + $this->init( ); + } + + function write($values) { // did _not_ ensure ACL, has to be done by the calling code + while (list($key,$val) = each($values)) { + $this->data['info_'.$key] = $val; // update internal data + switch ($key) { + case 'info_id': + break; // later in where clause + case 'des': case 'subject': case 'from': case 'addr': + $val = addslashes($val); + default: + if ($query) $query .= ','; + $query .= "info_$key='$val'"; + } + } + if ($values['info_id']) { + $query = 'update phpgw_infolog set '.$query.' where info_id=\'' . $values['info_id'] .'\''; + } else { + $query = 'insert INTO phpgw_infolog set '.$query; + /* + * need to set $this->data['info_id'] with assigned autoincrement id + */ + } + + //echo '
edit(): query: '.$query; + + $this->db->query($query,__LINE__,__FILE__); + } + } diff --git a/infolog/inc/class.uiinfolog.inc.php b/infolog/inc/class.uiinfolog.inc.php new file mode 100644 index 0000000000..45948c354a --- /dev/null +++ b/infolog/inc/class.uiinfolog.inc.php @@ -0,0 +1,736 @@ + * + * originaly based on todo written by Joseph Engo * + * -------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the * + * Free Software Foundation; either version 2 of the License, or (at your * + * option) any later version. * + \**************************************************************************/ + + /* $Id$ */ + + class uiinfolog // UI - User Interface - HTML + { + var $public_functions = array + ( + 'get_list' => True, + 'view' => True, + 'add' => True, + 'edit' => True, + 'delete' => True, + ); + var $icons; + var $data; + var $enums; + + function uiinfolog( ) { + global $phpgw; + $this->bo = CreateObject('infolog.boinfolog'); + $this->data = &$this->bo->data; + $this->enums = &$this->bo->enums; + + $this->icons = array( + 'type' => array( + 'task' => 'task.gif', 'task_alt' => 'Task', + 'phone' => 'phone.gif', 'phone_alt' => 'Phonecall', + 'note' => 'note.gif', 'note_alt' => 'Note', + 'confirm' => 'confirm.gif','confirm_alt' => 'Confirmation', + 'reject' => 'reject.gif', 'reject_alt' => 'Reject', + 'email' => 'email.gif', 'email_alt' => 'Email' ), + 'action' => array( + 'new' => 'new.gif', 'new_alt' => 'Add Sub', + 'view' => 'view.gif', 'view_alt' => 'View Subs', + 'parent' => 'parent.gif', 'parent_alt' => 'View other Subs', + 'edit' => 'edit.gif', 'edit_alt' => 'Edit', + 'delete' => 'delete.gif', 'delete_alt' => 'Delete' ), + 'status' => array( + 'billed' => 'billed.gif', 'billed_alt' => 'billed', + 'done' => 'done.gif', 'done_alt' => 'done', + 'will-call' => 'will-call.gif', 'will-call_alt' => 'will-call', + 'call' => 'call.gif', 'call_alt' => 'call', + 'ongoing' => 'ongoing.gif','ongoing_alt' => 'ongoing', + 'offer' => 'offer.gif', 'offer_alt' => 'offer' ) + ); + + $this->html = CreateObject('infolog.html'); + $this->template = CreateObject('phpgwapi.Template',PHPGW_APP_TPL); + $this->categories = CreateObject('phpgwapi.categories'); + $this->nextmatchs = CreateObject('phpgwapi.nextmatchs'); + } + + function menuaction($action = 'get_list') { + return array( 'menuaction' => "infolog.uiinfolog.$action" ); + } + + function icon($cat,$id,$status='') { + // echo "
icon('$cat','$id','$status')"; + global $phpgw,$DOCUMENT_ROOT; + $icons = &$this->icons[$cat]; + + if (!$status || !($icon = $icons[$id.'_'.$status])) + $icon = $icons[$id]; + if ($icon) { + $fname = $phpgw->common->get_image_dir() . '/' . $icon; + if (!is_readable($fname)) { + $icon = False; // echo "
Can't read '$fname' !!!"; + } else { + $icon = $phpgw->common->get_image_path() . '/' . $icon; + } + } + if (!$status || !($alt = $icons[$id.'_'.$status.'_alt'])) + if (!($alt = $icons[$id.'_alt'])) + $alt = $id; + + return ($icon ? "" : ' : ''); + } + + function setStyleSheet( ) { + global $phpgw; + return array ( + 'info_css' => '' ); + } + + function loadStyleSheet( ) { + list( $style ) = $this->setStyleSheet(); echo $style; + } + + /* + * $info: info_id or array with one row form info-db + * no Proj.Info if proj_id == p_id / no Addr.Info if addr_id == a_id + */ + function formatInfo($info=0,$p_id=0,$a_id=0) { + global $phpgw,$phpgw_info; + + if (!is_array($info) && (!$info || + !is_array($info=$this->bo->read($info)))) + $info = $this->data; + + $done = $info['info_status'] == 'done' || + $info['info_status'] == 'billed'; + + $css_class = $info['info_pri'].($done ? '_done' : ''); + $subject = ""; + + if ($p_id != ($proj_id = $info['info_proj_id']) && + $proj = $this->bo->readProj($proj_id)) + { + $subject .= $this->html->bold($this->html->a_href($proj['title'], + '/index.php',$this->menuaction()+ + array( 'filter' => $filter,'action' => 'proj', + 'proj_id' => $proj_id ))); + } + if ($a_id != ($addr_id = $info['info_addr_id']) && + $addr = $this->bo->readAddr($addr_id)) + { + if ($proj) $subject .= '
'; + $addr = $this->bo->addr2name( $addr ); + $subject .= $this->html->bold($this->html->a_href($addr, + '/index.php',$this->menuaction(), + array( 'filter' => $filter,'action' => 'addr', + 'addr_id' => $addr_id ))); + } + if (($from = $info['info_from']) && (!$addr || !strstr($addr,$from))) { + if ($addr) $subject .= '
'; + $subject .= ''.$from.''; + } + if ($info['info_addr']) { + if ($addr || $from) $subject .= ': '; + $subject .= $info['info_addr']; + } + if ($proj || $addr || $from || $info['info_addr']) { + $subject .= '
'; + } + $subject .= ''; + $subject .= $info['info_subject'] ? $info['info_subject'] : + substr($info['info_des'],0,60).' ...'; + $subject .= '
'; + + if (!$info['info_enddate']) { + $enddate = ' '; + } else { + $enddate = $phpgw->common->show_date($info['info_enddate'],$phpgw_info['user']['preferences']['common']['dateformat']); + + if (!$done && $info['info_enddate'] < time()+(60*60)*$phpgw_info['user']['preferences']['common']['tz_offset']) + $enddate = "$enddate"; + } + if (!($responsible = $info['info_responsible']) && + $info['info_status'] == 'offer') + { + $responsible = $this->icon('status','offer'); + } else { + $responsible = $this->bo->accountInfo($responsible); + } + $owner = $this->bo->accountInfo($info['info_owner']); + if ($info['info_access'] == 'private') + $owner = "$owner"; + + return array( + 'type' => $this->icon('type',$info['info_type']), + 'status' => $this->icon('status',$info['info_status']), + 'pri' => lang($info['info_pri']), + 'subject' => $subject, + 'des' => $info['info_des'], + 'startdate' => $phpgw->common->show_date($info['info_startdate'],$phpgw_info['user']['preferences']['common']['dateformat']), + 'enddate' => $enddate, + 'owner' => $owner, + 'datecreated' => $phpgw->common->show_date($info['info_datecreated'],$phpgw_info['user']['preferences']['common']['dateformat']), + 'responsible' => $responsible ); + } + + function infoHeaders( $do_sort_header=0,$sort=0,$order=0) { + global $phpgw,$phpgw_info; + + $headers['th_bg'] = $phpgw_info['theme']['th_bg']; + + $fields = array( 'type','status','urgency','subject','startdate', + 'enddate','owner','datecreated','responsible' ); + for ( ;$f = $h = current($fields); $f = next($fields)) { + $lang = lang(ucfirst( $f )); + if ($do_sort_header) { + $headers['sort_'.$f] = $this->nextmatchs->show_sort_order($sort,'info_'.$f,$order,'/index.php',$lang,'&'.$this->menuaction()); + } else { + $headers['lang_'.$f] = $lang; + } + } + return $headers; + } + + function get_list( ) { + global $phpgw,$phpgw_info; + global $cat_filter,$cat_id,$sort,$order,$query,$start,$filter; + global $action,$addr_id,$proj_id,$info_id; + + $phpgw->common->phpgw_header(); + echo parse_navbar(); + + $db = $phpgw->db; + $db2 = $phpgw->db; + $t = &$this->template; $html = &$this->html; + + $t->set_file(array( 'info_list_t' => 'list.tpl' )); + $t->set_block('info_list_t','info_list','list'); + + if ($cat_filter) $cat_id = $cat_filter; + + $hidden_vars = array( + 'sort' => $sort,'order' => $order,'query' => $query, + 'start' => $start,'filter' => $filter,'cat_id' => $cat_id + ); + $common_hidden_vars = $html->input_hidden($hidden_vars); + + if ($action) + $common_hidden_vars .= $html->input_hidden('action',$action); + + switch ($action) { + case 'sp': // Sub-List + $common_hidden_vars .= $html->input_hidden('info_id',$info_id); + $t->set_var(lang_info_action,lang('Info Log - Subprojects from')); + break; + case 'proj': + $common_hidden_vars .= $html->input_hidden('proj_id',$proj_id); + $proj = $this->bo->readProj($proj_id); + $t->set_var(lang_info_action,lang('Info Log').' - '. + $proj['title']); + break; + case 'addr': + $common_hidden_vars .= $html->input_hidden('addr_id',$addr_id); + $addr = $this->bo->readAddr($addr_id); + $t->set_var(lang_info_action,lang('Info Log').' - '. + $this->bo->addr2name($addr)); + break; + default: + $t->set_var(lang_info_action,lang('Info Log')); + break; + } + $t->set_var($this->setStyleSheet( )); + $t->set_var(actionurl,$phpgw->link('/index.php', + 'menuaction=infolog.uiinfolog.edit&action=new')); + $t->set_var('cat_form',$phpgw->link('/index.php', + 'menuaction=infolog.uiinfolog.get_list')); + $t->set_var('lang_category',lang('Category')); + $t->set_var('lang_all',lang('All')); + $t->set_var('lang_select',lang('Select')); + $t->set_var('categories',$this->categories->formated_list('select','all',$cat_id,'True')); + $t->set_var(common_hidden_vars,$common_hidden_vars); + + // =========================================== + // list header variable template-declarations + // =========================================== + $t->set_var( $this->infoHeaders( 1,$sort,$order )); + $t->set_var(h_lang_sub,lang('Sub')); + $t->set_var(h_lang_action,lang('Action')); + // -------------- end header declaration ----------------- + + if (! $start) { + $start = 0; + } + + if ($order) { + $ordermethod = 'order by ' . $order . ' ' . $sort; + } else { + $ordermethod = 'order by info_datecreated desc'; // newest first + } + if (!$filter) { + $filter = 'none'; + } + $filtermethod = $this->bo->aclFilter($filter); + + if ($cat_id) { + $filtermethod .= " AND info_cat='$cat_id' "; + } + if ($action == 'addr') $filtermethod .= " AND info_addr_id=$addr_id "; + if ($action == 'proj') $filtermethod .= " AND info_proj_id=$proj_id "; + // we search in _from, _subject and _des for $query + if ($query) + $sql_query = "AND (info_from like '%$query%' OR info_subject like '%$query%' OR info_des like '%$query%') "; + + $pid = 'AND info_id_parent='.($action == 'sp' ? $info_id : 0); + if ($this->bo->listChilds && $action != 'sp') + $pid = ''; + + $db->query("SELECT COUNT(*) FROM phpgw_infolog WHERE $filtermethod $pid $sql_query",__LINE__,__FILE__); + $db->next_record(); + $total = $db->f(0); + + if ($total <= $start) $start = 0; + + $maxmatchs = $phpgw_info['user']['preferences']['common']['maxmatchs']; + if ($total > $maxmatchs) { + $to = $start + $maxmatchs; + if ($to > $total) $to = $total; + $total_matchs = lang('showing x - x of x',($start + 1),$to,$total); + } else { + $total_matchs = lang('showing x',$total); + } + $t->set_var('total_matchs',$total_matchs); + + // ========================================== + // project description if subprojectlist + // ========================================== + + + $t->set_block('info_list_t','projdetails','projdetailshandle'); + + switch ($action) { + case 'sp': // details of parent + $t->set_var( $this->infoHeaders( )); + $t->set_var( $this->formatInfo( $info_id )); + $t->parse('projdetailshandle','projdetails',True); + break; + case 'addr': + break; + case 'proj': + break; + } + + // =========================================== + // nextmatch variable template-declarations + // =========================================== + $next_matchs = $this->nextmatchs->show_tpl('/index.php',$start,$total, + "menuaction=infolog.uiinfolog.get_list&order=$order&filter=$filter&sort=$sort&query=$query&action=$action&info_id=$info_id&cat_id=$cat_id", + '95%',$phpgw_info['theme']['th_bg']); + $t->set_var('next_matchs',$next_matchs); + if ($total > $maxmatchs) + $t->set_var('next_matchs_end',$next_matchs); + + // ---------- end nextmatch template -------------------- + + $db->limit_query($q="SELECT * FROM phpgw_infolog WHERE $filtermethod $pid $sql_query $ordermethod",$start,__LINE__,__FILE__); + + while ($db->next_record()) { + // ======================================== + // check if actual project has subprojects + // ======================================== + $db2->query("select count(*) as cnt FROM phpgw_infolog where info_id_parent=" .$db->f('info_id'),__LINE__,__FILE__); + $db2->next_record(); + if ($db2->f('cnt') > 0) { + $subproact = 1; + } else { + $subproact = 0; + } + // ----------------------------------------- + + $this->nextmatchs->template_alternate_row_color(&$t); + + $t->set_var( $this->formatInfo( $db->Record,$proj_id,$addr_id )); + + if ($this->bo->check_access($db->f('info_id'),PHPGW_ACL_EDIT)) { + $t->set_var('edit',$html->a_href( + $this->icon('action','edit'),'/index.php', + $hidden_vars+array('info_id' => $db->f('info_id'))+ + $this->menuaction('edit'))); + } else { + $t->set_var('edit',''); + } + + if ($this->bo->check_access($db->f('info_id'),PHPGW_ACL_DELETE)) { + $t->set_var('delete',$html->a_href( + $this->icon('action','delete'),'/index.php', + $hidden_vars+array('info_id' => $db->f('info_id'))+ + $this->menuaction('delete'))); + } else { + $t->set_var('delete',''); + } + $t->set_var('subadd', ''); // defaults no icons + $t->set_var('viewsub', ''); + $t->set_var('viewparent', ''); + + if ($subproact > 0) { // if subprojects exist, display VIEW SUB icon + $t->set_var('viewsub', $html->a_href( + $this->icon('action','view'),'/index.php', + $this->menuaction()+array( 'info_id' => $db->f('info_id'), + 'filter' => $filter, 'action' => 'sp'))); + } else { // else display ADD SUB-Icon + if ($this->bo->check_access($db->f('info_id'),PHPGW_ACL_ADD)) { + $t->set_var('subadd',$html->a_href( + $this->icon('action','new'),'/index.php', + $this->menuaction('edit')+ + array('info_id' => $db->f('info_id'),'filter' => $filter, + 'action' => 'sp'))); + } + } // if parent --> display VIEW SUBS of Parent + if ($db->f('info_id_parent') && $action != 'sp') { + $t->set_var('viewparent',$html->a_href( + $this->icon('action','parent'),'/index.php', + $this->menuaction()+ + array('info_id' => $db->f('info_id_parent'), + 'filter' => $filter,'action' => 'sp'))); + } + + $t->parse('list','info_list',True); + // -------------- end record declaration ------------------------ + } + + // ========================================================= + // back2project list href declaration for subproject list + // ========================================================= + + if ($action) { + $t->set_var('lang_back2projects', '
'. + $html->a_href(lang('Back to Projectlist'),'/index.php', + $this->menuaction()+array('filter' => $filter))); + } + + // ============================================ + // template declaration for Add Form + // ============================================ + + $t->set_var(lang_add,lang('Add')); + $t->pfp('out','info_list_t',true); + + // -------------- end Add form declaration ------------------------ + + $phpgw->common->phpgw_footer(); + } + + function edit( ) { + global $phpgw,$phpgw_info; + global $cat_id,$sort,$order,$query,$start,$filter; + global $action,$info_id,$save,$add,$query_addr,$query_project; + // formular fields + global $selfortoday,$sday,$smonth,$syear; + global $dur_days,$eday,$emonth,$eyear; + global $type,$from,$addr,$id_addr,$id_project,$subject,$des,$access; + global $pri,$status,$confirm,$info_cat,$id_parent,$responsible; + + //$phpgw->common->phpgw_header(); + // echo parse_navbar(); + + $t = &$this->template; $html = &$this->html; + + $hidden_vars = array('sort' => $sort,'order' => $order, + 'query' => $query,'start' => $start, + 'filter' => $filter,'cat_id' => $cat_id ); + + if ((!isset($info_id) || !$info_id) && !$action) { + Header('Location: ' . + $html->link('/index.php',$hidden_vars+$this->menuaction())); + } + + // check wether to write dates or not + if ($selfortoday) { + $startdate = time(); // startdate is today (checkbox is clicked) + } else { + if ($sday) { + if ($sday && !$smonth) $smonth = date('m',time()); + if ($sday && !$syear) $syear = date('Y',time()); + if (! checkdate($smonth,$sday,$syear)) { + $error[] = lang('You have entered an invalid starting date'); + } else { + $startdate = mktime(12,0,0,$smonth, $sday, $syear); + } + } else { + if (isset($sday)) + $startdate = 0; + } + } + + // Check ending date + if ($dur_days > 0) { + $enddate = mktime(12,0,0,date('m',$startdate), date('d',$startdate)+$dur_days, date('Y',$startdate)); + } else + if ($eday) { + if ($eday && !$emonth) $emonth = date('m',time()); + if ($eday && !$eyear) $eyear = date('Y',time()); + if (!checkdate($emonth,$eday,$eyear)) { + $error[] = lang('You have entered an invalid ending date'); + } else { + $enddate = mktime(12,0,0,$emonth,$eday,$eyear); + } + } else { + if (isset($eday)) + $enddate = 0; + } + + if ($save || $add) { + if (strlen($des) >= 8000) { + $error[] = lang('Description can not exceed 8000 characters in length'); + } + if (!$subject && !$des) { + $error[] = lang('You must enter a subject or a description'); + } + + if ($enddate < $startdate && $enddate && $startdate) { + $error[] = lang('Ending date can not be before start date'); + } + + if ($access) { + $access = 'private'; + } else { + $access = 'public'; + } + + if ($status == 'done') { + $enddate = time(); + } + + if (! is_array($error)) { + $this->bo->write(array( + 'type' => $type, + 'from' => $from, + 'addr' => $addr, + 'addr_id' => $id_addr, + 'proj_id' => $id_project, + 'subject' => $subject, + 'des' => $des, + 'pri' => $pri, + 'status' => $status, + 'confirm' => $confirm, + 'access' => $access, + 'cat' => $info_cat, + 'startdate' => $startdate, + 'enddate' => $enddate, + 'info_id' => $info_id, + 'id_parent' => $id_parent, + 'responsible' => $responsible + )); + + if (!$query_addr && !$query_project) { + Header('Location: ' . $html->link('/index.php', $hidden_vars + + array( 'cd' => 15 ) + $this->menuaction())); + } + } + } + $this->bo->read( $info_id ); + if ($info_id && $action == 'sp') { // new SubProject + if (!$this->bo->check_access($info_id,PHPGW_ACL_ADD)) { + Header('Location: ' . + $html->link('/index.php',$hidden_vars+$this->menuaction() )); + $phpgw->common->phpgw_exit(); + } + $parent = $this->data; + $this->data['info_id'] = $info_id = 0; + $this->data['info_owner'] = $phpgw_info['user']['account_id']; + $this->data['info_id_parent'] = $parent['info_id']; + if ($parent['info_type'] == 'task' && $parent['info_status'] == 'offer') { + $this->data['info_type'] = 'confirm'; + $this->data['info_responsible'] = $parent['info_owner']; // confirmation to parent + } + $this->data['info_status'] = 'ongoing'; + $this->data['info_confirm'] = 'not'; + $this->data['info_subject'] = lang('Re:').' '.$parent['info_subject']; + $this->data['info_des'] = ''; + } else { + if ($info_id && !$this->bo->check_access($info_id,PHPGW_ACL_EDIT)) { + Header('Location: ' . + $html->link('/index.php',$hidden_vars+ $this->menuaction())); + $phpgw->common->phpgw_exit(); + } + } + $id_parent = $this->data['info_id_parent']; + $common_hidden_vars = $html->input_hidden( $hidden_vars + + array('info_id' => $info_id,'action' => $action,'id_parent' => $id_parent )); + + $phpgw->common->phpgw_header(); + echo parse_navbar(); + + $t = CreateObject('phpgwapi.Template',PHPGW_APP_TPL); + $t->set_file(array('info_edit' => 'form.tpl')); + + // ==================================================================== + // create two seperate blocks, addblock will be cut off from template + // editblock contains the buttons and forms for edit + // ==================================================================== + $t->set_block('info_edit', 'add', 'addhandle'); + $t->set_block('info_edit', 'edit', 'edithandle'); + $t->set_block('info_edit', 'subpro', 'subprohandle'); + + if (is_array($error)) { + $t->set_var('error_list',$phpgw->common->error_list($error)); + } + switch ($action) { + case 'sp': + $info_action = 'Info Log - New Subproject'; break; + case 'new': + $info_action = 'Info Log - New'; + if ($info_type && isset($this->enums['type'][$info_type])) + $this->data['info_type'] = $info_type; + break; + default: + $info_action = 'Info Log - Edit'; break; + } + $t->set_var('lang_info_action',lang($info_action) . ($query_addr ? ' - '.lang('Search for:')." '$query_addr'" : '')); + $t->set_var($this->setStyleSheet( )); + $t->set_var('lang_category',lang('Category')); + $t->set_var('lang_none',lang('None')); + if (!isset($info_cat)) $info_cat = $this->data['info_cat']; + $t->set_var('cat_list',$this->categories->formated_list('select','all',$info_cat,'True')); + + $t->set_var('actionurl',$html->link('/index.php', + $this->menuaction('edit'))); + $t->set_var('common_hidden_vars',$common_hidden_vars); + + // get an instance of select box class + $sb = CreateObject('phpgwapi.sbox2'); + + $t->set_var('lang_owner',lang('Owner')); + $t->set_var('owner_info',$sb->accountInfo($this->data['info_owner'])); + + $t->set_var('lang_type',lang('Type')); + if (!isset($type)) $type = $this->data['info_type']; + $t->set_var('type_list',$sb->getArrayItem('type',$type,$this->enums['type'])); + + $t->set_var('lang_prfrom', lang('From')); + if (!isset($from)) $from = $phpgw->strip_html($this->data['info_from']); + $t->set_var('fromval', $from); + + $t->set_var('lang_praddr', lang('Phone/Email')); + if (!isset($addr)) $addr = $phpgw->strip_html($this->data['info_addr']); + $t->set_var('addrval', $addr); + + if (!isset($id_project)) $id_project = $this->data['info_proj_id']; + $t->set_var($sb->getProject('project',$id_project,$query_project)); + + if (!isset($id_addr)) $id_addr = $this->data['info_addr_id']; + $t->set_var($sb->getAddress('addr',$id_addr,$query_addr)); + + $t->set_var('lang_prsubject', lang('Subject')); + if (!isset($subject)) $subject = $phpgw->strip_html($this->data['info_subject']); + $t->set_var('subjectval', $subject); + + $t->set_var('lang_prdesc', lang('Description')); + if (!isset($des)) $des = $phpgw->strip_html($this->data['info_des']); + $t->set_var('descval', $des); + + $t->set_var('lang_start_date',lang('Start Date')); + if (!isset($startdate)) $startdate = $this->data['info_startdate']; + $t->set_var('start_select_date',$sb->getDate('syear','smonth','sday',$startdate)); + + $t->set_var('lang_end_date',lang('End Date')); + if (!isset($enddate)) $enddate = $this->data['info_enddate']; + $t->set_var('end_select_date',$sb->getDate('eyear','emonth','eday',$enddate)); + + $t->set_var('lang_selfortoday',lang('Today')); + $t->set_var('selfortoday',$html->checkbox('selfortoday',0)); + $t->set_var('lang_dur_days',lang('Duration')); + $t->set_var('days',lang('days')); + + $t->set_var('lang_status',lang('Status')); + if (!isset($status)) $status = $this->data['info_status']; + $t->set_var('status_list',$sb->getArrayItem('status',$status,$this->enums['status'])); + + $t->set_var('lang_priority',lang('Priority')); + if (!isset($pri)) $pri = $this->data['info_pri']; + $t->set_var('priority_list',$sb->getArrayItem('pri',$pri,$this->enums['priority'])); + + $t->set_var('lang_confirm',lang('Confirm')); + if (!isset($confirm)) $confirm = $this->data['info_confirm']; + $t->set_var('confirm_list',$sb->getArrayItem('confirm',$confirm,$this->enums['confirm'])); + + $t->set_var('lang_responsible',lang('Responsible')); + if (!isset($responsible)) $responsible = $this->data['info_responsible']; + $t->set_var('responsible_list',$sb->getAccount('responsible',$responsible)); + + $t->set_var('lang_access_type',lang('Private')); + if (!isset($access)) $access = $this->data['info_access'] == 'private'; + $t->set_var('access_list',$html->checkbox('access',$access)); + + $t->set_var('edit_button',$html->submit_button('save','Save')); + + if (!$action && $this->bo->check_access($info_id,PHPGW_ACL_DELETE)) { + $t->set_var('delete_button',$html->form_1button('delete','Delete', + $hidden_vars+$this->menuaction('delete'), + '/index.php')); + } + $t->set_var('edithandle',''); + $t->set_var('addhandle',''); + $t->set_var('subprohandle',''); + $t->pfp('out','info_edit'); + $t->pfp('edithandle','edit'); + + // $phpgw->common->phpgw_footer(); + // echo parse_navbar_end(); + } + + function delete( ) { + global $phpgw,$phpgw_info; + global $cat_filter,$cat_id,$sort,$order,$query,$start,$filter; + global $info_id,$confirm; + + $t = &$this->template; $html = &$this->html; + + $hidden_vars = array('sort' => $sort,'order' => $order, + 'query' => $query,'start' => $start, + 'filter' => $filter,'cat_id' => $cat_id ); + if (!$info_id || + !$this->bo->check_access($info_id,PHPGW_ACL_DELETE)) + { + Header('Location: ' . + $html->link('/index.php',$hidden_vars+$this->menuaction())); + } + if ($confirm) { + $this->bo->delete($info_id); + + Header('Location: ' . $html->link('/index.php',$hidden_vars + + array( 'cd' => 16 )+$this->menuaction())); + } else { + $phpgw->common->phpgw_header(); + echo parse_navbar(); + + $t = CreateObject('phpgwapi.Template',PHPGW_APP_TPL); + $t->set_file(array( 'info_delete' => 'delete.tpl' )); + $t->set_var( $this->setStyleSheet( )); + $t->set_var( $this->infoHeaders( )); + $t->set_var( $this->formatInfo( $info_id )); + $t->set_var('lang_info_action',lang('Info Log - Delete')); + + $t->set_var('deleteheader',lang('Are you sure you want to delete this entry')); + $t->set_var('no_button',$html->form_1button('no_button', + 'No - Cancel','','/index.php',$hidden_vars+$this->menuaction())); + $t->set_var('yes_button',$html->form_1button('yes_button', + 'Yes - Delete','','/index.php',$hidden_vars + + array('info_id' => $info_id,'confirm' => 'True')+ + $this->menuaction('delete'))); + $t->pfp('out','info_delete'); + + $phpgw->common->phpgw_footer(); + echo parse_navbar_end(); + } + } + } diff --git a/infolog/index.php b/infolog/index.php index 06e6d052fd..297c292d5b 100644 --- a/infolog/index.php +++ b/infolog/index.php @@ -1,232 +1,25 @@ * - * originaly based on todo written by Joseph Engo * - * -------------------------------------------- * - * This program is free software; you can redistribute it and/or modify it * - * under the terms of the GNU General Public License as published by the * - * Free Software Foundation; either version 2 of the License, or (at your * - * option) any later version. * - \**************************************************************************/ + /**************************************************************************\ + * phpGroupWare - Info Log * + * http://www.phpgroupware.org * + * Written by Ralf Becker * + * originaly based on todo written by Joseph Engo * + * -------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the * + * Free Software Foundation; either version 2 of the License, or (at your * + * option) any later version. * + \**************************************************************************/ - /* $Id$ */ + /* $Id$ */ - $phpgw_info['flags'] = array( - 'currentapp' => 'infolog', - 'enable_nextmatchs_class' => True, - 'enable_categories_class' => True + $phpgw_info['flags'] = array( + 'currentapp' => 'infolog', + 'noheader' => True, + 'nonavbar' => True ); include('../header.inc.php'); - $phpgw->infolog = CreateObject('infolog.infolog'); - $html = $phpgw->infolog->html; - $db = $phpgw->db; - $db2 = $phpgw->db; - - $t = CreateObject('phpgwapi.Template',PHPGW_APP_TPL); - $t->set_file(array( 'info_list_t' => 'list.tpl' )); - $t->set_block('info_list_t','info_list','list'); - - if ($cat_filter) $cat_id = $cat_filter; - - $hidden_vars = array( 'sort' => $sort,'order' => $order,'query' => $query,'start' => $start, - 'filter' => $filter,'cat_id' => $cat_id ); - $common_hidden_vars = $html->input_hidden($hidden_vars); - - if ($action) - $common_hidden_vars .= $html->input_hidden('action',$action); - - switch ($action) { - case 'sp': // Sub-List - $common_hidden_vars .= $html->input_hidden('info_id',$info_id); - $t->set_var(lang_info_action,lang('Info Log - Subprojects from')); - break; - case 'proj': - $common_hidden_vars .= $html->input_hidden('proj_id',$proj_id); - $proj = $phpgw->infolog->readProj($proj_id); - $t->set_var(lang_info_action,lang('Info Log').' - '.$proj['title']); - break; - case 'addr': - $common_hidden_vars .= $html->input_hidden('addr_id',$addr_id); - $addr = $phpgw->infolog->readAddr($addr_id); - $t->set_var(lang_info_action,lang('Info Log').' - '.$phpgw->infolog->addr2name($addr)); - break; - default: - $t->set_var(lang_info_action,lang('Info Log')); - break; - } - $t->set_var($phpgw->infolog->setStyleSheet( )); - $t->set_var(actionurl,$phpgw->link('/infolog/edit.php','action=new')); - $t->set_var('cat_form',$phpgw->link('/infolog/index.php')); - $t->set_var('lang_category',lang('Category')); - $t->set_var('lang_all',lang('All')); - $t->set_var('lang_select',lang('Select')); - $t->set_var('categories',$phpgw->categories->formated_list('select','all',$cat_id,'True')); - $t->set_var(common_hidden_vars,$common_hidden_vars); - - // =========================================== - // list header variable template-declarations - // =========================================== - $t->set_var( $phpgw->infolog->infoHeaders( 1,$sort,$order )); - $t->set_var(h_lang_sub,lang('Sub')); - $t->set_var(h_lang_action,lang('Action')); - // -------------- end header declaration ----------------- - - if (! $start) { - $start = 0; - } - - if ($order) { - $ordermethod = 'order by ' . $order . ' ' . $sort; - } else { - $ordermethod = 'order by info_datecreated desc'; // newest first - } - if (!$filter) { - $filter = 'none'; - } - $filtermethod = $phpgw->infolog->aclFilter($filter); - - if ($cat_id) { - $filtermethod .= " AND info_cat='$cat_id' "; - } - if ($action == 'addr') $filtermethod .= " AND info_addr_id=$addr_id "; - if ($action == 'proj') $filtermethod .= " AND info_proj_id=$proj_id "; - // we search in _from, _subject and _des for $query - if ($query) $sql_query = "AND (info_from like '%$query%' OR info_subject like '%$query%' OR info_des like '%$query%') "; - - $pid = 'AND info_id_parent='.($action == 'sp' ? $info_id : 0); - if ($phpgw->infolog->listChilds && $action != 'sp') - $pid = ''; - - $db->query("SELECT COUNT(*) FROM phpgw_infolog WHERE $filtermethod $pid $sql_query",__LINE__,__FILE__); - $db->next_record(); - $total = $db->f(0); - - if ($total <= $start) $start = 0; - - if ($total > ($maxmatchs = $phpgw_info['user']['preferences']['common']['maxmatchs'])) { - $to = $start + $maxmatchs; - if ($to > $total) $to = $total; - $total_matchs = lang('showing x - x of x',($start + 1),$to,$total); - } else { - $total_matchs = lang('showing x',$total); - } - $t->set_var('total_matchs',$total_matchs); - - // ========================================== - // project description if subprojectlist - // ========================================== - - - $t->set_block('info_list_t','projdetails','projdetailshandle'); - - switch ($action) { - case 'sp': // details of parent - $t->set_var( $phpgw->infolog->infoHeaders( )); - $t->set_var( $phpgw->infolog->formatInfo( $info_id )); - $t->parse('projdetailshandle','projdetails',True); - break; - case 'addr': - break; - case 'proj': - break; - } - - // =========================================== - // nextmatch variable template-declarations - // =========================================== - $next_matchs = $phpgw->nextmatchs->show_tpl('/infolog/index.php',$start,$total, - "&order=$order&filter=$filter&sort=$sort&query=$query&action=$action&info_id=$info_id&cat_id=$cat_id", - '95%',$phpgw_info['theme']['th_bg']); - $t->set_var('next_matchs',$next_matchs); - if ($total > $maxmatchs) - $t->set_var('next_matchs_end',$next_matchs); - - // ---------- end nextmatch template -------------------- - - $db->limit_query($q="SELECT * FROM phpgw_infolog WHERE $filtermethod $pid $sql_query $ordermethod",$start,__LINE__,__FILE__); - - while ($db->next_record()) { - // ======================================== - // check if actual project has subprojects - // ======================================== - $db2->query("select count(*) as cnt FROM phpgw_infolog where info_id_parent=" .$db->f('info_id'),__LINE__,__FILE__); - $db2->next_record(); - if ($db2->f('cnt') > 0) { - $subproact = 1; - } else { - $subproact = 0; - } - // ----------------------------------------- - - $phpgw->nextmatchs->template_alternate_row_color(&$t); - - $t->set_var( $phpgw->infolog->formatInfo( $db->Record,$proj_id,$addr_id )); - - if ($phpgw->infolog->check_access($db->f('info_id'),PHPGW_ACL_EDIT)) { - $t->set_var('edit','' . - $phpgw->infolog->icon('action','edit') . ''); - } else { - $t->set_var('edit',''); - } - - if ($phpgw->infolog->check_access($db->f('info_id'),PHPGW_ACL_DELETE)) { - $t->set_var('delete','' . $phpgw->infolog->icon('action','delete') . ''); - } else { - $t->set_var('delete',''); - } - $t->set_var('subadd', ''); // defaults no icons - $t->set_var('viewsub', ''); - $t->set_var('viewparent', ''); - - if ($subproact > 0) { // if subprojects exist, display VIEW SUB icon - $t->set_var('viewsub', '' . - $phpgw->infolog->icon('action','view') . ''); - } else { // else display ADD SUB-Icon - if ($phpgw->infolog->check_access($db->f('info_id'),PHPGW_ACL_ADD)) { - $t->set_var('subadd', '' . - $phpgw->infolog->icon('action','new') . ''); - } - } // if parent --> display VIEW SUBS of Parent - if ($db->f('info_id_parent') && $action != 'sp') { - $t->set_var('viewparent', '' . - $phpgw->infolog->icon('action','parent') . ''); - } - - $t->parse('list','info_list',True); - // -------------- end record declaration ------------------------ - } - - // ========================================================= - // back2project list href declaration for subproject list - // ========================================================= - - if ($action) { - $t->set_var('lang_back2projects', '
'.lang('Back to Projectlist').''); - } - - // get actual date and year for matrixview arguments -/* $year = date('Y'); - $month = date('m'); - $t->set_var('lang_matrixviewhref', '
'.lang('View Matrix of actual Month').''); */ - // ============================================ - // template declaration for Add Form - // ============================================ - - $t->set_var(lang_add,lang('Add')); - $t->pfp('out','info_list_t',true); - - // -------------- end Add form declaration ------------------------ - - $phpgw->common->phpgw_footer(); + $obj = CreateObject('infolog.uiinfolog'); + $obj->get_list(); ?>