From f94aa623db0433be590b619cc5efc533c7e68520 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Sat, 30 Apr 2016 17:05:23 +0000 Subject: [PATCH] using new api for InfoLog --- infolog/inc/class.infolog_bo.inc.php | 191 ++++++------- .../inc/class.infolog_customfields.inc.php | 34 ++- infolog/inc/class.infolog_datasource.inc.php | 25 +- infolog/inc/class.infolog_export_csv.inc.php | 29 +- infolog/inc/class.infolog_export_ical.inc.php | 8 +- infolog/inc/class.infolog_groupdav.inc.php | 29 +- infolog/inc/class.infolog_hooks.inc.php | 61 ++--- infolog/inc/class.infolog_ical.inc.php | 37 +-- infolog/inc/class.infolog_import_ical.inc.php | 67 +++-- .../class.infolog_import_infologs_csv.inc.php | 28 +- infolog/inc/class.infolog_merge.inc.php | 31 ++- infolog/inc/class.infolog_so.inc.php | 71 ++--- infolog/inc/class.infolog_tracking.inc.php | 21 +- infolog/inc/class.infolog_ui.inc.php | 257 +++++++++--------- infolog/inc/class.infolog_widget.inc.php | 239 ++++------------ .../class.infolog_wizard_export_csv.inc.php | 6 +- ...infolog_wizard_import_infologs_csv.inc.php | 15 +- infolog/inc/class.infolog_zpush.inc.php | 39 ++- infolog/index.php | 8 +- infolog/setup/etemplates.inc.php | 133 --------- infolog/setup/setup.inc.php | 17 +- infolog/setup/tables_update.inc.php | 8 +- 22 files changed, 567 insertions(+), 787 deletions(-) delete mode 100644 infolog/setup/etemplates.inc.php diff --git a/infolog/inc/class.infolog_bo.inc.php b/infolog/inc/class.infolog_bo.inc.php index 893620d520..70d12419d0 100644 --- a/infolog/inc/class.infolog_bo.inc.php +++ b/infolog/inc/class.infolog_bo.inc.php @@ -11,13 +11,21 @@ * @version $Id$ */ -define('EGW_ACL_UNDELETE',EGW_ACL_CUSTOM_1); // undelete right +use EGroupware\Api; +use EGroupware\Api\Link; +use EGroupware\Api\Acl; +use EGroupware\Api\Vfs; /** * This class is the BO-layer of InfoLog */ class infolog_bo { + /** + * Undelete right + */ + const ACL_UNDELETE = Acl::CUSTOM1; + var $enums; var $status; /** @@ -204,7 +212,7 @@ class infolog_bo 'ongoing' => 'ongoing', // iCal has no status on notes 'done' => 'done' ), ); - if (($config_data = config::read('infolog'))) + if (($config_data = Api\Config::read('infolog'))) { if (isset($config_data['status']) && is_array($config_data['status'])) { @@ -226,7 +234,7 @@ class infolog_bo } if ($config_data['group_owners']) $this->group_owners = $config_data['group_owners']; - $this->customfields = egw_customfields::get('infolog'); + $this->customfields = Api\Storage\Customfields::get('infolog'); if ($this->customfields) { foreach($this->customfields as $name => $field) @@ -244,7 +252,7 @@ class infolog_bo $save_config = true; } } - if ($save_config) config::save_value('customfields',$this->customfields,'infolog'); + if ($save_config) Api\Config::save_value('customfields',$this->customfields,'infolog'); } if (is_array($config_data['responsible_edit'])) { @@ -278,7 +286,7 @@ class infolog_bo $this->user = $GLOBALS['egw_info']['user']['account_id']; $this->now = time(); - $this->user_time_now = egw_time::server2user($this->now,'ts'); + $this->user_time_now = Api\DateTime::server2user($this->now,'ts'); $this->grants = $GLOBALS['egw']->acl->get_grants('infolog',$this->group_owners ? $this->group_owners : true); $this->so = new infolog_so($this->grants); @@ -297,17 +305,13 @@ class infolog_bo * checks if there are customfields for typ $typ * * @param string $type - * @param boolean $links = false if true check only customfields containing links, default false = all custom fields * @return boolean True if there are customfields for $typ, else False */ - function has_customfields($type,$links=false) + function has_customfields($type) { - if ($links) $link_types = customfields_widget::get_customfield_link_types(); - foreach($this->customfields as $field) { - if ((!$type || empty($field['type2']) || in_array($type,is_array($field['type2']) ? $field['type2'] : explode(',',$field['type2']))) && - (!$links || in_array($field['type'],$link_types))) + if ((!$type || empty($field['type2']) || in_array($type,is_array($field['type2']) ? $field['type2'] : explode(',',$field['type2'])))) { return True; } @@ -319,7 +323,7 @@ class infolog_bo * check's if user has the requiered rights on entry $info_id * * @param int|array $info data or info_id of infolog entry to check - * @param int $required_rights EGW_ACL_{READ|EDIT|ADD|DELETE} + * @param int $required_rights ACL::{READ|EDIT|ADD|DELETE}|infolog_bo::ACL_UNDELETE * @param int $other uid to check (if info==0) or 0 to check against $this->user * @param int $user = null user whos rights to check, default current user * @return boolean @@ -356,14 +360,14 @@ class infolog_bo if (!is_array($info) && !($info = $this->so->read(array('info_id' => $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! + ($required_rights == Acl::EDIT || // no edit rights for deleted entries + $required_rights == Acl::ADD || // no add rights for deleted entries + $required_rights == Acl::DELETE && ($this->history == 'history_no_delete' || // no delete at all! $this->history == 'history_admin_delete' && (!isset($GLOBALS['egw_info']['user']['apps']['admin']) || $user!=$this->user)))) // delete only for admins { $access = false; } - elseif ($required_rights == EGW_ACL_UNDELETE) + elseif ($required_rights == self::ACL_UNDELETE) { if ($info['info_status'] != 'deleted') { @@ -372,11 +376,11 @@ class infolog_bo else { // undelete requires edit rights - $access = $this->so->check_access( $info,EGW_ACL_EDIT,$this->implicit_rights == 'edit',$grants,$user ); + $access = $this->so->check_access( $info,Acl::EDIT,$this->implicit_rights == 'edit',$grants,$user ); } } } - elseif ($required_rights == EGW_ACL_UNDELETE) + elseif ($required_rights == self::ACL_UNDELETE) { $access = false; } @@ -423,7 +427,7 @@ class infolog_bo if ($info['info_link_id'] > 0 && (isset($info['links']) && ($link = $info['links'][$info['info_link_id']]) || // use supplied links info - ($link = egw_link::get_link($info['info_link_id'])) !== False)) // if link not found in supplied links, we always search! + ($link = Link::get_link($info['info_link_id'])) !== False)) // if link not found in supplied links, we always search! { if (isset($info['links']) && isset($link['app'])) { @@ -436,7 +440,7 @@ class infolog_bo $app = $link['link_app'.$nr]; $id = $link['link_id'.$nr]; } - $title = egw_link::title($app,$id); + $title = Link::title($app,$id); if ((string)$info['info_custom_from'] === '') // old entry { @@ -493,7 +497,7 @@ class infolog_bo if ($fromTZId === $toTZId) return; - $tz = egw_time::$server_timezone; + $tz = Api\DateTime::$server_timezone; if ($fromTZId) { @@ -505,12 +509,12 @@ class infolog_bo } elseif (is_null($fromTZId)) { - $tz = egw_time::$user_timezone; - $fromTZ = egw_time::$user_timezone; + $tz = Api\DateTime::$user_timezone; + $fromTZ = Api\DateTime::$user_timezone; } else { - $fromTZ = egw_time::$server_timezone; + $fromTZ = Api\DateTime::$server_timezone; } if ($toTZId) { @@ -522,30 +526,30 @@ class infolog_bo } elseif (is_null($toTZId)) { - $toTZ = egw_time::$user_timezone; + $toTZ = Api\DateTime::$user_timezone; } else { - $toTZ = egw_time::$server_timezone; + $toTZ = Api\DateTime::$server_timezone; } - //error_log(__METHOD__.'(values[info_enddate]='.date('Y-m-d H:i:s',$values['info_enddate']).", from=".array2string($fromTZId).", to=".array2string($toTZId).") tz=".$tz->getName().', fromTZ='.$fromTZ->getName().', toTZ='.$toTZ->getName().', userTZ='.egw_time::$user_timezone->getName()); + //error_log(__METHOD__.'(values[info_enddate]='.date('Y-m-d H:i:s',$values['info_enddate']).", from=".array2string($fromTZId).", to=".array2string($toTZId).") tz=".$tz->getName().', fromTZ='.$fromTZ->getName().', toTZ='.$toTZ->getName().', userTZ='.Api\DateTime::$user_timezone->getName()); foreach($this->timestamps as $key) { if ($values[$key]) { - $time = new egw_time($values[$key], $tz); + $time = new Api\DateTime($values[$key], $tz); $time->setTimezone($fromTZ); if ($time->format('Hi') == '0000') { // we keep dates the same in new timezone - $arr = egw_time::to($time,'array'); - $time = new egw_time($arr, $toTZ); + $arr = Api\DateTime::to($time,'array'); + $time = new Api\DateTime($arr, $toTZ); } else { $time->setTimezone($toTZ); } - $values[$key] = egw_time::to($time,'ts'); + $values[$key] = Api\DateTime::to($time,'ts'); } } //error_log(__METHOD__.'() --> values[info_enddate]='.date('Y-m-d H:i:s',$values['info_enddate'])); @@ -562,7 +566,7 @@ class infolog_bo { if (empty($ts) || $date_format == 'server') return $ts; - return egw_time::server2user($ts,$date_format); + return Api\DateTime::server2user($ts,$date_format); } /** @@ -596,9 +600,8 @@ class infolog_bo { return null; } - $info_id = $data['info_id']; // in case the uid was specified - if (!$ignore_acl && !$this->check_access($data,EGW_ACL_READ)) // check behind read, to prevent a double read + if (!$ignore_acl && !$this->check_access($data,Acl::READ)) // check behind read, to prevent a double read { return False; } @@ -640,7 +643,7 @@ class infolog_bo { return False; } - if (!$this->check_access($info,EGW_ACL_DELETE)) + if (!$this->check_access($info,Acl::DELETE)) { return False; } @@ -649,7 +652,7 @@ class infolog_bo { foreach($children as $id => $owner) { - if ($delete_children && $this->so->grants[$owner] & EGW_ACL_DELETE) + if ($delete_children && $this->so->grants[$owner] & Acl::DELETE) { $this->delete($id,$delete_children,$new_parent,$skip_notification); // call ourself recursive to delete the child } @@ -674,13 +677,13 @@ class infolog_bo $this->so->write($deleted); - egw_link::unlink(0,'infolog',$info_id,'','!file','',true); // keep the file attachments, hide the rest + Link::unlink(0,'infolog',$info_id,'','!file','',true); // keep the file attachments, hide the rest } else { $this->so->delete($info_id,false); // we delete the children via bo to get all notifications! - egw_link::unlink(0,'infolog',$info_id); + Link::unlink(0,'infolog',$info_id); } if ($info['info_status'] != 'deleted') // dont notify of final purge of already deleted items { @@ -717,8 +720,8 @@ class infolog_bo { $values = $values_in; //echo "boinfolog::write()values="; _debug_array($values); - if (!$values['info_id'] && !$this->check_access(0,EGW_ACL_EDIT,$values['info_owner']) && - !$this->check_access(0,EGW_ACL_ADD,$values['info_owner'])) + if (!$values['info_id'] && !$this->check_access(0,Acl::EDIT,$values['info_owner']) && + !$this->check_access(0,Acl::ADD,$values['info_owner'])) { return false; } @@ -728,7 +731,7 @@ class infolog_bo $old = $this->read($values['info_id'], false, 'server'); } - if (($status_only = $values['info_id'] && !$this->check_access($values,EGW_ACL_EDIT))) + if (($status_only = $values['info_id'] && !$this->check_access($values,Acl::EDIT))) { if (!isset($values['info_responsible'])) { @@ -744,11 +747,11 @@ class infolog_bo } if (!$status_only && $values['info_status'] != 'deleted') { - $status_only = $undelete = $this->check_access($values['info_id'],EGW_ACL_UNDELETE); + $status_only = $undelete = $this->check_access($values['info_id'],self::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)) + if ($values['info_id'] && !$this->check_access($values['info_id'],Acl::EDIT) && !$status_only || + !$values['info_id'] && $values['info_id_parent'] && !$this->check_access($values['info_id_parent'],Acl::ADD)) { return false; } @@ -851,7 +854,7 @@ class infolog_bo // Check required custom fields if($throw_exception) { - $custom = egw_customfields::get('infolog'); + $custom = Api\Storage\Customfields::get('infolog'); foreach($custom as $c_name => $c_field) { if($c_field['type2']) $type2 = is_array($c_field['type2']) ? $c_field['type2'] : explode(',',$c_field['type2']); @@ -860,7 +863,7 @@ class infolog_bo // Required custom field if(!$values['#'.$c_name]) { - throw new egw_exception_wrong_userinput(lang('For infolog type %1, %2 is required',lang($values['info_type']),$c_field['label'])); + throw new Api\Exception\WrongUserinput(lang('For infolog type %1, %2 is required',lang($values['info_type']),$c_field['label'])); } } } @@ -869,10 +872,10 @@ class infolog_bo if (isset($this->group_owners[$values['info_type']])) { $values['info_owner'] = $this->group_owners[$values['info_type']]; - if (!($this->grants[$this->group_owners[$values['info_type']]] & EGW_ACL_EDIT)) + if (!($this->grants[$this->group_owners[$values['info_type']]] & Acl::EDIT)) { - if (!$this->check_access($values['info_id'],EGW_ACL_EDIT) || - !$values['info_id'] && !$this->check_access($values,EGW_ACL_ADD) + if (!$this->check_access($values['info_id'],Acl::EDIT) || + !$values['info_id'] && !$this->check_access($values,Acl::ADD) ) { return false; // no edit rights from the group-owner and no implicit rights (delegated and sufficient rights) @@ -950,11 +953,11 @@ class infolog_bo // Check for restore of deleted entry, restore held links if($old['info_status'] == 'deleted' && $values['info_status'] != 'deleted') { - egw_link::restore('infolog', $info_id); + Link::restore('infolog', $info_id); } // notify the link-class about the update, as other apps may be subscribt to it - egw_link::notify_update('infolog',$info_id,$values); + Link::notify_update('infolog',$info_id,$values); // pre-cache the new values self::set_link_cache($values); @@ -1056,7 +1059,7 @@ class infolog_bo { if (!empty($query['col_filter'][$key])) { - $query['col_filter'][$key] = egw_time::user2server($query['col_filter'][$key],'ts'); + $query['col_filter'][$key] = Api\DateTime::user2server($query['col_filter'][$key],'ts'); } } } @@ -1069,7 +1072,7 @@ class infolog_bo { foreach ($ret as $id => &$data) { - if (!$this->check_access($data,EGW_ACL_READ)) + if (!$this->check_access($data,Acl::READ)) { unset($ret[$id]); continue; @@ -1079,21 +1082,21 @@ class infolog_bo { if ($data[$key]) { - $time = new egw_time($data[$key], egw_time::$server_timezone); + $time = new Api\DateTime($data[$key], Api\DateTime::$server_timezone); if (!isset($query['date_format']) || $query['date_format'] != 'server') { if ($time->format('Hi') == '0000') { // we keep dates the same in user-time - $arr = egw_time::to($time,'array'); - $time = new egw_time($arr, egw_time::$user_timezone); + $arr = Api\DateTime::to($time,'array'); + $time = new Api\DateTime($arr, Api\DateTime::$user_timezone); } else { - $time->setTimezone(egw_time::$user_timezone); + $time->setTimezone(Api\DateTime::$user_timezone); } } - $data[$key] = egw_time::to($time,'ts'); + $data[$key] = Api\DateTime::to($time,'ts'); } } // pre-cache title and file access @@ -1161,7 +1164,7 @@ class infolog_bo 'info_addr' => implode(', ',$emails), 'info_subject' => $_subject, 'info_des' => $_message, - 'info_startdate' => egw_time::server2user($_date), + 'info_startdate' => Api\DateTime::server2user($_date), 'info_status' => $status, 'info_priority' => 1, 'info_percent' => $status == 'done' ? 100 : 0, @@ -1173,7 +1176,7 @@ class infolog_bo ); if ($GLOBALS['egw_info']['user']['preferences']['infolog']['cat_add_default']) $info['info_cat'] = $GLOBALS['egw_info']['user']['preferences']['infolog']['cat_add_default']; // find the addressbookentry to link with - $addressbook = new addressbook_bo(); + $addressbook = new Api\Contacts(); $contacts = array(); foreach ($emails as $mailadr) { @@ -1196,7 +1199,7 @@ class infolog_bo // create the rest a "ordinary" links foreach ($contacts as $contact) { - egw_link::link('infolog',$info['link_to']['to_id'],'addressbook',$contact['id']); + Link::link('infolog',$info['link_to']['to_id'],'addressbook',$contact['id']); } } if (is_array($_attachments)) @@ -1205,12 +1208,12 @@ class infolog_bo { if($attachment['egw_data']) { - egw_link::link('infolog',$info['link_to']['to_id'],egw_link::DATA_APPNAME, $attachment); + Link::link('infolog',$info['link_to']['to_id'],Link::DATA_APPNAME, $attachment); } else if(is_readable($attachment['tmp_name']) || - (egw_vfs::is_readable($attachment['tmp_name']) && parse_url($attachment['tmp_name'], PHP_URL_SCHEME) === 'vfs')) + (Vfs::is_readable($attachment['tmp_name']) && parse_url($attachment['tmp_name'], PHP_URL_SCHEME) === 'vfs')) { - egw_link::link('infolog',$info['link_to']['to_id'],'file', $attachment); + Link::link('infolog',$info['link_to']['to_id'],'file', $attachment); } } } @@ -1294,7 +1297,7 @@ class infolog_bo * Check access to the file store * * @param int|array $id id of entry or entry array - * @param int $check EGW_ACL_READ for read and EGW_ACL_EDIT for write or delete access + * @param int $check Acl::READ for read and Acl::EDIT for write or delete access * @param string $rel_path = null currently not used in InfoLog * @param int $user = null for which user to check, default current user * @return boolean true if access is granted or false otherwise @@ -1312,10 +1315,10 @@ class infolog_bo */ function set_link_cache(array $info) { - egw_link::set_cache('infolog',$info['info_id'], + Link::set_cache('infolog',$info['info_id'], $this->link_title($info), - $this->file_access($info,EGW_ACL_EDIT) ? EGW_ACL_READ|EGW_ACL_EDIT : - ($this->file_access($info,EGW_ACL_READ) ? EGW_ACL_READ : 0)); + $this->file_access($info,Acl::EDIT) ? EGW_ACL_READ|EGW_ACL_EDIT : + ($this->file_access($info,Acl::READ) ? Acl::READ : 0)); } /** @@ -1334,7 +1337,7 @@ class infolog_bo { return False; } - $GLOBALS['egw']->translation->add_app('infolog'); + Api\Translation::add_app('infolog'); $do_events = $args['location'] == 'calendar_include_events'; $to_include = array(); @@ -1357,12 +1360,12 @@ class infolog_bo { foreach ($infos as $info) { - $start = new egw_time($info['info_startdate'],egw_time::$user_timezone); + $start = new Api\DateTime($info['info_startdate'],Api\DateTime::$user_timezone); $title = ($do_events?common::formattime($start->format('H'),$start->format('i')).' ':''). $info['info_subject']; - $view = egw_link::view('infolog',$info['info_id']); + $view = Link::view('infolog',$info['info_id']); $size = null; - $edit = egw_link::edit('infolog',$info['info_id'], $size); + $edit = Link::edit('infolog',$info['info_id'], $size); $edit['size'] = $size; $content=array(); $status = $this->status[$info['info_type']][$info['info_status']]; @@ -1372,10 +1375,10 @@ class infolog_bo $status => 'status' ) as $icon => $default) { - $icons[common::image('infolog',$icon) ? $icon : $default] = $icon; + $icons[Api\Image::find('infolog',$icon) ? $icon : $default] = $icon; } - $content[] = html::a_href($title,$view); - $html = html::table(array(1 => $content)); + $content[] = Api\Html::a_href($title,$view); + $html = Api\Html::table(array(1 => $content)); $to_include[] = array( 'starttime' => $info['info_startdate'], @@ -1421,8 +1424,8 @@ class infolog_bo 'ongoing' : 'infolog/'.$row['info_status'], 'class' => $row['info_id_parent'] ? 'infolog_rowHasParent' : null, ); - if (common::image('infolog', $icon=$row['info_type'].'_element') || - common::image('infolog', $icon=$row['info_type'])) + if (Api\Image::find('infolog', $icon=$row['info_type'].'_element') || + Api\Image::find('infolog', $icon=$row['info_type'])) { $infos[$row['info_id']]['icon'] = 'infolog/'.$icon; } @@ -1450,19 +1453,19 @@ class infolog_bo { if (!is_object($this->categories)) { - $this->categories = new categories($this->user,'infolog'); + $this->categories = new Api\Categories($this->user,'infolog'); } $old_cats_preserve = array(); if ($info_id && $info_id > 0) { - // preserve categories without users read access + // preserve Api\Categories without users read access $old_infolog = $this->read($info_id); $old_categories = explode(',',$old_infolog['info_cat']); if (is_array($old_categories) && count($old_categories) > 0) { foreach ($old_categories as $cat_id) { - if ($cat_id && !$this->categories->check_perms(EGW_ACL_READ, $cat_id)) + if ($cat_id && !$this->categories->check_perms(Acl::READ, $cat_id)) { $old_cats_preserve[] = $cat_id; } @@ -1518,7 +1521,7 @@ class infolog_bo { if (!is_object($this->categories)) { - $this->categories = new categories($this->user,'infolog'); + $this->categories = new Api\Categories($this->user,'infolog'); } if (!is_array($cat_id_list)) @@ -1528,7 +1531,7 @@ class infolog_bo $cat_list = array(); foreach($cat_id_list as $cat_id) { - if ($cat_id && $this->categories->check_perms(EGW_ACL_READ, $cat_id) && + if ($cat_id && $this->categories->check_perms(Acl::READ, $cat_id) && ($cat_name = $this->categories->id2name($cat_id)) && $cat_name != '--') { $cat_list[] = $cat_name; @@ -1671,13 +1674,13 @@ class infolog_bo * X-INFOLOG-STATUS is only used, if translated to the vtodo-status gives the identical vtodo status * --> the user did not changed it * - * @param string $vtodo_status {CANCELLED|NEEDS-ACTION|COMPLETED|IN-PROCESS} + * @param string $_vtodo_status {CANCELLED|NEEDS-ACTION|COMPLETED|IN-PROCESS} * @param string $x_infolog_status preserved original infolog status * @return string */ - function vtodo2status($vtodo_status,$x_infolog_status=null) + function vtodo2status($_vtodo_status,$x_infolog_status=null) { - $vtodo_status = strtoupper($vtodo_status); + $vtodo_status = strtoupper($_vtodo_status); if ($x_infolog_status && $this->status2vtodo($x_infolog_status) == $vtodo_status) { @@ -1800,7 +1803,7 @@ class infolog_bo $filter = array('col_filter' => array('info_uid' => $infoData['info_uid'])); foreach($this->so->search($filter) as $egwData) { - if (!$this->check_access($egwData,EGW_ACL_READ)) continue; + if (!$this->check_access($egwData,Acl::READ)) continue; $foundInfoLogs[$egwData['info_id']] = $egwData['info_id']; } return $foundInfoLogs; @@ -1852,7 +1855,7 @@ class infolog_bo foreach ($this->so->search($filter) as $itemID => $egwData) { - if (!$this->check_access($egwData,EGW_ACL_READ)) continue; + if (!$this->check_access($egwData,Acl::READ)) continue; switch ($infoData['info_type']) { @@ -1925,7 +1928,7 @@ class infolog_bo // __FILE__, __LINE__, PEAR_LOG_DEBUG); foreach ($this->so->search($filter) as $itemID => $egwData) { - if (!$this->check_access($egwData,EGW_ACL_READ)) continue; + if (!$this->check_access($egwData,Acl::READ)) continue; // Horde::logMessage("findVTODO Trying\n" // . print_r($egwData, true), // __FILE__, __LINE__, PEAR_LOG_DEBUG); @@ -1947,8 +1950,8 @@ class infolog_bo if (isset($egwData['info_startdate']) && $egwData['info_startdate']) { // We compare the date only - $taskTime = new egw_time($infoData['info_startdate'],egw_time::$server_timezone); - $egwTime = new egw_time($egwData['info_startdate'],egw_time::$server_timezone); + $taskTime = new Api\DateTime($infoData['info_startdate'],Api\DateTime::$server_timezone); + $egwTime = new Api\DateTime($egwData['info_startdate'],Api\DateTime::$server_timezone); if ($taskTime->format('Ymd') != $egwTime->format('Ymd')) { if ($this->log) @@ -1992,8 +1995,8 @@ class infolog_bo if (isset($egwData['info_enddate']) && $egwData['info_enddate']) { // We compare the date only - $taskTime = new egw_time($infoData['info_enddate'],egw_time::$server_timezone); - $egwTime = new egw_time($egwData['info_enddate'],egw_time::$server_timezone); + $taskTime = new Api\DateTime($infoData['info_enddate'],Api\DateTime::$server_timezone); + $egwTime = new Api\DateTime($egwData['info_enddate'],Api\DateTime::$server_timezone); if ($taskTime->format('Ymd') != $egwTime->format('Ymd')) { if ($this->log) @@ -2021,8 +2024,8 @@ class infolog_bo if (isset($egwData['info_datecompleted']) && $egwData['info_datecompleted']) { // We compare the date only - $taskTime = new egw_time($infoData['info_datecompleted'],egw_time::$server_timezone); - $egwTime = new egw_time($egwData['info_datecompleted'],egw_time::$server_timezone); + $taskTime = new Api\DateTime($infoData['info_datecompleted'],Api\DateTime::$server_timezone); + $egwTime = new Api\DateTime($egwData['info_datecompleted'],Api\DateTime::$server_timezone); if ($taskTime->format('Ymd') != $egwTime->format('Ymd')) { if ($this->log) diff --git a/infolog/inc/class.infolog_customfields.inc.php b/infolog/inc/class.infolog_customfields.inc.php index 23c07e692d..276c7724c5 100644 --- a/infolog/inc/class.infolog_customfields.inc.php +++ b/infolog/inc/class.infolog_customfields.inc.php @@ -5,11 +5,14 @@ * @link http://www.egroupware.org * @author Ralf Becker * @package infolog - * @copyright (c) 2003-14 by Ralf Becker + * @copyright (c) 2003-16 by Ralf Becker * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @version $Id$ */ +use EGroupware\Api; +use EGroupware\Api\Etemplate; + require_once(EGW_INCLUDE_ROOT . '/admin/inc/class.customfields.inc.php'); /** * Administration of custom fields, type and status @@ -26,7 +29,7 @@ class infolog_customfields extends customfields /** * instance of the config class for infolog * - * @var config + * @var Api\Config */ var $config_data; /** @@ -39,12 +42,12 @@ class infolog_customfields extends customfields function __construct( ) { parent::__construct('infolog'); - + $this->bo = new infolog_bo(); - $this->tmpl = new etemplate_new(); + $this->tmpl = new Etemplate(); $this->content_types = &$this->bo->enums['type']; $this->status = &$this->bo->status; - $this->config_data = config::read('infolog'); + $this->config_data = Api\Config::read('infolog'); $this->fields = &$this->bo->customfields; $this->group_owners =& $this->bo->group_owners; } @@ -55,6 +58,8 @@ class infolog_customfields extends customfields */ protected function app_index(&$content, &$sel_options, &$readonlys, &$preserve) { + unset($sel_options); // not used, but required by function signature + $n = 0; foreach($this->status[$this->content_type] as $name => $label) { @@ -83,7 +88,6 @@ class infolog_customfields extends customfields function update_fields(&$content) { - $typ = $content['type2']; $fields = &$content['fields']; $create = $fields['create']; @@ -129,8 +133,8 @@ class infolog_customfields extends customfields { foreach(explode("\n",$field['values']) as $line) { - list($var,$value) = explode('=',trim($line),2); - $var = trim($var); + list($var2,$value) = explode('=',trim($line),2); + $var = trim($var2); $values[$var] = empty($value) ? $var : $value; } } @@ -156,7 +160,7 @@ class infolog_customfields extends customfields uasort($this->fields,sort_by_order); $n = 0; - foreach($this->fields as $name => $data) + foreach(array_keys($this->fields) as $name) { $this->fields[$name]['order'] = ($n += 10); } @@ -265,7 +269,7 @@ class infolog_customfields extends customfields } else { - foreach($this->content_types as $letter => $name) + foreach($this->content_types as $name) { if($name == $new_name) { @@ -285,15 +289,15 @@ class infolog_customfields extends customfields $this->save_repository(); return $new_name; } - + function save_repository() { // save changes to repository - config::save_value('types',$this->content_types,'infolog'); + Api\Config::save_value('types',$this->content_types,'infolog'); //echo '

