From 0376f3d48f21c0833966e765ed9e50203f61dd2f Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Mon, 11 Jun 2007 13:09:57 +0000 Subject: [PATCH 01/23] "removed no changable ACL for addressbook, if contacts are in LDAP" --- admin/inc/class.uiaccounts.inc.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/admin/inc/class.uiaccounts.inc.php b/admin/inc/class.uiaccounts.inc.php index 8f1aeffd93..2903917e84 100755 --- a/admin/inc/class.uiaccounts.inc.php +++ b/admin/inc/class.uiaccounts.inc.php @@ -36,16 +36,12 @@ 'addressbook' => True, 'todo' => True, 'calendar' => True, - 'notes' => True, 'projects' => True, - 'phonelog' => True, 'infolog' => True, 'filemanager' => True, 'tts' => True, 'bookmarks' => True, 'img' => True, - 'netsaint' => True, - 'inv' => True, 'phpbrain' => True, 'projectmanager' => True, 'timesheet' => True @@ -61,6 +57,11 @@ { $_POST = $this->array_stripslashes($_POST); } + // remove ACL from addressbook, if contacts-backend is LDAP, as the ACL can not be modified there + if ($GLOBALS['egw_info']['server']['contact_repository'] == 'ldap') + { + unset($this->apps_with_acl['addressbook']); + } } function row_action($action,$type,$account_id) From 39dd3743798cd1412f9c0262a7172dacaf781b9d Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Mon, 11 Jun 2007 13:43:12 +0000 Subject: [PATCH 02/23] "notifications were not send to assigned users" --- etemplate/inc/class.bo_tracking.inc.php | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/etemplate/inc/class.bo_tracking.inc.php b/etemplate/inc/class.bo_tracking.inc.php index 82528a4594..aaebcb06dd 100644 --- a/etemplate/inc/class.bo_tracking.inc.php +++ b/etemplate/inc/class.bo_tracking.inc.php @@ -238,6 +238,7 @@ class bo_tracking // assigned / responsible users if ($this->assigned_field) { + //error_log("bo_tracking::do_notifications() data[$this->assigned_field]=".print_r($data[$this->assigned_field],true).", old[$this->assigned_field]=".print_r($old[$this->assigned_field],true)); $assignees = $old_assignees = array(); if ($data[$this->assigned_field]) // current assignments { @@ -251,6 +252,7 @@ class bo_tracking } foreach(array_unique(array_merge($assignees,$old_assignees)) as $assignee) { + //error_log("bo_tracking::do_notifications() assignee=$assignee, type=".$GLOBALS['egw']->accounts->get_type($assignee).", email=".$GLOBALS['egw']->accounts->id2name($assignee,'account_email')); if (!$assignee) continue; // item assignee is a user @@ -258,7 +260,7 @@ class bo_tracking { if (($email = $GLOBALS['egw']->accounts->id2name($assignee,'account_email')) && !in_array($email, $email_sent)) { - $this->send_notification($old,$email,$data['tr_assigned'],'notify_assigned'); + $this->send_notification($data,$old,$email,$data['tr_assigned'],'notify_assigned'); $email_sent[] = $email; } } @@ -268,7 +270,7 @@ class bo_tracking { if ($email = $GLOBALS['egw']->accounts->id2name($u,'account_email') && !in_array($email, $email_sent)) { - $this->send_notification($old,$email,$u,'notify_assigned'); + $this->send_notification($data,$old,$email,$u,'notify_assigned'); $email_sent[] = $email; } } @@ -337,12 +339,9 @@ class bo_tracking */ function send_notification($data,$old,$email,$user_or_lang,$check=null) { + //error_log("bo_trackering::send_notification(,,'$email',$user_or_lang,$check)"); if (!$email) return false; - //echo "

bo_trackering::send_notification(,'$email',$user_or_lang)

\n"; - //echo "old"; _debug_array($old); - //echo "data"; _debug_array($data); - if (!$this->save_prefs) $this->save_prefs = $GLOBALS['egw_info']['user']; if (is_numeric($user_or_lang)) // user --> read everything from his prefs From fc57480a6a9a04935c3e56847f09bcd577f88b8d Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Mon, 11 Jun 2007 17:13:43 +0000 Subject: [PATCH 03/23] "fix for bug #894: Reccurring events with setting interval drop participants fix for problem reported in patch #906: problem when you edit a recurrent event" --- calendar/inc/class.socal.inc.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/calendar/inc/class.socal.inc.php b/calendar/inc/class.socal.inc.php index f87916439d..e954892480 100644 --- a/calendar/inc/class.socal.inc.php +++ b/calendar/inc/class.socal.inc.php @@ -812,13 +812,12 @@ ORDER BY cal_user_type, cal_usre_id { $this->db->insert($this->user_table,array( 'cal_status' => $status !== true ? $status{0} : 'U', - 'cal_quantity' => substr($status,1) ? substr($status,1) : 1, - 'cal_recur_date' => $recur_date, - ),array( - 'cal_id' => $cal_id, + 'cal_quantity' => substr($status,1) ? substr($status,1) : 1, + ),array( + 'cal_id' => $cal_id, + 'cal_recur_date' => $recur_date, 'cal_user_type' => $type, 'cal_user_id' => $id, - ),__LINE__,__FILE__); } } From 1cd5438c1f858f51191f3f3a762699de996f552e Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Tue, 12 Jun 2007 12:33:44 +0000 Subject: [PATCH 04/23] some missing translations --- calendar/setup/phpgw_de.lang | 4 ++++ calendar/setup/phpgw_en.lang | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/calendar/setup/phpgw_de.lang b/calendar/setup/phpgw_de.lang index 9c1cbec3f6..efe00011ad 100644 --- a/calendar/setup/phpgw_de.lang +++ b/calendar/setup/phpgw_de.lang @@ -11,6 +11,7 @@ actions calendar de Befehle actions... calendar de Befehle... add alarm calendar de Alarm zufügen added calendar de Neuer Termin +added by synchronisation calendar de Durch Synchrosation hinzugefügt after %1 calendar de Nach dem %1 after current date calendar de Nach dem aktuellen Datum alarm calendar de Alarm @@ -52,6 +53,7 @@ copy this event calendar de Kopiert diesen Termin countries calendar de Länder country calendar de Land create an exception for the given date calendar de Erzeugt eine Ausnahme am angegebenen Datum +create exception calendar de Ausnahme erzeugen create new links calendar de Neue Verknüpfung erstellen csv calendar de CSV csv-fieldname calendar de CSV-Feldname @@ -105,6 +107,7 @@ event details follow calendar de Details zum Termin folgen event saved calendar de Termin gespeichert event will occupy the whole day calendar de Termin nimmt den ganzen Tag ein exception calendar de Ausnahme +exception created - you can now edit or delete it calendar de Ausnahme erzeugt - Sie können sie jetzt bearbeiten oder löschen exceptions calendar de Ausnahmen execute a further action for this entry calendar de Führ einen weiteren Befehlt für diesen Eintrag aus existing links calendar de Bestehende Verknüpfungen @@ -317,6 +320,7 @@ you can only set a year or a occurence !!! calendar de Sie k you do not have permission to read this record! calendar de Sie haben keine Berechtigung diesen Eintrag zu lesen! you have a meeting scheduled for %1 calendar de Sie haben einen Termin am %1. you have been disinvited from the meeting at %1 calendar de Sie wurden vom Termin am %1 ausgeladen +you need to select an account, contact or resource first! calendar de Sie müssen zuerst einen Benutzer, einen Kontakt oder eine Ressource auswählen! you need to select an ical file first calendar de Sie müssen zuerst eine iCal Datei auswählen you need to set either a day or a occurence !!! calendar de Sie müssen entweder einen Tag oder eine Wiederholung angeben !!! your meeting scheduled for %1 has been canceled calendar de Ihr Termin am %1 wurde abgesagt. diff --git a/calendar/setup/phpgw_en.lang b/calendar/setup/phpgw_en.lang index 9ef6d48be8..cb42330806 100644 --- a/calendar/setup/phpgw_en.lang +++ b/calendar/setup/phpgw_en.lang @@ -11,6 +11,7 @@ actions calendar en Actions actions... calendar en Actions... add alarm calendar en Add alarm added calendar en Added +added by synchronisation calendar en added by synchronisation after %1 calendar en After %1 after current date calendar en After current date alarm calendar en Alarm @@ -52,6 +53,7 @@ copy this event calendar en Copy this event countries calendar en Countries country calendar en Country create an exception for the given date calendar en Create an exception for the given date +create exception calendar en Create exception create new links calendar en Create new links csv calendar en CSV csv-fieldname calendar en CSV-Fieldname @@ -105,6 +107,7 @@ event details follow calendar en Event Details follow event saved calendar en Event saved event will occupy the whole day calendar en Event will occupy the whole day exception calendar en Exception +exception created - you can now edit or delete it calendar en Exception created - you can now edit or delete it exceptions calendar en Exceptions execute a further action for this entry calendar en Execute a further action for this entry existing links calendar en Existing links @@ -317,6 +320,7 @@ you can only set a year or a occurence !!! calendar en You can only set a year o you do not have permission to read this record! calendar en You do not have permission to read this record! you have a meeting scheduled for %1 calendar en You have a meeting scheduled for %1 you have been disinvited from the meeting at %1 calendar en You have been disinvited from the meeting at %1 +you need to select an account, contact or resource first! calendar en You need to select an account, contact or resource first! you need to select an ical file first calendar en You need to select an iCal file first you need to set either a day or a occurence !!! calendar en You need to set either a day or a occurence !!! your meeting scheduled for %1 has been canceled calendar en Your meeting scheduled for %1 has been canceled From cec25ce548e621a168f6345efb341b7171915017 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Tue, 12 Jun 2007 15:38:04 +0000 Subject: [PATCH 05/23] fixed now working wiki after update from 1.0.0 --- phpgwapi/setup/tables_update_1_0.inc.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/phpgwapi/setup/tables_update_1_0.inc.php b/phpgwapi/setup/tables_update_1_0.inc.php index 241ef6eb66..d841434f09 100644 --- a/phpgwapi/setup/tables_update_1_0.inc.php +++ b/phpgwapi/setup/tables_update_1_0.inc.php @@ -977,6 +977,8 @@ // adding the old name, as the rename might have not been done (api upgrades run befor app ones) array('phpgw_wiki_pages','wiki_readable',true), array('phpgw_wiki_pages','wiki_writable',true), + array('phpgw_wiki_pages','readable',true), + array('phpgw_wiki_pages','writable',true), array('egw_vfs','vfs_owner_id'), array('egw_vfs','vfs_createdby_id'), ) as $data) From 4ce40c0fd2f6f635c3ba2c08081aae19206e8885 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Tue, 12 Jun 2007 16:31:58 +0000 Subject: [PATCH 06/23] "address formats from many countries from http://www.bitboost.com/ref/international-address-formats.html thanks to mikaelarhelger-AT-gmail.com" --- addressbook/inc/class.bocontacts.inc.php | 46 ++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/addressbook/inc/class.bocontacts.inc.php b/addressbook/inc/class.bocontacts.inc.php index b831e2608a..00730d0c4a 100755 --- a/addressbook/inc/class.bocontacts.inc.php +++ b/addressbook/inc/class.bocontacts.inc.php @@ -1001,8 +1001,10 @@ class bocontacts extends socontacts /** * Get the address-format of a country * - * ToDo: this is far from being complete ;-) - * Mail me (RalfBecker-AT-outdoor-training.de) if you want your nation added or add it yourself. + * This is a good reference where I got nearly all information, thanks to mikaelarhelger-AT-gmail.com + * http://www.bitboost.com/ref/international-address-formats.html + * + * Mail me (RalfBecker-AT-outdoor-training.de) if you want your nation added or fixed. * * @param string $country * @return string 'city_state_postcode' (eg. US) or 'postcode_city' (eg. DE) @@ -1018,12 +1020,50 @@ class bocontacts extends socontacts switch($code) { - case 'US': + case 'AU': case 'CA': + case 'GB': // not exactly right, postcode is in separate line + case 'HK': // not exactly right, they have no postcode + case 'IN': + case 'ID': + case 'IE': // not exactly right, they have no postcode + case 'JP': // not exactly right + case 'KR': + case 'LV': + case 'NZ': + case 'TW': + case 'SA': // not exactly right, postcode is in separate line + case 'SG': + case 'US': $adr_format = 'city_state_postcode'; break; + case 'AR': + case 'AT': + case 'BE': + case 'CH': + case 'CZ': + case 'DK': + case 'EE': + case 'ES': + case 'FI': + case 'FR': case 'DE': + case 'GL': + case 'IS': + case 'IL': + case 'IT': + case 'LT': + case 'LU': + case 'MY': + case 'MX': + case 'NL': + case 'NO': + case 'PL': + case 'PT': + case 'RO': + case 'RU': + case 'SE': $adr_format = 'postcode_city'; break; From 4730e500a6e9bfe12c9c4ad8b4e6b32741529496 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Wed, 13 Jun 2007 07:57:24 +0000 Subject: [PATCH 07/23] "fixed typo, causing the account_repository not to be read and therefor displays the wrong conversation direction" --- setup/account_migration.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup/account_migration.php b/setup/account_migration.php index f56f63c845..df58b05bc8 100644 --- a/setup/account_migration.php +++ b/setup/account_migration.php @@ -68,7 +68,7 @@ if (!is_object($GLOBALS['egw_setup']->db)) } // Load configuration values account_repository and auth_type, a setup has not yet done so $GLOBALS['egw_setup']->db->select($GLOBALS['egw_setup']->config_table,'config_name,config_value', - array('config_name'=>array('account_respository','auth_type')),__LINE__,__FILE__); + array('config_name'=>array('account_repository','auth_type')),__LINE__,__FILE__); while(($row = $GLOBALS['egw_setup']->db->row(true))) { $GLOBALS['egw_info']['server'][$row['config_name']] = $row['config_value']; From 8eda1028a3f12a399b31a924d74d6303f371efc7 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Wed, 13 Jun 2007 08:35:13 +0000 Subject: [PATCH 08/23] "switching FCK's encoding as html entities off, as we correctly handle charsets and it messes up the wiki totally" --- phpgwapi/inc/class.html.inc.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/phpgwapi/inc/class.html.inc.php b/phpgwapi/inc/class.html.inc.php index e71d0f6e98..b03d0944c5 100644 --- a/phpgwapi/inc/class.html.inc.php +++ b/phpgwapi/inc/class.html.inc.php @@ -491,6 +491,8 @@ class html { $oFCKeditor->Config['ToolbarStartExpanded'] = $_options['toolbar_expanded']; } + // switching the encoding as html entities off, as we correctly handle charsets and it messes up the wiki totally + $oFCKeditor->Config['ProcessHTMLEntities'] = false; switch($_mode) { case 'simple': From e54535cfc871fda277e801cf052ed123cf890b81 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Wed, 13 Jun 2007 15:37:10 +0000 Subject: [PATCH 09/23] "fix for bug reported on the german list" --- phpgwapi/inc/class.auth_sqlssl.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpgwapi/inc/class.auth_sqlssl.inc.php b/phpgwapi/inc/class.auth_sqlssl.inc.php index 5fc1e6ca96..70b2c61bab 100644 --- a/phpgwapi/inc/class.auth_sqlssl.inc.php +++ b/phpgwapi/inc/class.auth_sqlssl.inc.php @@ -49,7 +49,7 @@ 'account_type' => 'u', ),__LINE__,__FILE__); - if (!$this->db->next_record() || $GLOBALS['egw_info']['server']['case_sensitive_username'] && $db->f('account_lid') != $username) + if (!$this->db->next_record() || $GLOBALS['egw_info']['server']['case_sensitive_username'] && $this->db->f('account_lid') != $username) { return false; } From 1557afe7928ed73cbad5d98539a2db23dbf63eef Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Wed, 13 Jun 2007 16:29:06 +0000 Subject: [PATCH 10/23] some fixes for the contactform: customfields, not working mail-subject, ... --- .../inc/class.addressbook_contactform.inc.php | 2 ++ .../inc/class.addressbook_tracking.inc.php | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/addressbook/inc/class.addressbook_contactform.inc.php b/addressbook/inc/class.addressbook_contactform.inc.php index 6707d7e5d4..618c0553df 100644 --- a/addressbook/inc/class.addressbook_contactform.inc.php +++ b/addressbook/inc/class.addressbook_contactform.inc.php @@ -54,6 +54,8 @@ class addressbook_contactform } if ($contact->save($content)) { + unset($content['modified']); unset($content['modifier']); // not interesting for new entries + $tracking->do_notifications($content,null); // only necessary as long addressbook is not doing this itself return '

