fix lots of warnings filling zpush logs

This commit is contained in:
ralf 2023-06-09 18:27:28 +02:00
parent 9313156daa
commit 608963aa9b
19 changed files with 122 additions and 119 deletions

View File

@ -660,7 +660,7 @@ class Sql
//error_log(__METHOD__."('$name', '$which', ".array2string($account_type).") db->select('$table', '$cols', ".array2string($where).") returned ".array2string($rs).' '.function_backtrace()); //error_log(__METHOD__."('$name', '$which', ".array2string($account_type).") db->select('$table', '$cols', ".array2string($where).") returned ".array2string($rs).' '.function_backtrace());
return false; return false;
} }
return ($row['account_type'] == 'g' ? -1 : 1) * $row['account_id']; return (($row['account_type']??null) === 'g' ? -1 : 1) * $row['account_id'];
} }
/** /**

View File

@ -60,7 +60,7 @@ class Sql implements Backend
'account_type' => 'u', 'account_type' => 'u',
'account_status' => 'A' 'account_status' => 'A'
); );
if (!$GLOBALS['egw_info']['server']['case_sensitive_username']) // = is case sensitiv eg. on postgres, but not on mysql! if (empty($GLOBALS['egw_info']['server']['case_sensitive_username'])) // = is case-sensitive e.g. on postgres, but not on mysql!
{ {
$where[] = 'account_lid '.$this->db->capabilities[Api\Db::CAPABILITY_CASE_INSENSITIV_LIKE].' '.$this->db->quote($username); $where[] = 'account_lid '.$this->db->capabilities[Api\Db::CAPABILITY_CASE_INSENSITIV_LIKE].' '.$this->db->quote($username);
unset($where['account_lid']); unset($where['account_lid']);
@ -69,7 +69,7 @@ class Sql implements Backend
{ {
if (!($row = $this->db->select($this->table,'account_lid,account_pwd,account_lastlogin,account_id',$where,__LINE__,__FILE__)->fetch()) || if (!($row = $this->db->select($this->table,'account_lid,account_pwd,account_lastlogin,account_id',$where,__LINE__,__FILE__)->fetch()) ||
empty($row['account_pwd']) || empty($row['account_pwd']) ||
$GLOBALS['egw_info']['server']['case_sensitive_username'] && $row['account_lid'] != $username) !empty($GLOBALS['egw_info']['server']['case_sensitive_username']) && $row['account_lid'] != $username)
{ {
return false; return false;
} }

View File

@ -237,7 +237,7 @@ class Categories
} }
} }
// check if certain parent required // check if certain parent required
if ($parent_id && !in_array($cat['parent'],(array)$parent_id)) continue; if ($parent_id && !in_array($cat['parent']??null, (array)$parent_id)) continue;
// return global categories just if $globals is set // return global categories just if $globals is set
if (!$globals && !empty($cat['appname']) && $cat['appname'] === self::GLOBAL_APPNAME) if (!$globals && !empty($cat['appname']) && $cat['appname'] === self::GLOBAL_APPNAME)

View File

@ -855,7 +855,10 @@ class Db
"\n$this->Error ($this->Errno)". "\n$this->Error ($this->Errno)".
($inputarr ? "\nParameters: '".implode("','",$inputarr)."'":''), $this->Errno); ($inputarr ? "\nParameters: '".implode("','",$inputarr)."'":''), $this->Errno);
} }
elseif(!$rs->sql) $rs->sql = $Query_String; elseif(empty($rs->sql))
{
$rs->sql = $Query_String;
}
return $rs; return $rs;
} }

View File

@ -261,11 +261,7 @@ class Hooks
// some apps have setup_info for more then themselfs (eg. api for groupdav) // some apps have setup_info for more then themselfs (eg. api for groupdav)
foreach($setup_info as $appname => $data) foreach($setup_info as $appname => $data)
{ {
if(!array_key_exists('hooks', $data)) foreach((array)($data['hooks'] ?? []) as $location => $methods)
{
continue;
}
foreach((array)$data['hooks'] as $location => $methods)
{ {
if (is_int($location)) if (is_int($location))
{ {

View File

@ -235,7 +235,7 @@ class Link extends Link\Storage
// for performance reasons, we do it only once / cache it in the session // for performance reasons, we do it only once / cache it in the session
if ($clear_all || !($search_link_hooks = Cache::getSession(__CLASS__, 'search_link_hooks'))) if ($clear_all || !($search_link_hooks = Cache::getSession(__CLASS__, 'search_link_hooks')))
{ {
$search_link_hooks = Hooks::process('search_link',array(), $clear_all || (bool)$GLOBALS['egw_info']['flags']['async-service']); $search_link_hooks = Hooks::process('search_link',array(), $clear_all || !empty($GLOBALS['egw_info']['flags']['async-service']));
Cache::setSession(__CLASS__, 'search_link_hooks', $search_link_hooks); Cache::setSession(__CLASS__, 'search_link_hooks', $search_link_hooks);
} }
if (is_array($search_link_hooks)) if (is_array($search_link_hooks))

View File

@ -4644,7 +4644,7 @@ class Mail
); );
break; break;
} }
return $bodyPart; return $bodyPart ?? null;
} }
/** /**
@ -5057,7 +5057,7 @@ class Mail
{ {
$body2return = $_bodyParts; $body2return = $_bodyParts;
} }
return $body2return; return $body2return ?? null;
} }
/** /**

View File

@ -643,7 +643,7 @@ class Session
$this->sessionid_access_log = $this->log_access($this->sessionid,$login,$user_ip,$this->account_id); $this->sessionid_access_log = $this->log_access($this->sessionid,$login,$user_ip,$this->account_id);
// We do NOT log anonymous sessions to not block website and also to cope with // We do NOT log anonymous sessions to not block website and also to cope with
// high rate anon endpoints might be called creating a bottleneck in the egw_accounts table. // high rate anon endpoints might be called creating a bottleneck in the egw_accounts table.
Cache::setSession('phpgwapi', 'account_previous_login', $GLOBALS['egw']->auth->previous_login); Cache::setSession('phpgwapi', 'account_previous_login', $GLOBALS['egw']->auth->previous_login ?? null);
$GLOBALS['egw']->accounts->update_lastlogin($this->account_id,$user_ip); $GLOBALS['egw']->accounts->update_lastlogin($this->account_id,$user_ip);
} }
$GLOBALS['egw']->db->transaction_commit(); $GLOBALS['egw']->db->transaction_commit();
@ -664,7 +664,7 @@ class Session
// set new remember me token/cookie, if requested and necessary // set new remember me token/cookie, if requested and necessary
$expiration = null; $expiration = null;
if (($token = $this->checkSetRememberMeToken($remember_me, $_COOKIE[self::REMEMBER_ME_COOKIE], $expiration))) if (($token = $this->checkSetRememberMeToken($remember_me, $_COOKIE[self::REMEMBER_ME_COOKIE] ?? null, $expiration)))
{ {
self::egw_setcookie(self::REMEMBER_ME_COOKIE, $token, $expiration); self::egw_setcookie(self::REMEMBER_ME_COOKIE, $token, $expiration);
} }
@ -684,7 +684,7 @@ class Session
'account_domain' => $this->account_domain, 'account_domain' => $this->account_domain,
'user_ip' => $user_ip, 'user_ip' => $user_ip,
'session_type' => Session\Type::get($_SERVER['REQUEST_URI'], 'session_type' => Session\Type::get($_SERVER['REQUEST_URI'],
$GLOBALS['egw_info']['flags']['current_app'], $GLOBALS['egw_info']['flags']['current_app'] ?? null,
true), // true return WebGUI instead of login, as we are logged in now true), // true return WebGUI instead of login, as we are logged in now
),'',true); ),'',true);
@ -957,7 +957,7 @@ class Session
// restore session vars set before session was started // restore session vars set before session was started
if (is_array($this->required_files)) if (is_array($this->required_files))
{ {
$_SESSION[self::EGW_REQUIRED_FILES] = !is_array($_SESSION[self::EGW_REQUIRED_FILES]) ? $this->required_files : $_SESSION[self::EGW_REQUIRED_FILES] = !is_array($_SESSION[self::EGW_REQUIRED_FILES] ?? null) ? $this->required_files :
array_unique(array_merge($_SESSION[self::EGW_REQUIRED_FILES],$this->required_files)); array_unique(array_merge($_SESSION[self::EGW_REQUIRED_FILES],$this->required_files));
unset($this->required_files); unset($this->required_files);
} }
@ -969,7 +969,7 @@ class Session
'session_dla' => $now, 'session_dla' => $now,
'session_action' => $_SERVER['PHP_SELF'], 'session_action' => $_SERVER['PHP_SELF'],
'session_flags' => $session_flags, 'session_flags' => $session_flags,
// we need the install-id to differ between serveral installs shareing one tmp-dir // we need the install-id to differ between several installations sharing one tmp-dir
'session_install_id' => $GLOBALS['egw_info']['server']['install_id'] 'session_install_id' => $GLOBALS['egw_info']['server']['install_id']
); );
} }
@ -1065,7 +1065,7 @@ class Session
} }
} }
//error_log(__METHOD__."('$sessionid', '$login', '$user_ip', $account_id) returning ".array2string($ret)); //error_log(__METHOD__."('$sessionid', '$login', '$user_ip', $account_id) returning ".array2string($ret));
return $ret; return $ret ?? null;
} }
/** /**
@ -1251,7 +1251,7 @@ class Session
{ {
if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."('$sessionid','$kp3') ".function_backtrace()); if (self::ERROR_LOG_DEBUG) error_log(__METHOD__."('$sessionid','$kp3') ".function_backtrace());
$fill_egw_info_and_repositories = !$GLOBALS['egw_info']['flags']['restored_from_session']; $fill_egw_info_and_repositories = empty($GLOBALS['egw_info']['flags']['restored_from_session']);
if(!$sessionid) if(!$sessionid)
{ {
@ -1298,9 +1298,9 @@ class Session
return false; return false;
} }
$this->session_flags = $session['session_flags']; $this->session_flags = $session['session_flags'] ?? null;
$this->split_login_domain($session['session_lid'],$this->account_lid,$this->account_domain); $this->split_login_domain($session['session_lid'] ?? null,$this->account_lid,$this->account_domain);
// This is to ensure that we authenticate to the correct domain (might not be default) // This is to ensure that we authenticate to the correct domain (might not be default)
if($GLOBALS['egw_info']['user']['domain'] && $this->account_domain != $GLOBALS['egw_info']['user']['domain']) if($GLOBALS['egw_info']['user']['domain'] && $this->account_domain != $GLOBALS['egw_info']['user']['domain'])
@ -1441,7 +1441,7 @@ class Session
),'',true); // true = run hooks from all apps, not just the ones the current user has perms to run ),'',true); // true = run hooks from all apps, not just the ones the current user has perms to run
// Only do the following, if where working with the current user // Only do the following, if where working with the current user
if (!$GLOBALS['egw_info']['user']['sessionid'] || $sessionid == $GLOBALS['egw_info']['user']['sessionid']) if (empty($GLOBALS['egw_info']['user']['sessionid']) || $sessionid == $GLOBALS['egw_info']['user']['sessionid'])
{ {
// eg. SAML logout will fail, if there is no more session --> remove everything else // eg. SAML logout will fail, if there is no more session --> remove everything else
$auth = new Auth(); $auth = new Auth();
@ -1988,7 +1988,7 @@ class Session
} }
} }
if (!$got_login) if (empty($got_login))
{ {
$domain = $GLOBALS['egw_info']['server']['default_domain']; $domain = $GLOBALS['egw_info']['server']['default_domain'];
$account_lid = $login; $account_lid = $login;

View File

@ -603,7 +603,7 @@ class Customfields implements \IteratorAggregate
if(!$customfields) if(!$customfields)
{ {
static $_customfields = array(); static $_customfields = array();
if(!$_customfields[$app]) if(empty($_customfields[$app]))
{ {
$_customfields[$app] = Api\Storage\Customfields::get($app); $_customfields[$app] = Api\Storage\Customfields::get($app);
} }

View File

@ -369,8 +369,8 @@ abstract class Tracking
{ {
//error_log(__METHOD__.__LINE__.' Field:'.$name. ' Value (new):'.array2string($data[$name])); //error_log(__METHOD__.__LINE__.' Field:'.$name. ' Value (new):'.array2string($data[$name]));
//error_log(__METHOD__.__LINE__.' Field:'.$name. ' Value (old):'.array2string($old[$name])); //error_log(__METHOD__.__LINE__.' Field:'.$name. ' Value (old):'.array2string($old[$name]));
if (is_array($data[$name]) && array_key_exists('id',$data[$name])) $data[$name] = $data[$name]['id']; if (is_array($data[$name] ?? null) && array_key_exists('id',$data[$name])) $data[$name] = $data[$name]['id'];
if (is_array($old[$name]) && array_key_exists('id',$old[$name])) $old[$name] = $old[$name]['id']; if (is_array($old[$name] ?? null) && array_key_exists('id',$old[$name])) $old[$name] = $old[$name]['id'];
//error_log(__METHOD__.__LINE__.'(After processing) Field:'.$name. ' Value (new):'.array2string($data[$name])); //error_log(__METHOD__.__LINE__.'(After processing) Field:'.$name. ' Value (new):'.array2string($data[$name]));
//error_log(__METHOD__.__LINE__.'(After processing) Field:'.$name. ' Value (old):'.array2string($old[$name])); //error_log(__METHOD__.__LINE__.'(After processing) Field:'.$name. ' Value (old):'.array2string($old[$name]));
} }

View File

@ -602,8 +602,8 @@ class calendar_bo
} }
// resolve users to add memberships for users and members for groups // resolve users to add memberships for users and members for groups
// for search, do NOT use freebusy rights, as it would allow to probe the content of event entries // for search, do NOT use freebusy rights, as it would allow to probe the content of event entries
$users = $this->resolve_users($params['users'], $params['filter'] == 'no-enum-groups', $params['ignore_acl'], empty($params['query'])); $users = $this->resolve_users($params['users'], $params['filter'] == 'no-enum-groups', $params['ignore_acl'] ?? null, empty($params['query']));
if($params['private_allowed']) if(!empty($params['private_allowed']))
{ {
$params['private_allowed'] = $this->resolve_users($params['private_allowed'],$params['filter'] == 'no-enum-groups',$params['ignore_acl'], empty($params['query'])); $params['private_allowed'] = $this->resolve_users($params['private_allowed'],$params['filter'] == 'no-enum-groups',$params['ignore_acl'], empty($params['query']));
} }
@ -667,7 +667,7 @@ class calendar_bo
//echo "<p align=right>remove_rejected_by_user=$remove_rejected_by_user, filter=$filter, params[users]=".print_r($param['users'])."</p>\n"; //echo "<p align=right>remove_rejected_by_user=$remove_rejected_by_user, filter=$filter, params[users]=".print_r($param['users'])."</p>\n";
foreach($events as $id => $event) foreach($events as $id => $event)
{ {
if ($params['enum_groups'] && $this->enum_groups($event)) if (!empty($params['enum_groups']) && $this->enum_groups($event))
{ {
$events[$id] = $event; $events[$id] = $event;
} }
@ -680,9 +680,9 @@ class calendar_bo
{ {
$is_private = !$this->check_perms(Acl::READ,$event); $is_private = !$this->check_perms(Acl::READ,$event);
} }
if (!$params['ignore_acl'] && ($is_private || (!$event['public'] && $filter == 'hideprivate'))) if (empty($params['ignore_acl']) && ($is_private || (!$event['public'] && $filter == 'hideprivate')))
{ {
$this->clear_private_infos($events[$id],$params['private_allowed'] ? $params['private_allowed'] : $users); $this->clear_private_infos($events[$id],$params['private_allowed'] ?: $users);
} }
} }
@ -1344,7 +1344,7 @@ class calendar_bo
} }
if (!is_array($event)) if (!is_array($event))
{ {
if ($this->xmlrpc) if (!empty($this->xmlrpc))
{ {
$GLOBALS['server']->xmlrpc_error($GLOBALS['xmlrpcerr']['not_exist'],$GLOBALS['xmlrpcstr']['not_exist']); $GLOBALS['server']->xmlrpc_error($GLOBALS['xmlrpcerr']['not_exist'],$GLOBALS['xmlrpcstr']['not_exist']);
} }
@ -1698,7 +1698,7 @@ class calendar_bo
$id2email[$id] = $GLOBALS['egw']->accounts->id2name($id,'account_email'); $id2email[$id] = $GLOBALS['egw']->accounts->id2name($id,'account_email');
} }
} }
return $id2lid[$id].(($append_email || $id[0] == 'e') && !empty($id2email[$id]) ? ' <'.$id2email[$id].'>' : ''); return $id2lid[$id].(($append_email || is_string($id) && $id[0] == 'e') && !empty($id2email[$id]) ? ' <'.$id2email[$id].'>' : '');
} }
/** /**
@ -2187,7 +2187,7 @@ class calendar_bo
{ {
if (!is_array($entry)) if (!is_array($entry))
{ {
list($id,$recur_date) = explode(':',$entry); list($id,$recur_date) = explode(':',$entry)+[null,null];
$entry = $this->read($id, $recur_date, true, 'server'); $entry = $this->read($id, $recur_date, true, 'server');
} }
$etag = $schedule_tag = $entry['id'].':'.$entry['etag']; $etag = $schedule_tag = $entry['id'].':'.$entry['etag'];

View File

@ -133,8 +133,8 @@ class calendar_boupdate extends calendar_bo
// check some minimum requirements: // check some minimum requirements:
// - new events need start, end and title // - new events need start, end and title
// - updated events cant set start, end or title to empty // - updated events cant set start, end or title to empty
if (!$event['id'] && (!$event['start'] || !$event['end'] || !$event['title']) || if (empty($event['id']) && (!$event['start'] || !$event['end'] || !$event['title']) ||
$event['id'] && (isset($event['start']) && !$event['start'] || isset($event['end']) && !$event['end'] || !empty($event['id']) && (isset($event['start']) && !$event['start'] || isset($event['end']) && !$event['end'] ||
isset($event['title']) && !$event['title'])) isset($event['title']) && !$event['title']))
{ {
$messages[] = lang('Required information (start, end, title, ...) missing!'); $messages[] = lang('Required information (start, end, title, ...) missing!');
@ -143,7 +143,7 @@ class calendar_boupdate extends calendar_bo
$status_reset_to_unknown = false; $status_reset_to_unknown = false;
if (($new_event = !$event['id'])) // some defaults for new entries if (($new_event = empty($event['id']))) // some defaults for new entries
{ {
// if no owner given, set user to owner // if no owner given, set user to owner
if (!$event['owner']) $event['owner'] = $this->user; if (!$event['owner']) $event['owner'] = $this->user;
@ -185,7 +185,7 @@ class calendar_boupdate extends calendar_bo
': '.implode(', ',$removed); ': '.implode(', ',$removed);
} }
// check category based ACL // check category based ACL
if ($event['category']) if (!empty($event['category']))
{ {
if (!is_array($event['category'])) $event['category'] = explode(',',$event['category']); if (!is_array($event['category'])) $event['category'] = explode(',',$event['category']);
if (!$old_event || !isset($old_event['category'])) if (!$old_event || !isset($old_event['category']))
@ -236,7 +236,7 @@ class calendar_boupdate extends calendar_bo
} }
// generate a video-room-url, if we need one and not already have one // generate a video-room-url, if we need one and not already have one
if ($event['videoconference'] && empty($event['##videoconference']) && !calendar_hooks::isVideoconferenceDisabled()) if (!empty($event['videoconference']) && empty($event['##videoconference']) && !calendar_hooks::isVideoconferenceDisabled())
{ {
$event['##videoconference'] = EGroupware\Status\Videoconference\Call::genUniqueRoomID(); $event['##videoconference'] = EGroupware\Status\Videoconference\Call::genUniqueRoomID();
} }
@ -245,7 +245,7 @@ class calendar_boupdate extends calendar_bo
$event['##videoconference'] = ''; $event['##videoconference'] = '';
} }
// update videoconference resource amounts based on number of participants // update videoconference resource amounts based on number of participants
if ($event['videoconference'] && !empty($event['##videoconference']) && !calendar_hooks::isVideoconferenceDisabled() if (!empty($event['videoconference']) && !empty($event['##videoconference']) && !calendar_hooks::isVideoconferenceDisabled()
&& ($videoconferenceResId = \EGroupware\Status\Hooks::getVideoconferenceResourceId())) && ($videoconferenceResId = \EGroupware\Status\Hooks::getVideoconferenceResourceId()))
{ {
$participant_total = 0; $participant_total = 0;
@ -291,13 +291,13 @@ class calendar_boupdate extends calendar_bo
$event = $this->read($cal_id, null, $ignore_acl, 'ts', $new_event && !$event['public'] ? $this->user : null); $event = $this->read($cal_id, null, $ignore_acl, 'ts', $new_event && !$event['public'] ? $this->user : null);
//error_log("new $cal_id=". array2string($event)); //error_log("new $cal_id=". array2string($event));
if($old_event['deleted'] && $event['deleted'] == null) if(!empty($old_event['deleted']) && !isset($event['deleted']))
{ {
// Restored, bring back links // Restored, bring back links
Link::restore('calendar', $cal_id); Link::restore('calendar', $cal_id);
$update_type = 'add'; $update_type = 'add';
} }
if ($this->log_file) if (!empty($this->log_file))
{ {
$this->log2file($event2save,$event,$old_event); $this->log2file($event2save,$event,$old_event);
} }
@ -875,7 +875,7 @@ class calendar_boupdate extends calendar_bo
{ {
$to_notify = array(); $to_notify = array();
} }
$notify_externals = $new_event ? $new_event['##notify_externals'] : $old_event['##notify_externals']; $notify_externals = $new_event ? ($new_event['##notify_externals']??null) : ($old_event['##notify_externals']??null);
$disinvited = $msg_type == MSG_DISINVITE ? array_keys($to_notify) : array(); $disinvited = $msg_type == MSG_DISINVITE ? array_keys($to_notify) : array();
$owner = $old_event ? $old_event['owner'] : $new_event['owner']; $owner = $old_event ? $old_event['owner'] : $new_event['owner'];
@ -942,9 +942,9 @@ class calendar_boupdate extends calendar_bo
} }
} }
} }
// unless we notfiy externals about everything aka 'responses' // unless we notify externals about everything aka 'responses'
// we will notify only an external chair, if only one exists // we will notify only an external chair, if only one exists
if (($notify_externals ?: $GLOBALS['egw_info']['user']['calendar']['notify_externals']) !== 'responses') if (($notify_externals ?: $GLOBALS['egw_info']['user']['calendar']['notify_externals'] ?? null) !== 'responses')
{ {
// check if we have *only* an external chair // check if we have *only* an external chair
$chair = null; $chair = null;
@ -1165,7 +1165,7 @@ class calendar_boupdate extends calendar_bo
// we need to pass $event[id] so iCal class reads event again, // we need to pass $event[id] so iCal class reads event again,
// as event is in user TZ, but iCal class expects server TZ! // as event is in user TZ, but iCal class expects server TZ!
$ics = $calendar_ical->exportVCal([$cleared_event], $ics = $calendar_ical->exportVCal([$cleared_event],
'2.0', $method, $cleared_event['recur_date'], '2.0', $method, $cleared_event['recur_date'] ?? null,
'', 'utf-8', $method == 'REPLY' ? $user : 0 '', 'utf-8', $method == 'REPLY' ? $user : 0
); );
unset($calendar_ical); unset($calendar_ical);
@ -1371,14 +1371,14 @@ class calendar_boupdate extends calendar_bo
//error_log(__METHOD__.'('.array2string($event).", $ignore_acl, $updateTS)"); //error_log(__METHOD__.'('.array2string($event).", $ignore_acl, $updateTS)");
// check if user has the permission to update / create the event // check if user has the permission to update / create the event
if (!$ignore_acl && ($event['id'] && !$this->check_perms(Acl::EDIT,$event['id']) || if (!$ignore_acl && (!empty($event['id']) && !$this->check_perms(Acl::EDIT,$event['id']) ||
!$event['id'] && !$this->check_perms(Acl::EDIT,0,$event['owner']) && empty($event['id']) && !$this->check_perms(Acl::EDIT,0,$event['owner']) &&
!$this->check_perms(Acl::ADD,0,$event['owner']))) !$this->check_perms(Acl::ADD,0,$event['owner'])))
{ {
return false; return false;
} }
if ($event['id']) if (!empty($event['id']))
{ {
// invalidate the read-cache if it contains the event we store now // invalidate the read-cache if it contains the event we store now
if ($event['id'] == self::$cached_event['id']) self::$cached_event = array(); if ($event['id'] == self::$cached_event['id']) self::$cached_event = array();
@ -1499,16 +1499,16 @@ class calendar_boupdate extends calendar_bo
$this->enum_groups($expanded); $this->enum_groups($expanded);
foreach($event['alarm'] as $id => &$alarm) foreach($event['alarm'] as $id => &$alarm)
{ {
if($alarm['time']) if(!empty($alarm['time']))
{ {
$alarm['time'] = $this->date2ts($alarm['time'], true); // user to server-time $alarm['time'] = $this->date2ts($alarm['time'], true); // user to server-time
} }
// remove alarms belonging to not longer existing or rejected participants // remove alarms belonging to not longer existing or rejected participants
if ($alarm['owner'] && isset($expanded['participants'])) if (!empty($alarm['owner']) && isset($expanded['participants']))
{ {
// Don't auto-delete alarm if for all users // Don't auto-delete alarm if for all users
if($alarm['all']) continue; if(!empty($alarm['all'])) continue;
$status = $expanded['participants'][$alarm['owner']]; $status = $expanded['participants'][$alarm['owner']];
if (!isset($status) || calendar_so::split_status($status) === 'R') if (!isset($status) || calendar_so::split_status($status) === 'R')
@ -1518,7 +1518,7 @@ class calendar_boupdate extends calendar_bo
//error_log(__LINE__.': '.__METHOD__."(".array2string($event).") deleting alarm=".array2string($alarm).", $status=".array2string($alarm)); //error_log(__LINE__.': '.__METHOD__."(".array2string($event).") deleting alarm=".array2string($alarm).", $status=".array2string($alarm));
} }
} }
else if (!$alarm['owner']) else if (empty($alarm['owner']))
{ {
$alarm['owner'] = $event['owner']; $alarm['owner'] = $event['owner'];
} }
@ -1562,7 +1562,7 @@ class calendar_boupdate extends calendar_bo
$event['created'] = $save_event['created'] = $this->now; $event['created'] = $save_event['created'] = $this->now;
$event['creator'] = $save_event['creator'] = $this->user; $event['creator'] = $save_event['creator'] = $this->user;
} }
$set_recurrences = $old_event ? abs(Api\DateTime::to($event['recur_enddate'], 'utc') - Api\DateTime::to($old_event['recur_enddate'], 'utc')) > 1 : false; $set_recurrences = $old_event ? abs(Api\DateTime::to($event['recur_enddate']??null, 'utc') - Api\DateTime::to($old_event['recur_enddate']??null, 'utc')) > 1 : false;
$set_recurrences_start = 0; $set_recurrences_start = 0;
if (($cal_id = $this->so->save($event,$set_recurrences,$set_recurrences_start,0,$event['etag'])) && $set_recurrences && $event['recur_type'] != MCAL_RECUR_NONE) if (($cal_id = $this->so->save($event,$set_recurrences,$set_recurrences_start,0,$event['etag'])) && $set_recurrences && $event['recur_type'] != MCAL_RECUR_NONE)
{ {
@ -1573,7 +1573,7 @@ class calendar_boupdate extends calendar_bo
} }
// create links for new participants from addressbook, if configured // create links for new participants from addressbook, if configured
if ($cal_id && $GLOBALS['egw_info']['server']['link_contacts'] && $event['participants']) if ($cal_id && $GLOBALS['egw_info']['server']['link_contacts'] && !empty($event['participants']))
{ {
foreach($event['participants'] as $uid => $status) foreach($event['participants'] as $uid => $status)
{ {
@ -1602,7 +1602,7 @@ class calendar_boupdate extends calendar_bo
} }
foreach(['start', 'end', 'recur_enddate'] as $ts) foreach(['start', 'end', 'recur_enddate'] as $ts)
{ {
if(is_object($save_event[$ts])) if(isset($save_event[$ts]) && is_object($save_event[$ts]))
{ {
$save_event[$ts] = $save_event[$ts]->format('ts'); $save_event[$ts] = $save_event[$ts]->format('ts');
} }
@ -3119,7 +3119,7 @@ class calendar_boupdate extends calendar_bo
{ {
foreach($event['alarm'] as $id => $alarm) foreach($event['alarm'] as $id => $alarm)
{ {
$event['alarm'][$id]['time'] = $this->date2usertime($alarm['time']); $event['alarm'][$id]['time'] = $this->date2usertime($alarm['time'] ?? null);
} }
} }
} }

View File

@ -87,7 +87,7 @@ class calendar_hooks
$send_keys = ['id', 'owner', 'participants', 'start', 'end']; $send_keys = ['id', 'owner', 'participants', 'start', 'end'];
if($event['recur_type']) if($event['recur_type'])
{ {
// If it's a recurring event, we're only sending the first instance, which may be outside of the current // If it's a recurring event, we're only sending the first instance, which may be outside the current
// view and therefore would be ignored by the client. Include range for additional check. // view and therefore would be ignored by the client. Include range for additional check.
$send_keys[] = 'range_start'; $send_keys[] = 'range_start';
$send_keys[] = 'range_end'; $send_keys[] = 'range_end';
@ -95,7 +95,7 @@ class calendar_hooks
$event = array_intersect_key($event, array_flip($send_keys)); $event = array_intersect_key($event, array_flip($send_keys));
foreach($event['participants'] as $uid => $status) foreach($event['participants'] as $uid => $status)
{ {
if($uid[0] === 'e') if(is_string($uid) && $uid[0] === 'e')
{ {
unset($event['participants'][$uid]); unset($event['participants'][$uid]);
} }

View File

@ -939,7 +939,7 @@ class calendar_ical extends calendar_boupdate
if (!isset($alarmData['offset']) && !isset($alarmData['time'])) continue; if (!isset($alarmData['offset']) && !isset($alarmData['time'])) continue;
// skip alarms not being set for all users and alarms owned by other users // skip alarms not being set for all users and alarms owned by other users
if ($alarmData['all'] != true && $alarmData['owner'] != $this->user) if (empty($alarmData['all']) && $alarmData['owner'] != $this->user)
{ {
continue; continue;
} }
@ -1041,13 +1041,13 @@ class calendar_ical extends calendar_boupdate
foreach ($attributes as $key => $value) foreach ($attributes as $key => $value)
{ {
foreach (is_array($value) && $parameters[$key]['VALUE']!='DATE' ? $value : array($value) as $valueID => $valueData) foreach (is_array($value) && ($parameters[$key]['VALUE']??null) != 'DATE' ? $value : array($value) as $valueID => $valueData)
{ {
$valueData = Api\Translation::convert($valueData,Api\Translation::charset(),$charset); $valueData = Api\Translation::convert($valueData,Api\Translation::charset(),$charset);
$paramData = (array) Api\Translation::convert(is_array($value) ? $paramData = (array) Api\Translation::convert(is_array($value) ?
$parameters[$key][$valueID] : $parameters[$key], ($parameters[$key][$valueID]??null) : ($parameters[$key]??null),
Api\Translation::charset(),$charset); Api\Translation::charset(),$charset);
$valuesData = (array) Api\Translation::convert($values[$key], $valuesData = (array) Api\Translation::convert($values[$key] ?? null,
Api\Translation::charset(),$charset); Api\Translation::charset(),$charset);
$content = $valueData . implode(';', $valuesData); $content = $valueData . implode(';', $valuesData);
@ -3068,7 +3068,7 @@ class calendar_ical extends calendar_boupdate
} }
break; break;
case 'CREATED': // will be written direct to the event case 'CREATED': // will be written direct to the event
if ($event['modified']) break; if (!empty($event['modified'])) break;
// fall through // fall through
case 'LAST-MODIFIED': // will be written direct to the event case 'LAST-MODIFIED': // will be written direct to the event
$event['modified'] = $attributes['value']; $event['modified'] = $attributes['value'];
@ -3192,7 +3192,7 @@ class calendar_ical extends calendar_boupdate
break; break;
} }
} }
if ($event['recur_enddate']) if (!empty($event['recur_enddate']))
{ {
// reset recure_enddate to 00:00:00 on the last day // reset recure_enddate to 00:00:00 on the last day
$rriter = calendar_rrule::event2rrule($event, false); $rriter = calendar_rrule::event2rrule($event, false);
@ -3211,7 +3211,7 @@ class calendar_ical extends calendar_boupdate
$event['recur_enddate'] = Api\DateTime::to($last, 'server'); $event['recur_enddate'] = Api\DateTime::to($last, 'server');
} }
// translate COUNT into an enddate, as we only store enddates // translate COUNT into an enddate, as we only store enddates
elseif($event['recur_count']) elseif(!empty($event['recur_count']))
{ {
$rriter = calendar_rrule::event2rrule($event, false); $rriter = calendar_rrule::event2rrule($event, false);
$last = $rriter->count2date($event['recur_count']); $last = $rriter->count2date($event['recur_count']);

View File

@ -353,6 +353,7 @@ class calendar_so
)); ));
unset($where['cal_id']); unset($where['cal_id']);
} }
$group_by = '';
if ((int) $recur_date && !$read_recurrence) if ((int) $recur_date && !$read_recurrence)
{ {
$where[] = 'cal_start >= '.(int)$recur_date; $where[] = 'cal_start >= '.(int)$recur_date;
@ -901,7 +902,10 @@ class calendar_so
$where[] = '('.((int)$start).' < range_end OR range_end IS NULL)'; $where[] = '('.((int)$start).' < range_end OR range_end IS NULL)';
} }
} }
if (!preg_match('/^[a-z_ ,c]+$/i',$params['order'])) $params['order'] = 'cal_start'; // gard against SQL injection if (empty($params['order']) || !preg_match('/^[a-z_ ,c]+$/i', $params['order']))
{
$params['order'] = 'cal_start'; // gard against SQL injection
}
// if not enum recuring events, we have to use minimum start- AND end-dates, otherwise we get more then one event per cal_id! // if not enum recuring events, we have to use minimum start- AND end-dates, otherwise we get more then one event per cal_id!
if (!$params['enum_recuring']) if (!$params['enum_recuring'])
@ -987,7 +991,7 @@ class calendar_so
'cols' => $cols, 'cols' => $cols,
'where' => $where, 'where' => $where,
'app' => 'calendar', 'app' => 'calendar',
'append'=> $params['append'], 'append'=> $params['append'] ?? null,
'table_def' => $cal_table_def, 'table_def' => $cal_table_def,
); );
$selects = array(); $selects = array();
@ -1032,7 +1036,7 @@ class calendar_so
$selects[count($selects)-1]['where'][] = "$this->user_table.cal_recur_date=cal_start"; $selects[count($selects)-1]['where'][] = "$this->user_table.cal_recur_date=cal_start";
} }
} }
if (is_numeric($offset) && !$params['no_total']) // get the total too if (is_numeric($offset) && empty($params['no_total'])) // get the total too
{ {
$save_selects = $selects; $save_selects = $selects;
// we only select cal_table.cal_id (and not cal_table.*) to be able to use DISTINCT (eg. MsSQL does not allow it for text-columns) // we only select cal_table.cal_id (and not cal_table.*) to be able to use DISTINCT (eg. MsSQL does not allow it for text-columns)
@ -1045,14 +1049,14 @@ class calendar_so
array('range_start AS cal_start','range_end AS cal_end'), $selects[$key]['cols']); array('range_start AS cal_start','range_end AS cal_end'), $selects[$key]['cols']);
} }
} }
if (!isset($params['cols']) && !$params['no_integration']) self::get_union_selects($selects,$start,$end,$users,$cat_id,$filter,$params['query'],$params['users']); if (!isset($params['cols']) && empty($params['no_integration'])) self::get_union_selects($selects,$start,$end,$users,$cat_id,$filter,$params['query'],$params['users']);
$this->total = $this->db->union($selects,__LINE__,__FILE__)->NumRows(); $this->total = $this->db->union($selects,__LINE__,__FILE__)->NumRows();
// restore original cols / selects // restore original cols / selects
$selects = $save_selects; unset($save_selects); $selects = $save_selects; unset($save_selects);
} }
if (!isset($params['cols']) && !$params['no_integration']) self::get_union_selects($selects,$start,$end,$users,$cat_id,$filter,$params['query'],$params['users']); if (!isset($params['cols']) && empty($params['no_integration'])) self::get_union_selects($selects,$start,$end,$users,$cat_id,$filter,$params['query'],$params['users']);
$rs = $this->db->union($selects,__LINE__,__FILE__,$params['order'],$offset,$num_rows); $rs = $this->db->union($selects,__LINE__,__FILE__,$params['order'],$offset,$num_rows);
} }
@ -1120,7 +1124,7 @@ class calendar_so
$row['recur_exception'] = $row['alarm'] = array(); $row['recur_exception'] = $row['alarm'] = array();
// compile a list of recurrences per cal_id // compile a list of recurrences per cal_id
if (!in_array($id,(array)$recur_ids[$row['cal_id']])) $recur_ids[$row['cal_id']][] = $id; if (!isset($recur_ids[$row['cal_id']]) || !in_array($id, $recur_ids[$row['cal_id']])) $recur_ids[$row['cal_id']][] = $id;
$events[$id] = Api\Db::strip_array_keys($row,'cal_'); $events[$id] = Api\Db::strip_array_keys($row,'cal_');
} }
@ -1184,7 +1188,7 @@ class calendar_so
} }
} }
//custom fields are not shown in the regular views, so we only query them, if explicitly required //custom fields are not shown in the regular views, so we only query them, if explicitly required
if (!is_null($params['cfs'])) if (isset($params['cfs']))
{ {
$where = array('cal_id' => $ids); $where = array('cal_id' => $ids);
if ($params['cfs']) $where['cal_extra_name'] = $params['cfs']; if ($params['cfs']) $where['cal_extra_name'] = $params['cfs'];
@ -1439,7 +1443,7 @@ ORDER BY cal_user_type, cal_usre_id
//error_log(__METHOD__.'('.array2string($event).",$set_recurrences,$change_since,$etag) ".function_backtrace()); //error_log(__METHOD__.'('.array2string($event).",$set_recurrences,$change_since,$etag) ".function_backtrace());
$cal_id = (int) $event['id']; $cal_id = (int)($event['id'] ?? 0);
unset($event['id']); unset($event['id']);
$set_recurrences = $set_recurrences || !$cal_id && $event['recur_type'] != MCAL_RECUR_NONE; $set_recurrences = $set_recurrences || !$cal_id && $event['recur_type'] != MCAL_RECUR_NONE;
@ -1465,15 +1469,15 @@ ORDER BY cal_user_type, cal_usre_id
$event['range_end'] = $event['recur_type'] == MCAL_RECUR_NONE ? $event['cal_end'] : $event['range_end'] = $event['recur_type'] == MCAL_RECUR_NONE ? $event['cal_end'] :
($event['recur_enddate'] ? $event['recur_enddate'] : null); ($event['recur_enddate'] ? $event['recur_enddate'] : null);
} }
// ensure that we find mathing entries later on // ensure that we find matching entries later on
if (!is_array($event['cal_category'])) if (isset($event['cal_category']) && !is_array($event['cal_category']))
{ {
$categories = array_unique(explode(',',$event['cal_category'])); $categories = array_unique(explode(',',$event['cal_category']));
sort($categories); sort($categories);
} }
else else
{ {
$categories = array_unique($event['cal_category']); $categories = array_unique($event['cal_category'] ?? []);
} }
sort($categories, SORT_NUMERIC); sort($categories, SORT_NUMERIC);
@ -1515,7 +1519,7 @@ ORDER BY cal_user_type, cal_usre_id
// new event // new event
if (!$event['cal_owner']) $event['cal_owner'] = $GLOBALS['egw_info']['user']['account_id']; if (!$event['cal_owner']) $event['cal_owner'] = $GLOBALS['egw_info']['user']['account_id'];
if (!$event['cal_id'] && !isset($event['cal_uid'])) $event['cal_uid'] = ''; // uid is NOT NULL! if (empty($event['cal_id']) && !isset($event['cal_uid'])) $event['cal_uid'] = ''; // uid is NOT NULL!
$event['cal_etag'] = $etag = 0; $event['cal_etag'] = $etag = 0;
$this->db->insert($this->cal_table,$event,false,__LINE__,__FILE__,'calendar'); $this->db->insert($this->cal_table,$event,false,__LINE__,__FILE__,'calendar');
@ -1556,7 +1560,7 @@ ORDER BY cal_user_type, cal_usre_id
__LINE__,__FILE__,'calendar'); __LINE__,__FILE__,'calendar');
// add exception marker to master, so participants added to exceptions *only* get found // add exception marker to master, so participants added to exceptions *only* get found
if ($event['cal_reference']) if (!empty($event['cal_reference']))
{ {
$master_participants = array(); $master_participants = array();
foreach($this->db->select($this->user_table, 'cal_user_type,cal_user_id,cal_user_attendee', array( foreach($this->db->select($this->user_table, 'cal_user_type,cal_user_id,cal_user_attendee', array(
@ -1725,7 +1729,7 @@ ORDER BY cal_user_type, cal_usre_id
foreach($event as $name => $value) foreach($event as $name => $value)
{ {
if ($name[0] == '#') if (is_string($name) && $name[0] === '#')
{ {
if (is_array($value) && array_key_exists('id',$value)) if (is_array($value) && array_key_exists('id',$value))
{ {
@ -1756,7 +1760,7 @@ ORDER BY cal_user_type, cal_usre_id
{ {
foreach ($event['alarm'] as $id => $alarm) foreach ($event['alarm'] as $id => $alarm)
{ {
if ($alarm['id'] && strpos($alarm['id'], 'cal:'.$cal_id.':') !== 0) if (!empty($alarm['id']) && strpos($alarm['id'], 'cal:'.$cal_id.':') !== 0)
{ {
unset($alarm['id']); // unset the temporary id to add the alarm unset($alarm['id']); // unset the temporary id to add the alarm
} }
@ -1782,7 +1786,7 @@ ORDER BY cal_user_type, cal_usre_id
} }
// if event is an exception: update modified of master, to force etag, ctag and sync-token change // if event is an exception: update modified of master, to force etag, ctag and sync-token change
if ($event['cal_reference']) if (!empty($event['cal_reference']))
{ {
$this->updateModified($event['cal_reference']); $this->updateModified($event['cal_reference']);
} }
@ -2071,7 +2075,7 @@ ORDER BY cal_user_type, cal_usre_id
// we do not touch unchanged (!) existing ones // we do not touch unchanged (!) existing ones
foreach($participants as $uid => $status) foreach($participants as $uid => $status)
{ {
if ($old_participants[$uid] === $status) if (isset($old_participants[$uid]) && $old_participants[$uid] === $status)
{ {
unset($participants[$uid]); unset($participants[$uid]);
} }
@ -2387,13 +2391,13 @@ ORDER BY cal_user_type, cal_usre_id
} }
if (!is_array($cal_id)) if (!is_array($cal_id))
{ {
$alarms = (array)self::$alarm_cache[$cal_id]; $alarms = self::$alarm_cache[$cal_id] ?? [];
} }
else else
{ {
foreach($cal_id as $id) foreach($cal_id as $id)
{ {
$alarms[$id] = (array)self::$alarm_cache[$id]; $alarms[$id] = self::$alarm_cache[$id] ?? [];
} }
} }
//error_log(__METHOD__."(".array2string($cal_id).", ".array2string($update_cache).") returning from cache ".array2string($alarms)); //error_log(__METHOD__."(".array2string($cal_id).", ".array2string($update_cache).") returning from cache ".array2string($alarms));
@ -2416,7 +2420,7 @@ ORDER BY cal_user_type, cal_usre_id
} }
} }
//error_log(__METHOD__."(".array2string($cal_id).") returning ".array2string($alarms)); //error_log(__METHOD__."(".array2string($cal_id).") returning ".array2string($alarms));
return $alarms ? $alarms : array(); return $alarms ?? [];
} }
/** /**
@ -2452,7 +2456,7 @@ ORDER BY cal_user_type, cal_usre_id
function save_alarm($cal_id, $alarm, $update_modified=true) function save_alarm($cal_id, $alarm, $update_modified=true)
{ {
//error_log(__METHOD__."($cal_id, ".array2string($alarm).', '.array2string($update_modified).') '.function_backtrace()); //error_log(__METHOD__."($cal_id, ".array2string($alarm).', '.array2string($update_modified).') '.function_backtrace());
if (!($id = $alarm['id'])) if (!($id = $alarm['id'] ?? null))
{ {
$alarms = $this->read_alarms($cal_id); // find a free alarm# $alarms = $this->read_alarms($cal_id); // find a free alarm#
$n = count($alarms); $n = count($alarms);

View File

@ -148,7 +148,7 @@ class calendar_timezones
} }
} }
// if not tzid queried, resolve aliases automatically // if not tzid queried, resolve aliases automatically
if ($data && $data['alias'] && $what != 'tzid' && $what != 'alias') if ($data && !empty($data['alias']) && $what != 'tzid' && $what != 'alias')
{ {
$data = self::id2tz($data['alias'],null); $data = self::id2tz($data['alias'],null);
} }

View File

@ -148,7 +148,7 @@ class calendar_tracking extends Api\Storage\Tracking
{ {
unset($old['participants']); unset($old['participants']);
} }
if(is_array($old['participants'])) if(isset($old['participants']) && is_array($old['participants']))
{ {
$participants = $old['participants']; $participants = $old['participants'];
$old['participants'] = array(); $old['participants'] = array();
@ -221,7 +221,7 @@ class calendar_tracking extends Api\Storage\Tracking
'status' => $status, 'status' => $status,
'quantity' => $quantity, 'quantity' => $quantity,
'role' => $role, 'role' => $role,
'recur' => $data['recur_date'] ? $data['recur_date'] : 0, 'recur' => $data['recur_date'] ?? 0,
); );
} }
return $data; return $data;

View File

@ -389,7 +389,7 @@ class calendar_zpush implements activesync_plugin_write, activesync_plugin_meeti
$message->sensitivity = !isset($event['public']) || $event['public'] ? 0 : 2; // 0=normal, 1=personal, 2=private, 3=confidential $message->sensitivity = !isset($event['public']) || $event['public'] ? 0 : 2; // 0=normal, 1=personal, 2=private, 3=confidential
// busystatus=(0=free|1=tentative|2=busy|3=out-of-office), EGw has non_blocking=0|1 // busystatus=(0=free|1=tentative|2=busy|3=out-of-office), EGw has non_blocking=0|1
$message->busystatus = $event['non_blocking'] ? 0 : 2; $message->busystatus = !empty($event['non_blocking']) ? 0 : 2;
// ToDo: recurring events: InstanceType, RecurrenceId, Recurrences; ... // ToDo: recurring events: InstanceType, RecurrenceId, Recurrences; ...
$message->instancetype = 0; // 0=Single, 1=Master recurring, 2=Single recuring, 3=Exception $message->instancetype = 0; // 0=Single, 1=Master recurring, 2=Single recuring, 3=Exception
@ -467,7 +467,7 @@ class calendar_zpush implements activesync_plugin_write, activesync_plugin_meeti
// convert to user-time, as that is what calendar_boupdate expects // convert to user-time, as that is what calendar_boupdate expects
$this->calendar->server2usertime($event); $this->calendar->server2usertime($event);
if ($event['id'] && isset($event['participants'][$uid])) if (!empty($event['id']) && isset($event['participants'][$uid]))
{ {
$ret = $this->calendar->set_status($event, $uid, $status) ? $event['id'] : false; $ret = $this->calendar->set_status($event, $uid, $status) ? $event['id'] : false;
$msg = $ret ? "status '$status' set for event #$ret" : "could NOT set status '$status' for event #$event[id]"; $msg = $ret ? "status '$status' set for event #$ret" : "could NOT set status '$status' for event #$event[id]";
@ -557,7 +557,7 @@ class calendar_zpush implements activesync_plugin_write, activesync_plugin_meeti
ZLog::Write(LOGLEVEL_DEBUG, __METHOD__."('$folderid', $_id, ".array2string($message).") type='$type', account=$account"); ZLog::Write(LOGLEVEL_DEBUG, __METHOD__."('$folderid', $_id, ".array2string($message).") type='$type', account=$account");
list($id,$recur_date) = explode(':', $_id); list($id,$recur_date) = explode(':', $_id)+[null,null];
if ($type != 'calendar' || $id && !($old_event = $this->calendar->read($id, $recur_date, false, 'server'))) if ($type != 'calendar' || $id && !($old_event = $this->calendar->read($id, $recur_date, false, 'server')))
{ {
@ -698,7 +698,7 @@ class calendar_zpush implements activesync_plugin_write, activesync_plugin_meeti
$participants = array(); $participants = array();
foreach((array)$message->attendees as $attendee) foreach((array)$message->attendees as $attendee)
{ {
if ($attendee->type == 3) continue; // we can not identify resources and re-add them anyway later if (isset($attendee->type) && $attendee->type == 3) continue; // we can not identify resources and re-add them anyway later
$matches = null; $matches = null;
if (preg_match('/^noreply-(.*)-uid@egroupware.org$/',$attendee->email,$matches)) if (preg_match('/^noreply-(.*)-uid@egroupware.org$/',$attendee->email,$matches))
@ -736,7 +736,7 @@ class calendar_zpush implements activesync_plugin_write, activesync_plugin_meeti
$status = $event['participants'][$uid]; $status = $event['participants'][$uid];
$quantity = $role = null; $quantity = $role = null;
calendar_so::split_status($status, $quantity, $role); calendar_so::split_status($status, $quantity, $role);
//ZLog::Write(LOGLEVEL_DEBUG, "old status for $uid is status=$status, quantity=$quantitiy, role=$role"); //ZLog::Write(LOGLEVEL_DEBUG, "old status for $uid is status=$status, quantity=$quantity, role=$role");
} }
// check if just email is an existing attendee (iOS returns email as name too!), keep it to keep status/role if not set // check if just email is an existing attendee (iOS returns email as name too!), keep it to keep status/role if not set
elseif ($event['id'] && (isset($event['participants'][$u='e'.$attendee->email]) || elseif ($event['id'] && (isset($event['participants'][$u='e'.$attendee->email]) ||
@ -744,14 +744,14 @@ class calendar_zpush implements activesync_plugin_write, activesync_plugin_meeti
{ {
$status = $event['participants'][$u]; $status = $event['participants'][$u];
calendar_so::split_status($status, $quantity, $role); calendar_so::split_status($status, $quantity, $role);
//ZLog::Write(LOGLEVEL_DEBUG, "old status for $uid as $u is status=$status, quantity=$quantitiy, role=$role"); //ZLog::Write(LOGLEVEL_DEBUG, "old status for $uid as $u is status=$status, quantity=$quantity, role=$role");
} }
else // set some defaults else // set some defaults
{ {
$status = 'U'; $status = 'U';
$quantitiy = 1; $quantity = 1;
$role = 'REQ-PARTICIPANT'; $role = 'REQ-PARTICIPANT';
//ZLog::Write(LOGLEVEL_DEBUG, "default status for $uid is status=$status, quantity=$quantitiy, role=$role"); //ZLog::Write(LOGLEVEL_DEBUG, "default status for $uid is status=$status, quantity=$quantity, role=$role");
} }
if ($role == 'CHAIR') $chair_set = true; // by role from existing participant if ($role == 'CHAIR') $chair_set = true; // by role from existing participant
@ -771,8 +771,8 @@ class calendar_zpush implements activesync_plugin_write, activesync_plugin_meeti
{ {
$role = $r; $role = $r;
} }
//ZLog::Write(LOGLEVEL_DEBUG, "-> status for $uid is status=$status ($s), quantity=$quantitiy, role=$role ($r)"); //ZLog::Write(LOGLEVEL_DEBUG, "-> status for $uid is status=$status ($s), quantity=$quantity, role=$role ($r)");
$participants[$uid] = calendar_so::combine_status($status,$quantitiy,$role); $participants[$uid] = calendar_so::combine_status($status,$quantity,$role);
} }
// if organizer is not already participant, add him as chair // if organizer is not already participant, add him as chair
if (($uid = $GLOBALS['egw']->accounts->name2id($message->organizeremail,'account_email')) && !isset($participants[$uid])) if (($uid = $GLOBALS['egw']->accounts->name2id($message->organizeremail,'account_email')) && !isset($participants[$uid]))
@ -867,7 +867,7 @@ class calendar_zpush implements activesync_plugin_write, activesync_plugin_meeti
{ {
foreach((array)$event['alarm'] as $alarm) foreach((array)$event['alarm'] as $alarm)
{ {
if (($alarm['all'] || $alarm['owner'] == $account) && $alarm['offset'] == 60*$message->reminder) if ((!empty($alarm['all']) || $alarm['owner'] == $account) && $alarm['offset'] == 60*$message->reminder)
{ {
$alarm = true; // alarm already exists --> do nothing $alarm = true; // alarm already exists --> do nothing
break; break;
@ -1041,7 +1041,7 @@ class calendar_zpush implements activesync_plugin_write, activesync_plugin_meeti
} }
else else
{ {
list($id,$recur_date) = explode(':',$id); list($id,$recur_date) = explode(':',$id)+[null,null];
if ($type != 'calendar' || !($event = $this->calendar->read($id,$recur_date,false,'server',$account))) if ($type != 'calendar' || !($event = $this->calendar->read($id,$recur_date,false,'server',$account)))
{ {
error_log(__METHOD__."('$folderid', $id, ...) read($id,null,false,'server',$account) returned false"); error_log(__METHOD__."('$folderid', $id, ...) read($id,null,false,'server',$account) returned false");
@ -1263,11 +1263,11 @@ class calendar_zpush implements activesync_plugin_write, activesync_plugin_meeti
//ZLog::Write(LOGLEVEL_DEBUG, __METHOD__."($id) message->exceptions=".array2string($message->exceptions)); //ZLog::Write(LOGLEVEL_DEBUG, __METHOD__."($id) message->exceptions=".array2string($message->exceptions));
} }
// only return alarms if in own calendar // only return alarms if in own calendar
if ($account == $GLOBALS['egw_info']['user']['account_id'] && $event['alarm']) if ($account == $GLOBALS['egw_info']['user']['account_id'] && !empty($event['alarm']))
{ {
foreach($event['alarm'] as $alarm) foreach($event['alarm'] as $alarm)
{ {
if ($alarm['all'] || $alarm['owner'] == $account) if (!empty($alarm['all']) || $alarm['owner'] == $account)
{ {
$message->reminder = $alarm['offset']/60; // is in minutes, not seconds as in EGw $message->reminder = $alarm['offset']/60; // is in minutes, not seconds as in EGw
break; // AS supports only one alarm! (we use the next/earliest one) break; // AS supports only one alarm! (we use the next/earliest one)

View File

@ -84,7 +84,7 @@ class mail_zpush implements activesync_plugin_write, activesync_plugin_sendmail,
*/ */
public function __construct(activesync_backend $backend) public function __construct(activesync_backend $backend)
{ {
if ($GLOBALS['egw_setup']) return; if (isset($GLOBALS['egw_setup'])) return;
//$this->debugLevel=2; //$this->debugLevel=2;
$this->backend = $backend; $this->backend = $backend;
@ -1069,18 +1069,18 @@ class mail_zpush implements activesync_plugin_write, activesync_plugin_sendmail,
$output->read = $headers["flags"]; $output->read = $headers["flags"];
$output->flag = new SyncMailFlags(); $output->flag = new SyncMailFlags();
if ($headers['flagged'] == 1) if (isset($headers['flagged']) && $headers['flagged'] == 1)
{ {
$output->flag->flagstatus = 2; $output->flag->flagstatus = 2;
//$output->flag->flagtype = "Flag for Follow up"; //$output->flag->flagtype = "Flag for Follow up";
} else { } else {
$output->flag->flagstatus = 0; $output->flag->flagstatus = 0;
} }
if ($headers['answered']) if (!empty($headers['answered']))
{ {
$output->lastverexecuted = AS_REPLYTOSENDER; $output->lastverexecuted = AS_REPLYTOSENDER;
} }
elseif ($headers['forwarded']) elseif (!empty($headers['forwarded']))
{ {
$output->lastverexecuted = AS_FORWARD; $output->lastverexecuted = AS_FORWARD;
} }
@ -1492,7 +1492,7 @@ class mail_zpush implements activesync_plugin_write, activesync_plugin_sendmail,
// 'seen' aka 'read' is the only flag we want to know about // 'seen' aka 'read' is the only flag we want to know about
$mess["flags"] = 0; $mess["flags"] = 0;
// outlook supports additional flags, set them to 0 // outlook supports additional flags, set them to 0
if($vars["seen"]) $mess["flags"] = 1; if(!empty($vars["seen"])) $mess["flags"] = 1;
if ($this->debugLevel>3) ZLog::Write(LOGLEVEL_DEBUG,__METHOD__.__LINE__.array2string($mess)); if ($this->debugLevel>3) ZLog::Write(LOGLEVEL_DEBUG,__METHOD__.__LINE__.array2string($mess));
$messagelist[$vars['uid']] = $mess; $messagelist[$vars['uid']] = $mess;
unset($mess); unset($mess);
@ -1518,9 +1518,9 @@ class mail_zpush implements activesync_plugin_write, activesync_plugin_sendmail,
static function doFlagsMod($headerFlags) static function doFlagsMod($headerFlags)
{ {
$flags = 'nnn'; $flags = 'nnn';
if ($headerFlags['flagged']) $flags[0] = 'f'; if (!empty($headerFlags['flagged'])) $flags[0] = 'f';
if ($headerFlags['answered']) $flags[1] = 'a'; if (!empty($headerFlags['answered'])) $flags[1] = 'a';
if ($headerFlags['forwarded']) $flags[2] = 'f'; if (!empty($headerFlags['forwarded'])) $flags[2] = 'f';
//ZLog::Write(LOGLEVEL_DEBUG, __METHOD__.'('.array2string($headerFlags).') returning '.array2string($flags)); //ZLog::Write(LOGLEVEL_DEBUG, __METHOD__.'('.array2string($headerFlags).') returning '.array2string($flags));
return $flags; return $flags;
} }