'.__METHOD__.'() \$this->status=

'; print_r($this->status); echo "
\n"; - config::save_value('status',$this->status,'infolog'); + Api\Config::save_value('status',$this->status,'infolog'); //echo '

'.__METHOD__.'() \$this->fields=

'; print_r($this->fields); echo "
\n"; - egw_customfields::save('infolog', $this->fields); - config::save_value('group_owners',$this->group_owners,'infolog'); + Api\Storage\Customfields::save('infolog', $this->fields); + Api\Config::save_value('group_owners',$this->group_owners,'infolog'); } } diff --git a/infolog/inc/class.infolog_datasource.inc.php b/infolog/inc/class.infolog_datasource.inc.php index 21a3308a7c..ad791b5055 100644 --- a/infolog/inc/class.infolog_datasource.inc.php +++ b/infolog/inc/class.infolog_datasource.inc.php @@ -6,11 +6,14 @@ * @author Ralf Becker * @package infolog * @subpackage projectmanager - * @copyright (c) 2005-8 by Ralf Becker + * @copyright (c) 2005-16 by Ralf Becker * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @version $Id$ */ +use EGroupware\Api\Link; +use EGroupware\Api\Acl; + include_once(EGW_INCLUDE_ROOT.'/projectmanager/inc/class.datasource.inc.php'); /** @@ -93,11 +96,13 @@ class infolog_datasource extends datasource * * @param array $element source project element representing an InfoLog entry, $element['pe_app_id'] = info_id * @param int $target target project id - * @param array $target_data=null data of target-project, atm not used by the infolog datasource + * @param array $extra =null data of target-project, atm not used by the infolog datasource * @return array/boolean array(info_id,link_id) on success, false otherwise */ function copy($element,$target,$extra=null) { + unset($extra); // not used, but required by function signature + $info =& $this->infolog_bo->read((int) $element['pe_app_id']); if (!is_array($info)) return false; @@ -116,11 +121,11 @@ class infolog_datasource extends datasource if(!($info['info_id'] = $this->infolog_bo->write($info))) return false; // link the new infolog against the project and setting info_link_id and evtl. info_from - $old_link = $info['info_link_id'] ? egw_link::get_link($info['info_link']) : $info['info_link']; - $info['info_link_id'] = egw_link::link('projectmanager',$target,'infolog',$info['info_id'],$element['pe_remark'],0,0,1); + $old_link = $info['info_link_id'] ? Link::get_link($info['info_link']) : $info['info_link']; + $info['info_link_id'] = Link::link('projectmanager',$target,'infolog',$info['info_id'],$element['pe_remark'],0,0,1); if (!$info['info_from'] || $old_link && $info['info_from'] == $old_link['title']) { - $info['info_from'] = egw_link::title('projectmanager',$target); + $info['info_from'] = Link::title('projectmanager',$target); } if ($info['info_status'] == 'template') { @@ -129,14 +134,14 @@ class infolog_datasource extends datasource $this->infolog_bo->write($info); // creating again all links, beside the one to the source-project - foreach(egw_link::get_links('infolog',$element['pe_app_id']) as $link) + foreach(Link::get_links('infolog',$element['pe_app_id']) as $link) { if ($link['app'] == 'projectmanager' && $link['id'] == $element['pm_id'] || // ignoring the source project - $link['app'] == egw_link::VFS_APPNAME) // ignoring files attachments for now + $link['app'] == Link::VFS_APPNAME) // ignoring files attachments for now { continue; } - egw_link::link('infolog',$info['info_id'],$link['app'],$link['id'],$link['remark']); + Link::link('infolog',$info['info_id'],$link['app'],$link['id'],$link['remark']); } $ret = array($info['info_id'],$info['info_link_id']); @@ -181,7 +186,7 @@ class infolog_datasource extends datasource $GLOBALS['infolog_bo'] = new infolog_bo(); } // dont delete infolog, which are linked to other elements, but their project - if (count(egw_link::get_links('infolog',$id)) > 1) + if (count(Link::get_links('infolog',$id)) > 1) { return false; } @@ -198,7 +203,7 @@ class infolog_datasource extends datasource function change_status($id,$status) { //error_log("datasource_infolog::change_status($id,$status)"); - if (($info = $this->infolog_bo->read($id)) && $this->infolog_bo->check_access($info,EGW_ACL_EDIT)) + if (($info = $this->infolog_bo->read($id)) && $this->infolog_bo->check_access($info,Acl::EDIT)) { if ($status == 'active' && in_array($info['info_status'],array('template','nonactive','archive'))) { diff --git a/infolog/inc/class.infolog_export_csv.inc.php b/infolog/inc/class.infolog_export_csv.inc.php index 3faa446e6d..15bec574f0 100644 --- a/infolog/inc/class.infolog_export_csv.inc.php +++ b/infolog/inc/class.infolog_export_csv.inc.php @@ -1,6 +1,6 @@ bo = new infolog_bo(); $this->get_selects(); } @@ -42,7 +45,7 @@ class infolog_export_csv implements importexport_iface_export_plugin { switch($options['selection']) { case 'search': - $query = array_merge((array)$GLOBALS['egw']->session->appsession('session_data','infolog'), $query); + $query = array_merge((array)Api\Cache::getSession('infolog', 'session_data'), $query); // Fall through case 'filter': case 'all': @@ -94,7 +97,7 @@ class infolog_export_csv implements importexport_iface_export_plugin { if($row[$field]) $cf_preload[$app][] = $row[$field]; } if($cf_preload[$app]){ - $selects[$field] = egw_link::titles($app, $cf_preload[$app]); + $selects[$field] = Link::titles($app, $cf_preload[$app]); //error_log('Preload ' . $field . '['.$app . ']: ' . implode(',',$cf_preload[$app])); } } @@ -104,7 +107,7 @@ class infolog_export_csv implements importexport_iface_export_plugin { } while($query['start'] < $query['total']); return $this->export_object; - break; + default: $ids = $selection = explode(',',$options['selection']); $this->export_records($this->export_object, $options, $selection, $ids); @@ -118,22 +121,22 @@ class infolog_export_csv implements importexport_iface_export_plugin { // Pre-load links all at once if($ids && $options['mapping']['info_link_id']) { - $links = egw_link::get_links_multiple('infolog', $ids, true, '!'.egw_link::VFS_APPNAME); + $links = Link::get_links_multiple('infolog', $ids, true, '!'.Link::VFS_APPNAME); foreach($links as $id => $link) { if(!is_array($selection[$id])) break; $selection[$id]['info_link_id'] = $link; - if($options['convert']) $selection[$id]['info_link_id'] = egw_link::title($link['app'], $link['id']); + if($options['convert']) $selection[$id]['info_link_id'] = Link::title($link['app'], $link['id']); } } // If exporting PM fields, pre-load them all at once if($ids && ($options['mapping']['pm_id'] || $options['mapping']['project'])) { - $projects = egw_link::get_links_multiple('infolog', $ids, true, 'projectmanager'); + $projects = Link::get_links_multiple('infolog', $ids, true, 'projectmanager'); foreach($projects as $id => $links) { if(!is_array($selection[$id])) break; $selection[$id]['pm_id'] = current($links); - $selection[$id]['project'] = egw_link::title('projectmanager', $selection[$id]['pm_id']); + $selection[$id]['project'] = Link::title('projectmanager', $selection[$id]['pm_id']); $this->selects['pl_id'] = ExecMethod('projectmanager.projectmanager_pricelist_bo.pricelist',$selection[$id]['pm_id']); } } @@ -141,11 +144,11 @@ class infolog_export_csv implements importexport_iface_export_plugin { foreach ($selection as $_identifier) { if(!is_array($_identifier)) { $record = new infolog_egw_record($_identifier); - if($link = $links[$record->info_id]) $record->info_link_id = $options['convert'] ? egw_link::title($link['app'], $link['id']) : $link; - if($project = $projects[$record->info_id]) + if(($link = $links[$record->info_id])) $record->info_link_id = $options['convert'] ? Link::title($link['app'], $link['id']) : $link; + if(($project = $projects[$record->info_id])) { $record->pm_id = current($project); - $record->project = egw_link::title('projectmanager', $record->pm_id); + $record->project = Link::title('projectmanager', $record->pm_id); } } else { $record = new infolog_egw_record(); @@ -249,7 +252,7 @@ class infolog_export_csv implements importexport_iface_export_plugin { foreach($filters as $field_name => &$settings) { if($this->selects[$field_name]) $settings['values'] = $this->selects[$field_name]; - + // Infolog can't handle ranges in custom fields due to the way searching is done. if(strpos($field_name, '#') === 0 && strpos($settings['type'],'date') === 0) unset($filters[$field_name]); } diff --git a/infolog/inc/class.infolog_export_ical.inc.php b/infolog/inc/class.infolog_export_ical.inc.php index d59b1314a2..8db8bc4018 100644 --- a/infolog/inc/class.infolog_export_ical.inc.php +++ b/infolog/inc/class.infolog_export_ical.inc.php @@ -11,6 +11,8 @@ * @version $Id$ */ +use EGroupware\Api; + /** * export iCal plugin of infolog */ @@ -25,15 +27,15 @@ class infolog_export_ical extends infolog_export_csv { $options = $_definition->plugin_options; $this->bo = new infolog_bo(); - $limit_exception = bo_merge::is_export_limit_excepted(); - if (!$limit_exception) $export_limit = bo_merge::getExportLimit('infolog'); + $limit_exception = Api\Storage\Merge::is_export_limit_excepted(); + if (!$limit_exception) $export_limit = Api\Storage\Merge::getExportLimit('infolog'); $ids = array(); $query = array(); switch($options['selection']) { case 'search': - $query = array_merge($GLOBALS['egw']->session->appsession('session_data','infolog'), $query); + $query = array_merge(Api\Cache::getSession('infolog', 'session_data'), $query); // Fall through case 'all': $query['num_rows'] = $export_limit ? $export_limit : -1; diff --git a/infolog/inc/class.infolog_groupdav.inc.php b/infolog/inc/class.infolog_groupdav.inc.php index 91eb95a71f..f8a83415ba 100644 --- a/infolog/inc/class.infolog_groupdav.inc.php +++ b/infolog/inc/class.infolog_groupdav.inc.php @@ -5,16 +5,17 @@ * @link http://www.egroupware.org * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @package infolog - * @subpackage groupdav + * @subpackage caldav * @author Ralf Becker * @copyright (c) 2007-16 by Ralf Becker * @version $Id$ */ use EGroupware\Api; +use EGroupware\Api\Acl; /** - * EGroupware: GroupDAV access: infolog handler + * EGroupware: CalDAV access: infolog handler * * Permanent error_log() calls should use $this->caldav->log($str) instead, to be send to PHP error_log() * and our request-log (prefixed with "### " after request and response, like exceptions). @@ -623,7 +624,7 @@ class infolog_groupdav extends Api\CalDAV\Handler $action = $GLOBALS['egw_info']['user']['preferences']['groupdav']['infolog-cat-action']; //error_log(__METHOD__.'('.array2string($task).', '.array2string($oldTask).") action=$action"); - if ($task['info_cat'] && ($new_cat = categories::id2name($task['info_cat'])) && + if ($task['info_cat'] && ($new_cat = Api\Categories::id2name($task['info_cat'])) && strpos($new_cat, '@') !== false) { $new_user = $GLOBALS['egw']->accounts->name2id($new_cat, 'account_email'); @@ -633,17 +634,17 @@ class infolog_groupdav extends Api\CalDAV\Handler if ($new_user) { // make sure category is global, as otherwise it will not be transmitted to other users - if (!categories::is_global($task['info_cat'])) + if (!Api\Categories::is_global($task['info_cat'])) { - $cat_obj = new categories(categories::GLOBAL_ACCOUNT, 'infolog'); - $cat = categories::read($task['info_cat']); - $cat['owner'] = categories::GLOBAL_ACCOUNT; + $cat_obj = new Api\Categories(categories::GLOBAL_ACCOUNT, 'infolog'); + $cat = Api\Categories::read($task['info_cat']); + $cat['owner'] = Api\Categories::GLOBAL_ACCOUNT; $cat['access'] = 'public'; $cat_obj->edit($cat); } // if replace, remove user of old category from responsible if ($action == 'replace' && $oldTask && $oldTask['info_cat'] && - ($old_cat = categories::id2name($oldTask['info_cat'])) && strpos($old_cat, '@') !== false && + ($old_cat = Api\Categories::id2name($oldTask['info_cat'])) && strpos($old_cat, '@') !== false && ($old_user = $GLOBALS['egw']->accounts->name2id($old_cat, 'account_email')) && ($key = array_search($old_user, (array)$task['info_responsible'])) !== false) { @@ -722,7 +723,7 @@ class infolog_groupdav extends Api\CalDAV\Handler /** * Check if user has the neccessary rights on a task / infolog entry * - * @param int $acl EGW_ACL_READ, EGW_ACL_EDIT or EGW_ACL_DELETE + * @param int $acl Acl::READ, Acl::EDIT or Acl::DELETE * @param array|int $task task-array or id * @return boolean null if entry does not exist, false if no access, true if access permitted */ @@ -732,7 +733,7 @@ class infolog_groupdav extends Api\CalDAV\Handler $access = $this->bo->check_access($task,$acl); - if (!$access && $acl == EGW_ACL_EDIT && $this->bo->is_responsible($task)) + if (!$access && $acl == Acl::EDIT && $this->bo->is_responsible($task)) { $access = true; // access limited to $this->bo->responsible_edit fields (handled in infolog_bo::write()) } @@ -774,7 +775,7 @@ class infolog_groupdav extends Api\CalDAV\Handler /** * Add extra properties for calendar collections * - * @param array $props =array() regular props by the groupdav handler + * @param array $props =array() regular props by the Api\CalDAV handler * @param string $displayname * @param string $base_uri =null base url of handler * @param int $user =null account_id of owner of collection @@ -785,7 +786,7 @@ class infolog_groupdav extends Api\CalDAV\Handler unset($base_uri); // not used, but required by function signature // calendar description - $displayname = translation::convert(lang('Tasks of'),translation::charset(),'utf-8').' '.$displayname; + $displayname = Api\Translation::convert(lang('Tasks of'),Api\Translation::charset(),'utf-8').' '.$displayname; $props['calendar-description'] = Api\CalDAV::mkprop(Api\CalDAV::CALDAV,'calendar-description',$displayname); // supported components, currently only VEVENT $props['supported-calendar-component-set'] = Api\CalDAV::mkprop(Api\CalDAV::CALDAV,'supported-calendar-component-set',array( @@ -802,7 +803,7 @@ class infolog_groupdav extends Api\CalDAV\Handler Api\CalDAV::mkprop(Api\CalDAV::CALDAV,'calendar-multiget',''))))), ); // only advertice rfc 6578 sync-collection report, if "delete-prevention" is switched on (deleted entries get marked deleted but not actualy deleted - $config = config::read('infolog'); + $config = Api\Config::read('infolog'); if ($config['history']) { $props['supported-report-set']['sync-collection'] = Api\CalDAV::mkprop('supported-report',array( @@ -842,7 +843,7 @@ class infolog_groupdav extends Api\CalDAV\Handler { if (!isset($hook_data['setup'])) { - translation::add_app('infolog'); + Api\Translation::add_app('infolog'); $infolog = new infolog_bo(); $types = $infolog->enums['type']; } diff --git a/infolog/inc/class.infolog_hooks.inc.php b/infolog/inc/class.infolog_hooks.inc.php index 691ca9b452..70e6989116 100644 --- a/infolog/inc/class.infolog_hooks.inc.php +++ b/infolog/inc/class.infolog_hooks.inc.php @@ -1,15 +1,21 @@ * @package infolog - * @copyright (c) 2003-13 by Ralf Becker + * @copyright (c) 2003-16 by Ralf Becker * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @version $Id$ */ +use EGroupware\Api; +use EGroupware\Api\Link; +use EGroupware\Api\Framework; +use EGroupware\Api\Egw; +use EGroupware\Api\Acl; + /** * Class containing admin, preferences and sidebox-menus (used as hooks) */ @@ -24,7 +30,7 @@ class infolog_hooks static function not_enum_group_acls($location) { unset($location); // not used, but part of hook signature - $config = config::read('infolog'); + $config = Api\Config::read('infolog'); return $config['group_owners']; } @@ -38,15 +44,6 @@ class infolog_hooks static function search_link($location) { unset($location); // not used, but part of hook signature - // register our not_enum_group_acls hook, if not already registered - // can be removed after next infolog version update after 1.6 - if ($GLOBALS['egw']->hooks->single('not_enum_group_acls', 'infolog') === false) - { - $setup_info = array(); - include(EGW_INCLUDE_ROOT.'/infolog/setup/setup.inc.php'); - $GLOBALS['egw']->hooks->register_hooks('infolog',$setup_info['infolog']['hooks']); - unset($setup_info); - } return array( 'query' => 'infolog.infolog_bo.link_query', @@ -93,32 +90,32 @@ class infolog_hooks if ($location == 'sidebox_menu') { // Magic etemplate2 favorites menu (from nextmatch widget) - display_sidebox($appname, lang('Favorites'), egw_framework::favorite_list($appname)); + display_sidebox($appname, lang('Favorites'), Framework\Favorites::list_favorites($appname)); $file = array( - 'infolog list' => egw::link('/index.php',array( + 'infolog list' => Egw::link('/index.php',array( 'menuaction' => 'infolog.infolog_ui.index', 'ajax' => 'true')), array( - 'text' => lang('Add %1',lang(egw_link::get_registry($appname, 'entry'))), + 'text' => lang('Add %1',lang(Link::get_registry($appname, 'entry'))), 'no_lang' => true, 'link' => "javascript:app.infolog.add_link_sidemenu();" ), - 'Placeholders' => egw::link('/index.php','menuaction=infolog.infolog_merge.show_replacements') + 'Placeholders' => Egw::link('/index.php','menuaction=infolog.infolog_merge.show_replacements') ); display_sidebox($appname,$GLOBALS['egw_info']['apps']['infolog']['title'].' '.lang('Menu'),$file); } - if ($GLOBALS['egw_info']['user']['apps']['admin'] && !html::$ua_mobile) + if ($GLOBALS['egw_info']['user']['apps']['admin'] && !Api\Header\UserAgent::mobile()) { $file = Array( - 'Site configuration' => egw::link('/index.php',array( + 'Site configuration' => Egw::link('/index.php',array( 'menuaction' => 'infolog.infolog_ui.admin' )), - 'Global Categories' => egw::link('/index.php',array( + 'Global Categories' => Egw::link('/index.php',array( 'menuaction' => 'admin.admin_categories.index', 'appname' => $appname, 'global_cats'=> True)), - 'Custom fields, typ and status' => egw::link('/index.php',array( + 'Custom fields, typ and status' => Egw::link('/index.php',array( 'menuaction' => 'infolog.infolog_customfields.index')), ); if ($location == 'admin') @@ -133,7 +130,7 @@ class infolog_hooks } /** - * populates $settings for the preferences + * populates $settings for the Api\Preferences * * @return array */ @@ -488,7 +485,7 @@ class infolog_hooks */ private static function all_cats() { - $categories = new categories('','infolog'); + $categories = new Api\Categories('','infolog'); $accountId = $GLOBALS['egw_info']['user']['account_id']; foreach((array)$categories->return_sorted_array(0,False,'','','',true) as $cat) @@ -524,7 +521,7 @@ class infolog_hooks if ($data['prefs']['notify_due_delegated'] || $data['prefs']['notify_due_responsible'] || $data['prefs']['notify_start_delegated'] || $data['prefs']['notify_start_responsible']) { - $async = new asyncservice(); + $async = new Api\AsyncService(); if (!$async->read('infolog-async-notification')) { @@ -537,17 +534,17 @@ class infolog_hooks * ACL rights and labels used * * @param string|array string with location or array with parameters incl. "location", specially "owner" for selected acl owner - * @return array acl::(READ|ADD|EDIT|DELETE|PRIVAT|CUSTOM(1|2|3)) => $label pairs + * @return array Acl::(READ|ADD|EDIT|DELETE|PRIVAT|CUSTOM(1|2|3)) => $label pairs */ public static function acl_rights($params) { unset($params); // not used, but default function signature for hooks return array( - acl::READ => 'read', - acl::ADD => 'add', - acl::EDIT => 'edit', - acl::DELETE => 'delete', - acl::PRIVAT => 'private', + Acl::READ => 'read', + Acl::ADD => 'add', + Acl::EDIT => 'edit', + Acl::DELETE => 'delete', + Acl::PRIVAT => 'private', ); } @@ -562,7 +559,7 @@ class infolog_hooks unset($location); // not used, but part of hook signature return true; } - + /** * Mail integration hook to import mail message contents into an infolog entry * @@ -570,9 +567,11 @@ class infolog_hooks */ public static function mail_import($args) { + unset($args); // not used, but required by function signature + return array ( 'menuaction' => 'infolog.infolog_ui.mail_import', - 'popup' => egw_link::get_registry('infolog', 'edit_popup') + 'popup' => Link::get_registry('infolog', 'edit_popup') ); } } diff --git a/infolog/inc/class.infolog_ical.inc.php b/infolog/inc/class.infolog_ical.inc.php index 489c4f81c6..f65d21bf3b 100644 --- a/infolog/inc/class.infolog_ical.inc.php +++ b/infolog/inc/class.infolog_ical.inc.php @@ -12,6 +12,7 @@ */ use EGroupware\Api; +use EGroupware\Api\Acl; /** * InfoLog: Create and parse iCal's @@ -180,8 +181,8 @@ class infolog_ical extends infolog_bo $taskData['info_cat'] = $cats[0]; } - $taskData = translation::convert($taskData, - translation::charset(), $charset); + $taskData = Api\Translation::convert($taskData, + Api\Translation::charset(), $charset); if ($this->log) { @@ -201,8 +202,8 @@ class infolog_ical extends infolog_bo // check if we have vtimezone component data for tzid of event, if not default to user timezone (default to server tz) if (!calendar_timezones::add_vtimezone($vcal, $tzid)) { - error_log(__METHOD__."() unknown TZID='$tzid', defaulting to user timezone '".egw_time::$user_timezone->getName()."'!"); - calendar_timezones::add_vtimezone($vcal, egw_time::$user_timezone->getName()); + error_log(__METHOD__."() unknown TZID='$tzid', defaulting to user timezone '".Api\DateTime::$user_timezone->getName()."'!"); + calendar_timezones::add_vtimezone($vcal, Api\DateTime::$user_timezone->getName()); $tzid = null; } if (!isset(self::$tz_cache[$tzid])) @@ -457,22 +458,22 @@ class infolog_ical extends infolog_bo } elseif(is_null($tzid)) { - $tz = egw_time::$user_timezone; + $tz = Api\DateTime::$user_timezone; } else { - $tz = egw_time::$server_timezone; + $tz = Api\DateTime::$server_timezone; } if (!is_a($time,'DateTime')) { - $time = new egw_time($time,egw_time::$server_timezone); + $time = new Api\DateTime($time,Api\DateTime::$server_timezone); } $time->setTimezone($tz); // check for date --> export it as such if ($time->format('Hi') == '0000') { - $arr = egw_time::to($time, 'array'); + $arr = Api\DateTime::to($time, 'array'); $value = array( 'year' => $arr['year'], 'month' => $arr['month'], @@ -493,7 +494,7 @@ class infolog_ical extends infolog_bo } else { - $value = egw_time::to($time, 'ts'); + $value = Api\DateTime::to($time, 'ts'); } } //error_log(__METHOD__."(, '$attr', ".array2string($time_in).', '.array2string($tzid).') tz='.$tz->getName().', value='.array2string($value).(is_int($value)?date('Y-m-d H:i:s',$value):'')); @@ -542,7 +543,7 @@ class infolog_ical extends infolog_bo // setting owner or responsible for new tasks based on folder if (!is_null($user) && $_taskID == -1) { - if ($this->check_access($taskData, EGW_ACL_ADD)) + if ($this->check_access($taskData, Acl::ADD)) { $taskData['info_owner'] = $user; } @@ -632,7 +633,7 @@ class infolog_ical extends infolog_bo */ protected static function date2ts($date) { - return is_scalar($date) ? $date : egw_time::to($date, 'ts'); + return is_scalar($date) ? $date : Api\DateTime::to($date, 'ts'); } /** @@ -922,8 +923,8 @@ class infolog_ical extends infolog_bo { if(!($note = $this->read($_noteID, true, 'server'))) return false; - $note = translation::convert($note, - translation::charset(), $charset); + $note = Api\Translation::convert($note, + Api\Translation::charset(), $charset); switch ($_type) { @@ -935,8 +936,8 @@ class infolog_ical extends infolog_bo if (!empty($note['info_cat'])) { $cats = $this->get_categories(array($note['info_cat'])); - $note['info_cat'] = translation::convert($cats[0], - translation::charset(), $charset); + $note['info_cat'] = Api\Translation::convert($cats[0], + Api\Translation::charset(), $charset); } $vnote = new Horde_Icalendar_Vnote(); $vnote->setAttribute('PRODID','-//EGroupware//NONSGML EGroupware InfoLog '.$GLOBALS['egw_info']['apps']['infolog']['version'].'//'. @@ -1084,7 +1085,7 @@ class infolog_ical extends infolog_bo case 'text/plain': $note = array(); $note['info_type'] = 'note'; - $txt = str_replace("\r\n", "\n", translation::convert($_data, $charset)); + $txt = str_replace("\r\n", "\n", Api\Translation::convert($_data, $charset)); $match = null; if (preg_match('/([^\n]+)\n\n(.*)/ms', $txt, $match)) @@ -1208,13 +1209,13 @@ class infolog_ical extends infolog_bo error_log(__FILE__.'['.__LINE__.'] '.__METHOD__. '(' . $this->productManufacturer . ', '. $this->productName .', ' . - ($this->tzid ? $this->tzid : egw_time::$user_timezone->getName()) . + ($this->tzid ? $this->tzid : Api\DateTime::$user_timezone->getName()) . ")\n" , 3, $this->logfile); } //Horde::logMessage('setSupportedFields(' . $this->productManufacturer . ', ' // . $this->productName .', ' . - // ($this->tzid ? $this->tzid : egw_time::$user_timezone->getName()) .')', + // ($this->tzid ? $this->tzid : Api\DateTime::$user_timezone->getName()) .')', // __FILE__, __LINE__, PEAR_LOG_DEBUG); } } diff --git a/infolog/inc/class.infolog_import_ical.inc.php b/infolog/inc/class.infolog_import_ical.inc.php index 6bc1176472..a2ddfa657b 100644 --- a/infolog/inc/class.infolog_import_ical.inc.php +++ b/infolog/inc/class.infolog_import_ical.inc.php @@ -1,6 +1,6 @@ insert, 'last' => true, ),*/ - ); /** @@ -71,9 +69,9 @@ class infolog_import_ical implements importexport_iface_import_plugin { protected $errors = array(); /** - * List of actions, and how many times that action was taken - */ - protected $results = array(); + * List of actions, and how many times that action was taken + */ + protected $results = array(); /** * imports entries according to given definition object. @@ -109,7 +107,7 @@ class infolog_import_ical implements importexport_iface_import_plugin { return $success; } - + /** * returns translated name of plugin * @@ -163,39 +161,38 @@ class infolog_import_ical implements importexport_iface_import_plugin { } /** - * Returns warnings that were encountered during importing - * Maximum of one warning message per record, but you can append if you need to - * - * @return Array ( - * record_# => warning message - * ) - */ - public function get_warnings() { + * Returns warnings that were encountered during importing + * Maximum of one warning message per record, but you can append if you need to + * + * @return Array ( + * record_# => warning message + * ) + */ + public function get_warnings() { return $this->warnings; } /** - * Returns errors that were encountered during importing - * Maximum of one error message per record, but you can append if you need to - * - * @return Array ( - * record_# => error message - * ) - */ - public function get_errors() { + * Returns errors that were encountered during importing + * Maximum of one error message per record, but you can append if you need to + * + * @return Array ( + * record_# => error message + * ) + */ + public function get_errors() { return $this->errors; } /** - * Returns a list of actions taken, and the number of records for that action. - * Actions are things like 'insert', 'update', 'delete', and may be different for each plugin. - * - * @return Array ( - * action => record count - * ) - */ - public function get_results() { - return $this->results; - } -} // end of iface_export_plugin -?> + * Returns a list of actions taken, and the number of records for that action. + * Actions are things like 'insert', 'update', 'delete', and may be different for each plugin. + * + * @return Array ( + * action => record count + * ) + */ + public function get_results() { + return $this->results; + } +} diff --git a/infolog/inc/class.infolog_import_infologs_csv.inc.php b/infolog/inc/class.infolog_import_infologs_csv.inc.php index 8b01555ac5..8c92e945ec 100644 --- a/infolog/inc/class.infolog_import_infologs_csv.inc.php +++ b/infolog/inc/class.infolog_import_infologs_csv.inc.php @@ -10,6 +10,8 @@ * @version $Id$ */ +use EGroupware\Api; +use EGroupware\Api\Link; /** * class import_csv for infolog @@ -129,7 +131,7 @@ class infolog_import_infologs_csv implements importexport_iface_import_plugin { $this->tracking = new infolog_tracking($this->boinfolog); // Need translations for some human stuff (early type detection) - translation::add_app('infolog'); + Api\Translation::add_app('infolog'); // set FieldMapping. $import_csv->mapping = $_definition->plugin_options['field_mapping']; @@ -193,7 +195,7 @@ class infolog_import_infologs_csv implements importexport_iface_import_plugin { if(!$record['info_type'] || $record['info_type'] && !$this->boinfolog->enums['type'][$record['info_type']]) { // Check for translated type - $un_trans = translation::get_message_id($record['info_type'],'infolog'); + $un_trans = Api\Translation::get_message_id($record['info_type'],'infolog'); if($record['info_type'] && $this->boinfolog->enums['type'][$un_trans]) { $record['info_type'] = $un_trans; @@ -339,8 +341,8 @@ class infolog_import_infologs_csv implements importexport_iface_import_plugin { // Check for link during dry run if($_data['link_custom']) { - list($app, $app_id) = explode(':', $_data['link_custom'],2); - $app_id = $this->link_by_cf($record_num, $app, $field, $app_id); + list($app, $app_id2) = explode(':', $_data['link_custom'],2); + $app_id = $this->link_by_cf($record_num, $app, $field, $app_id2); } $this->results[$_action]++; @@ -371,7 +373,7 @@ class infolog_import_infologs_csv implements importexport_iface_import_plugin { break; } default: - throw new egw_exception('Unsupported action'); + throw new Api\Exception('Unsupported action'); } // Process some additional fields @@ -379,7 +381,7 @@ class infolog_import_infologs_csv implements importexport_iface_import_plugin { return $result; } $info_link_id = $_data['info_link_id']; - foreach(self::$special_fields as $field => $desc) { + foreach(array_keys(self::$special_fields) as $field) { if(!$_data[$field]) continue; if(strpos($field, 'link') === 0) { list($app, $app_id) = explode(':', $_data[$field],2); @@ -396,7 +398,7 @@ class infolog_import_infologs_csv implements importexport_iface_import_plugin { if ($app && $app_id) { $id = $_data['info_id'] ? $_data['info_id'] : (int)$result; //echo "