'.$content['msg'].'

'; diff --git a/addressbook/inc/class.addressbook_tracking.inc.php b/addressbook/inc/class.addressbook_tracking.inc.php index cc8aa71319..98c33b1119 100644 --- a/addressbook/inc/class.addressbook_tracking.inc.php +++ b/addressbook/inc/class.addressbook_tracking.inc.php @@ -142,7 +142,7 @@ class addressbook_tracking extends bo_tracking { $prefix = ($data['subject_contactform'] ? $data['subject_contactform'] : lang('Contactform')).': '; } - return $prefix.parent::get_subject($data,$old); + return $prefix.$this->contacts->link_title($data); } /** @@ -162,7 +162,7 @@ class addressbook_tracking extends bo_tracking switch($name) { case 'n_prefix': case 'n_given': case 'n_middle': case 'n_family': case 'n_suffix': // already in n_fn - case 'tid': + case 'n_fileas': case 'id': case 'tid': break; case 'created': case 'modified': $details[$name] = array( @@ -214,6 +214,18 @@ class addressbook_tracking extends bo_tracking break; } } + if ($this->contacts->customfields) + { + foreach($this->contacts->customfields as $name => $custom) + { + if (!$data['#'.$name]) continue; + + $details['#'.$name] = array( + 'label' => $custom['label'], + 'value' => $data['#'.$name], + ); + } + } return $details; } } \ No newline at end of file From 4b8657013e90bbd3757afe7386cade3931ee6b84 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Wed, 13 Jun 2007 16:34:23 +0000 Subject: [PATCH 11/23] changed translation of created to angelegt --- addressbook/setup/phpgw_de.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addressbook/setup/phpgw_de.lang b/addressbook/setup/phpgw_de.lang index 56cd6754c6..5f546a5196 100644 --- a/addressbook/setup/phpgw_de.lang +++ b/addressbook/setup/phpgw_de.lang @@ -93,7 +93,7 @@ copied by %1, from record #%2. addressbook de Kopiert von %1, vom Datensatz Nr. copy a contact and edit the copy addressbook de Kopiert einen Kontakt und bearbeitet dann die Kopie country common de Land create new links addressbook de Neue Verknüpfung erstellen -created addressbook de Angelegt von +created addressbook de Angelegt credit addressbook de Darlehen csv-fieldname addressbook de CSV-Feldname csv-filename addressbook de CSV-Dateiname From 9e49e8c50db0715cfc0a6a77dfb117e95476f4b4 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Wed, 13 Jun 2007 21:37:05 +0000 Subject: [PATCH 12/23] History for InfoLog (incl. the ability to disable real deletes) and delete notifications --- etemplate/inc/class.bo_tracking.inc.php | 22 ++- infolog/inc/class.boinfolog.inc.php | 129 ++++++++++++++--- infolog/inc/class.infolog_tracking.inc.php | 126 ++++++++++++---- infolog/inc/class.soinfolog.inc.php | 42 ++++-- infolog/inc/class.uiinfolog.inc.php | 159 +++++++++++++++------ infolog/setup/etemplates.inc.php | 21 +-- infolog/setup/phpgw_de.lang | 11 +- infolog/setup/phpgw_en.lang | 10 ++ infolog/templates/default/admin.tpl | 6 +- infolog/templates/default/edit.xet | 16 ++- 10 files changed, 417 insertions(+), 125 deletions(-) diff --git a/etemplate/inc/class.bo_tracking.inc.php b/etemplate/inc/class.bo_tracking.inc.php index aaebcb06dd..bda7bac188 100644 --- a/etemplate/inc/class.bo_tracking.inc.php +++ b/etemplate/inc/class.bo_tracking.inc.php @@ -195,14 +195,16 @@ class bo_tracking $changes = 0; foreach($this->field2history as $name => $status) { - if ($old[$name] != $data[$name]) + if ($old[$name] != $data[$name] && !(!$old[$name] && !$data[$name])) { if (!is_object($this->historylog)) { require_once(EGW_API_INC.'/class.historylog.inc.php'); $this->historylog =& new historylog($this->app); } - $this->historylog->add($status,$data[$this->id_field],$data[$name],$old[$name]); + $this->historylog->add($status,$data[$this->id_field], + is_array($data[$name]) ? implode(',',$data[$name]) : $data[$name], + is_array($old[$name]) ? implode(',',$old[$name]) : $old[$name]); ++$changes; } } @@ -536,10 +538,18 @@ class bo_tracking $link .= '&'.$this->id_field.'='.$data[$this->id_field]; } } - elseif (($view = $GLOBALS['egw']->link->view($this->app,$data[$this->id_field]))) + else { - $link = $GLOBALS['egw']->link('/index.php',$view); - $popup = $GLOBALS['egw']->link->is_popup($this->app,'view'); + if (!is_object($GLOBALS['egw']->link)) + { + require_once(EGW_API_INC.'/class.bolink.inc.php'); + $GLOBALS['egw']->link =& new bolink(); + } + if (($view = $GLOBALS['egw']->link->view($this->app,$data[$this->id_field]))) + { + $link = $GLOBALS['egw']->link('/index.php',$view); + $popup = $GLOBALS['egw']->link->is_popup($this->app,'view'); + } } if ($link{0} == '/') { @@ -585,7 +595,7 @@ class bo_tracking // if there's no old entry, the entry is not modified by definition // if both values are '', 0 or null, we count them as equal too $modified = $old && $data[$name] != $old[$name] && !(!$data[$name] && !$old[$name]); - //if ($modified) error_log("data[$name]='{$data[$name]}', old[$name]='{$old[$name]}' --> modified=".(int)$modified); + //if ($modified) error_log("data[$name]=".print_r($data[$name],true).", old[$name]=".print_r($old[$name],true)." --> modified=".(int)$modified); if (empty($detail['value']) && !$modified) continue; // skip unchanged, empty values $body .= $this->format_line($html_email,$detail['type'],$modified, diff --git a/infolog/inc/class.boinfolog.inc.php b/infolog/inc/class.boinfolog.inc.php index d2133be2ed..34ae3b2f3f 100644 --- a/infolog/inc/class.boinfolog.inc.php +++ b/infolog/inc/class.boinfolog.inc.php @@ -12,6 +12,8 @@ include_once(EGW_INCLUDE_ROOT.'/infolog/inc/class.soinfolog.inc.php'); +define('EGW_ACL_UNDELETE',EGW_ACL_CUSTOM_1); // undelete right + /** * This class is the BO-layer of InfoLog, it also handles xmlrpc requests */ @@ -32,7 +34,7 @@ class boinfolog var $link; var $vfs; var $vfs_basedir='/infolog'; - var $valid_pathes = array(); + var $link_pathes = array(); var $send_file_ips = array(); var $xmlrpc_methods = array(); @@ -111,6 +113,18 @@ class boinfolog * @var int */ var $user; + /** + * History loggin: ''=no, 'history'=history & delete allowed, 'history_admin_delete', 'history_no_delete' + * + * @var string + */ + var $history; + /** + * Instance of infolog_tracking, only instaciated if needed! + * + * @var infolog_tracking + */ + var $tracking; /** * Constructor Infolog BO @@ -151,11 +165,11 @@ class boinfolog 'billed' => 'billed' ), // --> DONE 'note' => array( 'ongoing' => 'ongoing', // iCal has no status on notes - 'done' => 'done'), + 'done' => 'done' ), 'email' => array( 'ongoing' => 'ongoing', // iCal has no status on notes - 'done' => 'done' - )); + 'done' => 'done' ), + ); if (!is_object($GLOBALS['egw']->link) && $instanciate_link) { @@ -211,14 +225,15 @@ class boinfolog } if ($save_config) $this->config->save_repository(); } - if (count(explode(',',$this->config->config_data['responsible_edit']))) + if (is_array($this->config->config_data['responsible_edit'])) { - $this->responsible_edit = array_merge($this->responsible_edit,explode(',',$this->config->config_data['responsible_edit'])); + $this->responsible_edit = array_merge($this->responsible_edit,$this->config->config_data['responsible_edit']); } if ($this->config->config_data['implicit_rights'] == 'edit') { $this->implicit_rights = 'edit'; } + $this->history = $this->config->config_data['history']; } // sort types by there translation foreach($this->enums['type'] as $key => $val) @@ -305,6 +320,33 @@ class boinfolog { return $cache[$info_id][$required_rights]; } + // handle delete for the various history modes + if ($this->history) + { + if (!is_array($info) && !($info = $this->so->read($info_id))) return false; + + if ($info['info_status'] == 'deleted' && + ($required_rights == EGW_ACL_EDIT || // no edit rights for deleted entries + $required_rights == EGW_ACL_ADD || // no add rights for deleted entries + $required_rights == EGW_ACL_DELETE && ($this->history == 'history_no_delete' || // no delete at all! + $this->history == 'history_admin_delete' && !isset($GLOBALS['egw_info']['user']['apps']['admin'])))) // delete only for admins + { + return $cache[$info_id][$required_rights] = false; + } + if ($required_rights == EGW_ACL_UNDELETE) + { + if ($info['info_status'] != 'deleted') + { + return $cache[$info_id][$required_rights] = false; // can only undelete deleted items + } + // undelete requires edit rights + return $cache[$info_id][$required_rights] = $this->so->check_access( $info,EGW_ACL_EDIT,$this->implicit_rights == 'edit' ); + } + } + elseif ($required_rights == EGW_ACL_UNDELETE) + { + return $cache[$info_id][$required_rights] = false; + } return $cache[$info_id][$required_rights] = $this->so->check_access( $info,$required_rights,$this->implicit_rights == 'edit' ); } @@ -467,18 +509,59 @@ class boinfolog } return False; } - - $this->link->unlink(0,'infolog',$info_id); - - $info = $this->read($info_id); - - $this->so->delete($info_id,$delete_children,$new_parent); - - $GLOBALS['egw']->contenthistory->updateTimeStamp('infolog_'.$info['info_type'], $info_id, 'delete', time()); + // check if we have children and delete or re-parent them + if (($children = $this->so->get_children($info_id))) + { + foreach($children as $id => $owner) + { + if ($delete_children && $this->so->grants[$owner] & EGW_ACL_DELETE) + { + $this->delete($id,$delete_children,$new_parent); // call ourself recursive to delete the child + } + else // dont delete or no rights to delete the child --> re-parent it + { + $this->so->write(array( + 'info_id' => $id, + 'info_parent_id' => $new_parent, + )); + } + } + } + if (!($info = $this->read($info_id))) return false; // should not happen + $deleted = $info; + $deleted['info_status'] = 'deleted'; + $deleted['info_datemodified'] = time(); + $deleted['info_modifier'] = $this->user; + + // if we have history switched on and not an already deleted item --> set only status deleted + if ($this->history && $info['info_status'] != 'deleted') + { + if ($info['info_status'] == 'deleted') return false; // entry already deleted + + $this->so->write($deleted); + } + else + { + $this->so->delete($info_id,false); // we delete the children via bo to get all notifications! + } + if ($info['info_status'] != 'deleted') // dont notify of final purge of already deleted items + { + $this->link->unlink(0,'infolog',$info_id); + + $GLOBALS['egw']->contenthistory->updateTimeStamp('infolog_'.$info['info_type'], $info_id, 'delete', time()); + + // send email notifications and do the history logging + require_once(EGW_INCLUDE_ROOT.'/infolog/inc/class.infolog_tracking.inc.php'); + if (!is_object($this->tracking)) + { + $this->tracking =& new infolog_tracking($this); + } + $this->tracking->track($deleted,$info,$this->user); + } return True; } - + /** * writes the given $values to InfoLog, a new entry gets created if info_id is not set or 0 * @@ -517,6 +600,10 @@ class boinfolog { $status_only = !!array_intersect($responsible,array_keys($GLOBALS['egw']->accounts->memberships($this->user))); } + if (!$status_only && $values['info_status'] != 'deleted') + { + $status_only = $undelete = $this->check_access($values['info_id'],EGW_ACL_UNDELETE); + } } if ($values['info_id'] && !$this->check_access($values['info_id'],EGW_ACL_EDIT) && !$status_only || !$values['info_id'] && $values['info_id_parent'] && !$this->check_access($values['info_id_parent'],EGW_ACL_ADD)) @@ -531,7 +618,7 @@ class boinfolog { $values = $this->xmlrpc2data($values); } - if ($status_only) // make sure only status gets writen + if ($status_only && !$undelete) // make sure only status gets writen { $set_completed = !$values['info_datecompleted'] && // set date completed of finished job, only if its not already set (in_array($values['info_status'],array('done','billed','cancelled')) || (int)$values['info_percent'] == 100); @@ -606,7 +693,7 @@ class boinfolog $values['info_modifier'] = $this->so->user; } $to_write = $values; - if ($status_only) $values = array_merge($backup_values,$values); + if ($status_only && !$undelete) $values = array_merge($backup_values,$values); // convert user- to system-time foreach($this->timestamps as $time) { @@ -623,7 +710,7 @@ class boinfolog { $values = $this->read($info_id); } - if($values['info_id']) + if($values['info_id'] && $old['info_status'] != 'deleted') { // update $GLOBALS['egw']->contenthistory->updateTimeStamp( @@ -640,7 +727,11 @@ class boinfolog ); } $values['info_id'] = $info_id; - + + if (!is_array($values['info_responsible'])) // this should not happen, bug it does ;-) + { + $values['info_responsible'] = $values['info_responsible'] ? explode(',',$values['info_responsible']) : array(); + } // create (and remove) links in custom fields $this->update_customfield_links($values,$old); diff --git a/infolog/inc/class.infolog_tracking.inc.php b/infolog/inc/class.infolog_tracking.inc.php index ed38b2b799..205f60c2e6 100644 --- a/infolog/inc/class.infolog_tracking.inc.php +++ b/infolog/inc/class.infolog_tracking.inc.php @@ -46,7 +46,33 @@ class infolog_tracking extends bo_tracking * * @var array */ - var $field2history = array(); + var $field2history = array( + 'info_type' => 'Ty', + 'info_from' => 'Fr', + 'info_addr' => 'Ad', + 'info_link_id' => 'Li', + 'info_cat' => 'Ca', + 'info_priority' => 'Pr', + 'info_owner' => 'Ow', + 'info_access' => 'Ac', + 'info_status' => 'St', + 'info_percent' => 'Pe', + 'info_datecompleted' => 'Co', + 'info_location' => 'Lo', + 'info_startdate' => 'st', + 'info_enddate' => 'En', + 'info_responsible' => 'Re', + 'info_subject' => 'Su', + 'info_des' => 'De', + 'info_location' => 'Lo', + // PM fields + 'info_planned_time' => 'pT', + 'info_used_time' => 'uT', + 'pl_id' => 'pL', + 'info_price' => 'pr', + // all custom fields together + 'custom' => '#c', + ); /** * Translate field-names to labels * @@ -56,9 +82,11 @@ class infolog_tracking extends bo_tracking 'info_type' => 'Type', 'info_from' => 'Contact', 'info_addr' => 'Phone/Email', + 'info_link_id' => 'primary link', 'info_cat' => 'Category', 'info_priority' => 'Priority', 'info_owner' => 'Owner', + 'info_access' => 'Access', 'info_status' => 'Status', 'info_percent' => 'Completed', 'info_datecompleted' => 'Date completed', @@ -67,6 +95,14 @@ class infolog_tracking extends bo_tracking 'info_enddate' => 'Enddate', 'info_responsible' => 'Responsible', 'info_subject' => 'Subject', + 'info_des' => 'Description', + // PM fields + 'info_planned_time' => 'planned time', + 'info_used_time' => 'used time', + 'pl_id' => 'pricelist', + 'info_price' => 'price', + // custom fields + 'custom' => 'custom fields' ); /** @@ -90,29 +126,6 @@ class infolog_tracking extends bo_tracking $this->infolog =& $boinfolog; } - /** - * Tracks the changes in one entry $data, by comparing it with the last version in $old - * - * Reimplemented to fix some fields, who otherwise allways show up as modified - * - * @param array $data current entry - * @param array $old=null old/last state of the entry or null for a new entry - * @param int $user=null user who made the changes, default to current user - * @return int/boolean false on error, integer number of changes logged or true for new entries ($old == null) - */ - function track($data,$old=null,$user=null) - { - if ($old) - { - foreach($this->infolog->timestamps as $name) - { - if (!$old[$name]) $old[$name] = ''; - } - } - return parent::track($data,$old,$user); - } - - /** * Get a notification-config value * @@ -129,22 +142,54 @@ class infolog_tracking extends bo_tracking return null; } + /** + * Get the subject for a given entry + * + * Reimpleneted to use a New|deleted|modified prefix. + * + * @param array $data + * @param array $old + * @return string + */ + function get_subject($data,$old) + { + if (!$old || $old['info_status'] == 'deleted') + { + $prefix = lang('New %1',lang($this->infolog->enums['type'][$data['info_type']])); + } + elseif($data['info_status'] == 'deleted') + { + $prefix = lang('%1 deleted',lang($this->infolog->enums['type'][$data['info_type']])); + } + else + { + $prefix = lang('%1 modified',lang($this->infolog->enums['type'][$data['info_type']])); + } + return $prefix.': '.$data['info_subject']; + } + /** * Get the modified / new message (1. line of mail body) for a given entry, can be reimplemented * * @param array $data * @param array $old - * @return array/string array(message,user-id,timestamp-in-servertime) or string + * @return string */ function get_message($data,$old) { if ($data['message']) return $data['message']; // async notification - if (!$data['info_datemodified'] || !$old) + if (!$old || $old['info_status'] == 'deleted') { return lang('New %1 created by %2 at %3',lang($this->infolog->enums['type'][$data['info_type']]), $GLOBALS['egw']->common->grab_owner_name($this->infolog->user),$this->datetime(time())); } + elseif($data['info_status'] == 'deleted') + { + return lang('%1 deleted by %2 at %3',lang($this->infolog->enums['type'][$data['info_type']]), + $GLOBALS['egw']->common->grab_owner_name($data['info_modifier']), + $this->datetime($data['info_datemodified']-$this->infolog->tz_offset_s)); + } return lang('%1 modified by %2 at %3',lang($this->infolog->enums['type'][$data['info_type']]), $GLOBALS['egw']->common->grab_owner_name($data['info_modifier']), $this->datetime($data['info_datemodified']-$this->infolog->tz_offset_s)); @@ -184,7 +229,7 @@ class infolog_tracking extends bo_tracking 'info_cat' => $data['info_cat'] ? $GLOBALS['egw']->categories->id2name($data['info_cat']) : '', 'info_priority' => lang($this->infolog->enums['priority'][$data['info_priority']]), 'info_owner' => $GLOBALS['egw']->common->grab_owner_name($data['info_owner']), - 'info_status' => lang($this->infolog->status[$data['info_type']][$data['info_status']]), + 'info_status' => lang($data['info_status']=='deleted'?'deleted':$this->infolog->status[$data['info_type']][$data['info_status']]), 'info_percent' => (int)$data['info_percent'].'%', 'info_datecompleted' => $data['info_datecomplete'] ? $this->datetime($data['info_datecompleted']-$this->infolog->tz_offset_s) : '', 'info_location' => $data['info_location'], @@ -209,7 +254,7 @@ class infolog_tracking extends bo_tracking { foreach($this->infolog->customfields as $name => $field) { - if ($field['type2'] && $field['type2'] != $data['info_type']) continue; // different type + if ($field['type2'] && !in_array($data['info_type'],explode(',',$field['type2']))) continue; // different type if (!$header_done) { @@ -219,7 +264,7 @@ class infolog_tracking extends bo_tracking ); $header_done = true; } - $details[$name] = array( + $details['#'.$name] = array( 'label' => $field['label'], 'value' => $data['#'.$name], ); @@ -227,4 +272,27 @@ class infolog_tracking extends bo_tracking } return $details; } + + /** + * Save changes to the history log + * + * Reimplemented to store all customfields in a single field, as the history-log has only 2-char field-ids + * + * @param array $data current entry + * @param array $old=null old/last state of the entry or null for a new entry + * @param int number of log-entries made + */ + function save_history($data,$old) + { + $data_custom = $old_custom = array(); + foreach($this->infolog->customfields as $name => $custom) + { + if (isset($data['#'.$name]) && (string)$data['#'.$name]!=='') $data_custom[] = $custom['label'].': '.$data['#'.$name]; + if (isset($old['#'.$name]) && (string)$old['#'.$name]!=='') $old_custom[] = $custom['label'].': '.$old['#'.$name]; + } + $data['custom'] = implode("\n",$data_custom); + $old['custom'] = implode("\n",$old_custom); + + return parent::save_history($data,$old); + } } \ No newline at end of file diff --git a/infolog/inc/class.soinfolog.inc.php b/infolog/inc/class.soinfolog.inc.php index 8380cc8777..a8f5b154de 100644 --- a/infolog/inc/class.soinfolog.inc.php +++ b/infolog/inc/class.soinfolog.inc.php @@ -262,21 +262,24 @@ class soinfolog // DB-Layer /** * generate sql to filter based on the status of the log-entry * - * @param $filter done = done or billed, open = not ()done or billed), offer = offer + * @param string $filter done = done or billed, open = not (done, billed, cancelled or deleted), offer = offer + * @param boolean $prefix_and=true if true prefix the fileter with ' AND ' * @return string the necesary sql */ - function statusFilter($filter = '') + function statusFilter($filter = '',$prefix_and=true) { - preg_match('/(done|open|offer)/',$filter,$vars); + preg_match('/(done|open|offer|deleted)/',$filter,$vars); $filter = $vars[1]; switch ($filter) { - case 'done': return " AND info_status IN ('done','billed','cancelled')"; - case 'open': return " AND NOT (info_status IN ('done','billed','cancelled'))"; - case 'offer': return " AND info_status = 'offer'"; + case 'done': $filter = "info_status IN ('done','billed','cancelled')"; break; + case 'open': $filter = "NOT (info_status IN ('done','billed','cancelled','deleted'))"; break; + case 'offer': $filter = "info_status = 'offer'"; break; + case 'deleted': $filter = "info_status = 'deleted'"; break; + default: $filter = "info_status <> 'deleted'"; break; } - return ''; + return ($prefix_and ? ' AND ' : '').$filter; } /** @@ -444,6 +447,26 @@ class soinfolog // DB-Layer // set parent_id to $new_parent or 0 for all not deleted children $this->db->update($this->info_table,array('info_id_parent'=>$new_parent),array('info_id_parent'=>$info_id),__LINE__,__FILE__); } + + /** + * Return array with children of $info_id as info_id => info_owner pairs + * + * @param int $info_id + * @return array with info_id => info_owner pairs + */ + function get_children($info_id) + { + $this->db->select($this->info_table,'info_id,info_owner',array( + 'info_id_parent' => $info_id, + ),__LINE__,__FILE__); + + $children = array(); + while (($row = $this->db->row(true))) + { + $children[$row['info_id']] = $row['info_owner']; + } + return $children; + } /** * changes or deletes entries with a spezified owner (for hook_delete_account) @@ -466,6 +489,7 @@ class soinfolog // DB-Layer { $this->db->update($this->info_table,array('info_owner'=>$new_owner),array('info_owner'=>$owner),__LINE__,__FILE__); } + // ToDo: does not work with multiple owners!!! $this->db->update($this->info_table,array('info_responsible'=>$new_owner),array('info_responsible'=>$owner),__LINE__,__FILE__); } @@ -560,7 +584,7 @@ class soinfolog // DB-Layer //echo "