linking infolog:$id with $app:$app_id

\n"; - $link_id = egw_link::link('infolog',$id,$app,$app_id); + $link_id = Link::link('infolog',$id,$app,$app_id); if ($link_id && !$info_link_id) { $to_write = array( @@ -503,7 +505,7 @@ class infolog_import_infologs_csv implements importexport_iface_import_plugin { // Extra conversion functions - must be static public static function project_id($num_or_title) { - static $boprojects; + static $boprojects=null; if (!$num_or_title) return false; @@ -526,15 +528,15 @@ class infolog_import_infologs_csv implements importexport_iface_import_plugin { * This is a copy of what's in importexport_basic_import_csv, and can go * away if this is changed to extend it */ - protected function link_by_cf($record_num, $app, $fieldname, $value) + protected function link_by_cf($record_num, $app, $fieldname, $_value) { $app_id = false; - list($custom_field, $value) = explode(':',$value); + list($custom_field, $value) = explode(':',$_value); // Find matching entry if($app && $custom_field && $value) { - $cfs = config::get_customfields($app); + $cfs = Api\Storage\Customfields::get($app); // Error if no custom fields, probably something wrong in definition if(!$cfs[$custom_field]) { @@ -558,10 +560,10 @@ class infolog_import_infologs_csv implements importexport_iface_import_plugin { if($custom_field[0] != '#') $custom_field = '#' . $custom_field; // Search - if(egw_link::get_registry($app, 'query')) + if(Link::get_registry($app, 'query')) { $options = array('filter' => array("$custom_field = " . $GLOBALS['egw']->db->quote($value))); - $result = egw_link::query($app, '', $options); + $result = Link::query($app, '', $options); // Only one allowed if(count($result) != 1) diff --git a/infolog/inc/class.infolog_merge.inc.php b/infolog/inc/class.infolog_merge.inc.php index 68c7aadf7c..1833d46351 100644 --- a/infolog/inc/class.infolog_merge.inc.php +++ b/infolog/inc/class.infolog_merge.inc.php @@ -6,16 +6,19 @@ * @author Ralf Becker * @author Nathan Gray * @package infolog - * @copyright (c) 2007-14 by Ralf Becker + * @copyright (c) 2007-16 by Ralf Becker * @copyright 2011 Nathan Gray * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @version $Id$ */ +use EGroupware\Api; +use EGroupware\Api\Link; + /** * Infolog - document merge object */ -class infolog_merge extends bo_merge +class infolog_merge extends Api\Storage\Merge { /** * Functions that can be called via menuaction @@ -49,8 +52,8 @@ class infolog_merge extends bo_merge 'info_created', ); - // switch of handling of html formated content, if html is not used - $this->parse_html_styles = egw_customfields::use_html('infolog'); + // switch of handling of Api\Html formated content, if Api\Html is not used + $this->parse_html_styles = Api\Storage\Customfields::use_html('infolog'); } /** @@ -118,11 +121,11 @@ class infolog_merge extends bo_merge { $array['#'.$name] = ''; } - // Format date cfs per user preferences + // Format date cfs per user Api\Preferences if($field['type'] == 'date' || $field['type'] == 'date-time') { $this->date_fields[] = '#'.$name; - $array['#'.$name] = egw_time::to($array['#'.$name], $field['type'] == 'date' ? true : ''); + $array['#'.$name] = Api\DateTime::to($array['#'.$name], $field['type'] == 'date' ? true : ''); } } @@ -132,17 +135,17 @@ class infolog_merge extends bo_merge // Timesheet time if(strpos($content, 'info_sum_timesheets')) { - $links = egw_link::get_links('infolog',$id,'timesheet'); + $links = Link::get_links('infolog',$id,'timesheet'); $sum = ExecMethod('timesheet.timesheet_bo.sum',$links); $info['$$info_sum_timesheets$$'] = $sum['duration']; } // Check for linked project ID - $links = egw_link::get_links('infolog', $id, 'projectmanager'); + $links = Link::get_links('infolog', $id, 'projectmanager'); foreach($links as $app_id) { $array['pm_id'] = $app_id; - $array['project'] = egw_link::title('projectmanager', $app_id); + $array['project'] = Link::title('projectmanager', $app_id); break; } @@ -162,14 +165,14 @@ class infolog_merge extends bo_merge } /** - * Generate table with replacements for the preferences + * Generate table with replacements for the Api\Preferences * */ public function show_replacements() { $GLOBALS['egw_info']['flags']['app_header'] = lang('infolog').' - '.lang('Replacements for inserting entries into documents'); $GLOBALS['egw_info']['flags']['nonavbar'] = false; - common::egw_header(); + $GLOBALS['egw']->framework->header(); echo "\n"; echo '"; @@ -177,7 +180,7 @@ class infolog_merge extends bo_merge $n = 0; $tracking = new infolog_tracking($this->bo); $fields = array('info_id' => lang('Infolog ID'), 'pm_id' => lang('Project ID'), 'project' => lang('Project name')) + $tracking->field2label + array('info_sum_timesheets' => lang('Used time')); - translation::add_app('projectmanager'); + Api\Translation::add_app('projectmanager'); foreach($fields as $name => $label) { if (in_array($name,array('custom'))) continue; // dont show them @@ -228,7 +231,7 @@ class infolog_merge extends bo_merge echo '"; foreach($this->contacts->customfields as $name => $field) { - echo '\n"; + echo '\n"; } echo '"; @@ -258,6 +261,6 @@ class infolog_merge extends bo_merge echo "

'.lang('Infolog fields:')."

'.lang('Custom fields').":

{{info_contact/#'.$name.'}}'.$field['label']."
{{info_contact/#'.$name.'}}'.$field['label']."

'.lang('General fields:')."

\n"; - common::egw_footer(); + $GLOBALS['egw']->framework->footer(); } } diff --git a/infolog/inc/class.infolog_so.inc.php b/infolog/inc/class.infolog_so.inc.php index 0736782bdd..6713b2abe2 100644 --- a/infolog/inc/class.infolog_so.inc.php +++ b/infolog/inc/class.infolog_so.inc.php @@ -5,11 +5,15 @@ * @link http://www.egroupware.org * @author Ralf Becker * @package infolog - * @copyright (c) 2003-13 by Ralf Becker + * @copyright (c) 2003-16 by Ralf Becker * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @version $Id$ */ +use EGroupware\Api; +use EGroupware\Api\Link; +use EGroupware\Api\Acl; + /** * storage object / db-layer for InfoLog * @@ -21,7 +25,7 @@ class infolog_so /** * Instance of the db class * - * @var egw_db + * @var Api\Db */ var $db; /** @@ -64,7 +68,7 @@ class infolog_so /** * Constructor * - * @param array $grants=array() + * @param array $grants =array() * @return soinfolog */ function __construct( $grants=array() ) @@ -102,9 +106,9 @@ class infolog_so * * @param array|int $info data or info_id of InfoLog entry * @param int $required_rights EGW_ACL_xyz anded together - * @param boolean $implicit_edit=false responsible has only implicit read and add rigths, unless this is set to true - * @param array $grants=null grants to use, default (null) $this->grants - * @param int $user=null user to check, default (null) $this->user + * @param boolean $implicit_edit =false responsible has only implicit read and add rigths, unless this is set to true + * @param array $grants =null grants to use, default (null) $this->grants + * @param int $user =null user to check, default (null) $this->user * @return boolean True if access is granted else False */ function check_access( $info,$required_rights,$implicit_edit=false,array $grants=null,$user=null ) @@ -139,8 +143,8 @@ class infolog_so // ACL only on public entrys || $owner granted _PRIVATE (!!($grants[$owner] & $required_rights) || $this->is_responsible($info,$user) && // implicite rights for responsible user(s) and his memberships - ($required_rights == EGW_ACL_READ || $required_rights == EGW_ACL_ADD || $implicit_edit && $required_rights == EGW_ACL_EDIT)) && - ($info['info_access'] == 'public' || !!($this->grants[$user] & EGW_ACL_PRIVATE)); + ($required_rights == Acl::READ || $required_rights == Acl::ADD || $implicit_edit && $required_rights == Acl::EDIT)) && + ($info['info_access'] == 'public' || !!($this->grants[$user] & Acl::PRIVAT)); // error_log(__METHOD__."($info[info_id],$required_rights,$implicit_edit,".array2string($grants).",$user) returning ".array2string($access_ok)); return $access_ok; @@ -181,16 +185,16 @@ class infolog_so /** * generate sql to be AND'ed into a query to ensure ACL is respected (incl. _PRIVATE) * - * @param string $filter: ''|all - list all entrys user have rights to see
+ * @param string $_filter ''|all - list all entrys user have rights to see
* private|own - list only his personal entrys (incl. those he is responsible for !!!), * responsible|my = entries the user is responsible for * delegated = entries the user delegated to someone else * @return string the necesary sql */ - function aclFilter($filter = False) + function aclFilter($_filter = False) { $vars = null; - preg_match('/(my|responsible|delegated|own|privat|private|all|user)([0-9,-]*)/',$filter_was=$filter,$vars); + preg_match('/(my|responsible|delegated|own|privat|private|all|user)([0-9,-]*)/',$_filter,$vars); $filter = $vars[1]; $f_user = $vars[2]; @@ -224,7 +228,7 @@ class infolog_so { $public_user_list[] = $user; } - if ($grant & EGW_ACL_PRIVATE) + if ($grant & Acl::PRIVAT) { $private_user_list[] = $user; } @@ -266,21 +270,21 @@ class infolog_so )," AND info_responsible='0' OR ",$this->responsible_filter($f_user),')'); } } - //echo "

aclFilter(filter='$filter_was',user='$f_user') = '$filtermethod', privat_user_list=".print_r($privat_user_list,True).", public_user_list=".print_r($public_user_list,True)."

\n"; + //echo "

aclFilter(filter='$_filter',user='$f_user') = '$filtermethod', privat_user_list=".print_r($privat_user_list,True).", public_user_list=".print_r($public_user_list,True)."

\n"; return $this->acl_filter[$filter.$f_user] = $filtermethod; // cache the filter } /** * generate sql to filter based on the status of the log-entry * - * @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 ' + * @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 = '',$prefix_and=true) + function statusFilter($_filter = '',$prefix_and=true) { $vars = null; - preg_match('/(done|open|offer|deleted|\+deleted)/',$filter,$vars); + preg_match('/(done|open|offer|deleted|\+deleted)/',$_filter,$vars); $filter = $vars[1]; switch ($filter) @@ -298,7 +302,7 @@ class infolog_so /** * generate sql to filter based on the start- and enddate of the log-entry * - * @param string $filter upcoming = startdate is in the future + * @param string $_filter upcoming = startdate is in the future * today: startdate < tomorrow * overdue: enddate < tomorrow * date: today <= startdate && startdate < tomorrow @@ -306,10 +310,10 @@ class infolog_so * limitYYYY/MM/DD not older or open * @return string the necesary sql */ - function dateFilter($filter = '') + function dateFilter($_filter = '') { $vars = null; - preg_match('/(open-upcoming|upcoming|today|overdue|date|enddate)([-\\/.0-9]*)/',$filter,$vars); + preg_match('/(open-upcoming|upcoming|today|overdue|date|enddate)([-\\/.0-9]*)/',$_filter,$vars); $filter = $vars[1]; if (isset($vars[2]) && !empty($vars[2]) && ($date = preg_split('/[-\\/.]/',$vars[2]))) @@ -393,7 +397,7 @@ class infolog_so // entry without uid --> create one based on our info_id and save it if (!$this->data['info_uid'] || strlen($this->data['info_uid']) < $minimum_uid_length) { - $this->data['info_uid'] = common::generate_uid('infolog', $this->data['info_id']); + $this->data['info_uid'] = Api\CalDAV::generate_uid('infolog', $this->data['info_id']); $this->db->update($this->info_table, array('info_uid' => $this->data['info_uid']), array('info_id' => $this->data['info_id']), __LINE__,__FILE__); @@ -428,7 +432,7 @@ class infolog_so } $this->db->delete($this->info_table,array('info_id'=>$info_id),__LINE__,__FILE__); $this->db->delete($this->extra_table,array('info_id'=>$info_id),__LINE__,__FILE__); - egw_link::unlink(0,'infolog',$info_id); + Link::unlink(0,'infolog',$info_id); if ($this->data['info_id'] == $info_id) { @@ -499,15 +503,14 @@ class infolog_so 'info_responsible' => implode(',',$new_responsible), ),array('info_id' => $row['info_id']),__LINE__,__FILE__,'infolog'); } - } /** * writes the given $values to InfoLog, a new entry gets created if info_id is not set or 0 * * @param array $values with the data of the log-entry - * @param int $check_modified=0 old modification date to check before update (include in WHERE) - * @param string $purge_cfs=null null=dont, 'ical'=only iCal X-properties (cfs name starting with "#"), 'all'=all cfs + * @param int $check_modified =0 old modification date to check before update (include in WHERE) + * @param string $purge_cfs =null null=dont, 'ical'=only iCal X-properties (cfs name starting with "#"), 'all'=all cfs * @return int|boolean info_id, false on error or 0 if the entry has been updated in the meantime */ function write($values, $check_modified=0, $purge_cfs=null) // did _not_ ensure ACL @@ -567,7 +570,7 @@ class infolog_so // entry without (reasonable) uid --> create one based on our info_id and save it if (!$this->data['info_uid'] || strlen($this->data['info_uid']) < $minimum_uid_length) { - $update['info_uid'] = $this->data['info_uid'] = common::generate_uid('infolog', $info_id); + $update['info_uid'] = $this->data['info_uid'] = Api\CalDAV::generate_uid('infolog', $info_id); } // entry without caldav_name --> generate one based on info_id plus '.ics' extension if (empty($this->data['caldav_name'])) @@ -685,7 +688,7 @@ class infolog_so $action = isset($action2app[$query['action']]) ? $action2app[$query['action']] : $query['action']; if ($action) { - $links = solink::get_links($action=='sp'?'infolog':$action, + $links = Link\Storage::get_links($action=='sp'?'infolog':$action, is_array($query['action_id']) ? $query['action_id'] : explode(',',$query['action_id']),'infolog','',$query['col_filter']['info_status'] =='deleted'); if (count($links)) @@ -767,14 +770,14 @@ class infolog_so if ($col[0] == '#' && $query['custom_fields'] && $data) { $filtermethod .= " AND main.info_id IN (SELECT DISTINCT info_id FROM $this->extra_table WHERE "; - $custom_fields = config::get_customfields('infolog'); + $custom_fields = Api\Storage\Customfields::get('infolog'); if($custom_fields[substr($col,1)]['type'] == 'select' && $custom_fields[substr($col,1)]['rows'] > 1) { // Multi-select - any entry with the filter value selected matches $filtermethod .= $this->db->expression($this->extra_table, array( 'info_extra_name' => substr($col,1), - $this->db->concat("','",'info_extra_value',"','").' '.$this->db->capabilities[egw_db::CAPABILITY_CASE_INSENSITIV_LIKE].' '.$this->db->quote('%,'.$data.',%'), + $this->db->concat("','",'info_extra_value',"','").' '.$this->db->capabilities[Api\Db::CAPABILITY_CASE_INSENSITIV_LIKE].' '.$this->db->quote('%,'.$data.',%'), )).')'; } else @@ -792,7 +795,7 @@ class infolog_so if ((int)$query['cat_id']) { - $categories = new categories('','infolog'); + $categories = new Api\Categories('','infolog'); $cats = $categories->return_all_children((int)$query['cat_id']); $filtermethod .= ' AND info_cat'.(count($cats)>1? ' IN ('.implode(',',$cats).') ' : '='.(int)$query['cat_id']); } @@ -805,7 +808,7 @@ class infolog_so if ($this->db->capabilities['like_on_text']) $columns[] = 'info_des'; $wildcard = $op = null; - $so_sql = new so_sql('infolog', $this->info_table, $this->db); + $so_sql = new Api\Storage\Base('infolog', $this->info_table, $this->db); $search = $so_sql->search2criteria($query['search'], $wildcard, $op, null, $columns); $sql_query = 'AND ('.(is_numeric($query['search']) ? 'main.info_id='.(int)$query['search'].' OR ' : ''). implode($op, $search) .')'; @@ -841,7 +844,7 @@ class infolog_so if ($sortbycf != '') { $sort_col = "(SELECT DISTINCT info_extra_value FROM $this->extra_table sub2 WHERE sub2.info_id=main.info_id AND info_extra_name=".$this->db->quote($sortbycf).")"; - if (!isset($custom_fields)) $custom_fields = config::get_customfields('infolog'); + if (!isset($custom_fields)) $custom_fields = Api\Storage\Customfields::get('infolog'); switch($custom_fields[$sortbycf]['type']) { case 'int': @@ -863,7 +866,7 @@ class infolog_so $cols = isset($query['cols']) ? $query['cols'] : 'main.*'; if (is_array($cols)) $cols = implode(',',$cols); $rs = $this->db->query($sql='SELECT '.$mysql_calc_rows.' '.$distinct.' '.$cols.' '.$info_customfield.' '.$sql_query.$query['append'].' '.$ordermethod,__LINE__,__FILE__, - (int) $query['start'],isset($query['start']) ? (int) $query['num_rows'] : -1,false,egw_db::FETCH_ASSOC); + (int) $query['start'],isset($query['start']) ? (int) $query['num_rows'] : -1,false,Api\Db::FETCH_ASSOC); //echo "

db::query('$sql',,,".(int)$query['start'].','.(isset($query['start']) ? (int) $query['num_rows'] : -1).")

\n"; if ($mysql_calc_rows) @@ -887,7 +890,7 @@ class infolog_so static $index_load_cfs = null; if (is_null($index_load_cfs) && $query['col_filter']['info_type']) { - $config_data = config::read('infolog'); + $config_data = Api\Config::read('infolog'); $index_load_cfs = $config_data['index_load_cfs']; if (!is_array($index_load_cfs)) $index_load_cfs = explode(',', $index_load_cfs); } diff --git a/infolog/inc/class.infolog_tracking.inc.php b/infolog/inc/class.infolog_tracking.inc.php index 0a6b87f7ae..8f2e4a6b82 100644 --- a/infolog/inc/class.infolog_tracking.inc.php +++ b/infolog/inc/class.infolog_tracking.inc.php @@ -5,15 +5,18 @@ * @link http://www.egroupware.org * @author Ralf Becker * @package tracker - * @copyright (c) 2007-12 by Ralf Becker + * @copyright (c) 2007-16 by Ralf Becker * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @version $Id$ */ +use EGroupware\Api; +use EGroupware\Api\Link; + /** * Tracker - tracking object for the tracker */ -class infolog_tracking extends bo_tracking +class infolog_tracking extends Api\Storage\Tracking { /** * Application we are tracking (required!) @@ -176,16 +179,16 @@ class infolog_tracking extends bo_tracking if (!$old || $old['info_status'] == 'deleted') { return lang('New %1 created by %2 at %3',lang($this->infolog->enums['type'][$data['info_type']]), - common::grab_owner_name($this->infolog->user),$this->datetime('now')); + Api\Accounts::username($this->infolog->user),$this->datetime('now')); } elseif($data['info_status'] == 'deleted') { return lang('%1 deleted by %2 at %3',lang($this->infolog->enums['type'][$data['info_type']]), - common::grab_owner_name($data['info_modifier']), + Api\Accounts::username($data['info_modifier']), $this->datetime($data['info_datemodified'])); } return lang('%1 modified by %2 at %3',lang($this->infolog->enums['type'][$data['info_type']]), - common::grab_owner_name($data['info_modifier']), + Api\Accounts::username($data['info_modifier']), $this->datetime($data['info_datemodified'])); } @@ -205,7 +208,7 @@ class infolog_tracking extends bo_tracking { foreach($data['info_responsible'] as $uid) { - $responsible[] = common::grab_owner_name($uid); + $responsible[] = Api\Accounts::username($uid); } } if ($GLOBALS['egw_info']['user']['preferences']['infolog']['show_id']) @@ -218,7 +221,7 @@ class infolog_tracking extends bo_tracking 'info_addr' => $data['info_addr'], 'info_cat' => $data['info_cat'] ? $GLOBALS['egw']->categories->id2name($data['info_cat']) : '', 'info_priority' => lang($this->infolog->enums['priority'][$data['info_priority']]), - 'info_owner' => common::grab_owner_name($data['info_owner']), + 'info_owner' => Api\Accounts::username($data['info_owner']), '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_datecompleted'] ? $this->datetime($data['info_datecompleted']) : '', @@ -236,7 +239,7 @@ class infolog_tracking extends bo_tracking if (in_array($data['info_contact'],$lkeys)) { list($app,$id) = explode(':',$data['info_contact']); - if (!empty($app)&&!empty($id)) $value = egw_link::title($app,$id); + if (!empty($app)&&!empty($id)) $value = Link::title($app,$id); } } $details[$name] = array( @@ -328,7 +331,7 @@ class infolog_tracking extends bo_tracking } break; case self::CUSTOM_NOTIFICATION: - $info_config = config::read('infolog'); + $info_config = Api\Config::read('infolog'); if(!$info_config[self::CUSTOM_NOTIFICATION]) { return ''; diff --git a/infolog/inc/class.infolog_ui.inc.php b/infolog/inc/class.infolog_ui.inc.php index e90094d5a8..5de088a98a 100644 --- a/infolog/inc/class.infolog_ui.inc.php +++ b/infolog/inc/class.infolog_ui.inc.php @@ -10,6 +10,13 @@ * @version $Id$ */ +use EGroupware\Api; +use EGroupware\Api\Link; +use EGroupware\Api\Framework; +use EGroupware\Api\Egw; +use EGroupware\Api\Acl; +use EGroupware\Api\Etemplate; + /** * This class is the UI-layer (user interface) of InfoLog */ @@ -40,7 +47,7 @@ class infolog_ui /** * instance of the etemplate class * - * @var etemplate + * @var Etemplate */ var $tmpl; /** @@ -90,17 +97,17 @@ class infolog_ui */ function __construct() { - if ($GLOBALS['egw_info']['flags']['currentapp'] != 'infolog') translation::add_app('infolog'); + if ($GLOBALS['egw_info']['flags']['currentapp'] != 'infolog') Api\Translation::add_app('infolog'); // Make sure Global category is infolog - on first load, it may not be if($GLOBALS['egw_info']['flags']['currentapp'] == 'infolog' && !$GLOBALS['egw']->categories->app_name) { - $GLOBALS['egw']->categories = new categories(); + $GLOBALS['egw']->categories = new Api\Categories(); } $this->bo = new infolog_bo(); - $this->tmpl = new etemplate_new(); + $this->tmpl = new Etemplate(); $this->user = $GLOBALS['egw_info']['user']['account_id']; @@ -109,7 +116,7 @@ class infolog_ui // read the duration format from project-manager if ($GLOBALS['egw_info']['apps']['projectmanager']) { - $pm_config = config::read('projectmanager'); + $pm_config = Api\Config::read('projectmanager'); $this->duration_format = str_replace(',','',implode('', (array)$pm_config['duration_units'])); //error_log(__METHOD__."() ".__LINE__." duration_format=$this->duration_format, duration_unit=".array2string($pm_config['duration_units'])); $this->hours_per_workday = $pm_config['hours_per_workday']; @@ -135,12 +142,6 @@ class infolog_ui } */ $GLOBALS['infolog_ui'] =& $this; // make ourself availible for ExecMethod of get_rows function - - // can be removed for next release / infolog update - if (!$GLOBALS['egw']->hooks->hook_exists('calendar_set','infolog')) - { - $GLOBALS['egw']->hooks->register_single_app_hook('infolog','calendar_set'); - } } /** @@ -173,14 +174,14 @@ class infolog_ui if (!isset($info['info_anz_subs'])) $info['info_anz_subs'] = $this->bo->anzSubs($id); $this->bo->link_id2from($info,$action,$action_id); // unset from for $action:$action_id $info['info_percent'] = (int) $info['info_percent'].'%'; - $editrights = $this->bo->check_access($info,EGW_ACL_EDIT); + $editrights = $this->bo->check_access($info,Acl::EDIT); $isresposible = $this->bo->is_responsible($info); if ((!($editrights || // edit rights or more then standard responsible rights $isresposible && array_diff($this->bo->responsible_edit,array('info_status','info_percent','info_datecompleted'))))) { $info['class'] .= 'rowNoEdit '; } - if ($info['status'] == 'deleted' && !$this->bo->check_access($info, EGW_ACL_UNDELETE)) + if ($info['status'] == 'deleted' && !$this->bo->check_access($info, infolog_bo::ACL_UNDELETE)) { $info['class'] .= 'rowNoUndelete '; } @@ -195,11 +196,11 @@ class infolog_ui { $info['class'] .= 'rowNoCloseAll '; } - if (!$this->bo->check_access($info,EGW_ACL_DELETE)) + if (!$this->bo->check_access($info,Acl::DELETE)) { $info['class'] .= 'rowNoDelete '; } - if (!$this->bo->check_access($info,EGW_ACL_ADD)) + if (!$this->bo->check_access($info,Acl::ADD)) { $info['class'] .= 'rowNoSubs '; } @@ -211,13 +212,13 @@ class infolog_ui if (!$show_links) $show_links = $this->prefs['show_links']; if (($show_links != 'none' && $show_links != 'no_describtion' || $this->prefs['show_times'] || isset($GLOBALS['egw_info']['user']['apps']['timesheet'])) && - (isset($info['links']) || ($info['links'] = egw_link::get_links('infolog',$info['info_id'],'','link_lastmod DESC',true,true)))) + (isset($info['links']) || ($info['links'] = Link::get_links('infolog',$info['info_id'],'','link_lastmod DESC',true,true)))) { $timesheets = array(); foreach ($info['links'] as $link) { // incl. link modification time into row_mod (link's lastmod is always in server-time!) - $link_mod = egw_time::server2user($link['lastmod']); + $link_mod = Api\DateTime::server2user($link['lastmod']); if ($info['row_mod'] < $link_mod) $info['row_mod'] = $link_mod; if ($link['deleted']) continue; // skip deleted links, but incl. them in row_mod! @@ -225,7 +226,7 @@ class infolog_ui if ($show_links != 'none' && $show_links != 'no_describtion' && $link['link_id'] != $info['info_link_id'] && ($link['app'] != $action || $link['id'] != $action_id) && - ($show_links == 'all' || ($show_links == 'links') === ($link['app'] != egw_link::VFS_APPNAME))) + ($show_links == 'all' || ($show_links == 'links') === ($link['app'] != Link::VFS_APPNAME))) { $info['filelinks'][] = $link; } @@ -315,7 +316,7 @@ class infolog_ui unset($query['col_filter']['parent_id']); if(!$query['action']) { - egw_cache::setSession('infolog', $query['session_for'].'session_data', $query); + Api\Cache::setSession('infolog', $query['session_for'].'session_data', $query); } $query['actions'] = $this->get_actions($query); $query['row_id'] = 'info_id'; @@ -364,7 +365,7 @@ class infolog_ui $id = $link['id']; } if(!is_array($id)) $id = explode(',',$id); - if (!($linked = egw_link::get_links_multiple($app,$id,true,'infolog','',$query['col_filter']['info_status'] == 'deleted'))) + if (!($linked = Link::get_links_multiple($app,$id,true,'infolog','',$query['col_filter']['info_status'] == 'deleted'))) { $rows = array(); // no infologs linked to selected link --> no rows to return return 0; @@ -378,7 +379,7 @@ class infolog_ui $links[$key] = array_unique($links[$key]); if($key == 'linked') { - $linked = array('app' => $app, 'id' => $id, 'title' => (count($id) == 1 ? egw_link::title($app, $id) : lang('multiple'))); + $linked = array('app' => $app, 'id' => $id, 'title' => (count($id) == 1 ? Link::title($app, $id) : lang('multiple'))); } } if(count($links)) @@ -397,7 +398,7 @@ class infolog_ui unset($query['custom_fields']); if ($query['col_filter']['info_type']) { - $tpl = new etemplate_new; + $tpl = new Etemplate; if ($tpl->read('infolog.index.rows.'.$query['col_filter']['info_type'])) { $query['template'] = $tpl->name; @@ -411,7 +412,7 @@ class infolog_ui $clear_status_filter = true; } } - // Template change forces the UI to do a full update first, no point in getting rows right now + // Framework\Template change forces the UI to do a full update first, no point in getting rows right now if($old_template && $old_template != $query['template']) return 0; // do we need to read the custom fields, depends on the column is enabled and customfields exist, prefs are filter specific @@ -455,7 +456,7 @@ class infolog_ui // query all links and sub counts in one go if ($infos && (!$query['csv_export'] || !is_array($query['csv_export']))) { - $links = egw_link::get_links_multiple('infolog',array_keys($infos),true,'','link_lastmod DESC',true); // true=incl. deleted + $links = Link::get_links_multiple('infolog',array_keys($infos),true,'','link_lastmod DESC',true); // true=incl. deleted $anzSubs = $this->bo->anzSubs(array_keys($infos)); } $rows = array(); @@ -551,7 +552,7 @@ class infolog_ui $headers[] = lang($this->filters[$query['filter']]); } if ($query['action'] && ($title = $query['action_title'] || is_array($query['action_id']) ? - $query['action_title'] : egw_link::title($query['action']=='sp'?'infolog':$query['action'],$query['action_id']))) + $query['action_title'] : Link::title($query['action']=='sp'?'infolog':$query['action'],$query['action_id']))) { $headers[] = $title; } @@ -581,9 +582,9 @@ class infolog_ui { if ($info['info_cat']) $set['cat_id'] = $info['info_cat']; - foreach(egw_link::get_links('infolog',$info['info_id'],'','link_lastmod DESC',true) as $link) + foreach(Link::get_links('infolog',$info['info_id'],'','link_lastmod DESC',true) as $link) { - if ($link['app'] != 'timesheet' && $link['app'] != egw_link::VFS_APPNAME) + if ($link['app'] != 'timesheet' && $link['app'] != Link::VFS_APPNAME) { $set['link_app'][] = $link['app']; $set['link_id'][] = $link['id']; @@ -607,7 +608,7 @@ class infolog_ui return $data; } $event = array_merge($data,array( - 'category' => $GLOBALS['egw']->categories->check_list(EGW_ACL_READ, $infolog['info_cat']), + 'category' => $GLOBALS['egw']->categories->check_list(Acl::READ, $infolog['info_cat']), 'priority' => $infolog['info_priority'] + 1, 'public' => $infolog['info_access'] != 'private', 'title' => $infolog['info_subject'], @@ -619,8 +620,8 @@ class infolog_ui unset($event['entry_id']); if (!$event['end']) $event['end'] = $event['start'] + (int) $GLOBALS['egw_info']['user']['preferences']['calendar']['defaultlength']*60; - // Match categories by name - $event['category'] = $GLOBALS['egw']->categories->name2id(categories::id2name($infolog['info_cat'])); + // Match Api\Categories by name + $event['category'] = $GLOBALS['egw']->categories->name2id(Api\Categories::id2name($infolog['info_cat'])); // make current user the owner of the new event, not the selected calendar, if current user has rights for it $event['owner'] = $user = $GLOBALS['egw_info']['user']['account_id']; @@ -665,16 +666,16 @@ class infolog_ui $event['link_id'][] = $infolog['info_link']['id']; // Copy infolog's links - foreach(egw_link::get_links('infolog',$infolog['info_id'],'','link_lastmod DESC',true) as $link) + foreach(Link::get_links('infolog',$infolog['info_id'],'','link_lastmod DESC',true) as $link) { - if ($link['app'] != egw_link::VFS_APPNAME) + if ($link['app'] != Link::VFS_APPNAME) { $event['link_app'][] = $link['app']; $event['link_id'][] = $link['id']; } } // Copy same custom fields - foreach(array_keys(config::get_customfields('calendar')) as $name) + foreach(array_keys(Api\Storage\Customfields::get('calendar')) as $name) { if ($this->bo->customfields[$name]) $event['#'.$name] = $infolog['#'.$name]; } @@ -706,11 +707,11 @@ class infolog_ui $own_referer = common::get_referer(); if (strpos($own_referer,'menuaction=infolog.infolog_ui.edit') !== false) { - $own_referer = $GLOBALS['egw']->session->appsession('own_session','infolog'); + $own_referer = Api\Cache::getSession('infolog', 'own_session'); } else { - $GLOBALS['egw']->session->appsession('own_session','infolog',$own_referer); + Api\Cache::setSession('infolog', 'own_session', $own_referer); } } @@ -768,17 +769,17 @@ class infolog_ui $success, $failed, $action_msg, $values['nm'], $msg, $values['nm']['checkboxes']['no_notifications'])) { $msg .= lang('%1 entries %2',$success,$action_msg); - egw_framework::message($msg); + Framework::message($msg); } elseif(is_null($msg)) { $msg .= lang('%1 entries %2, %3 failed because of insufficent rights !!!',$success,$action_msg,$failed); - egw_framework::message($msg,'error'); + Framework::message($msg,'error'); } elseif($msg) { $msg .= "\n".lang('%1 entries %2, %3 failed.',$success,$action_msg,$failed); - egw_framework::message($msg,'error'); + Framework::message($msg,'error'); } unset($values['nm']['multi_action']); unset($values['nm']['select_all']); @@ -793,7 +794,7 @@ class infolog_ui //echo "

".__METHOD__."(action='$action/$action_id',called_as='$called_as/$values[referer]',own_referer='$own_referer') values=\n"; _debug_array($values); if (!is_array($values)) { - $nm = egw_cache::getSession('infolog', $this->called_by.'session_data'); + $nm = Api\Cache::getSession('infolog', $this->called_by.'session_data'); unset($nm['rows']); if ($values === 'reset_action_view') { @@ -807,10 +808,10 @@ class infolog_ui $nm['action_id'] = 0; $nm['action_title'] = ''; // check if action-view reset filter and restore it - if (($filter = egw_cache::getSession('infolog', 'filter_reset_from'))) + if (($filter = Api\Cache::getSession('infolog', 'filter_reset_from'))) { $nm['filter'] = $filter; - egw_cache::unsetSession('infolog', 'filter_reset_from'); + Api\Cache::unsetSession('infolog', 'filter_reset_from'); } } $values = array('nm' => $nm); @@ -852,7 +853,7 @@ class infolog_ui { unset($values['nm']['multi_action']); unset($values['nm']['action_id']); - egw_cache::setSession('infolog', $values['nm']['session_for'].'session_data', $values['nm']); + Api\Cache::setSession('infolog', $values['nm']['session_for'].'session_data', $values['nm']); $this->tmpl->location($own_referer); } else @@ -1018,7 +1019,7 @@ class infolog_ui // remove types owned by groups the user has no edit grant foreach($this->bo->group_owners as $type => $group) { - if (!($this->bo->grants[$group] & EGW_ACL_EDIT)) + if (!($this->bo->grants[$group] & Acl::EDIT)) { unset($types[$type]); } @@ -1046,7 +1047,7 @@ class infolog_ui unset($types['delete']); foreach($types as $type => &$data) { - $image_exists = common::image('infolog',$type); + $image_exists = Api\Image::find('infolog',$type); $data = array( 'caption' => $data, 'icon' => $image_exists ? $type : 'infolog/navbar', @@ -1060,7 +1061,7 @@ class infolog_ui $statis = $this->bo->get_status($query['col_filter']['info_type'], $icons); foreach($statis as $type => &$data) { - $image_exists = common::image('infolog',$icons[$type]); + $image_exists = Api\Image::find('infolog',$icons[$type]); $data = array( 'caption' => $data, 'icon' => $image_exists ? $icons[$type] : 'infolog/status', @@ -1072,9 +1073,9 @@ class infolog_ui 'caption' => 'Open', 'default' => true, 'allowOnMultiple' => false, - 'onExecute' => html::$ua_mobile?'javaScript:app.infolog.viewEntry':'', + 'onExecute' => Api\Header\UserAgent::mobile()?'javaScript:app.infolog.viewEntry':'', 'url' => 'menuaction=infolog.infolog_ui.edit&info_id=$id', - 'popup' => egw_link::get_registry('infolog', 'add_popup'), + 'popup' => Link::get_registry('infolog', 'add_popup'), 'group' => $group=1, ), 'parent' => array( @@ -1098,7 +1099,7 @@ class infolog_ui 'sub' => array( 'caption' => 'Sub-entry', 'url' => 'menuaction=infolog.infolog_ui.edit&action=sp&action_id=$id', - 'popup' => egw_link::get_registry('infolog', 'add_popup'), + 'popup' => Link::get_registry('infolog', 'add_popup'), 'allowOnMultiple' => false, 'hint' => 'Add a new sub-task, -note, -call to this entry', 'icon' => 'new', @@ -1106,7 +1107,7 @@ class infolog_ui 'copy' => array( 'caption' => 'Copy', 'url' => 'menuaction=infolog.infolog_ui.edit&action=copy&info_id=$id', - 'popup' => egw_link::get_registry('infolog', 'add_popup'), + 'popup' => Link::get_registry('infolog', 'add_popup'), 'allowOnMultiple' => false, 'icon' => 'copy', ), @@ -1147,7 +1148,7 @@ class infolog_ui 'group' => $group, 'icon' => 'completed', ), - 'cat' => nextmatch_widget::category_action( + 'cat' => Etemplate\Widget\Nextmatch::category_action( 'infolog',$group,'Change category','cat_' ), 'responsible' => array( @@ -1203,9 +1204,9 @@ class infolog_ui 'caption' => 'Schedule appointment', 'group' => $group, 'url' => 'menuaction=calendar.calendar_uiforms.edit&'. - egw_link::get_registry('calendar', 'add_app') . '[]=infolog&'.egw_link::get_registry('calendar','add_id').'[]=$id', + Link::get_registry('calendar', 'add_app') . '[]=infolog&'.Link::get_registry('calendar','add_id').'[]=$id', 'allowOnMultiple' => false, - 'popup' => egw_link::get_registry('calendar', 'add_popup'), + 'popup' => Link::get_registry('calendar', 'add_popup'), ); } if ($GLOBALS['egw_info']['user']['apps']['timesheet']) @@ -1216,7 +1217,7 @@ class infolog_ui 'url' => 'menuaction=timesheet.timesheet_ui.edit&link_app[]=infolog&link_id[]=$id', 'group' => $group, 'allowOnMultiple' => false, - 'popup' => egw_link::get_registry('timesheet', 'add_popup'), + 'popup' => Link::get_registry('timesheet', 'add_popup'), ); } if ($GLOBALS['egw_info']['user']['apps']['tracker']) @@ -1227,9 +1228,9 @@ class infolog_ui 'hint' => 'Convert to a ticket', 'group' => $group, 'url' => 'menuaction=tracker.tracker_ui.edit&'. - egw_link::get_registry('tracker', 'add_app') . '[]=infolog&'.egw_link::get_registry('tracker','add_id').'[]=$id', + Link::get_registry('tracker', 'add_app') . '[]=infolog&'.Link::get_registry('tracker','add_id').'[]=$id', 'allowOnMultiple' => false, - 'popup' => egw_link::get_registry('tracker', 'add_popup'), + 'popup' => Link::get_registry('tracker', 'add_popup'), ); } @@ -1322,10 +1323,10 @@ class infolog_ui $msg = lang('You need to select an entry for linking.'); break; } - $title = egw_link::title($app, $link_id); + $title = Link::title($app, $link_id); foreach($checked as $id) { - if(!$this->bo->check_access($id, EGW_ACL_EDIT)) + if(!$this->bo->check_access($id, Acl::EDIT)) { $failed++; continue; @@ -1333,7 +1334,7 @@ class infolog_ui if($add_remove == 'add') { $action_msg = lang('linked to %1', $title); - if(egw_link::link('infolog', $id, $app, $link_id)) + if(Link::link('infolog', $id, $app, $link_id)) { $success++; } @@ -1345,7 +1346,7 @@ class infolog_ui else { $action_msg = lang('unlinked from %1', $title); - $count = egw_link::unlink(0, 'infolog', $id, '', $app, $link_id); + $count = Link::unlink(0, 'infolog', $id, '', $app, $link_id); $success += $count; } } @@ -1360,9 +1361,9 @@ class infolog_ui case 'ical': // infolog_ical lets horde be auto-loaded, so it must go first $boical = new infolog_ical(); - html::content_header('todo.ics','text/calendar'); + Api\Header\Content::type('todo.ics','text/calendar'); echo $boical->exportvCalendar($checked); - common::egw_exit(); + exit(); } @@ -1397,7 +1398,7 @@ class infolog_ui case 'type': $action_msg = lang('changed type'); // Dont allow to change the type, if user has no delete rights from the group-owner - if ($id && !($this->bo->grants[$entry['info_owner']] & EGW_ACL_DELETE)) + if ($id && !($this->bo->grants[$entry['info_owner']] & Acl::DELETE)) { $failed++; break; @@ -1406,7 +1407,7 @@ class infolog_ui try { $this->bo->write($entry, true,true,true,$skip_notifications,true); // Throw exceptions } - catch (egw_exception_wrong_userinput $e) + catch (Api\Exception\WrongUserinput $e) { $msg .= "\n".$e->getMessage(); $failed++; @@ -1475,7 +1476,7 @@ class infolog_ui case 'cat': if($settings) { - $cat_name = categories::id2name($settings); + $cat_name = Api\Categories::id2name($settings); $action_msg = lang('changed category to %1', $cat_name); } else @@ -1500,7 +1501,7 @@ class infolog_ui $users = explode(',', $user_str); foreach($users as $account_id) { - $names[] = common::grab_owner_name($account_id); + $names[] = Api\Accounts::username($account_id); } $action_msg .= implode(', ', $names); $function = $add_remove == 'add' ? 'array_merge' : 'array_diff'; @@ -1590,7 +1591,7 @@ class infolog_ui if (is_array($values) || $info_id <= 0) { - if (($values['delete'] || $values['delete_subs']) && $info_id > 0 && $this->bo->check_access($info_id,EGW_ACL_DELETE)) + if (($values['delete'] || $values['delete_subs']) && $info_id > 0 && $this->bo->check_access($info_id,Acl::DELETE)) { $deleted = $this->bo->delete($info_id,$values['delete_subs'],$values['info_id_parent'], $skip_notification); } @@ -1677,7 +1678,7 @@ class infolog_ui if (in_array($button,array('copy','schedule','ical','tracker'))) { $action = $button; - if (!$info_id || $this->bo->check_access($info_id,EGW_ACL_EDIT)) + if (!$info_id || $this->bo->check_access($info_id,Acl::EDIT)) { $button = 'apply'; // need to store infolog first } @@ -1701,10 +1702,10 @@ class infolog_ui if (($button == 'save' || $button == 'apply') && $info_id) { $old = $this->bo->read($info_id); - if (!($edit_acl = $this->bo->check_access($info_id,EGW_ACL_EDIT))) + if (!($edit_acl = $this->bo->check_access($info_id,Acl::EDIT))) { $status_only = $this->bo->is_responsible($old); - $undelete = $this->bo->check_access($old,EGW_ACL_UNDELETE); + $undelete = $this->bo->check_access($old,infolog_bo::ACL_UNDELETE); } } if (($button == 'save' || $button == 'apply') && (!$info_id || $edit_acl || $status_only || $undelete)) @@ -1730,7 +1731,7 @@ class infolog_ui { $content['link_to'] = array(); } - $content['info_link_id'] = (int)($info_link_id = egw_link::link('infolog',$content['link_to']['to_id'],$app,$id)); + $content['info_link_id'] = (int)($info_link_id = Link::link('infolog',$content['link_to']['to_id'],$app,$id)); } else { @@ -1738,13 +1739,13 @@ class infolog_ui } if ($old_link_id && $old_link_id != $content['info_link_id']) { - $link = egw_link::get_link($old_link_id); + $link = Link::get_link($old_link_id); // remove selected project, if removed link is that project if($link['link_app2'] == 'projectmanager' && $link['link_id2'] == $content['old_pm_id']) { unset($content['pm_id'], $content['old_pm_id']); } - egw_link::unlink($old_link_id); + Link::unlink($old_link_id); } // if added link is a project and no other project selected, also add as project if ($app == 'projectmanager' && $id && !$content['pm_id']) @@ -1762,7 +1763,7 @@ class infolog_ui $content['msg'] = $info_id !== 0 || !$content['info_id'] ? lang('Error: saving the entry') : lang('Error: the entry has been updated since you opened it for editing!').'
'. lang('Copy your changes to the clipboard, %1reload the entry%2 and merge them.','this->link->link('infolog',{$content['link_to']['to_id']},'projectmanager',{$content['pm_id']});

"; - egw_link::link('infolog',$content['link_to']['to_id'],'projectmanager',$content['pm_id']); + Link::link('infolog',$content['link_to']['to_id'],'projectmanager',$content['pm_id']); // making the project the selected link, if no other link selected if (!$info_link_id || $info_link_id == 'projectmanager:'.$content['old_pm_id']) { @@ -1796,7 +1797,7 @@ class infolog_ui if ($content['old_pm_id']) { //echo "

this->link->unlink2(0,infolog,{$content['link_to']['to_id']},0,'projectmanager',{$content['old_pm_id']});

\n"; - egw_link::unlink2(0,infolog,$content['link_to']['to_id'],0,'projectmanager',$content['old_pm_id']); + Link::unlink2(0,infolog,$content['link_to']['to_id'],0,'projectmanager',$content['old_pm_id']); } $content['old_pm_id'] = $content['pm_id']; } @@ -1804,13 +1805,13 @@ class infolog_ui if ($info_id && is_array($content['link_to']['to_id']) && count($content['link_to']['to_id'])) { //echo "

writing links for new entry $info_id

\n"; _debug_array($content['link_to']['to_id']); - egw_link::link('infolog',$info_id,$content['link_to']['to_id']); + Link::link('infolog',$info_id,$content['link_to']['to_id']); $content['link_to']['to_id'] = $info_id; } if ($info_link_id && strpos($info_link_id,':') !== false) // updating info_link_id if necessary { list($app,$id) = explode(':',$info_link_id); - $link = egw_link::get_link('infolog',$info_id,$app,$id); + $link = Link::get_link('infolog',$info_id,$app,$id); if ((int) $content['info_link_id'] != (int) $link['link_id']) { $content['info_link_id'] = $link['link_id']; @@ -1838,20 +1839,20 @@ class infolog_ui ); if (!($content['msg'] = $this->delete($info_id,$referer,'edit'))) return; // checks ACL first - egw_framework::refresh_opener($content['msg'],'infolog',$info_id,'delete'); + Framework::refresh_opener($content['msg'],'infolog',$info_id,'delete'); } // called again after delete confirmation dialog elseif ($button == 'deleted' && $content['msg']) { - egw_framework::refresh_opener($content['msg'],'infolog',$info_id,'delete'); + Framework::refresh_opener($content['msg'],'infolog',$info_id,'delete'); } if ($button == 'save' || $button == 'cancel' || $button == 'delete' || $button == 'deleted') { if ($no_popup) { - egw::redirect_link($referer,array('msg' => $content['msg'])); + Egw::redirect_link($referer,array('msg' => $content['msg'])); } - egw_framework::window_close(); + Framework::window_close(); } } // on a type-change, set the status to the default status of that type, if the actual status is not supported by the new type @@ -1915,7 +1916,7 @@ class infolog_ui // set blank behind all , and . if words are too long, apply wordwrap afterwards to make sure we get if (strlen($word)>75) { - $buff = html::activate_links($word); + $buff = Api\Html::activate_links($word); if (strlen($buff) == strlen($word)) // no links -> try to break overlong words { if (!(strpos($word,',')===false) && strpos($word,', ')===false) $word = str_replace(',',', ',$word); @@ -1948,21 +1949,21 @@ class infolog_ui case 'datetime': $set_startdate = $this->bo->user_time_now; break; case 'empty': $set_startdate = 0; break; } - if ((int)$content['info_link_id'] > 0 && !egw_link::get_link($content['info_link_id'])) + if ((int)$content['info_link_id'] > 0 && !Link::get_link($content['info_link_id'])) { $content['info_link_id'] = 0; // link has been deleted if (!$content['info_custom_link']) $content['info_from'] = ''; } if (!$info_id && $action_id && $action == 'sp') // new SubProject { - if (!$this->bo->check_access($action_id,EGW_ACL_ADD)) + if (!$this->bo->check_access($action_id,Acl::ADD)) { return $referer ? $this->tmpl->location($referer) : $this->index(0,$action,$action_id); } } else { - $undelete = $this->bo->check_access($info_id,EGW_ACL_UNDELETE); + $undelete = $this->bo->check_access($info_id,infolog_bo::ACL_UNDELETE); } $content['links'] = $content['link_to'] = array( 'to_id' => $info_id, @@ -1975,7 +1976,7 @@ class infolog_ui switch ($action) { case 'schedule': - egw::redirect_link('/index.php',array( + Egw::redirect_link('/index.php',array( 'menuaction' => 'calendar.calendar_uiforms.edit', 'link_app' => 'infolog', 'link_id' => $info_id, @@ -1984,9 +1985,9 @@ class infolog_ui case 'ical': $boical = new infolog_ical(); $result = $boical->exportVTODO($content,'2.0','PUBLISH',false); - html::content_header('todo.ics', 'text/calendar'); + Api\Header\Content::type('todo.ics', 'text/calendar'); echo $result; - common::egw_exit(); + exit(); case 'sp': case 'copy': $info_id = 0; @@ -1999,16 +2000,16 @@ class infolog_ui unset($action); // it get stored in $content and will cause an other copy after [apply] break; case 'to_tracker': - egw::redirect_link('/index.php',array( + Egw::redirect_link('/index.php',array( 'menuaction' => 'tracker.tracker_ui.edit', - egw_link::get_registry('tracker', 'add_app').'[]' => 'infolog', - egw_link::get_registry('tracker','add_id').'[]' => $info_id, + Link::get_registry('tracker', 'add_app').'[]' => 'infolog', + Link::get_registry('tracker','add_id').'[]' => $info_id, )); break; case 'projectmanager': $pm_links = array($action_id); default: // to allow other apps to participate - $content['info_subject'] = egw_link::title($action, $id); + $content['info_subject'] = Link::title($action, $id); $action_ids = explode(',',$action_id); if(count($action_ids) == 1) { @@ -2016,14 +2017,14 @@ class infolog_ui } foreach ($action_ids as $n => $id) { - egw_link::link('infolog', $content['link_to']['to_id'], $action, $id); + Link::link('infolog', $content['link_to']['to_id'], $action, $id); // calling "infolog_set" hook for first, in case app wants to set some more values - if (!$n && ($set = $GLOBALS['egw']->hooks->single(array('location'=>'infolog_set','id'=>$action_id),$action))) + if (!$n && ($set = Api\Hooks::single(array('location'=>'infolog_set','id'=>$action_id),$action))) { foreach((array)$set['link_app'] as $i => $l_app) { - if (($l_id=$set['link_id'][$i])) egw_link::link('infolog',$content['link_to']['to_id'],$l_app,$l_id); + if (($l_id=$set['link_id'][$i])) Link::link('infolog',$content['link_to']['to_id'],$l_app,$l_id); } unset($set['link_app']); unset($set['link_id']); @@ -2037,7 +2038,7 @@ class infolog_ui { if (!isset($pm_links)) { - $pm_links = egw_link::get_links('infolog',$info_id,'projectmanager'); + $pm_links = Link::get_links('infolog',$info_id,'projectmanager'); } break; // normal edit } @@ -2069,7 +2070,7 @@ class infolog_ui // remove types owned by groups the user has no edit grant (current type is made readonly) foreach($this->bo->group_owners as $type => $group) { - if (!($this->bo->grants[$group] & EGW_ACL_EDIT)) + if (!($this->bo->grants[$group] & Acl::EDIT)) { if ($type == $content['info_type']) { @@ -2087,7 +2088,7 @@ class infolog_ui { $content['info_owner'] = $this->bo->group_owners[$content['info_type']]; // Dont allow to change the type, if user has no delete rights from the group-owner - if ($info_id && !($this->bo->grants[$content['info_owner']] & EGW_ACL_DELETE)) + if ($info_id && !($this->bo->grants[$content['info_owner']] & Acl::DELETE)) { //echo "

setting type to r/o as user has no delete rights from group #$group

\n"; $readonlys['info_type'] = true; @@ -2107,7 +2108,7 @@ class infolog_ui unset($preserv['links']); unset($preserv['link_to']); // for no edit rights or 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) && !$undelete) + if ($info_id && !$this->bo->check_access($info_id,Acl::EDIT) && !$undelete) { $readonlys['__ALL__'] = true; // make all fields not explicitly set readonly if ($this->bo->is_responsible($content)) @@ -2131,7 +2132,7 @@ class infolog_ui $this->tmpl->setElementAttribute('button[save]', 'label', 'Un-Delete'); } - if (!($readonlys['button[delete]'] = !$info_id || !$this->bo->check_access($info_id,EGW_ACL_DELETE))) + if (!($readonlys['button[delete]'] = !$info_id || !$this->bo->check_access($info_id,Acl::DELETE))) { $content['info_anz_subs'] = $this->bo->anzSubs($info_id); // to determine js confirmation of delete or not } @@ -2303,16 +2304,16 @@ class infolog_ui // Get links to be copied, if not excluded if (!in_array('link_to',$exclude_fields) || !in_array('attachments',$exclude_fields)) { - foreach(egw_link::get_links($content['link_to']['to_app'], $info_id) as $link) + foreach(Link::get_links($content['link_to']['to_app'], $info_id) as $link) { - if ($link['app'] != egw_link::VFS_APPNAME && !in_array('link_to', $exclude_fields)) + if ($link['app'] != Link::VFS_APPNAME && !in_array('link_to', $exclude_fields)) { - egw_link::link('infolog', $content['link_to']['to_id'], $link['app'], $link['id'], $link['remark']); + Link::link('infolog', $content['link_to']['to_id'], $link['app'], $link['id'], $link['remark']); } - elseif ($link['app'] == egw_link::VFS_APPNAME && !in_array('attachments', $exclude_fields)) + elseif ($link['app'] == Link::VFS_APPNAME && !in_array('attachments', $exclude_fields)) { - egw_link::link('infolog', $content['link_to']['to_id'], egw_link::VFS_APPNAME, array( - 'tmp_name' => egw_link::vfs_path($link['app2'], $link['id2']).'/'.$link['id'], + Link::link('infolog', $content['link_to']['to_id'], Link::VFS_APPNAME, array( + 'tmp_name' => Link::vfs_path($link['app2'], $link['id2']).'/'.$link['id'], 'name' => $link['id'], ), $link['remark']); } @@ -2326,19 +2327,19 @@ class infolog_ui // we need this if copy is triggered via context menu action if (!isset($content['info_contact']) || empty($content['info_contact']) || $content['info_contact'] === 'copy:') { - $linkinfos = egw_link::get_link($info_link_id); + $linkinfos = Link::get_link($info_link_id); $content['info_contact'] = $linkinfos['link_app1']=='infolog'? $linkinfos['link_app2'].':'.$linkinfos['link_id2']:$linkinfos['link_app1'].':'.$linkinfos['link_id1']; if (stripos($content['info_contact'],'projectmanager')!==false) $content['pm_id'] = $linkinfos['link_app1']=='projectmanager'? $linkinfos['link_id1']:$linkinfos['link_id2']; } unset($content['info_link_id']); } - $content['info_owner'] = !(int)$this->owner || !$this->bo->check_perms(EGW_ACL_ADD,0,$this->owner) ? $this->user : $this->owner; + $content['info_owner'] = !(int)$this->owner || !$this->bo->check_perms(Acl::ADD,0,$this->owner) ? $this->user : $this->owner; if (!empty($content['info_subject'])) { if ($create_sub) { - $config = config::read('infolog'); + $config = Api\Config::read('infolog'); $prefix = lang(empty($config['sub_prefix']) ? 'Re:': $config['sub_prefix']); } else @@ -2370,7 +2371,7 @@ class infolog_ui $alt = $id; } } - return $icon ? html::image('infolog',$icon,lang($alt),'border=0') : lang($alt); + return $icon ? Api\Html::image('infolog',$icon,lang($alt),'border=0') : lang($alt); } /** @@ -2443,14 +2444,14 @@ class infolog_ui 'info_cc' => 'CC', ); // add customfields to field list - foreach(config::get_customfields('infolog') as $name => $data) + foreach(Api\Storage\Customfields::get('infolog') as $name => $data) { $excludefields['#'.$name] = $data['label']; } $sub_excludefields = $excludefields; unset($sub_excludefields['info_id_parent']); // always set to parent! - $config = config::read('infolog'); + $config = Api\Config::read('infolog'); if($content) { @@ -2465,23 +2466,23 @@ class infolog_ui $extra = array_intersect($content['responsible_edit'],array_keys($fields)); $this->bo->responsible_edit = array_unique(array_merge($this->bo->responsible_edit,$extra)); } - config::save_value('copy_excludefields', $content['copy_excludefields'] ? $content['copy_excludefields'] : null, 'infolog'); - config::save_value('sub_excludefields', $content['sub_excludefields'] ? $content['sub_excludefields'] : array('*NONE*'), 'infolog'); - config::save_value('responsible_edit', $this->bo->responsible_edit, 'infolog'); - config::save_value('implicit_rights', $this->bo->implicit_rights = $content['implicit_rights'] == 'edit' ? 'edit' : 'read', 'infolog'); - config::save_value('history', $this->bo->history = $content['history'], 'infolog'); - config::save_value('index_load_cfs', implode(',', (array)$content['index_load_cfs']), 'infolog'); - config::save_value('sub_prefix', $content['sub_prefix'], 'infolog'); + Api\Config::save_value('copy_excludefields', $content['copy_excludefields'] ? $content['copy_excludefields'] : null, 'infolog'); + Api\Config::save_value('sub_excludefields', $content['sub_excludefields'] ? $content['sub_excludefields'] : array('*NONE*'), 'infolog'); + Api\Config::save_value('responsible_edit', $this->bo->responsible_edit, 'infolog'); + Api\Config::save_value('implicit_rights', $this->bo->implicit_rights = $content['implicit_rights'] == 'edit' ? 'edit' : 'read', 'infolog'); + Api\Config::save_value('history', $this->bo->history = $content['history'], 'infolog'); + Api\Config::save_value('index_load_cfs', implode(',', (array)$content['index_load_cfs']), 'infolog'); + Api\Config::save_value('sub_prefix', $content['sub_prefix'], 'infolog'); // Notifications $notifications =& $config[infolog_tracking::CUSTOM_NOTIFICATION]; $notifications[$content['notification_type']] = $content['notification']; - config::save_value(infolog_tracking::CUSTOM_NOTIFICATION, $notifications,'infolog'); + Api\Config::save_value(infolog_tracking::CUSTOM_NOTIFICATION, $notifications,'infolog'); } if($button == 'save' || $button == 'cancel') { - egw::redirect_link('/index.php', array( + Egw::redirect_link('/index.php', array( 'menuaction' => 'admin.admin_ui.index', 'ajax' => 'true' ), 'admin'); @@ -2541,7 +2542,7 @@ class infolog_ui if (!is_array($mailContent) && ($_GET['egw_data'])) { // get the mail raw data - egw_link::get_data ($_GET['egw_data']); + Link::get_data ($_GET['egw_data']); return false; } @@ -2561,7 +2562,7 @@ class infolog_ui * @param $args['view_id'] name of the id-var for location == 'infolog' * @param $args[$args['view_id']] id of the entry * this function can be called for any app, which should include infolog: \ - * $GLOBALS['egw']->hooks->process(array( \ + * Api\Hooks::process(array( \ * * 'location' => 'infolog', \ * * 'app' => , \ * * 'view_id' => , \ @@ -2572,7 +2573,7 @@ class infolog_ui function hook_view($args) { // Load JS for infolog actions - egw_framework::validate_file('.','app','infolog'); + Framework::includeJS('.','app','infolog'); switch ($args['location']) { @@ -2605,10 +2606,10 @@ class infolog_ui // Set to calling app, so actions wind up in the correct place client side $GLOBALS['egw_info']['flags']['currentapp'] = $app; - translation::add_app('infolog'); + Api\Translation::add_app('infolog'); - // Still want infolog categories though - $GLOBALS['egw']->categories = new categories('','infolog'); + // Still want infolog Api\Categories though + $GLOBALS['egw']->categories = new Api\Categories('','infolog'); $this->index(null,$app,$args[$view_id],array( 'menuaction' => $view, isset($view_id2) ? $view_id2 : $view_id => $args[$view_id] diff --git a/infolog/inc/class.infolog_widget.inc.php b/infolog/inc/class.infolog_widget.inc.php index 990774a395..39a647058e 100644 --- a/infolog/inc/class.infolog_widget.inc.php +++ b/infolog/inc/class.infolog_widget.inc.php @@ -10,6 +10,9 @@ * @version $Id$ */ +use EGroupware\Api; +use EGroupware\Api\Etemplate; + /** * Infolog widget et2 representation: * Both infolog-value and infolog-fields widgets are using client-side et2_widget_entry @@ -19,8 +22,8 @@ * options="[field(e.g. sum), compare, alternate_fields(e.g. (-)#customfileds, use '-' if we need subtraction)]" * /> * - */ - + */ + /** * eTemplate extension: InfoLog widget * @@ -32,7 +35,7 @@ * 3) colon (:) separted list of alternative fields: the first non-empty one is used if the selected value is empty * There's a special field "sum" in 1), which sums up all fields given in alternatives. */ -class infolog_widget extends etemplate_widget_entry +class infolog_widget extends Etemplate\Widget\Entry { /** * exported methods of this class @@ -66,16 +69,18 @@ class infolog_widget extends etemplate_widget_entry /** * Constructor of the extension - * */ function __construct($xml) { parent::__construct($xml); + $this->infolog = new infolog_bo(); } public function get_entry($value, array $attrs) { + unset($attrs); // not used + // Already done if (is_array($value) && !(array_key_exists('app',$value) && array_key_exists('id', $value))) return $value; @@ -90,200 +95,54 @@ class infolog_widget extends etemplate_widget_entry } return array(); } - /** - * pre-processing of the extension - * - * This function is called before the extension gets rendered - * - * @param string $name form-name of the control - * @param mixed &$value value / existing content, can be modified - * @param array &$cell array with the widget, can be modified for ui-independent widgets - * @param array &$readonlys names of widgets as key, to be made readonly - * @param mixed &$extension_data data the extension can store persisten between pre- and post-process - * @param etemplate &$tmpl reference to the template we belong too - * @return boolean true if extra label is allowed, false otherwise - */ - function pre_process($name,&$value,&$cell,&$readonlys,&$extension_data,&$tmpl) - { - switch($cell['type']) - { - case 'infolog-fields': - translation::add_app('addressbook'); - $cell['sel_options'] = $this->_get_fields(); - $cell['type'] = 'select'; - $cell['no_lang'] = 1; - break; - - case 'infolog-value': - default: - if (substr($value,0,8) == 'infolog:') $value = substr($value,8); // link-entry syntax - if (!$value || !$cell['size'] || (!is_array($this->data) || $this->data['info_id'] != $value) && - !($this->data = $this->infolog->read($value))) - { - $cell = $tmpl->empty_cell(); - $value = ''; - break; - } - list($type,$compare,$alternatives,$contactfield,$regex,$replace) = explode(',',$cell['size'],6); - $value = $this->data[$type]; - $cell['size'] = ''; - $cell['no_lang'] = 1; - $cell['readonly'] = true; - - switch($type) - { - case '': // Sum of the alternatives, field-name can be prefixed with a minus to substract it's value - $cell['type'] = 'float'; - $cell['size'] = ',,,%0.2lf'; - $value = 0.0; - foreach(explode(':',$alternatives) as $name) - { - if ($name[0] === '-') - { - $val = '-'.$this->data[substr($name, 1)]; - } - else - { - $val = $this->data[$name]; - } - $value += str_replace(array(' ',','), array('','.'), $val); - } - $alternatives = ''; - break; - - case 'info_startdate': - case 'info_datemodified': - case 'info_datecompleted': - $cell['type'] = 'date-time'; - break; - - case 'info_enddate': - $cell['type'] = 'date'; - break; - - case 'info_owner': - case 'info_responsible': - $cell['type'] = 'select-owner'; - break; - - case 'info_cat': - $cell['type'] = 'select-cat'; - break; - - case 'info_access': - $cell['type'] = 'select-access'; - break; - - case 'info_type': - case 'info_priority': - case 'info_confirm': - $cell['sel_options'] = $this->infolog->enums[$type]; - $cell['type'] = 'select'; - break; - - case 'info_status': - $cell['sel_options'] = $this->infolog->status[$this->data['info_type']]; - $cell['type'] = 'select'; - break; - - default: - if ($type{0} == '#') // custom field --> use field-type itself - { - $field = $this->infolog->customfields[substr($type,1)]; - if (($cell['type'] = $field['type'])) - { - if ($field['type'] == 'select') - { - $cell['sel_options'] = $field['values']; - } - break; - } - } - $cell['type'] = 'label'; - break; - } - if ($alternatives && empty($value)) // use first non-empty alternative if value is empty - { - foreach(explode(':',$alternatives) as $name) - { - if (($value = $this->data[$name])) break; - } - } - if (!empty($compare)) // compare with value and print a X is equal and nothing otherwise - { - $value = $value == $compare ? 'X' : ''; - $cell['type'] = 'label'; - } - // modify the value with a regular expression - if (!empty($regex)) - { - $parts = explode('/',$regex); - if (strchr(array_pop($parts),'e') === false) // dont allow e modifier, which would execute arbitrary php code - { - $value = preg_replace($regex,$replace,$value); - } - $cell['type'] = 'label'; - $cell['size'] = ''; - } - // use a contact widget to render the value, eg. to fetch contact data from an linked infolog - if (!empty($contactfield)) - { - $cell['type'] = 'contact-value'; - $cell['size'] = $contactfield; - } - break; - } - $cell['id'] = ($cell['id'] ? $cell['id'] : $cell['name'])."[$type]"; - - return True; // extra label ok - } function _get_fields() { - static $fields; + static $fields=null; - if (!is_null($fields)) return $fields; - - $fields = array( - '' => lang('Sum'), - 'info_type' => lang('Type'), - 'info_subject' => lang('Subject'), - 'info_des' => lang('Description'), - 'info_cat' => lang('Category'), - 'info_from' => lang('Contact'), - 'info_addr' => lang('Phone/Email'), - 'info_responsible' => lang('Responsible'), - 'info_startdate' => lang('Startdate'), - 'info_enddate' => lang('Enddate'), - 'info_status' => lang('Status'), - 'info_priority' => lang('Priority'), - 'info_location' => lang('Location'), - 'info_percent' => lang('Completed'), - 'info_datecompleted' => lang('Date completed'), - // meta data - // PM fields - 'info_planned_time' => lang('planned time'), - 'info_used_time' => lang('used time'), - 'pl_id' => lang('Pricelist'), - 'info_price' => lang('Price'), - // other - 'info_owner' => lang('Owner'), - 'info_access' => lang('Access'), - 'info_id' => lang('Id#'), - 'info_link_id' => lang('primary link'), - 'info_modifier' => lang('Modifierer'), - 'info_datemodified' => lang('Last modified'), -// 'info_id_parent' => lang('Parent'), -// 'info_confirm' => lang('Confirm'), -// 'info_custom_from' => lang('Custom from'), - ); - foreach(config::get_customfields('infolog') as $name => $data) + if (!isset($fields)) { - $fields['#'.$name] = lang($data['label']); + $fields = array( + '' => lang('Sum'), + 'info_type' => lang('Type'), + 'info_subject' => lang('Subject'), + 'info_des' => lang('Description'), + 'info_cat' => lang('Category'), + 'info_from' => lang('Contact'), + 'info_addr' => lang('Phone/Email'), + 'info_responsible' => lang('Responsible'), + 'info_startdate' => lang('Startdate'), + 'info_enddate' => lang('Enddate'), + 'info_status' => lang('Status'), + 'info_priority' => lang('Priority'), + 'info_location' => lang('Location'), + 'info_percent' => lang('Completed'), + 'info_datecompleted' => lang('Date completed'), + // meta data + // PM fields + 'info_planned_time' => lang('planned time'), + 'info_used_time' => lang('used time'), + 'pl_id' => lang('Pricelist'), + 'info_price' => lang('Price'), + // other + 'info_owner' => lang('Owner'), + 'info_access' => lang('Access'), + 'info_id' => lang('Id#'), + 'info_link_id' => lang('primary link'), + 'info_modifier' => lang('Modifierer'), + 'info_datemodified' => lang('Last modified'), + // 'info_id_parent' => lang('Parent'), + // 'info_confirm' => lang('Confirm'), + // 'info_custom_from' => lang('Custom from'), + ); + foreach(Api\Storage\Customfields::get('infolog') as $name => $data) + { + $fields['#'.$name] = lang($data['label']); + } } return $fields; } } // register widgets for etemplate2 -etemplate_widget::registerWidget('infolog_widget',array('infolog-value', 'infolog-fields')); \ No newline at end of file +Etemplate\Widget::registerWidget('infolog_widget',array('infolog-value', 'infolog-fields')); \ No newline at end of file diff --git a/infolog/inc/class.infolog_wizard_export_csv.inc.php b/infolog/inc/class.infolog_wizard_export_csv.inc.php index 077e944611..ce6aa68ef0 100644 --- a/infolog/inc/class.infolog_wizard_export_csv.inc.php +++ b/infolog/inc/class.infolog_wizard_export_csv.inc.php @@ -1,6 +1,6 @@ export_fields['custom']); // Heading, not a real field - $custom = config::get_customfields('infolog', true); + $custom = Api\Storage\Customfields::get('infolog', true); foreach($custom as $name => $data) { $this->export_fields['#'.$name] = $data['label']; } diff --git a/infolog/inc/class.infolog_wizard_import_infologs_csv.inc.php b/infolog/inc/class.infolog_wizard_import_infologs_csv.inc.php index 4ef48e3112..f75d113ab4 100644 --- a/infolog/inc/class.infolog_wizard_import_infologs_csv.inc.php +++ b/infolog/inc/class.infolog_wizard_import_infologs_csv.inc.php @@ -1,6 +1,6 @@ mapping_fields = array('info_id' => 'Infolog ID') + $tracking->field2label + infolog_import_infologs_csv::$special_fields; // List each custom field unset($this->mapping_fields['custom']); - $custom = config::get_customfields('infolog'); + $custom = Api\Storage\Customfields::get('infolog'); foreach($custom as $name => $data) { $this->mapping_fields['#'.$name] = $data['label']; } @@ -52,10 +55,10 @@ class infolog_wizard_import_infologs_csv extends importexport_wizard_basic_impor function wizard_step50(&$content, &$sel_options, &$readonlys, &$preserv) { $result = parent::wizard_step50($content, $sel_options, $readonlys, $preserv); - + return $result; } - + # Skipped for now (or forever) function wizard_step60(&$content, &$sel_options, &$readonlys, &$preserv) { @@ -66,7 +69,7 @@ class infolog_wizard_import_infologs_csv extends importexport_wizard_basic_impor if($content['record_owner']) { $bo = new infolog_bo(); - $access = $bo->check_access(0,EGW_ACL_EDIT, $content['record_owner']); + $access = $bo->check_access(0,Acl::EDIT, $content['record_owner']); } // return from step60 @@ -115,6 +118,6 @@ class infolog_wizard_import_infologs_csv extends importexport_wizard_basic_impor unset ($preserv['button']); return 'infolog.importexport_wizard_chooseowner'; } - + } } diff --git a/infolog/inc/class.infolog_zpush.inc.php b/infolog/inc/class.infolog_zpush.inc.php index 8b090fefc6..ef2dbbb156 100644 --- a/infolog/inc/class.infolog_zpush.inc.php +++ b/infolog/inc/class.infolog_zpush.inc.php @@ -10,6 +10,9 @@ * @version $Id$ */ +use EGroupware\Api; +use EGroupware\Api\Acl; + /** * InfoLog activesync plugin */ @@ -69,7 +72,7 @@ class infolog_zpush implements activesync_plugin_write * * Currently we only return an own infolog * - * @param int $account=null account_id of addressbook or null to get array of all addressbooks + * @param int $account =null account_id of addressbook or null to get array of all addressbooks * @return string|array folder name of array with int account_id => folder name pairs */ private function get_folders($account=null) @@ -109,6 +112,7 @@ class infolog_zpush implements activesync_plugin_write */ public function GetFolder($id) { + $type = $owner = null; $this->backend->splitID($id, $type, $owner); $folderObj = new SyncFolder(); @@ -151,6 +155,7 @@ class infolog_zpush implements activesync_plugin_write */ public function StatFolder($id) { + $type = $owner = null; $this->backend->splitID($id, $type, $owner); $stat = array( @@ -183,13 +188,16 @@ class infolog_zpush implements activesync_plugin_write * will work OK apart from that. * * @param string $id folder id - * @param int $cutoffdate=null + * @param int $cutoffdate =null * @return array */ function GetMessageList($id, $cutoffdate=NULL) { + unset($cutoffdate); // not used, but required by function signature + if (!isset($this->infolog)) $this->infolog = new infolog_bo(); + $type = $user = null; $this->backend->splitID($id,$type,$user); if (!($infolog_types = $GLOBALS['egw_info']['user']['preferences']['activesync']['infolog-types'])) { @@ -232,6 +240,7 @@ class infolog_zpush implements activesync_plugin_write $bodypreference = $contentparameters->GetBodyPreference(); /* fmbiete's contribution r1528, ZP-320 */ debugLog (__METHOD__."('$folderid', $id, truncsize=$truncsize, bodyprefence=$bodypreference, mimesupport=$mimesupport)"); + $type = $account = null; $this->backend->splitID($folderid, $type, $account); if ($type != 'infolog' || !($infolog = $this->infolog->read($id, true, 'server'))) { @@ -267,7 +276,7 @@ class infolog_zpush implements activesync_plugin_write $message->$key = array(); foreach($infolog[$attr] ? explode(',',$infolog[$attr]) : array() as $cat_id) { - $message->categories[] = categories::id2name($cat_id); + $message->categories[] = Api\Categories::id2name($cat_id); } break; @@ -304,6 +313,8 @@ class infolog_zpush implements activesync_plugin_write */ public function StatMessage($folderid, $infolog) { + unset($folderid); // not used, info_id does not depend on folder + if (!isset($this->infolog)) $this->infolog = new infolog_bo(); if (!is_array($infolog)) $infolog = $this->infolog->read($infolog, true, 'server'); @@ -338,6 +349,8 @@ class infolog_zpush implements activesync_plugin_write */ public function ChangeFolder($id, $oldid, $displayname, $type) { + unset($id, $oldid, $displayname, $type); // not used + debugLog(__METHOD__." not implemented"); } @@ -353,6 +366,8 @@ class infolog_zpush implements activesync_plugin_write */ public function DeleteFolder($parentid, $id) { + unset($parentid, $id); // not used + debugLog(__METHOD__." not implemented"); } @@ -377,6 +392,7 @@ class infolog_zpush implements activesync_plugin_write { if (!isset($this->infolog)) $this->infolog = new infolog_bo(); unset($contentParameters); // not used but required + $type = $account = null; $this->backend->splitID($folderid, $type, $account); //debugLog(__METHOD__. " Id " .$id. " Account ". $account . " FolderID " . $folderid); if ($type != 'infolog') // || !($infolog = $this->addressbook->read($id))) @@ -385,8 +401,8 @@ class infolog_zpush implements activesync_plugin_write return false; } $infolog = array(); - if (empty($id) && $this->infolog->check_access(0, EGW_ACL_EDIT, $account) || - ($infolog = $this->infolog->read($id)) && $this->infolog->check_access($infolog, EGW_ACL_EDIT)) + if (empty($id) && $this->infolog->check_access(0, Acl::EDIT, $account) || + ($infolog = $this->infolog->read($id)) && $this->infolog->check_access($infolog, Acl::EDIT)) { if (!$infolog) $infolog = array(); foreach (self::$mapping as $key => $attr) @@ -472,6 +488,8 @@ class infolog_zpush implements activesync_plugin_write */ public function DeleteMessage($folderid, $id, $contentParameters) { + unset($contentParameters); // not used + if (!isset($this->infolog)) $this->infolog = new infolog_bo(); $ret = $this->infolog->delete($id); @@ -498,6 +516,8 @@ class infolog_zpush implements activesync_plugin_write */ public function SetReadFlag($folderid, $id, $flags, $contentParameters) { + unset($folderid, $id, $flags, $contentParameters); // not used + return false; } @@ -513,6 +533,8 @@ class infolog_zpush implements activesync_plugin_write */ function ChangeMessageFlag($folderid, $id, $flags) { + unset($folderid, $id, $flags); // not used + return false; } @@ -527,6 +549,7 @@ class infolog_zpush implements activesync_plugin_write */ function AlterPingChanges($folderid, &$syncstate) { + $type = $owner = null; $this->backend->splitID($folderid, $type, $owner); if ($type != 'infolog') return false; @@ -544,7 +567,7 @@ class infolog_zpush implements activesync_plugin_write )); $changes = array(); // no change - $syncstate_was = $syncstate; + //$syncstate_was = $syncstate; if ($ctag !== $syncstate) { @@ -556,14 +579,14 @@ class infolog_zpush implements activesync_plugin_write } /** - * Populates $settings for the preferences + * Populates $settings for the Api\Preferences * * @param array|string $hook_data * @return array */ function egw_settings($hook_data) { - if (!$hook_data['setup']) translation::add_app('infolog'); + if (!$hook_data['setup']) Api\Translation::add_app('infolog'); if (!isset($this->infolog)) $this->infolog = new infolog_bo(); if (!($types = $this->infolog->enums['type'])) diff --git a/infolog/index.php b/infolog/index.php index 606a496ddb..467a9d9c30 100644 --- a/infolog/index.php +++ b/infolog/index.php @@ -1,11 +1,11 @@ * @package infolog - * @copyright (c) 2003-12 by Ralf Becker + * @copyright (c) 2003-16 by Ralf Becker * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @version $Id$ */ @@ -18,14 +18,14 @@ $GLOBALS['egw_info'] = array( ) ); include('../header.inc.php'); -auth::check_password_age('infolog','index'); + include_once(EGW_INCLUDE_ROOT.'/infolog/setup/setup.inc.php'); if ($setup_info['infolog']['version'] != $GLOBALS['egw_info']['apps']['infolog']['version']) { $GLOBALS['egw']->framework->render('

'.lang('Your database is NOT up to date (%1 vs. %2), please run %3setup%4 to update your database.', $setup_info['infolog']['version'],$GLOBALS['egw_info']['apps']['infolog']['version'], '','')."

\n"); - $GLOBALS['egw']->common->egw_exit(); + exit(); } unset($setup_info); diff --git a/infolog/setup/etemplates.inc.php b/infolog/setup/etemplates.inc.php deleted file mode 100644 index 713dc85eb3..0000000000 --- a/infolog/setup/etemplates.inc.php +++ /dev/null @@ -1,133 +0,0 @@ - 'infolog.close','template' => '','lang' => '','group' => '0','version' => '1.7.001','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:44:"Are you shure you want to close 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:11:"Yes - Close";s:4:"name";s:5:"close";s:4:"help";s:30:"Sub-entries will not be closed";}i:2;a:4:{s:4:"type";s:6:"button";s:5:"label";s:33:"Yes - Close including sub-entries";s:4:"name";s:10:"close_subs";s:4:"help";s:43:"Close 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' => '1240392317',); - -$templ_data[] = array('name' => 'infolog.config','template' => '','lang' => '','group' => '0','version' => '1.9.001','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:4:"100%";s:2:"c2";s:4:",top";s:2:"h2";s:5:"350px";}i:1;a:1:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:11:"all,message";s:4:"name";s:3:"msg";}}i:2;a:1:{s:1:"A";a:3:{s:4:"type";s:3:"tab";s:5:"label";s:26:"Configuration|Notification";s:4:"name";s:26:"configuration|notification";}}i:3;a:1:{s:1:"A";a:6:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";i:1;a:3:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:12:"button[save]";}i:2;a:3:{s:4:"type";s:6:"button";s:4:"name";s:13:"button[apply]";s:5:"label";s:5:"Apply";}i:3;a:3:{s:4:"type";s:6:"button";s:4:"name";s:14:"button[cancel]";s:5:"label";s:6:"Cancel";}s:4:"span";s:3:"all";}}}s:4:"rows";i:3;s:4:"cols";i:1;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => 'select { - min-width: 30em; -}','modified' => '1359652244',); - -$templ_data[] = array('name' => 'infolog.config.configuration','template' => '','lang' => '','group' => '0','version' => '','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:11:{i:0;a:4:{s:2:"c1";s:2:"th";s:1:"A";s:3:"60%";s:2:"c4";s:2:"th";s:2:"c6";s:2:"th";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:26:"Rights for the responsible";s:4:"span";s:3:"all";}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:52:"Which implicit ACL rights should the responsible get";}s:1:"B";a:2:{s:4:"type";s:6:"select";s:4:"name";s:15:"implicit_rights";}}i:3;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:153:"Which additional fields should the responsible be allowed to edit without having edit rights?
Status, percent and date completed are always allowed.";}s:1:"B";a:3:{s:4:"type";s:6:"select";s:4:"size";s:9:"6,,,,,,,0";s:4:"name";s:16:"responsible_edit";}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:15:"History logging";s:4:"span";s:3:"all";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:5;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:37:"History logging and deleting of items";}s:1:"B";a:2:{s:4:"type";s:6:"select";s:4:"name";s:7:"history";}}i:6;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:20:"Other configurations";s:4:"span";s:3:"all";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:7;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:42:"Fields to exclude when copying an infolog:";}s:1:"B";a:3:{s:4:"type";s:6:"select";s:4:"name";s:18:"copy_excludefields";s:4:"size";s:1:"6";}}i:8;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:114:"Load custom fields in index, if filtered by selected types (eg. to display them in a type-specific index template)";}s:1:"B";a:3:{s:4:"type";s:6:"select";s:4:"name";s:14:"index_load_cfs";s:4:"size";s:9:"6,,,,,,,1";}}i:9;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:37:"Prefix for sub-entries (default: Re:)";}s:1:"B";a:3:{s:4:"type";s:4:"text";s:7:"no_lang";s:1:"1";s:4:"name";s:10:"sub_prefix";}}i:10;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:44:"Fields to exclude when creating a sub-entry:";}s:1:"B";a:3:{s:4:"type";s:6:"select";s:4:"size";s:1:"6";s:4:"name";s:17:"sub_excludefields";}}}s:4:"rows";i:10;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' => '1359651611',); - -$templ_data[] = array('name' => 'infolog.config.notification','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:0:{}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:6:"select";s:4:"name";s:17:"notification_type";s:5:"label";s:4:"Type";s:8:"onchange";i:1;}s:1:"B";a:3:{s:4:"type";s:8:"checkbox";s:5:"label";s:31:"Use custom notification message";s:4:"name";s:24:"notification[use_custom]";}}i:2;a:2:{s:1:"A";a:4:{s:4:"type";s:8:"htmlarea";s:4:"name";s:21:"notification[message]";s:4:"size";s:17:",180px,100%,false";s:4:"span";s:3:"all";}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:"size";s:49:",infolog.infolog_merge.show_replacements,,,_blank";s:5:"label";s:30:"Full list of placeholder names";}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' => '1359653982',); - -$templ_data[] = array('name' => 'infolog.customfields','template' => '','lang' => '','group' => '0','version' => '1.3.002','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:8:{i:0;a:3:{s:2:"c2";s:6:"header";s:2:"c4";s:6:"header";s:1:"F";s:3:"80%";}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:5:{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:7:",header";s:5:"label";s:15:"Group owner for";s:4:"name";s:5:"type2";}i:2;a:5:{s:4:"type";s:14:"select-account";s:4:"size";s:11:"None,groups";s:4:"name";s:11:"group_owner";s:4:"help";s:119:"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!";s:4:"span";s:10:",lpadding5";}s:4:"span";s:3:"all";}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:7;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:17:"apply 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:7;s:4:"cols";i:6;}}','size' => '','style' => '.header { font-weight: bold; font-size: 120%; } -.error_msg { color: red; font-style: italics; }','modified' => '1173687088',); - -$templ_data[] = array('name' => 'infolog.customfields.fields','template' => '','lang' => '','group' => '0','version' => '1.9.001','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:2:{s:2:"c1";s:2:"th";s:2:"c2";s:7:"row,top";}i:1;a:8:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:3:"Typ";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Name";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Label";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Type";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:5:"label";s:20:"Values for selectbox";}s:1:"F";a:4:{s:4:"type";s:4:"html";i:1;a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"Length";}i:2;a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Rows";}s:5:"label";s:14:"Length
Rows";}s:1:"G";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Order";}s:1:"H";a:4:{s:4:"type";s:5:"label";s:5:"label";s:6:"Action";s:5:"align";s:6:"center";s:4:"help";s:18:"deletes this field";}}i:2;a:8:{s:1:"A";a:5:{s:4:"type";s:6:"select";s:4:"size";s:1:"3";s:4:"name";s:13:"${row}[type2]";s:4:"help";s:41:"for which types should this field be used";s:7:"no_lang";s:1:"1";}s:1:"B";a:4:{s:4:"type";s:4:"text";s:4:"size";s:5:"20,32";s:4:"name";s:12:"${row}[name]";s:4:"help";s:83:"the name used internaly (<= 20 chars), changeing it makes existing data unavailible";}s:1:"C";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:4:"text";s:4:"size";s:4:",255";s:4:"name";s:13:"${row}[label]";s:4:"help";s:30:"the text displayed to the user";}i:2;a:2:{s:4:"type";s:5:"label";s:4:"name";s:13:"${row}[label]";}}s:1:"D";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"2,,0,0";i:1;a:3:{s:4:"type";s:18:"customfields-types";s:4:"name";s:12:"${row}[type]";s:4:"help";s:19:"Type of customfield";}i:2;a:3:{s:4:"type";s:8:"checkbox";s:4:"name";s:14:"${row}[needed]";s:5:"label";s:8:"required";}}s:1:"E";a:4:{s:4:"type";s:8:"textarea";s:4:"size";s:4:"2,30";s:4:"name";s:14:"${row}[values]";s:4:"help";s:40:"each value is a line like [=