anzSubs($info_id) = ".$this->db->f(0)." ($sql)

\n"; return $this->db->f(0); } - + /** * searches InfoLog for a certain pattern in $query * @@ -743,7 +767,7 @@ class soinfolog // DB-Layer { $users[] = $this->db->f(0); } - $this->db->select($this->info_table,'DISTINCT info_responsible',str_replace(' AND ','',$this->statusFilter('open')),__LINE__,__FILE__); + $this->db->select($this->info_table,'DISTINCT info_responsible',$this->statusFilter('open',false),__LINE__,__FILE__); while ($this->db->next_record()) { foreach(explode(',',$this->db->f(0)) as $responsible) diff --git a/infolog/inc/class.uiinfolog.inc.php b/infolog/inc/class.uiinfolog.inc.php index 82fa80f359..aad233c9c8 100644 --- a/infolog/inc/class.uiinfolog.inc.php +++ b/infolog/inc/class.uiinfolog.inc.php @@ -142,6 +142,10 @@ class uiinfolog $this->duration_format = str_replace(',','',$pm_config->config_data['duration_units']).','.$pm_config->config_data['hours_per_workday']; unset($pm_config); } + if ($this->bo->history) + { + $this->filters['deleted'] = 'deleted'; + } /* these are just for testing of the notifications for($i = -1; $i <= 3; ++$i) { @@ -196,7 +200,8 @@ class uiinfolog $readonlys["close[$id]"] = $done || ($readonlys["edit_status[$id]"] = !($this->bo->check_access($info,EGW_ACL_EDIT) || $this->bo->is_responsible($info))); $readonlys["edit_status[$id]"] = $readonlys["edit_percent[$id]"] = - !$this->bo->check_access($info,EGW_ACL_EDIT) && !$this->bo->is_responsible($info); + !$this->bo->check_access($info,EGW_ACL_EDIT) && !$this->bo->is_responsible($info) && + !$this->bo->check_access($info,EGW_ACL_UNDELETE); // undelete is handled like status edit $readonlys["delete[$id]"] = !$this->bo->check_access($info,EGW_ACL_DELETE); $readonlys["sp[$id]"] = !$this->bo->check_access($info,EGW_ACL_ADD); $readonlys["view[$id]"] = $info['info_anz_subs'] < 1; @@ -237,7 +242,8 @@ class uiinfolog } } $info['info_type_label'] = $this->bo->enums['type'][$info['info_type']]; - $info['info_status_label'] = $this->bo->status[$info['info_type']][$info['info_status']]; + $info['info_status_label'] = isset($this->bo->status[$info['info_type']][$info['info_status']]) ? + $this->bo->status[$info['info_type']][$info['info_status']] : $info['info_status']; if (!$this->prefs['show_percent'] || $this->prefs['show_percent'] == 2 && !$details) { @@ -691,7 +697,7 @@ class uiinfolog */ function edit($content = null,$action = '',$action_id=0,$type='',$referer='') { - $tabs = 'description|links|delegation|project|customfields'; + $tabs = 'description|links|delegation|project|customfields|history'; if (is_array($content)) { @@ -722,9 +728,10 @@ class uiinfolog { $old = $this->bo->read($info_id); $status_only = $this->bo->is_responsible($old); + $undelete = $this->bo->check_access($old,EGW_ACL_UNDELETE); } } - if (($button == 'save' || $button == 'apply') && (!$info_id || $edit_acl || $status_only)) + if (($button == 'save' || $button == 'apply') && (!$info_id || $edit_acl || $status_only || $undelete)) { if ($content['info_contact']) { @@ -912,7 +919,9 @@ class uiinfolog } else { - if ($info_id && !$this->bo->check_access($info_id,EGW_ACL_EDIT) && !$this->bo->is_responsible($content)) + if ($info_id && !$this->bo->check_access($info_id,EGW_ACL_EDIT) && + !($undelete = $this->bo->check_access($info_id,EGW_ACL_UNDELETE)) && + !$this->bo->is_responsible($content)) { if ($no_popup) { @@ -1018,7 +1027,7 @@ class uiinfolog } $preserv = $content; // for implizit edit of responsible user make all fields readonly, but status and percent - if ($info_id && !$this->bo->check_access($info_id,EGW_ACL_EDIT) && $this->bo->is_responsible($content)) + if ($info_id && !$this->bo->check_access($info_id,EGW_ACL_EDIT) && $this->bo->is_responsible($content) && !$undelete) { $content['status_only'] = !in_array('link_to',$this->bo->responsible_edit); foreach(array_diff(array_merge(array_keys($content),array('pm_id')),$this->bo->responsible_edit) as $name) @@ -1032,6 +1041,9 @@ class uiinfolog $readonlys['#'.$name] = true; } } + // ToDo: use the old status before the delete + if ($undelete) $content['info_status'] = $this->bo->status['defaults'][$content['info_type']]; + $content['hide_from_css'] = $content['info_custom_from'] ? '' : 'hideFrom'; if (!($readonlys['button[delete]'] = !$info_id || !$this->bo->check_access($info_id,EGW_ACL_DELETE))) @@ -1051,7 +1063,7 @@ class uiinfolog } else { - $readonlys[$tabs] = array('customfields' => true); + $readonlys[$tabs]['customfields'] = true; } if (!isset($GLOBALS['egw_info']['user']['apps']['projectmanager'])) { @@ -1066,6 +1078,44 @@ class uiinfolog $old_pm_id = is_array($pm_links) ? array_shift($pm_links) : $content['old_pm_id']; if (!isset($content['pm_id']) && $old_pm_id) $content['pm_id'] = $old_pm_id; + if ($info_id && $this->bo->history) + { + $content['history'] = array( + 'id' => $info_id, + 'app' => 'infolog', + 'status-widgets' => array( + 'Ty' => $types, + //'Li', // info_link_id + 'Ca' => 'select-cat', + 'Pr' => $this->bo->enums['priority'], + 'Ow' => 'select-account', + //'Ac', // info_access: private||public + 'St' => $this->bo->status[$content['info_type']]+array('deleted' => 'deleted'), + 'Pe' => 'select-percent', + 'Co' => 'date-time', + 'st' => 'date-time', + 'En' => 'date', + 'Re' => 'select-account', + // PM fields, ToDo: access control!!! + 'pT' => 'date-duration', + 'uT' => 'date-duration', +// 'pL' => 'projectmanager-pricelist', + 'pr' => 'float', + ), + ); + $history_stati = array(); + require_once(EGW_INCLUDE_ROOT.'/infolog/inc/class.infolog_tracking.inc.php'); + $tracking = new infolog_tracking($this); + foreach($tracking->field2history as $field => $history) + { + $history_stati[$history] = $tracking->field2label[$field]; + } + unset($tracking); + } + else + { + $readonlys[$tabs]['history'] = true; + } $GLOBALS['egw_info']['flags']['app_header'] = lang('InfoLog').' - '. ($content['status_only'] ? lang('Edit Status') : lang('Edit')); $GLOBALS['egw_info']['flags']['params']['manual'] = array('page' => ($info_id ? 'ManualInfologEdit' : 'ManualInfologAdd')); @@ -1074,7 +1124,8 @@ class uiinfolog 'info_type' => $types, 'info_priority' => $this->bo->enums['priority'], 'info_confirm' => $this->bo->enums['confirm'], - 'info_status' => $this->bo->status[$content['info_type']] + 'info_status' => $this->bo->status[$content['info_type']], + 'status' => $history_stati, ),$readonlys,$preserv+array( // preserved values 'info_id' => $info_id, 'action' => $action, @@ -1110,6 +1161,33 @@ class uiinfolog return $icon ? $this->html->image('infolog',$icon,lang($alt),'border=0') : lang($alt); } + /** + * stripping slashes from an array + * + * @static + * @param array $arr + * @return array + */ + function array_stripslashes($arr) + { + foreach($arr as $key => $val) + { + if (is_array($val)) + { + $arr[$key] = self::array_stripslashes($var); + } + else + { + $arr[$key] = stripslashes($val); + } + } + return $arr; + } + + /** + * Infolog's site configuration + * + */ function admin( ) { $fields = array( @@ -1126,41 +1204,43 @@ class uiinfolog ); if($_POST['save'] || $_POST['apply']) { - $this->link_pathes = $this->bo->send_file_ips = array(); + if (get_magic_quotes_gpc()) + { + $_POST = self::array_stripslashes($_POST); + } + $this->bo->config->config_data['link_pathes'] = $this->bo->link_pathes = array(); + $this->bo->config->config_data['send_file_ips'] = $this->bo->send_file_ips = array(); $valid = get_var('valid',Array('POST')); $trans = get_var('trans',Array('POST')); $ip = get_var('ip',Array('POST')); - while(list($key,$val) = each($valid)) + foreach($valid as $key => $val) { - if($val = stripslashes($val)) + if($val) { - $this->link_pathes[$val] = stripslashes($trans[$key]); - $this->bo->send_file_ips[$val] = stripslashes($ip[$key]); + $this->bo->config->config_data['link_pathes'][$val] = $this->bo->link_pathes[$val] = $trans[$key]; + $this->bo->config->config_data['send_file_ips'][$val] = $this->bo->send_file_ips[$val] = $ip[$key]; } } $this->bo->responsible_edit = array('info_status','info_percent','info_datecompleted'); + if ($_POST['responsible_edit']) { $extra = array_intersect($_POST['responsible_edit'],array_keys($fields)); - $this->bo->responsible_edit = array_merge($this->bo->responsible_edit,$extra); + $this->bo->config->config_data['responsible_edit'] = $this->bo->responsible_edit = array_merge($this->bo->responsible_edit,$extra); } - $this->bo->implicit_rights = $_POST['implicit_rights'] == 'edit' ? 'edit' : 'read'; + $this->bo->config->config_data['implicit_rights'] = $this->bo->implicit_rights = $_POST['implicit_rights'] == 'edit' ? 'edit' : 'read'; + + $this->bo->config->config_data['history'] = $this->bo->history = $_POST['history']; - $this->bo->config->config_data += array( // only "adding" the changed items, to not delete other config like custom fields - 'link_pathes' => $this->link_pathes, - 'send_file_ips' => $this->bo->send_file_ips, - 'implicit_rights' => $this->bo->implicit_rights, - 'responsible_edit' => is_array($extra) ? implode(',',$extra) : $extra, - ); $this->bo->config->save_repository(True); } if($_POST['cancel'] || $_POST['save']) { - $GLOBALS['egw']->redirect_link('/admin/index.php'); + $GLOBALS['egw']->redirect_link('/infolog/index.php'); } - $GLOBALS['egw_info']['flags']['app_header'] = lang('InfoLog').' - '.lang('Configuration'); + $GLOBALS['egw_info']['flags']['app_header'] = lang('InfoLog').' - '.lang('Site configuration'); $GLOBALS['egw']->common->egw_header(); $GLOBALS['egw']->template->set_file(array('info_admin_t' => 'admin.tpl')); @@ -1183,16 +1263,24 @@ class uiinfolog 'cancel_button' => $this->html->submit_button('cancel','Cancel'), 'lang_valid' => lang('valid path on clientside
eg. \\\\Server\\Share or e:\\'), 'lang_trans' => lang('path on (web-)serverside
eg. /var/samba/Share'), - 'lang_ip' => lang('reg. expr. for local IP\'s
eg. ^192\\.168\\.1\\.') + 'lang_ip' => lang('reg. expr. for local IP\'s
eg. ^192\\.168\\.1\\.'), + 'lang_history'=> lang('History logging'), + 'lang_history2'=> lang('History logging and deleting of items'), + 'history' => $this->html->select('history',$this->bo->history,array( + '' => lang('No'), + 'history' => lang('Yes, with purging of deleted items possible'), + 'history_admin_delete' => lang('Yes, only admins can purge deleted items'), + 'history_no_delete' => lang('Yes, noone can purge deleted items'), + )) )); if (!is_array($this->bo->send_file_ips)) { - $this->bo->send_file_ips = $this->link_pathes = array(); + $this->bo->send_file_ips = $this->bo->link_pathes = array(); } - $i = 0; @reset($this->link_pathes); + $i = 0; @reset($this->bo->link_pathes); do { - list($valid,$trans) = @each($this->link_pathes); + list($valid,$trans) = @each($this->bo->link_pathes); $GLOBALS['egw']->template->set_var(array( 'tr_color' => $i & 1 ? 'row_off' : 'row_on', 'num' => $i+1, @@ -1322,23 +1410,6 @@ class uiinfolog exit; } - /** - * writes langfile with all templates and messages registered here - * - * called via [write Langfile] in the etemplate-editor or as http://domain/egroupware/index.php?menuaction=infolog.uiinfolog.writeLangFile - */ - function writeLangFile() - { - $extra = $this->messages + $this->filters; - $enums = $this->bo->enums + $this->bo->status; - unset($enums['defaults']); - foreach($enums as $key => $msg_arr) - { - $extra += $msg_arr; - } - return $this->tmpl->writeLangFile('infolog','en',$extra); - } - /** * shows infolog in other applications * diff --git a/infolog/setup/etemplates.inc.php b/infolog/setup/etemplates.inc.php index 85198c9cd9..a6347041ab 100644 --- a/infolog/setup/etemplates.inc.php +++ b/infolog/setup/etemplates.inc.php @@ -2,7 +2,7 @@ /** * eGroupWare - eTemplates for Application infolog * http://www.egroupware.org - * generated by soetemplate::dump4setup() 2007-03-12 10:59 + * generated by soetemplate::dump4setup() 2007-06-13 23:32 * * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @package infolog @@ -12,9 +12,6 @@ $templ_version=1; -$templ_data[] = array('name' => 'infolog.customfields','template' => '','lang' => '','group' => '0','version' => '1.2.001','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:7:{i:0;a:3:{s:1:"F";s:3:"80%";s:2:"c2";s:6:"header";s:2:"c4";s:6:"header";}i:1;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:3:"Typ";}s:1:"B";a:4:{s:4:"type";s:6:"select";s:4:"name";s:3:"typ";s:8:"onchange";s:1:"1";s:4:"help";s:52:"select a typ to edit it\'s status-values or delete it";}s:1:"C";a:4:{s:4:"type";s:6:"button";s:5:"label";s:6:"Delete";s:4:"name";s:14:"button[delete]";s:4:"help";s:24:"deletes the selected typ";}s:1:"D";a:5:{s:4:"type";s:4:"text";s:4:"size";s:5:"10,40";s:4:"name";s:8:"new_name";s:4:"help";s:26:"name of new type to create";s:4:"blur";s:8:"new name";}s:1:"E";a:4:{s:4:"type";s:6:"button";s:5:"label";s:6:"Create";s:4:"name";s:14:"button[create]";s:4:"help";s:37:"creates a new typ with the given name";}s:1:"F";a:5:{s:4:"type";s:5:"label";s:4:"span";s:10:",error_msg";s:7:"no_lang";s:1:"1";s:5:"align";s:6:"center";s:4:"name";s:9:"error_msg";}}i:2;a:6:{s:1:"A";a:4:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:21:"Custom status for typ";s:4:"name";s:3:"typ";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:3;a:6:{s:1:"A";a:4:{s:4:"type";s:8:"template";s:4:"size";s:6:"status";s:4:"span";s:3:"all";s:4:"name";s:6:"status";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:4;a:6:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:13:"Custom fields";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:5;a:6:{s:1:"A";a:4:{s:4:"type";s:8:"template";s:4:"size";s:6:"fields";s:4:"span";s:3:"all";s:4:"name";s:6:"fields";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:6;a:6:{s:1:"A";a:6:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";s:4:"span";s:3:"all";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:12:"button[save]";s:4:"help";s:33:"saves the changes made and leaves";}i:2;a:4:{s:4:"type";s:6:"button";s:5:"label";s:5:"Apply";s:4:"name";s:13:"button[apply]";s:4:"help";s:19:"applies the changes";}i:3;a:4:{s:4:"type";s:6:"button";s:5:"label";s:6:"Cancel";s:4:"name";s:14:"button[cancel]";s:4:"help";s:22:"leaves without saveing";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:6;s:4:"cols";i:6;}}','size' => '','style' => '.header { font-weight: bold; font-size: 120%; } -.error_msg { color: red; font-style: italics; }','modified' => '1061729975',); - $templ_data[] = array('name' => 'infolog.customfields','template' => '','lang' => '','group' => '0','version' => '1.3.001','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:7:{i:0;a:3:{s:1:"F";s:3:"80%";s:2:"c2";s:6:"header";s:2:"c4";s:6:"header";}i:1;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:3:"Typ";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:5:"type2";s:8:"onchange";i:1;s:4:"help";s:52:"select a typ to edit it\'s status-values or delete it";s:7:"no_lang";s:1:"1";}s:1:"C";a:4:{s:4:"type";s:6:"button";s:5:"label";s:6:"Delete";s:4:"name";s:14:"button[delete]";s:4:"help";s:24:"deletes the selected typ";}s:1:"D";a:5:{s:4:"type";s:4:"text";s:4:"size";s:5:"10,40";s:4:"name";s:8:"new_name";s:4:"help";s:26:"name of new type to create";s:4:"blur";s:8:"new name";}s:1:"E";a:4:{s:4:"type";s:6:"button";s:5:"label";s:6:"Create";s:4:"name";s:14:"button[create]";s:4:"help";s:37:"creates a new typ with the given name";}s:1:"F";a:5:{s:4:"type";s:5:"label";s:4:"span";s:10:",error_msg";s:7:"no_lang";s:1:"1";s:5:"align";s:6:"center";s:4:"name";s:9:"error_msg";}}i:2;a:6:{s:1:"A";a:4:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:21:"Custom status for typ";s:4:"name";s:3:"typ";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:3;a:6:{s:1:"A";a:4:{s:4:"type";s:8:"template";s:4:"size";s:6:"status";s:4:"span";s:3:"all";s:4:"name";s:6:"status";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:4;a:6:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:13:"Custom fields";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:5;a:6:{s:1:"A";a:4:{s:4:"type";s:8:"template";s:4:"size";s:6:"fields";s:4:"span";s:3:"all";s:4:"name";s:6:"fields";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:6;a:6:{s:1:"A";a:6:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";s:4:"span";s:3:"all";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:12:"button[save]";s:4:"help";s:33:"saves the changes made and leaves";}i:2;a:4:{s:4:"type";s:6:"button";s:5:"label";s:5:"Apply";s:4:"name";s:13:"button[apply]";s:4:"help";s:19:"applies the changes";}i:3;a:4:{s:4:"type";s:6:"button";s:5:"label";s:6:"Cancel";s:4:"name";s:14:"button[cancel]";s:4:"help";s:22:"leaves without saveing";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:1:{s:4:"type";s:5:"label";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:6;s:4:"cols";i:6;}}','size' => '','style' => '.header { font-weight: bold; font-size: 120%; } .error_msg { color: red; font-style: italics; }','modified' => '1159943136',); @@ -33,16 +30,11 @@ $templ_data[] = array('name' => 'infolog.delete','template' => '','lang' => '',' $templ_data[] = array('name' => 'infolog.delete','template' => '','lang' => '','group' => '0','version' => '1.0.1.002','data' => 'a:1:{i:0;a:5:{s:4:"type";s:4:"grid";s:4:"data";a:6:{i:0;a:3:{s:2:"h3";s:2:"30";s:2:"h4";s:2:"50";s:2:"c3";s:7:",bottom";}i:1;a:1:{s:1:"A";a:1:{s:4:"type";s:5:"label";}}i:2;a:1:{s:1:"A";a:4:{s:4:"type";s:8:"template";s:4:"size";s:4:"main";s:5:"align";s:6:"center";s:4:"name";s:27:"infolog.index.rows-noheader";}}i:3;a:1:{s:1:"A";a:4:{s:4:"type";s:5:"label";s:4:"span";s:11:",headertext";s:5:"label";s:45:"Are you shure you want to delete this entry ?";s:5:"align";s:6:"center";}}i:4;a:1:{s:1:"A";a:6:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:12:"Yes - Delete";s:4:"name";s:6:"delete";s:4:"help";s:75:"Sub-entries become subs of the parent or main entries, if there\'s no parent";}i:2;a:4:{s:4:"type";s:6:"button";s:5:"label";s:34:"Yes - Delete including sub-entries";s:4:"name";s:11:"delete_subs";s:4:"help";s:44:"Delete this entry and all listed sub-entries";}s:5:"align";s:6:"center";i:3;a:4:{s:4:"type";s:6:"button";s:5:"label";s:11:"No - Cancel";s:4:"name";s:6:"cancel";s:4:"help";s:22:"Abort without deleting";}}}i:5;a:1:{s:1:"A";a:4:{s:4:"type";s:9:"nextmatch";s:4:"size";s:20:"infolog.index.rows,1";s:4:"span";s:3:"all";s:4:"name";s:2:"nm";}}}s:4:"rows";i:5;s:4:"cols";i:1;s:4:"size";s:12:"100%,,0,,0,0";}}','size' => '100%,,0,,0,0','style' => '','modified' => '1131742953',); -$templ_data[] = array('name' => 'infolog.edit','template' => '','lang' => '','group' => '0','version' => '1.2.002','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:13:{i:0;a:18:{s:1:"A";s:3:"103";s:1:"B";s:3:"260";s:1:"C";s:3:"140";s:2:"c3";s:3:"row";s:2:"c4";s:3:"row";s:2:"c8";s:6:"row_on";s:2:"c9";s:3:"row";s:2:"c7";s:2:"th";s:2:"c6";s:4:",top";s:2:"c5";s:3:"row";s:2:"c2";s:2:"th";s:2:"h6";s:3:"250";s:2:"h7";s:2:",1";s:2:"h2";s:2:"28";s:2:"h1";s:6:",!@msg";s:3:"c11";s:3:"row";s:3:"h11";s:13:",!@info_owner";s:3:"c10";s:3:"row";}i:1;a:4:{s:1:"A";a:5:{s:4:"type";s:4:"html";s:4:"span";s:13:"all,redItalic";s:5:"align";s:6:"center";s:4:"name";s:3:"msg";s:7:"no_lang";s:1:"1";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:2;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:4:"Type";s:4:"size";s:12:",,,info_type";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"span";s:3:"all";s:4:"name";s:9:"info_type";s:8:"onchange";s:1:"1";s:4:"help";s:46:"Type of the log-entry: Note, Phonecall or ToDo";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:3;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:8:"Category";s:4:"size";s:11:",,,info_cat";}s:1:"B";a:5:{s:4:"type";s:10:"select-cat";s:4:"size";s:4:"None";s:4:"span";s:3:"all";s:4:"name";s:8:"info_cat";s:4:"help";s:32:"select a category for this entry";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:4;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:7:"Contact";s:4:"size";s:12:",,,info_from";}s:1:"B";a:5:{s:4:"type";s:4:"text";s:4:"size";s:6:"36,255";s:4:"name";s:9:"info_from";s:4:"help";s:80:"Custom contact-information, leave emtpy to use information from most recent link";s:4:"blur";s:11:"@blur_title";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:11:"Phone/Email";s:4:"size";s:13:",,,_info_addr";}s:1:"D";a:4:{s:4:"type";s:4:"text";s:4:"size";s:6:"30,255";s:4:"name";s:9:"info_addr";s:4:"help";s:76:"Custom contact-address, leave empty to use information from most recent link";}}i:5;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:7:"Subject";s:4:"size";s:15:",,,info_subject";}s:1:"B";a:6:{s:4:"type";s:4:"text";s:4:"size";s:6:"80,255";s:4:"span";s:3:"all";s:4:"name";s:12:"info_subject";s:6:"needed";s:1:"1";s:4:"help";s:29:"a short subject for the entry";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:6;a:4:{s:1:"A";a:5:{s:4:"type";s:3:"tab";s:4:"span";s:3:"all";s:5:"label";s:56:"Description|Links|Delegation|Projectmanager|Customfields";s:4:"name";s:49:"description|links|delegation|project|customfields";s:4:"help";s:118:"longer textual description|Links of this entry|responsible user, priority|Project settings: price, times|Custom fields";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:7;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:21:"Dates, Status, Access";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:8;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Startdate";s:4:"size";s:17:",,,info_startdate";}s:1:"B";a:4:{s:4:"type";s:9:"date-time";s:4:"size";s:2:",2";s:4:"name";s:14:"info_startdate";s:4:"help";s:115:"when should the ToDo or Phonecall be started, it shows up from that date in the filter open or own open (startpage)";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:7:"Enddate";s:4:"size";s:15:",,,info_enddate";}s:1:"D";a:3:{s:4:"type";s:4:"date";s:4:"name";s:12:"info_enddate";s:4:"help";s:49:"til when should the ToDo or Phonecall be finished";}}i:9;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:6:"Status";s:4:"size";s:14:",,,info_status";}s:1:"B";a:4:{s:4:"type";s:6:"select";s:4:"name";s:11:"info_status";s:4:"help";s:12:"@status_help";s:8:"onchange";s:183:"if (this.value==\'done\' || this.value==\'billed\') set_element(this.form,\'exec[info_percent]\',\'100\'); else if (this.value==\'not-started\') set_element(this.form,\'exec[info_percent]\',\'0\');";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Completed";s:4:"size";s:15:",,,info_percent";}s:1:"D";a:4:{s:4:"type";s:14:"select-percent";s:4:"name";s:12:"info_percent";s:4:"help";s:17:"Percent completed";s:8:"onchange";s:570:"if (this.value==100 && this.form[\'exec[info_status]\'].value != \'done\' && this.form[\'exec[info_status]\'].value != \'billed\' && this.form[\'exec[info_status]\'].value != \'cancelled\') this.form[\'exec[info_status]\'].value=\'done\'; else if (this.value != 100 && this.form[\'exec[info_status]\'].value != \'cancelled\') this.form[\'exec[info_status]\'].value=this.value != 0 ? \'ongoing\' : \'not-started\'; else if (this.value==0 && this.form[\'exec[info_status]\'].value != \'cancelled\' && this.form[\'exec[info_status]\'].value != \'offer\') this.form[\'exec[info_status]\'].value=\'not-started\'; ";}}i:10;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:21:",,,info_datecompleted";s:5:"label";s:14:"Date completed";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:18:"info_datecompleted";s:4:"help";s:84:"Date completed (leave it empty to have it automatic set if status is done or billed)";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:7:"Private";s:4:"size";s:14:",,,info_access";}s:1:"D";a:4:{s:4:"type";s:8:"checkbox";s:4:"size";s:14:"private,public";s:4:"name";s:11:"info_access";s:4:"help";s:87:"should this entry only be visible to you and people you grant privat access via the ACL";}}i:11;a:4:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Owner";}s:1:"B";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:10:"info_owner";s:8:"readonly";s:1:"1";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:13:"Last modified";}s:1:"D";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:5:"2,0,0";i:1;a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:13:"info_modifier";s:8:"readonly";s:1:"1";}i:2;a:4:{s:4:"type";s:9:"date-time";s:4:"span";s:10:",lpadding5";s:4:"name";s:17:"info_datemodified";s:8:"readonly";s:1:"1";}}}i:12;a:4:{s:1:"A";a:7:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"4";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:12:"button[save]";s:4:"help";s:16:"Saves this entry";}s:4:"span";s:1:"2";i:2;a:4:{s:4:"type";s:6:"button";s:4:"name";s:13:"button[apply]";s:5:"label";s:5:"Apply";s:4:"help";s:17:"Apply the changes";}i:3;a:5:{s:4:"type";s:6:"button";s:5:"label";s:6:"Cancel";s:4:"name";s:14:"button[cancel]";s:4:"help";s:31:"leave without saveing the entry";s:7:"onclick";s:15:"window.close();";}i:4;a:2:{s:4:"type";s:4:"html";s:4:"name";s:2:"js";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:6:{s:4:"type";s:6:"button";s:5:"label";s:6:"Delete";s:5:"align";s:5:"right";s:4:"name";s:14:"button[delete]";s:4:"help";s:17:"delete this entry";s:7:"onclick";s:60:"return $cont[info_anz_subs] || confirm(\'Delete this entry\');";}}}s:4:"rows";i:12;s:4:"cols";i:4;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1142602276',); - $templ_data[] = array('name' => 'infolog.edit','template' => '','lang' => '','group' => '0','version' => '1.3.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:13:{i:0;a:18:{s:1:"A";s:3:"103";s:1:"B";s:3:"260";s:1:"C";s:3:"140";s:2:"c3";s:3:"row";s:2:"c4";s:3:"row";s:2:"c8";s:6:"row_on";s:2:"c9";s:3:"row";s:2:"c7";s:2:"th";s:2:"c6";s:4:",top";s:2:"c5";s:3:"row";s:2:"c2";s:2:"th";s:2:"h6";s:3:"250";s:2:"h7";s:2:",1";s:2:"h2";s:2:"28";s:2:"h1";s:6:",!@msg";s:3:"c11";s:3:"row";s:3:"h11";s:13:",!@info_owner";s:3:"c10";s:3:"row";}i:1;a:4:{s:1:"A";a:5:{s:4:"type";s:4:"html";s:4:"span";s:13:"all,redItalic";s:5:"align";s:6:"center";s:4:"name";s:3:"msg";s:7:"no_lang";s:1:"1";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:2;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:4:"Type";s:4:"size";s:12:",,,info_type";}s:1:"B";a:5:{s:4:"type";s:4:"hbox";s:4:"span";s:3:"all";s:4:"size";s:6:"2,,0,0";i:1;a:5:{s:4:"type";s:6:"select";s:4:"name";s:9:"info_type";s:8:"onchange";i:1;s:4:"help";s:46:"Type of the log-entry: Note, Phonecall or ToDo";s:7:"no_lang";s:1:"1";}i:2;a:4:{s:4:"type";s:3:"int";s:4:"name";s:11:"info_number";s:4:"span";s:7:",infoId";s:8:"readonly";s:1:"1";}}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:3;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:8:"Category";s:4:"size";s:11:",,,info_cat";}s:1:"B";a:5:{s:4:"type";s:10:"select-cat";s:4:"size";s:4:"None";s:4:"span";s:3:"all";s:4:"name";s:8:"info_cat";s:4:"help";s:32:"select a category for this entry";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:4;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:7:"Contact";s:4:"size";s:12:",,,info_from";}s:1:"B";a:38:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:6:"2,,0,0";i:1;a:3:{s:4:"type";s:10:"link-entry";s:4:"name";s:12:"info_contact";s:4:"span";s:7:",noWrap";}i:2;a:4:{s:4:"type";s:8:"checkbox";s:4:"name";s:16:"info_custom_from";s:8:"onchange";s:91:"document.getElementById(form::name(\'info_from\')).style.display=this.checked?\'block\':\'none\';";s:4:"help";s:31:"Check to specify custom contact";}}i:2;a:6:{s:4:"type";s:4:"text";s:4:"size";s:6:"36,255";s:4:"name";s:9:"info_from";s:4:"help";s:80:"Custom contact-information, leave emtpy to use information from most recent link";s:4:"blur";s:11:"@blur_title";s:4:"span";s:21:",$cont[hide_from_css]";}i:3;a:1:{s:4:"type";s:5:"label";}i:4;a:1:{s:4:"type";s:5:"label";}i:5;a:1:{s:4:"type";s:5:"label";}i:6;a:1:{s:4:"type";s:5:"label";}i:7;a:1:{s:4:"type";s:5:"label";}i:8;a:1:{s:4:"type";s:5:"label";}i:9;a:1:{s:4:"type";s:5:"label";}i:10;a:1:{s:4:"type";s:5:"label";}i:11;a:1:{s:4:"type";s:5:"label";}i:12;a:1:{s:4:"type";s:5:"label";}i:13;a:1:{s:4:"type";s:5:"label";}i:14;a:1:{s:4:"type";s:5:"label";}i:15;a:1:{s:4:"type";s:5:"label";}i:16;a:1:{s:4:"type";s:5:"label";}i:17;a:1:{s:4:"type";s:5:"label";}i:18;a:1:{s:4:"type";s:5:"label";}i:19;a:1:{s:4:"type";s:5:"label";}i:20;a:1:{s:4:"type";s:5:"label";}i:21;a:1:{s:4:"type";s:5:"label";}i:22;a:1:{s:4:"type";s:5:"label";}i:23;a:1:{s:4:"type";s:5:"label";}i:24;a:1:{s:4:"type";s:5:"label";}i:25;a:1:{s:4:"type";s:5:"label";}i:26;a:1:{s:4:"type";s:5:"label";}i:27;a:1:{s:4:"type";s:5:"label";}i:28;a:1:{s:4:"type";s:5:"label";}i:29;a:1:{s:4:"type";s:5:"label";}i:30;a:1:{s:4:"type";s:5:"label";}i:31;a:1:{s:4:"type";s:5:"label";}i:32;a:1:{s:4:"type";s:5:"label";}i:33;a:1:{s:4:"type";s:5:"label";}i:34;a:1:{s:4:"type";s:5:"label";}i:35;a:1:{s:4:"type";s:5:"label";}i:36;a:1:{s:4:"type";s:5:"label";}}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:11:"Phone/Email";s:4:"size";s:13:",,,_info_addr";}s:1:"D";a:4:{s:4:"type";s:4:"text";s:4:"size";s:6:"30,255";s:4:"name";s:9:"info_addr";s:4:"help";s:76:"Custom contact-address, leave empty to use information from most recent link";}}i:5;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:7:"Subject";s:4:"size";s:15:",,,info_subject";}s:1:"B";a:5:{s:4:"type";s:4:"text";s:4:"size";s:6:"80,255";s:4:"span";s:3:"all";s:4:"name";s:12:"info_subject";s:4:"help";s:29:"a short subject for the entry";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:6;a:4:{s:1:"A";a:5:{s:4:"type";s:3:"tab";s:4:"span";s:3:"all";s:5:"label";s:56:"Description|Links|Delegation|Projectmanager|Customfields";s:4:"name";s:49:"description|links|delegation|project|customfields";s:4:"help";s:118:"longer textual description|Links of this entry|responsible user, priority|Project settings: price, times|Custom fields";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:7;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:21:"Dates, Status, Access";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:8;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Startdate";s:4:"size";s:17:",,,info_startdate";}s:1:"B";a:4:{s:4:"type";s:9:"date-time";s:4:"size";s:2:",2";s:4:"name";s:14:"info_startdate";s:4:"help";s:115:"when should the ToDo or Phonecall be started, it shows up from that date in the filter open or own open (startpage)";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:7:"Enddate";s:4:"size";s:15:",,,info_enddate";}s:1:"D";a:3:{s:4:"type";s:4:"date";s:4:"name";s:12:"info_enddate";s:4:"help";s:49:"til when should the ToDo or Phonecall be finished";}}i:9;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:6:"Status";s:4:"size";s:14:",,,info_status";}s:1:"B";a:4:{s:4:"type";s:6:"select";s:4:"name";s:11:"info_status";s:4:"help";s:12:"@status_help";s:8:"onchange";s:183:"if (this.value==\'done\' || this.value==\'billed\') set_element(this.form,\'exec[info_percent]\',\'100\'); else if (this.value==\'not-started\') set_element(this.form,\'exec[info_percent]\',\'0\');";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Completed";s:4:"size";s:15:",,,info_percent";}s:1:"D";a:4:{s:4:"type";s:14:"select-percent";s:4:"name";s:12:"info_percent";s:4:"help";s:17:"Percent completed";s:8:"onchange";s:570:"if (this.value==100 && this.form[\'exec[info_status]\'].value != \'done\' && this.form[\'exec[info_status]\'].value != \'billed\' && this.form[\'exec[info_status]\'].value != \'cancelled\') this.form[\'exec[info_status]\'].value=\'done\'; else if (this.value != 100 && this.form[\'exec[info_status]\'].value != \'cancelled\') this.form[\'exec[info_status]\'].value=this.value != 0 ? \'ongoing\' : \'not-started\'; else if (this.value==0 && this.form[\'exec[info_status]\'].value != \'cancelled\' && this.form[\'exec[info_status]\'].value != \'offer\') this.form[\'exec[info_status]\'].value=\'not-started\'; ";}}i:10;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:21:",,,info_datecompleted";s:5:"label";s:14:"Date completed";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:18:"info_datecompleted";s:4:"help";s:84:"Date completed (leave it empty to have it automatic set if status is done or billed)";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:7:"Private";s:4:"size";s:14:",,,info_access";}s:1:"D";a:4:{s:4:"type";s:8:"checkbox";s:4:"size";s:14:"private,public";s:4:"name";s:11:"info_access";s:4:"help";s:87:"should this entry only be visible to you and people you grant privat access via the ACL";}}i:11;a:4:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Owner";}s:1:"B";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:10:"info_owner";s:8:"readonly";s:1:"1";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:13:"Last modified";}s:1:"D";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:5:"2,0,0";i:1;a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:13:"info_modifier";s:8:"readonly";s:1:"1";}i:2;a:4:{s:4:"type";s:9:"date-time";s:4:"span";s:10:",lpadding5";s:4:"name";s:17:"info_datemodified";s:8:"readonly";s:1:"1";}}}i:12;a:4:{s:1:"A";a:7:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"4";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:12:"button[save]";s:4:"help";s:16:"Saves this entry";}s:4:"span";s:1:"2";i:2;a:4:{s:4:"type";s:6:"button";s:4:"name";s:13:"button[apply]";s:5:"label";s:5:"Apply";s:4:"help";s:17:"Apply the changes";}i:3;a:5:{s:4:"type";s:6:"button";s:5:"label";s:6:"Cancel";s:4:"name";s:14:"button[cancel]";s:4:"help";s:31:"leave without saveing the entry";s:7:"onclick";s:15:"window.close();";}i:4;a:2:{s:4:"type";s:4:"html";s:4:"name";s:2:"js";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:6:{s:4:"type";s:6:"button";s:5:"label";s:6:"Delete";s:5:"align";s:5:"right";s:4:"name";s:14:"button[delete]";s:4:"help";s:17:"delete this entry";s:7:"onclick";s:60:"return $cont[info_anz_subs] || confirm(\'Delete this entry\');";}}}s:4:"rows";i:12;s:4:"cols";i:4;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '.hideFrom input { display: none; } .link_select select { width: 250px; }','modified' => '1159943980',); -$templ_data[] = array('name' => 'infolog.edit.Angebot','template' => '','lang' => '','group' => '0','version' => '','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:3:{s:1:"A";s:3:"100";s:1:"B";s:2:"1%";s:2:"c2";s:7:"noPrint";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:8:"template";s:4:"name";s:12:"infolog.edit";s:4:"span";s:11:"all,noPrint";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"hrule";}s:1:"B";a:4:{s:4:"type";s:6:"button";s:5:"label";s:5:"Print";s:5:"align";s:5:"right";s:7:"onclick";s:15:"window.print();";}}i:3;a:2:{s:1:"A";a:2:{s:4:"type";s:8:"template";s:4:"name";s:26:"infolog.edit.Angebot.print";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:3;s:4:"cols";i:2;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1158750796',); - -$templ_data[] = array('name' => 'infolog.edit.Angebot','template' => '','lang' => '','group' => '0','version' => '1.2','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:3:{s:1:"B";s:2:"1%";s:2:"c2";s:7:"noPrint";s:2:"c1";s:7:"noPrint";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:8:"template";s:4:"span";s:3:"all";s:4:"name";s:12:"infolog.edit";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"hrule";}s:1:"B";a:3:{s:4:"type";s:6:"button";s:5:"label";s:5:"Print";s:7:"onclick";s:31:"document.print(); return false;";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:8:"template";s:4:"span";s:3:"all";s:4:"name";s:26:"infolog.edit.Angebot.print";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:3;s:4:"cols";i:2;}}','size' => '','style' => '','modified' => '1160039724',); - -$templ_data[] = array('name' => 'infolog.edit.Angebot.print','template' => '','lang' => '','group' => '0','version' => '','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:3:{s:4:"type";s:13:"contact-value";s:4:"size";s:4:"n_fn";s:4:"name";s:12:"info_contact";}}}s:4:"rows";i:1;s:4:"cols";i:1;}}','size' => '','style' => '','modified' => '1160042614',); +$templ_data[] = array('name' => 'infolog.edit','template' => '','lang' => '','group' => '0','version' => '1.3.002','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:13:{i:0;a:18:{s:1:"A";s:3:"103";s:1:"B";s:3:"260";s:1:"C";s:3:"140";s:2:"c3";s:3:"row";s:2:"c4";s:3:"row";s:2:"c8";s:6:"row_on";s:2:"c9";s:3:"row";s:2:"c7";s:2:"th";s:2:"c6";s:4:",top";s:2:"c5";s:3:"row";s:2:"c2";s:2:"th";s:2:"h6";s:3:"250";s:2:"h7";s:2:",1";s:2:"h2";s:2:"28";s:2:"h1";s:6:",!@msg";s:3:"c11";s:3:"row";s:3:"h11";s:13:",!@info_owner";s:3:"c10";s:3:"row";}i:1;a:4:{s:1:"A";a:5:{s:4:"type";s:4:"html";s:4:"span";s:13:"all,redItalic";s:5:"align";s:6:"center";s:4:"name";s:3:"msg";s:7:"no_lang";s:1:"1";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:2;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:4:"Type";s:4:"size";s:12:",,,info_type";}s:1:"B";a:5:{s:4:"type";s:4:"hbox";s:4:"span";s:3:"all";s:4:"size";s:6:"2,,0,0";i:1;a:5:{s:4:"type";s:6:"select";s:4:"name";s:9:"info_type";s:8:"onchange";i:1;s:4:"help";s:46:"Type of the log-entry: Note, Phonecall or ToDo";s:7:"no_lang";s:1:"1";}i:2;a:4:{s:4:"type";s:3:"int";s:4:"name";s:11:"info_number";s:4:"span";s:7:",infoId";s:8:"readonly";s:1:"1";}}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:3;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:8:"Category";s:4:"size";s:11:",,,info_cat";}s:1:"B";a:5:{s:4:"type";s:10:"select-cat";s:4:"size";s:4:"None";s:4:"span";s:3:"all";s:4:"name";s:8:"info_cat";s:4:"help";s:32:"select a category for this entry";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:4;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:7:"Contact";s:4:"size";s:12:",,,info_from";}s:1:"B";a:38:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:6:"2,,0,0";i:1;a:3:{s:4:"type";s:10:"link-entry";s:4:"name";s:12:"info_contact";s:4:"span";s:7:",noWrap";}i:2;a:4:{s:4:"type";s:8:"checkbox";s:4:"name";s:16:"info_custom_from";s:8:"onchange";s:91:"document.getElementById(form::name(\'info_from\')).style.display=this.checked?\'block\':\'none\';";s:4:"help";s:31:"Check to specify custom contact";}}i:2;a:6:{s:4:"type";s:4:"text";s:4:"size";s:6:"36,255";s:4:"name";s:9:"info_from";s:4:"help";s:80:"Custom contact-information, leave emtpy to use information from most recent link";s:4:"blur";s:11:"@blur_title";s:4:"span";s:21:",$cont[hide_from_css]";}i:3;a:1:{s:4:"type";s:5:"label";}i:4;a:1:{s:4:"type";s:5:"label";}i:5;a:1:{s:4:"type";s:5:"label";}i:6;a:1:{s:4:"type";s:5:"label";}i:7;a:1:{s:4:"type";s:5:"label";}i:8;a:1:{s:4:"type";s:5:"label";}i:9;a:1:{s:4:"type";s:5:"label";}i:10;a:1:{s:4:"type";s:5:"label";}i:11;a:1:{s:4:"type";s:5:"label";}i:12;a:1:{s:4:"type";s:5:"label";}i:13;a:1:{s:4:"type";s:5:"label";}i:14;a:1:{s:4:"type";s:5:"label";}i:15;a:1:{s:4:"type";s:5:"label";}i:16;a:1:{s:4:"type";s:5:"label";}i:17;a:1:{s:4:"type";s:5:"label";}i:18;a:1:{s:4:"type";s:5:"label";}i:19;a:1:{s:4:"type";s:5:"label";}i:20;a:1:{s:4:"type";s:5:"label";}i:21;a:1:{s:4:"type";s:5:"label";}i:22;a:1:{s:4:"type";s:5:"label";}i:23;a:1:{s:4:"type";s:5:"label";}i:24;a:1:{s:4:"type";s:5:"label";}i:25;a:1:{s:4:"type";s:5:"label";}i:26;a:1:{s:4:"type";s:5:"label";}i:27;a:1:{s:4:"type";s:5:"label";}i:28;a:1:{s:4:"type";s:5:"label";}i:29;a:1:{s:4:"type";s:5:"label";}i:30;a:1:{s:4:"type";s:5:"label";}i:31;a:1:{s:4:"type";s:5:"label";}i:32;a:1:{s:4:"type";s:5:"label";}i:33;a:1:{s:4:"type";s:5:"label";}i:34;a:1:{s:4:"type";s:5:"label";}i:35;a:1:{s:4:"type";s:5:"label";}i:36;a:1:{s:4:"type";s:5:"label";}}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:11:"Phone/Email";s:4:"size";s:13:",,,_info_addr";}s:1:"D";a:4:{s:4:"type";s:4:"text";s:4:"size";s:6:"30,255";s:4:"name";s:9:"info_addr";s:4:"help";s:76:"Custom contact-address, leave empty to use information from most recent link";}}i:5;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:7:"Subject";s:4:"size";s:15:",,,info_subject";}s:1:"B";a:5:{s:4:"type";s:4:"text";s:4:"size";s:6:"80,255";s:4:"span";s:3:"all";s:4:"name";s:12:"info_subject";s:4:"help";s:29:"a short subject for the entry";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:6;a:4:{s:1:"A";a:5:{s:4:"type";s:3:"tab";s:4:"span";s:3:"all";s:5:"label";s:64:"Description|Links|Delegation|Projectmanager|Customfields|History";s:4:"name";s:57:"description|links|delegation|project|customfields|history";s:4:"help";s:133:"longer textual description|Links of this entry|responsible user, priority|Project settings: price, times|Custom fields|Change history";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:7;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:21:"Dates, Status, Access";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:8;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Startdate";s:4:"size";s:17:",,,info_startdate";}s:1:"B";a:4:{s:4:"type";s:9:"date-time";s:4:"size";s:2:",2";s:4:"name";s:14:"info_startdate";s:4:"help";s:115:"when should the ToDo or Phonecall be started, it shows up from that date in the filter open or own open (startpage)";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:7:"Enddate";s:4:"size";s:15:",,,info_enddate";}s:1:"D";a:3:{s:4:"type";s:4:"date";s:4:"name";s:12:"info_enddate";s:4:"help";s:49:"til when should the ToDo or Phonecall be finished";}}i:9;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:6:"Status";s:4:"size";s:14:",,,info_status";}s:1:"B";a:4:{s:4:"type";s:6:"select";s:4:"name";s:11:"info_status";s:4:"help";s:12:"@status_help";s:8:"onchange";s:183:"if (this.value==\'done\' || this.value==\'billed\') set_element(this.form,\'exec[info_percent]\',\'100\'); else if (this.value==\'not-started\') set_element(this.form,\'exec[info_percent]\',\'0\');";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Completed";s:4:"size";s:15:",,,info_percent";}s:1:"D";a:4:{s:4:"type";s:14:"select-percent";s:4:"name";s:12:"info_percent";s:4:"help";s:17:"Percent completed";s:8:"onchange";s:570:"if (this.value==100 && this.form[\'exec[info_status]\'].value != \'done\' && this.form[\'exec[info_status]\'].value != \'billed\' && this.form[\'exec[info_status]\'].value != \'cancelled\') this.form[\'exec[info_status]\'].value=\'done\'; else if (this.value != 100 && this.form[\'exec[info_status]\'].value != \'cancelled\') this.form[\'exec[info_status]\'].value=this.value != 0 ? \'ongoing\' : \'not-started\'; else if (this.value==0 && this.form[\'exec[info_status]\'].value != \'cancelled\' && this.form[\'exec[info_status]\'].value != \'offer\') this.form[\'exec[info_status]\'].value=\'not-started\'; ";}}i:10;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:21:",,,info_datecompleted";s:5:"label";s:14:"Date completed";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:18:"info_datecompleted";s:4:"help";s:84:"Date completed (leave it empty to have it automatic set if status is done or billed)";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:7:"Private";s:4:"size";s:14:",,,info_access";}s:1:"D";a:4:{s:4:"type";s:8:"checkbox";s:4:"size";s:14:"private,public";s:4:"name";s:11:"info_access";s:4:"help";s:87:"should this entry only be visible to you and people you grant privat access via the ACL";}}i:11;a:4:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Owner";}s:1:"B";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:10:"info_owner";s:8:"readonly";s:1:"1";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:13:"Last modified";}s:1:"D";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:5:"2,0,0";i:1;a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:13:"info_modifier";s:8:"readonly";s:1:"1";}i:2;a:4:{s:4:"type";s:9:"date-time";s:4:"span";s:10:",lpadding5";s:4:"name";s:17:"info_datemodified";s:8:"readonly";s:1:"1";}}}i:12;a:4:{s:1:"A";a:7:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"4";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:12:"button[save]";s:4:"help";s:16:"Saves this entry";}s:4:"span";s:1:"2";i:2;a:4:{s:4:"type";s:6:"button";s:4:"name";s:13:"button[apply]";s:5:"label";s:5:"Apply";s:4:"help";s:17:"Apply the changes";}i:3;a:5:{s:4:"type";s:6:"button";s:5:"label";s:6:"Cancel";s:4:"name";s:14:"button[cancel]";s:4:"help";s:31:"leave without saveing the entry";s:7:"onclick";s:15:"window.close();";}i:4;a:2:{s:4:"type";s:4:"html";s:4:"name";s:2:"js";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:6:{s:4:"type";s:6:"button";s:5:"label";s:6:"Delete";s:5:"align";s:5:"right";s:4:"name";s:14:"button[delete]";s:4:"help";s:17:"delete this entry";s:7:"onclick";s:60:"return $cont[info_anz_subs] || confirm(\'Delete this entry\');";}}}s:4:"rows";i:12;s:4:"cols";i:4;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '.hideFrom input { display: none; } +.link_select select { width: 250px; }','modified' => '1159943980',); $templ_data[] = array('name' => 'infolog.edit.customfields','template' => '','lang' => '','group' => '0','version' => '1.0.0.001','data' => 'a:1:{i:0;a:5:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:2:{s:4:"type";s:12:"customfields";s:4:"name";s:12:"customfields";}}}s:4:"rows";i:1;s:4:"cols";i:1;s:4:"size";s:15:"100%,100%,,,0,0";}}','size' => '100%,100%,,,0,0','style' => '','modified' => '1061732462',); @@ -56,10 +48,12 @@ $templ_data[] = array('name' => 'infolog.edit.description','template' => '','lan $templ_data[] = array('name' => 'infolog.edit.description','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:3:{s:1:"A";s:3:"100";s:2:"c1";s:2:"th";s:2:"c2";s:7:"row,top";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:11:"Description";s:4:"size";s:11:",,,info_des";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:5:{s:4:"type";s:8:"textarea";s:4:"size";s:5:"13,75";s:7:"no_lang";s:1:"1";s:4:"name";s:8:"info_des";s:4:"help";s:44:"enter a textual description of the log-entry";}}}s:4:"rows";i:2;s:4:"cols";i:2;s:4:"size";s:10:"100%,245,0";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"245";i:2;s:1:"0";}}}','size' => '100%,245,0','style' => '','modified' => '1051391600',); -$templ_data[] = array('name' => 'infolog.edit.links','template' => '','lang' => '','group' => '0','version' => '0.9.15.003','data' => 'a:1:{i:0;a:5:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:8:{s:1:"A";s:3:"100";s:2:"h1";s:13:",@status_only";s:2:"h2";s:13:",@status_only";s:2:"h4";s:3:"164";s:2:"c1";s:2:"th";s:2:"c2";s:3:"row";s:2:"c3";s:2:"th";s:2:"c4";s:11:"row_off,top";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:16:"Create new links";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:3:{s:4:"type";s:7:"link-to";s:4:"span";s:3:"all";s:4:"name";s:7:"link_to";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:14:"Existing links";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:9:"link-list";s:4:"span";s:3:"all";s:4:"name";s:7:"link_to";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:4;s:4:"cols";i:2;s:4:"size";s:4:"100%";}}','size' => '100%','style' => '','modified' => '1075977056',); +$templ_data[] = array('name' => 'infolog.edit.history','template' => '','lang' => '','group' => '0','version' => '1.3.002','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:1:{s:2:"c1";s:4:",top";}i:1;a:1:{s:1:"A";a:2:{s:4:"type";s:10:"historylog";s:4:"name";s:7:"history";}}}s:4:"rows";i:1;s:4:"cols";i:1;s:4:"size";s:17:"100%,250,,,,,auto";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"250";i:6;s:4:"auto";}}}','size' => '100%,250,,,,,auto','style' => '','modified' => '1181576846',); $templ_data[] = array('name' => 'infolog.edit.links','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:7:{s:1:"A";s:3:"100";s:2:"h1";s:13:",@status_only";s:2:"h2";s:13:",@status_only";s:2:"c1";s:2:"th";s:2:"c2";s:3:"row";s:2:"c3";s:2:"th";s:2:"c4";s:11:"row_off,top";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:16:"Create new links";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:3:{s:4:"type";s:7:"link-to";s:4:"span";s:3:"all";s:4:"name";s:7:"link_to";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:14:"Existing links";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:9:"link-list";s:4:"span";s:3:"all";s:4:"name";s:7:"link_to";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:4;s:4:"cols";i:2;s:4:"size";s:17:"100%,245,,,,,auto";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"245";i:6;s:4:"auto";}}}','size' => '100%,245,,,,,auto','style' => '','modified' => '1075977056',); +$templ_data[] = array('name' => 'infolog.edit.links','template' => '','lang' => '','group' => '0','version' => '1.3.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:6:{i:0;a:7:{s:1:"A";s:3:"100";s:2:"h1";s:13:",@status_only";s:2:"h2";s:13:",@status_only";s:2:"c1";s:2:"th";s:2:"c2";s:3:"row";s:2:"c4";s:2:"th";s:2:"c5";s:11:"row_off,top";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:16:"Create new links";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:3:{s:4:"type";s:7:"link-to";s:4:"span";s:3:"all";s:4:"name";s:7:"link_to";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:8:"link-add";s:4:"span";s:3:"all";s:4:"name";s:7:"link_to";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:14:"Existing links";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:5;a:2:{s:1:"A";a:3:{s:4:"type";s:9:"link-list";s:4:"span";s:3:"all";s:4:"name";s:7:"link_to";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:5;s:4:"cols";i:2;s:4:"size";s:17:"100%,245,,,,,auto";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"245";i:6;s:4:"auto";}}}','size' => '100%,245,,,,,auto','style' => '','modified' => '1075977056',); + $templ_data[] = array('name' => 'infolog.edit.project','template' => '','lang' => '','group' => '0','version' => '1.2.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:6:{i:0;a:7:{s:1:"A";s:3:"100";s:2:"c1";s:2:"th";s:2:"c2";s:3:"row";s:2:"c3";s:3:"row";s:2:"c4";s:3:"row";s:2:"h5";s:3:"60%";s:2:"c5";s:7:"row,top";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:14:"Projectmanager";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Project";}s:1:"B";a:4:{s:4:"type";s:21:"projectmanager-select";s:4:"name";s:5:"pm_id";s:8:"onchange";s:1:"1";s:4:"size";s:4:"None";}}i:3;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Price";}s:1:"B";a:5:{s:4:"type";s:4:"hbox";s:4:"span";s:3:"all";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:24:"projectmanager-pricelist";s:4:"name";s:5:"pl_id";s:4:"size";s:4:"None";s:8:"onchange";s:207:"this.form[\'exec[info_price]\'].value=this.options[this.selectedIndex].text.lastIndexOf(\'(\') < 0 ? \'\' : this.options[this.selectedIndex].text.slice(this.options[this.selectedIndex].text.lastIndexOf(\'(\')+1,-1);";}i:2;a:3:{s:4:"type";s:5:"float";s:4:"name";s:10:"info_price";s:4:"span";s:3:"all";}}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:20:",,,info_planned_time";s:5:"label";s:12:"planned time";}s:1:"B";a:3:{s:4:"type";s:13:"date-duration";s:4:"name";s:17:"info_planned_time";s:4:"size";s:23:",$cont[duration_format]";}}i:5;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:17:",,,info_used_time";s:5:"label";s:9:"used time";}s:1:"B";a:2:{s:4:"type";s:13:"date-duration";s:4:"name";s:14:"info_used_time";}}}s:4:"rows";i:5;s:4:"cols";i:2;s:4:"size";s:8:"100%,245";s:7:"options";a:2:{i:0;s:4:"100%";i:1;s:3:"245";}}}','size' => '100%,245','style' => '','modified' => '1139017165',); $templ_data[] = array('name' => 'infolog.index','template' => '','lang' => '','group' => '0','version' => '1.0.1.002','data' => 'a:1:{i:0;a:5:{s:4:"type";s:4:"grid";s:4:"data";a:7:{i:0;a:5:{s:1:"A";s:3:"90%";s:2:"h3";s:2:",1";s:2:"h2";s:6:",!@msg";s:2:"c6";s:7:"noPrint";s:2:"h4";s:7:",!@main";}i:1;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:5:{s:4:"type";s:5:"label";s:4:"span";s:13:"all,redItalic";s:5:"align";s:6:"center";s:4:"name";s:3:"msg";s:7:"no_lang";s:1:"1";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:3;a:2:{s:1:"A";a:2:{s:4:"type";s:8:"template";s:4:"name";s:11:"header_left";}s:1:"B";a:2:{s:4:"type";s:8:"template";s:4:"name";s:12:"header_right";}}i:4;a:2:{s:1:"A";a:4:{s:4:"type";s:8:"template";s:4:"size";s:4:"main";s:4:"span";s:3:"all";s:4:"name";s:27:"infolog.index.rows-noheader";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:5;a:2:{s:1:"A";a:4:{s:4:"type";s:9:"nextmatch";s:4:"size";s:20:"infolog.index.rows,1";s:4:"span";s:3:"all";s:4:"name";s:2:"nm";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:6;a:2:{s:1:"A";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";s:4:"span";s:3:"all";i:1;a:5:{s:4:"type";s:6:"button";s:5:"label";s:3:"Add";s:4:"name";s:9:"add[note]";s:4:"help";s:15:"Add a new Entry";s:7:"onclick";s:217:"window.open(egw::link(\'/index.php\',\'menuaction=infolog.uiinfolog.edit&type=note&action=$cont[action]&action_id=$cont[action_id]\'),\'_blank\',\'dependent=yes,width=750,height=600,scrollbars=yes,status=yes\'); return false;";}i:2;a:4:{s:4:"type";s:6:"button";s:5:"label";s:6:"Cancel";s:4:"name";s:6:"cancel";s:4:"help";s:17:"Back to main list";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:6;s:4:"cols";i:2;s:4:"size";s:12:"100%,,0,,0,0";}}','size' => '100%,,0,,0,0','style' => '','modified' => '1121355584',); @@ -82,6 +76,3 @@ $templ_data[] = array('name' => 'infolog.index.rows-noheader','template' => '',' $templ_data[] = array('name' => 'infolog.index.rows-noheader','template' => '','lang' => '','group' => '0','version' => '1.3.003','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:9:{s:1:"A";s:2:"2%";s:1:"C";s:3:"120";s:1:"E";s:34:"8%,@no_info_onwer_info_responsible";s:1:"F";s:25:"12%,@no_info_datemodified";s:1:"G";s:14:"3%,@no_actions";s:2:"c1";s:2:"th";s:2:"c2";s:7:"row,top";s:1:"H";s:14:"3%,@no_actions";s:1:"D";s:37:",@no_info_used_time_info_planned_time";}i:1;a:8:{s:1:"A";a:5:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"3,,0,0";i:1;a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Type";}i:2;a:3:{s:4:"type";s:5:"label";s:5:"label";s:6:"Status";s:5:"align";s:6:"center";}i:3;a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Completed";s:5:"align";s:5:"right";}}s:1:"B";a:8:{s:4:"type";s:4:"vbox";s:4:"data";a:3:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:7:"Subject";s:4:"name";s:12:"info_subject";}}i:2;a:1:{s:1:"A";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:11:"Description";s:4:"name";s:8:"info_des";}}}s:4:"rows";i:2;s:4:"cols";i:1;s:4:"size";s:1:"2";i:1;a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Subject";}i:2;a:2:{s:4:"type";s:5:"label";s:5:"label";s:11:"Description";}s:7:"options";a:1:{i:0;s:1:"2";}}s:1:"C";a:5:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"3,,0,0";i:1;a:2:{s:4:"type";s:5:"label";s:5:"label";s:9:"Startdate";}i:2;a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Enddate";}i:3;a:2:{s:4:"type";s:5:"label";s:5:"label";s:14:"Date completed";}}s:1:"D";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Times";}i:2;a:3:{s:4:"type";s:5:"label";s:4:"span";s:8:",planned";s:5:"label";s:7:"planned";}}s:1:"E";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Owner";}i:2;a:2:{s:4:"type";s:5:"label";s:5:"label";s:11:"Responsible";}}s:1:"F";a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"last changed";}s:1:"G";a:3:{s:4:"type";s:5:"label";s:5:"label";s:3:"Sub";s:4:"span";s:8:",noPrint";}s:1:"H";a:3:{s:4:"type";s:5:"label";s:5:"label";s:6:"Action";s:4:"span";s:8:",noPrint";}}i:2;a:8:{s:1:"A";a:7:{s:4:"type";s:4:"hbox";s:4:"size";s:4:"4,,5";s:5:"align";s:6:"center";i:1;a:3:{s:4:"type";s:5:"image";s:5:"label";s:20:"$row_cont[info_type]";s:4:"name";s:17:"${row}[info_type]";}i:2;a:6:{s:4:"type";s:6:"button";s:4:"size";s:57:"$row_cont[info_status_label],$row_cont[info_status_label]";s:5:"label";s:28:"$row_cont[info_status_label]";s:4:"name";s:31:"edit_status[$row_cont[info_id]]";s:4:"help";s:43:"Change the status of an entry, eg. close it";s:7:"onclick";s:186:"window.open(egw::link(\'/index.php\',\'menuaction=infolog.uiinfolog.edit&info_id=$row_cont[info_id]\'),\'_blank\',\'dependent=yes,width=750,height=600,scrollbars=yes,status=yes\'); return false;";}i:3;a:6:{s:4:"type";s:6:"button";s:4:"size";s:23:"$row_cont[info_percent]";s:5:"label";s:23:"$row_cont[info_percent]";s:4:"name";s:32:"edit_percent[$row_cont[info_id]]";s:4:"help";s:43:"Change the status of an entry, eg. close it";s:7:"onclick";s:186:"window.open(egw::link(\'/index.php\',\'menuaction=infolog.uiinfolog.edit&info_id=$row_cont[info_id]\'),\'_blank\',\'dependent=yes,width=750,height=600,scrollbars=yes,status=yes\'); return false;";}i:4;a:4:{s:4:"type";s:5:"image";s:5:"label";s:24:"$row_cont[info_percent2]";s:4:"name";s:21:"{$row}[info_percent2]";s:7:"onclick";s:186:"window.open(egw::link(\'/index.php\',\'menuaction=infolog.uiinfolog.edit&info_id=$row_cont[info_id]\'),\'_blank\',\'dependent=yes,width=750,height=600,scrollbars=yes,status=yes\'); return false;";}}s:1:"B";a:7:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"4,,0,0";i:1;a:4:{s:4:"type";s:4:"link";s:5:"label";s:23:"%s $row_cont[info_addr]";s:4:"name";s:17:"${row}[info_link]";s:4:"size";s:1:"b";}i:2;a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:5:"label";s:4:"span";s:21:",$row_cont[sub_class]";s:7:"no_lang";s:1:"1";s:4:"name";s:20:"${row}[info_subject]";}i:2;a:5:{s:4:"type";s:5:"label";s:7:"no_lang";s:1:"1";s:5:"align";s:5:"right";s:4:"name";s:19:"{$row}[info_number]";s:4:"span";s:7:",infoId";}}i:3;a:4:{s:4:"type";s:5:"label";s:4:"size";s:3:",,1";s:7:"no_lang";s:1:"1";s:4:"name";s:16:"${row}[info_des]";}i:4;a:2:{s:4:"type";s:11:"link-string";s:4:"name";s:17:"${row}[filelinks]";}s:4:"span";s:10:",fullWidth";}s:1:"C";a:8:{s:4:"type";s:4:"vbox";s:4:"size";s:8:"3,,0,0,1";s:4:"data";a:4:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:5:{s:4:"type";s:9:"date-time";s:4:"size";s:2:",8";s:4:"name";s:22:"${row}[info_startdate]";s:8:"readonly";s:1:"1";s:4:"span";s:12:",fixedHeight";}}i:2;a:1:{s:1:"A";a:4:{s:4:"type";s:4:"date";s:4:"span";s:33:",$row_cont[end_class] fixedHeight";s:4:"name";s:20:"${row}[info_enddate]";s:8:"readonly";s:1:"1";}}i:3;a:1:{s:1:"A";a:4:{s:4:"type";s:9:"date-time";s:4:"name";s:26:"${row}[info_datecompleted]";s:8:"readonly";s:1:"1";s:4:"span";s:12:",fixedHeight";}}}s:4:"rows";i:3;s:4:"cols";i:1;i:1;a:5:{s:4:"type";s:9:"date-time";s:4:"size";s:2:",8";s:4:"name";s:22:"${row}[info_startdate]";s:8:"readonly";s:1:"1";s:4:"span";s:12:",fixedHeight";}i:2;a:4:{s:4:"type";s:4:"date";s:4:"span";s:33:",$row_cont[end_class] fixedHeight";s:4:"name";s:20:"${row}[info_enddate]";s:8:"readonly";s:1:"1";}i:3;a:4:{s:4:"type";s:9:"date-time";s:4:"name";s:26:"${row}[info_datecompleted]";s:8:"readonly";s:1:"1";s:4:"span";s:12:",fixedHeight";}}s:1:"D";a:8:{s:4:"type";s:4:"vbox";s:4:"data";a:4:{i:0;a:1:{s:2:"h2";s:14:",@no_timesheet";}i:1;a:1:{s:1:"A";a:5:{s:4:"type";s:13:"date-duration";s:4:"name";s:22:"${row}[info_used_time]";s:8:"readonly";s:1:"1";s:4:"size";s:5:",,,,1";s:4:"span";s:3:"all";}}i:2;a:1:{s:1:"A";a:4:{s:4:"type";s:13:"date-duration";s:4:"name";s:27:"${row}[info_sum_timesheets]";s:8:"readonly";s:1:"1";s:4:"size";s:5:",,,,1";}}i:3;a:1:{s:1:"A";a:5:{s:4:"type";s:13:"date-duration";s:4:"name";s:25:"${row}[info_planned_time]";s:4:"span";s:11:"all,planned";s:8:"readonly";s:1:"1";s:4:"size";s:5:",,,,1";}}}s:4:"rows";i:3;s:4:"cols";i:1;s:4:"size";s:1:"3";i:1;a:4:{s:4:"type";s:13:"date-duration";s:4:"name";s:22:"${row}[info_used_time]";s:8:"readonly";s:1:"1";s:4:"size";s:16:"@duration_format";}i:2;a:5:{s:4:"type";s:13:"date-duration";s:4:"name";s:27:"${row}[info_sum_timesheets]";s:8:"readonly";s:1:"1";s:4:"size";s:16:"@duration_format";s:4:"span";s:10:",timesheet";}i:3;a:5:{s:4:"type";s:13:"date-duration";s:4:"name";s:25:"${row}[info_planned_time]";s:4:"span";s:11:"all,planned";s:8:"readonly";s:1:"1";s:4:"size";s:16:"@duration_format";}}s:1:"E";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"2,,0,0";i:1;a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:18:"${row}[info_owner]";s:8:"readonly";s:1:"1";}i:2;a:4:{s:4:"type";s:14:"select-account";s:4:"name";s:24:"${row}[info_responsible]";s:8:"readonly";s:1:"1";s:4:"size";s:1:"5";}}s:1:"F";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:5:"2,0,0";i:1;a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:25:"${row}[info_datemodified]";s:8:"readonly";s:1:"1";}i:2;a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:21:"${row}[info_modifier]";s:8:"readonly";s:1:"1";}}s:1:"G";a:8:{s:4:"type";s:4:"vbox";s:4:"size";s:5:"4,0,0";s:5:"align";s:6:"center";i:1;a:7:{s:4:"type";s:6:"button";s:4:"size";s:3:"new";s:5:"label";s:7:"Add sub";s:5:"align";s:6:"center";s:4:"name";s:22:"sp[$row_cont[info_id]]";s:4:"help";s:46:"Add a new sub-task, -note, -call to this entry";s:7:"onclick";s:198:"window.open(egw::link(\'/index.php\',\'menuaction=infolog.uiinfolog.edit&action=sp&action_id=$row_cont[info_id]\'),\'_blank\',\'dependent=yes,width=750,height=600,scrollbars=yes,status=yes\'); return false;";}i:2;a:6:{s:4:"type";s:6:"button";s:4:"size";s:8:"view.gif";s:5:"label";s:9:"View subs";s:5:"align";s:6:"center";s:4:"name";s:24:"view[$row_cont[info_id]]";s:4:"help";s:27:"View all subs of this entry";}i:3;a:6:{s:4:"type";s:6:"button";s:4:"size";s:10:"parent.gif";s:5:"label";s:11:"View parent";s:5:"align";s:6:"center";s:4:"name";s:31:"view[$row_cont[info_id_parent]]";s:4:"help";s:46:"View the parent of this entry and all his subs";}i:4;a:6:{s:4:"type";s:6:"button";s:4:"size";s:9:"timesheet";s:5:"label";s:19:"Add timesheet entry";s:4:"name";s:29:"timesheet[$row_cont[info_id]]";s:7:"onclick";s:233:"window.open(egw::link(\'/index.php\',\'menuaction=timesheet.uitimesheet.edit&link_app[]=infolog&link_id[]=$row_cont[info_id]$row_cont[extra_links]\'),\'_blank\',\'dependent=yes,width=600,height=400,scrollbars=yes,status=yes\'); return false;";s:5:"align";s:6:"center";}s:4:"span";s:8:",noPrint";}s:1:"H";a:6:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";i:1;a:6:{s:4:"type";s:6:"button";s:4:"size";s:4:"edit";s:5:"label";s:4:"Edit";s:4:"name";s:24:"edit[$row_cont[info_id]]";s:4:"help";s:15:"Edit this entry";s:7:"onclick";s:186:"window.open(egw::link(\'/index.php\',\'menuaction=infolog.uiinfolog.edit&info_id=$row_cont[info_id]\'),\'_blank\',\'dependent=yes,width=750,height=600,scrollbars=yes,status=yes\'); return false;";}i:2;a:6:{s:4:"type";s:6:"button";s:4:"size";s:6:"delete";s:5:"label";s:6:"Delete";s:4:"name";s:26:"delete[$row_cont[info_id]]";s:4:"help";s:17:"Delete this entry";s:7:"onclick";s:64:"return $row_cont[info_anz_subs] || confirm(\'Delete this entry\');";}i:3;a:5:{s:4:"type";s:6:"button";s:4:"size";s:4:"done";s:5:"label";s:5:"Close";s:4:"name";s:25:"close[$row_cont[info_id]]";s:4:"help";s:50:"Sets the status of this entry and its subs to done";}s:4:"span";s:8:",noPrint";}}}s:4:"rows";i:2;s:4:"cols";i:8;}}','size' => '','style' => '','modified' => '1142615238',); -$templ_data[] = array('name' => 'infolog.Lebert.Baienfurt.Kopf','template' => '','lang' => '','group' => '0','version' => '','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:1:{s:2:"c1";s:4:",top";}i:1;a:2:{s:1:"A";a:6:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"4,,0,0";i:1;a:3:{s:4:"type";s:5:"label";s:5:"label";s:17:"Lebert + Co. GmbH";s:4:"span";s:11:",my_heading";}i:2;a:2:{s:4:"type";s:5:"label";s:5:"label";s:23:"International Spedition";}i:3;a:2:{s:4:"type";s:5:"label";s:5:"label";s:18:"Eisenbahnstrasse 4";}i:4;a:2:{s:4:"type";s:5:"label";s:5:"label";s:15:"88255 Baienfurt";}}s:1:"B";a:4:{s:4:"type";s:5:"image";s:4:"name";s:8:"logo.png";s:7:"no_lang";s:1:"1";s:5:"align";s:5:"right";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"size";s:14:"100%,,,my_form";s:7:"options";a:2:{i:3;s:7:"my_form";i:0;s:4:"100%";}}}','size' => '100%,,,my_form','style' => '.xmy_form td { font-size: 20pt; } -.my_heading { font-size: 120%; font-weight: bold; }','modified' => '1158752011',); - diff --git a/infolog/setup/phpgw_de.lang b/infolog/setup/phpgw_de.lang index 8ffc6e0871..f38538ddea 100644 --- a/infolog/setup/phpgw_de.lang +++ b/infolog/setup/phpgw_de.lang @@ -1,4 +1,7 @@ %1 days in advance infolog de %1 Tage im Vorraus +%1 deleted infolog de %1 gelöscht +%1 deleted by %2 at %3 infolog de %1 wurde von %2 am %3 gelöscht +%1 modified infolog de %1 geändert %1 modified by %2 at %3 infolog de %1 wurde von %2 am %3 geändert %1 records imported infolog de %1 Datensätze importiert %1 records read (not yet imported, you may go %2back%3 and uncheck test import) infolog de %1 Datensätze gelesen (noch nicht importiert, sie können %2zurück%3 gehen und Test Import ausschalten) @@ -97,6 +100,7 @@ delete one record by passing its id. infolog de Einen Datensatz spezifiziert dur delete the entry infolog de Eintrag löschen delete this entry infolog de diesen Eintrag löschen delete this entry and all listed sub-entries infolog de Diesen Eintrag und all aufgelisteten Untereinträge löschen +deleted infolog de gelöscht deletes the selected typ infolog de löscht den ausgewählten Typ deletes this field infolog de löscht dieses Feld deletes this status infolog de löscht diesen Status @@ -142,6 +146,8 @@ from infolog de Von general infolog de Allgemein group owner for infolog de Gruppeneigentümer für high infolog de hoch +history logging infolog de Protokollierung der Historie +history logging and deleting of items infolog de Protokollierung der Historie und löschen von Einträgen id infolog de Id if a type has a group owner, all entries of that type will be owned by the given group and not the user who created it! infolog de Wenn ein Typ einen Gruppeneigentümer hat, gehören alle Einträge dieses Typs der angegebenen Gruppe und NICHT dem Benutzer der sie angelegt hat! if not set, the line with search and filters is hidden for less entries then "max matches per page" (as defined in your common preferences). infolog de Falls nicht gesetzt, wird die Suche und die Filter ausgeblendet für weniger Einträge als "maximale Treffer pro Seite" (in ihren allg. Einstellungen definiert). @@ -181,6 +187,7 @@ max length of the input [, length of the inputfield (optional)] infolog de max. name must not be empty !!! infolog de Name darf nicht leer sein !!! name of new type to create infolog de Name des neu anzulegenden Types never hide search and filters infolog de Suche und Filter niemals ausblenden +new %1 infolog de Neue %1 new %1 created by %2 at %3 infolog de Neue %1 wurde von %2 am %3 angelegt new name infolog de neuer name new search infolog de Neue Suche @@ -322,7 +329,6 @@ urgent infolog de Dringend used time infolog de benötigte Zeit valid path on clientside
eg. \\server\share or e:\ infolog de gültiger Pfad clientseitig
zB. \\Server\Share oder e:\ valid path on clientside
eg. \servershare or e: infolog de gültiger Pfad clientseitig
zB. \\Server\Share oder e:\ -valid path on clientside
eg. servershare or e: infolog de gültiger Pfad clientseitig
zB. \\Server\Share oder e:\ values for selectbox infolog de Werte für die Auswahlbox view all subs of this entry infolog de alle Untereinträge dieses Eintrag anzeigen view other subs infolog de andere Untereinträge anzeigen @@ -337,6 +343,9 @@ will-call infolog de ruft zur write (add or update) a record by passing its fields. infolog de Schreiben (zufügen oder aktualisieren) eines Datensatzes durch Angabe seiner Felder. yes - delete infolog de Ja - Löschen yes - delete including sub-entries infolog de Ja - Löschen einschließlich Untereinträge +yes, noone can purge deleted items infolog de Ja, niemand darf gelöschte Einträge bereinigen +yes, only admins can purge deleted items infolog de Ja, nur Admins dürfen gelöschte Einträge bereinigen +yes, with purging of deleted items possible infolog de Ja, jeder darf gelöschte Einträge bereinigen you can't delete one of the stock types !!! infolog de Sie können keinen der Standardtypen löschen!!! you have entered an invalid ending date infolog de Sie haben ein ungültiges Fälligkeitsdatum eingegeben you have entered an invalid starting date infolog de Sie haben ein ungültiges Startdatum eingegeben diff --git a/infolog/setup/phpgw_en.lang b/infolog/setup/phpgw_en.lang index 8bad9a7290..d2b7200304 100644 --- a/infolog/setup/phpgw_en.lang +++ b/infolog/setup/phpgw_en.lang @@ -1,4 +1,7 @@ %1 days in advance infolog en %1 days in advance +%1 deleted infolog en %1 deleted +%1 deleted by %2 at %3 infolog en %1 deleted by %2 at %3 +%1 modified infolog en %1 modified %1 modified by %2 at %3 infolog en %1 modified by %2 at %3 %1 records imported infolog en %1 records imported %1 records read (not yet imported, you may go %2back%3 and uncheck test import) infolog en %1 records read (not yet imported, you may go %2back%3 and uncheck Test Import) @@ -97,6 +100,7 @@ delete one record by passing its id. infolog en Delete one record by passing its delete the entry infolog en Delete the entry delete this entry infolog en delete this entry delete this entry and all listed sub-entries infolog en Delete this entry and all listed sub-entries +deleted infolog en deleted deletes the selected typ infolog en deletes the selected type deletes this field infolog en deletes this field deletes this status infolog en deletes this status @@ -142,6 +146,8 @@ from infolog en From general infolog en General group owner for infolog en Group owner for high infolog en high +history logging infolog en History logging +history logging and deleting of items infolog en History logging and deleting of items id infolog en Id if a type has a group owner, all entries of that type will be owned by the given group and not the user who created it! infolog en If a type has a group owner, all entries of that type will be owned by the given group and NOT the user who created it! if not set, the line with search and filters is hidden for less entries then "max matches per page" (as defined in your common preferences). infolog en If not set, the line with search and filters is hidden for less entries then "max matches per page" (as defined in your common preferences). @@ -181,6 +187,7 @@ max length of the input [, length of the inputfield (optional)] infolog en max l name must not be empty !!! infolog en Name must not be empty !!! name of new type to create infolog en name of new type to create never hide search and filters infolog en Never hide search and filters +new %1 infolog en New %1 new %1 created by %2 at %3 infolog en New %1 created by %2 at %3 new name infolog en new name new search infolog en New search @@ -334,6 +341,9 @@ will-call infolog en will call write (add or update) a record by passing its fields. infolog en Write (add or update) a record by passing its fields. yes - delete infolog en Yes - Delete yes - delete including sub-entries infolog en Yes - Delete including sub-entries +yes, noone can purge deleted items infolog en Yes, noone can purge deleted items +yes, only admins can purge deleted items infolog en Yes, only admins can purge deleted items +yes, with purging of deleted items possible infolog en Yes, with purging of deleted items possible you can't delete one of the stock types !!! infolog en You can't delete one of the stock types !!! you have entered an invalid ending date infolog en You have entered an invalid due date you have entered an invalid starting date infolog en You have entered an invalid starting date diff --git a/infolog/templates/default/admin.tpl b/infolog/templates/default/admin.tpl index b2c3469d6f..adc7c7efab 100644 --- a/infolog/templates/default/admin.tpl +++ b/infolog/templates/default/admin.tpl @@ -22,8 +22,12 @@ {lang_responsible_edit} {responsible_edit} + + {lang_history} + -   + {lang_history2} + {history} {text} diff --git a/infolog/templates/default/edit.xet b/infolog/templates/default/edit.xet index ac00e76e13..2fd0434c61 100644 --- a/infolog/templates/default/edit.xet +++ b/infolog/templates/default/edit.xet @@ -126,7 +126,19 @@ -