fixing a ton of PHP Warnings slowing us down in PHP 8.0

This commit is contained in:
Ralf Becker 2021-10-04 18:50:51 +02:00
parent 4458954af3
commit 1747a2236a
9 changed files with 103 additions and 111 deletions

View File

@ -483,7 +483,7 @@ class Contacts extends Contacts\Storage
'bday' => (int)$contact['bday'] ? DateTime::to($contact['bday'], true) : $contact['bday'], 'bday' => (int)$contact['bday'] ? DateTime::to($contact['bday'], true) : $contact['bday'],
))); )));
while ($fileas[0] == ':' || $fileas[0] == ',') while (!empty($fileas) && ($fileas[0] == ':' || $fileas[0] == ','))
{ {
$fileas = substr($fileas,2); $fileas = substr($fileas,2);
} }
@ -764,10 +764,10 @@ class Contacts extends Contacts\Storage
$data[$name] = DateTime::server2user($data[$name], $date_format); $data[$name] = DateTime::server2user($data[$name], $date_format);
} }
} }
$data['photo'] = $this->photo_src($data['id'],$data['jpegphoto'] || ($data['files'] & self::FILES_BIT_PHOTO), '', $data['etag']); $data['photo'] = $this->photo_src($data['id'],!empty($data['jpegphoto']) || (($data['files']??0) & self::FILES_BIT_PHOTO), '', $data['etag'] ?? null);
// set freebusy_uri for accounts // set freebusy_uri for accounts
if (!$data['freebusy_uri'] && !$data['owner'] && $data['account_id'] && !is_object($GLOBALS['egw_setup'])) if (empty($data['freebusy_uri']) && empty($data['owner']) && !empty($data['account_id']) && empty($GLOBALS['egw_setup']))
{ {
if ($fb_url || @is_dir(EGW_SERVER_ROOT.'/calendar/inc')) if ($fb_url || @is_dir(EGW_SERVER_ROOT.'/calendar/inc'))
{ {
@ -1686,7 +1686,7 @@ class Contacts extends Contacts\Storage
{ {
$result[$contact['id']] = $this->link_title($contact+(array)$cfs[$contact['id']]); $result[$contact['id']] = $this->link_title($contact+(array)$cfs[$contact['id']]);
// make sure to return a correctly quoted rfc822 address, if requested // make sure to return a correctly quoted rfc822 address, if requested
if ($options['type'] === 'email') if (isset($options['type']) && $options['type'] === 'email')
{ {
$args = explode('@', $contact['email']); $args = explode('@', $contact['email']);
$args[] = $result[$contact['id']]; $args[] = $result[$contact['id']];

View File

@ -114,7 +114,7 @@ class Widget
// Update content? // Update content?
if(self::$cont == null) if(self::$cont == null)
self::$cont = is_array(self::$request->content) ? self::$request->content : array(); self::$cont = is_array(self::$request->content) ? self::$request->content : array();
if($this->id && is_array(self::$cont[$this->id])) if($this->id && is_array(self::$cont[$this->id] ?? null))
{ {
$old_cont = self::$cont; $old_cont = self::$cont;
self::$cont = self::$cont[$this->id]; self::$cont = self::$cont[$this->id];
@ -147,7 +147,7 @@ class Widget
} }
// Reset content as we leave // Reset content as we leave
if($old_cont) { if ($old_cont ?? null) {
self::$cont = $old_cont; self::$cont = $old_cont;
} }
} }
@ -206,7 +206,7 @@ class Widget
$template = $this; $template = $this;
while($reader->moveToNextAttribute()) while($reader->moveToNextAttribute())
{ {
if ($reader->name != 'id' && $template->attr[$reader->name] !== $reader->value) if ($reader->name != 'id' && isset($template->attr[$reader->name]) && $template->attr[$reader->name] !== $reader->value)
{ {
if (!$cloned) if (!$cloned)
{ {
@ -218,7 +218,7 @@ class Widget
$template->attrs[$reader->name] = $value = $reader->value; $template->attrs[$reader->name] = $value = $reader->value;
// expand attributes values, otherwise eg. validation can not use attrs referencing to content // expand attributes values, otherwise eg. validation can not use attrs referencing to content
if ($value[0] == '@' || strpos($value, '$cont') !== false) if (!empty($value) && ($value[0] === '@' || strpos($value, '$cont') !== false))
{ {
$value = self::expand_name($value, null, null, null, null, $value = self::expand_name($value, null, null, null, null,
isset(self::$cont) ? self::$cont : self::$request->content); isset(self::$cont) ? self::$cont : self::$request->content);
@ -237,7 +237,7 @@ class Widget
} }
// Add in anything in the modification array // Add in anything in the modification array
if(is_array(self::$request->modifications[$this->id])) if (is_array(self::$request->modifications[$this->id] ?? null))
{ {
$this->attrs = array_merge($this->attrs,self::$request->modifications[$this->id]); $this->attrs = array_merge($this->attrs,self::$request->modifications[$this->id]);
} }
@ -426,7 +426,7 @@ class Widget
class_exists($class_name = $basetype.'_etemplate_widget')))) class_exists($class_name = $basetype.'_etemplate_widget'))))
{ {
// Try for base type, it's probably better than the root // Try for base type, it's probably better than the root
if(self::$widget_registry[$basetype] && self::$widget_registry[$basetype] != $class_name) if(isset(self::$widget_registry[$basetype]) && self::$widget_registry[$basetype] !== $class_name)
{ {
$class_name = self::$widget_registry[$basetype]; $class_name = self::$widget_registry[$basetype];
} }
@ -535,12 +535,12 @@ class Widget
// maintain $expand array name-expansion // maintain $expand array name-expansion
$cname = $params[0]; $cname = $params[0];
$expand =& $params[1]; $expand =& $params[1];
if ($expand['cname'] && $expand['cname'] !== $cname) if (isset($expand['cname']) && $expand['cname'] !== $cname)
{ {
$expand['cont'] =& self::get_array(self::$request->content, $cname); $expand['cont'] =& self::get_array(self::$request->content, $cname);
$expand['cname'] = $cname; $expand['cname'] = $cname;
} }
if ($respect_disabled && ($disabled = $this->attrs['disabled'] && self::check_disabled($this->attrs['disabled'], $expand))) if ($respect_disabled && ($disabled = isset($this->attrs['disabled']) && self::check_disabled($this->attrs['disabled'], $expand)))
{ {
//error_log(__METHOD__."('$method_name', ".array2string($params).', '.array2string($respect_disabled).") $this disabled='{$this->attrs['disabled']}'=".array2string($disabled).": NOT running"); //error_log(__METHOD__."('$method_name', ".array2string($params).', '.array2string($respect_disabled).") $this disabled='{$this->attrs['disabled']}'=".array2string($disabled).": NOT running");
return; return;
@ -593,13 +593,13 @@ class Widget
foreach($attrs as $name => &$value) foreach($attrs as $name => &$value)
{ {
if(!is_string($value)) continue; if(!is_string($value)) continue;
$value = self::expand_name($value,$expand['c'], $expand['row'], $expand['c_'], $expand['row_'], $expand['cont']); $value = self::expand_name($value, $expand['c'] ?? null, $expand['row'] ?? null, $expand['c_'] ?? null, $expand['row_'] ?? null, $expand['cont'] ?? []);
} }
if($attrs['attributes']) if (!empty($attrs['attributes']))
{ {
$attrs = array_merge($attrs, $attrs['attributes']); $attrs = array_merge($attrs, $attrs['attributes']);
} }
if(strpos($child->attrs['type'], '@') !== false || strpos($child->attrs['type'], '$') !== false) if (!empty($child->attrs['type']) && (strpos($child->attrs['type'], '@') !== false || strpos($child->attrs['type'], '$') !== false))
{ {
$type = self::expand_name($child->attrs['type'],$expand['c'], $expand['row'], $expand['c_'], $expand['row_'], $expand['cont']); $type = self::expand_name($child->attrs['type'],$expand['c'], $expand['row'], $expand['c_'], $expand['row_'], $expand['cont']);
$id = self::expand_name($child->id,$expand['c'], $expand['row'], $expand['c_'], $expand['row_'], $expand['cont']); $id = self::expand_name($child->id,$expand['c'], $expand['row'], $expand['c_'], $expand['row_'], $expand['cont']);
@ -677,7 +677,7 @@ class Widget
*/ */
protected static function expand_name($name,$c,$row,$c_=0,$row_=0,$cont=array()) protected static function expand_name($name,$c,$row,$c_=0,$row_=0,$cont=array())
{ {
$is_index_in_content = $name[0] == '@'; $is_index_in_content = !empty($name) && $name[0] == '@';
if (($pos_var=strpos($name,'$')) !== false) if (($pos_var=strpos($name,'$')) !== false)
{ {
if (!$cont) if (!$cont)
@ -687,8 +687,8 @@ class Widget
if (!is_numeric($c)) $c = self::chrs2num($c); if (!is_numeric($c)) $c = self::chrs2num($c);
$col = self::num2chrs($c-1); // $c-1 to get: 0:'@', 1:'A', ... $col = self::num2chrs($c-1); // $c-1 to get: 0:'@', 1:'A', ...
if (is_numeric($c_)) $col_ = self::num2chrs($c_-1); if (is_numeric($c_)) $col_ = self::num2chrs($c_-1);
$row_cont = $cont[$row]; $row_cont = $cont[$row] ?? null;
$col_row_cont = $cont[$col.$row]; $col_row_cont = $cont[$col.$row] ?? null;
try { try {
eval('$name = "' . str_replace('"', '\\"', $name) . '";'); eval('$name = "' . str_replace('"', '\\"', $name) . '";');
@ -726,9 +726,9 @@ class Widget
*/ */
static function chrs2num($chrs) static function chrs2num($chrs)
{ {
if (empty($chrs)) return 0;
$min = ord('A'); $min = ord('A');
$max = ord('Z') - $min + 1; $max = ord('Z') - $min + 1;
$num = 1+ord($chrs[0])-$min; $num = 1+ord($chrs[0])-$min;
if (strlen($chrs) > 1) if (strlen($chrs) > 1)
{ {
@ -751,7 +751,7 @@ class Widget
if ($num >= $max) if ($num >= $max)
{ {
$chrs = chr(($num / $max) + $min - 1); $chrs = chr(($num / $max) + $min - 1);
} } else $chrs = '';
$chrs .= chr(($num % $max) + $min); $chrs .= chr(($num % $max) + $min);
return $chrs; return $chrs;
@ -829,7 +829,7 @@ class Widget
{ {
if ($expand && !empty($name)) if ($expand && !empty($name))
{ {
$name = self::expand_name($name, $expand['c'], $expand['row'], $expand['c_'], $expand['row_'], $expand['cont']); $name = self::expand_name($name, $expand['c'] ?? null, $expand['row'] ?? null, $expand['c_'] ?? null, $expand['row_'] ?? null, $expand['cont'] ?? []);
} }
if (count($name_parts = explode('[', $name, 2)) > 1) if (count($name_parts = explode('[', $name, 2)) > 1)
{ {

View File

@ -186,21 +186,21 @@ class Nextmatch extends Etemplate\Widget
if (true) $value =& self::get_array(self::$request->content, $form_name, true); if (true) $value =& self::get_array(self::$request->content, $form_name, true);
// Add favorite here so app doesn't save it in the session // Add favorite here so app doesn't save it in the session
if($_GET['favorite']) if (empty($_GET['favorite']))
{ {
$send_value['favorite'] = $safe_name; $send_value['favorite'] = $safe_name;
} }
if (true) $value = $send_value; if (true) $value = $send_value;
$value['total'] = $total; $value['total'] = $total ?? null;
// Send categories // Send categories
if(!$value['no_cat'] && !$value['cat_is_select']) if(empty($value['no_cat']) && empty($value['cat_is_select']))
{ {
$cat_app = $value['cat_app'] ? $value['cat_app'] : $GLOBALS['egw_info']['flags']['current_app']; $cat_app = $value['cat_app'] ?? $GLOBALS['egw_info']['flags']['current_app'] ?? '';
$value['options-cat_id'] = self::$request->sel_options['cat_id'] ? self::$request->sel_options['cat_id'] : array(); $value['options-cat_id'] = self::$request->sel_options['cat_id'] ?? [];
// Add 'All', if not already there // Add 'All', if not already there
if(!$value['options-cat_id'][''] && !$value['options-cat_id'][0]) if(empty($value['options-cat_id']['']) && empty($value['options-cat_id'][0]))
{ {
$value['options-cat_id'][''] = lang('All categories'); $value['options-cat_id'][''] = lang('All categories');
} }
@ -220,7 +220,7 @@ class Nextmatch extends Etemplate\Widget
if(strpos($name, 'options-') !== false && $_value) if(strpos($name, 'options-') !== false && $_value)
{ {
$select = substr($name, 8); $select = substr($name, 8);
if(!self::$request->sel_options[$select]) if (empty(self::$request->sel_options[$select]))
{ {
self::$request->sel_options[$select] = array(); self::$request->sel_options[$select] = array();
} }
@ -231,21 +231,21 @@ class Nextmatch extends Etemplate\Widget
//unset($value[$name]); //unset($value[$name]);
} }
} }
if($value['rows']['sel_options']) if (!empty($value['rows']['sel_options']))
{ {
self::$request->sel_options = array_merge(self::$request->sel_options,$value['rows']['sel_options']); self::$request->sel_options = array_merge(self::$request->sel_options,$value['rows']['sel_options']);
unset($value['rows']['sel_options']); unset($value['rows']['sel_options']);
} }
// If column selection preference is forced, set a flag to turn off UI // If column selection preference is forced, set a flag to turn off UI
$pref_name = 'nextmatch-' . (isset($value['columnselection_pref']) ? $value['columnselection_pref'] : $this->attrs['template']); $pref_name = 'nextmatch-' . ($value['columnselection_pref'] ?? $this->attrs['template'] ?? '');
$value['no_columnselection'] = $value['no_columnselection'] || ( $value['no_columnselection'] = !empty($value['no_columnselection']) || (
$GLOBALS['egw']->preferences->forced[$app][$pref_name] && !empty($GLOBALS['egw']->preferences->forced[$app][$pref_name]) &&
// Need to check admin too, or it will be impossible to turn off // Need to check admin too, or it will be impossible to turn off
!$GLOBALS['egw_info']['user']['apps']['admin'] empty($GLOBALS['egw_info']['user']['apps']['admin'])
); );
// Use this flag to indicate to the admin that columns are forced (and that's why they can't change) // Use this flag to indicate to the admin that columns are forced (and that's why they can't change)
$value['columns_forced'] = (boolean)$GLOBALS['egw']->preferences->forced[$app][$pref_name]; $value['columns_forced'] = !empty($GLOBALS['egw']->preferences->forced[$app][$pref_name]);
// todo: no need to store rows in request, it's enought to send them to client // todo: no need to store rows in request, it's enought to send them to client
@ -256,7 +256,7 @@ class Nextmatch extends Etemplate\Widget
if (isset($value['actions']) && !isset($value['actions'][0])) if (isset($value['actions']) && !isset($value['actions'][0]))
{ {
$value['action_links'] = array(); $value['action_links'] = array();
$template_name = isset($value['template']) ? $value['template'] : ($this->attrs['template'] ?: $this->attrs['options']); $template_name = isset($value['template']) ? $value['template'] : ($this->attrs['template'] ?? $this->attrs['options'] ?? null);
if (!is_array($value['action_links'])) $value['action_links'] = array(); if (!is_array($value['action_links'])) $value['action_links'] = array();
$value['actions'] = self::egw_actions($value['actions'], $template_name, '', $value['action_links']); $value['actions'] = self::egw_actions($value['actions'], $template_name, '', $value['action_links']);
} }
@ -375,8 +375,8 @@ class Nextmatch extends Etemplate\Widget
$GLOBALS['egw']->session->commit_session(); $GLOBALS['egw']->session->commit_session();
$row_id = isset($value['row_id']) ? $value['row_id'] : 'id'; $row_id = $value['row_id'] ?? 'id';
$row_modified = $value['row_modified']; $row_modified = $value['row_modified'] ?? null;
foreach($rows as $n => $row) foreach($rows as $n => $row)
{ {
@ -384,12 +384,12 @@ class Nextmatch extends Etemplate\Widget
if (is_int($n) && $row) if (is_int($n) && $row)
{ {
if (!isset($row[$row_id])) unset($row_id); // unset default row_id of 'id', if not used if (!isset($row[$row_id])) unset($row_id); // unset default row_id of 'id', if not used
if (!isset($row[$row_modified])) unset($row_modified); if (empty($row[$row_modified])) unset($row_modified);
$id = $row_id ? $row[$row_id] : $n; $id = $row_id ? $row[$row_id] : $n;
$result['order'][] = $id; $result['order'][] = $id;
$modified = $row[$row_modified]; $modified = $row[$row_modified] ?? null;
if (isset($modified) && !(is_int($modified) || is_string($modified) && is_numeric($modified))) if (isset($modified) && !(is_int($modified) || is_string($modified) && is_numeric($modified)))
{ {
$modified = Api\DateTime::to(str_replace('Z', '', $modified), 'ts'); $modified = Api\DateTime::to(str_replace('Z', '', $modified), 'ts');
@ -497,10 +497,10 @@ class Nextmatch extends Etemplate\Widget
{ {
continue; continue;
} }
if($value_in[$key] == $value[$key]) continue; if (($value_in[$key]??null) == ($value[$key]??null)) continue;
// These keys we don't send row data back, as they cause a partial reload // These keys we don't send row data back, as they cause a partial reload
if(in_array($key, array('template'))) $no_rows = true; if (in_array($key, array('template'))) $no_rows = true;
// Actions still need extra handling // Actions still need extra handling
if($key == 'actions' && !isset($value['actions'][0])) if($key == 'actions' && !isset($value['actions'][0]))
@ -626,7 +626,7 @@ class Nextmatch extends Etemplate\Widget
), array(), true); // true = no permission check ), array(), true); // true = no permission check
// if we have a nextmatch widget, find the repeating row // if we have a nextmatch widget, find the repeating row
if ($widget && $widget->attrs['template']) if ($widget && !empty($widget->attrs['template']))
{ {
$row_template = $widget->getElementById($widget->attrs['template']); $row_template = $widget->getElementById($widget->attrs['template']);
if(!$row_template) if(!$row_template)
@ -642,12 +642,12 @@ class Nextmatch extends Etemplate\Widget
if($child->type == 'row') $repeating_row = $child; if($child->type == 'row') $repeating_row = $child;
} }
} }
// otherwise we might get stoped by max_excutiontime // otherwise, we might get stopped by max_excutiontime
if ($total > 200) @set_time_limit(0); if ($total > 200) @set_time_limit(0);
$is_parent = $value['is_parent']; $is_parent = $value['is_parent'] ?? null;
$is_parent_value = $value['is_parent_value']; $is_parent_value = $value['is_parent_value'] ?? null;
$parent_id = $value['parent_id']; $parent_id = $value['parent_id'] ?? null;
// remove empty rows required by old etemplate to compensate for header rows // remove empty rows required by old etemplate to compensate for header rows
$first = $total ? null : 0; $first = $total ? null : 0;
@ -658,14 +658,14 @@ class Nextmatch extends Etemplate\Widget
{ {
if (is_null($first)) $first = $n; if (is_null($first)) $first = $n;
if ($row[$is_parent]) // if app supports parent_id / hierarchy, set parent_id and is_parent if (!empty($row[$is_parent])) // if app supports parent_id / hierarchy, set parent_id and is_parent
{ {
$row['is_parent'] = isset($is_parent_value) ? $row['is_parent'] = isset($is_parent_value) ?
$row[$is_parent] == $is_parent_value : (boolean)$row[$is_parent]; $row[$is_parent] == $is_parent_value : (boolean)$row[$is_parent];
$row['parent_id'] = $row[$parent_id]; // seems NOT used on client! $row['parent_id'] = $row[$parent_id] ?? null; // seems NOT used on client!
} }
// run beforeSendToClient methods of widgets in row on row-data // run beforeSendToClient methods of widgets in row on row-data
if($repeating_row) if (!empty($repeating_row))
{ {
// Change anything by widget for each row ($row set to 1) // Change anything by widget for each row ($row set to 1)
$_row = array(1 => &$row); $_row = array(1 => &$row);
@ -894,7 +894,7 @@ class Nextmatch extends Etemplate\Widget
if ($default_attrs) $action += $default_attrs; if ($default_attrs) $action += $default_attrs;
// Add 'Select All' after first group // Add 'Select All' after first group
if ($first_level && $group !== false && $action['group'] != $group && !$egw_actions[$prefix.'select_all']) if ($first_level && $group !== false && $action['group'] != $group && empty($egw_actions[$prefix.'select_all']))
{ {
$egw_actions[$prefix.'select_all'] = array( $egw_actions[$prefix.'select_all'] = array(
@ -911,7 +911,7 @@ class Nextmatch extends Etemplate\Widget
); );
$action_links[] = $prefix.'select_all'; $action_links[] = $prefix.'select_all';
} }
$group = $action['group']; $group = $action['group'] ?? 0;
if (!$first_level && $n == $max_length && count($actions) > $max_length) if (!$first_level && $n == $max_length && count($actions) > $max_length)
{ {
@ -941,29 +941,29 @@ class Nextmatch extends Etemplate\Widget
} }
// add all first level popup actions plus ones with enabled = 'javaScript:...' to action_links // add all first level popup actions plus ones with enabled = 'javaScript:...' to action_links
if ((!isset($action['type']) || in_array($action['type'],array('popup','drag','drop'))) && // popup is the default if ((!isset($action['type']) || in_array($action['type'], array('popup','drag','drop'))) && // popup is the default
($first_level || substr($action['enabled'],0,11) == 'javaScript:')) ($first_level || isset($action['enabled']) && substr($action['enabled'],0,11) === 'javaScript:'))
{ {
$action_links[] = $prefix.$id; $action_links[] = $prefix.$id;
} }
// add sub-menues // add sub-menus
if ($action['children']) if (!empty($action['children']))
{ {
static $inherit_attrs = array('url','popup','nm_action','onExecute','type','egw_open','allowOnMultiple','confirm','confirm_multiple'); static $inherit_attrs = array('url','popup','nm_action','onExecute','type','egw_open','allowOnMultiple','confirm','confirm_multiple');
$inherit_keys = array_flip($inherit_attrs); $inherit_keys = array_flip($inherit_attrs);
$action['children'] = self::egw_actions($action['children'], $template_name, $action['prefix'], $action_links, $max_length, $action['children'] = self::egw_actions($action['children'], $template_name, $action['prefix'] ?? '', $action_links, $max_length,
array_intersect_key($action, $inherit_keys)); array_intersect_key($action, $inherit_keys));
unset($action['prefix']); unset($action['prefix']);
// Allow default actions to keep their onExecute // Allow default actions to keep their onExecute
if($action['default']) unset($inherit_keys['onExecute']); if (!empty($action['default'])) unset($inherit_keys['onExecute']);
$action = array_diff_key($action, $inherit_keys); $action = array_diff_key($action, $inherit_keys);
} }
// link or popup action // link or popup action
if ($action['url']) if (!empty($action['url']))
{ {
$action['url'] = Api\Framework::link('/index.php',str_replace('$action',$id,$action['url'])); $action['url'] = Api\Framework::link('/index.php',str_replace('$action',$id,$action['url']));
if ($action['popup']) if ($action['popup'])
@ -984,7 +984,7 @@ class Nextmatch extends Etemplate\Widget
} }
} }
} }
if ($action['egw_open']) if (!empty($action['egw_open']))
{ {
$action['data']['nm_action'] = 'egw_open'; $action['data']['nm_action'] = 'egw_open';
} }
@ -997,10 +997,10 @@ class Nextmatch extends Etemplate\Widget
// Make sure select all is in a group by itself // Make sure select all is in a group by itself
foreach($egw_actions as $id => &$_action) foreach($egw_actions as $id => &$_action)
{ {
if($id == $prefix . 'select_all') continue; if ($id == $prefix . 'select_all') continue;
if($_action['group'] >= $egw_actions[$prefix.'select_all']['group'] ) if (($_action['group'] ?? 0) >= (($egw_actions[$prefix.'select_all'] ?? [])['group'] ?? 0))
{ {
$egw_actions[$id]['group']+=1; $egw_actions[$id]['group'] = ($egw_actions[$id]['group'] ?? 0) + 1;
} }
} }
//echo "egw_actions="; _debug_array($egw_actions); //echo "egw_actions="; _debug_array($egw_actions);
@ -1044,7 +1044,7 @@ class Nextmatch extends Etemplate\Widget
'no_lang' => true, 'no_lang' => true,
); );
// add category icon // add category icon
if (is_array($cat['data']) && $cat['data']['icon'] && file_exists(EGW_SERVER_ROOT.self::ICON_PATH.'/'.basename($cat['data']['icon']))) if (is_array($cat['data']) && !empty($cat['data']['icon']) && file_exists(EGW_SERVER_ROOT.self::ICON_PATH.'/'.basename($cat['data']['icon'])))
{ {
$cat_actions[$cat['id']]['iconUrl'] = $GLOBALS['egw_info']['server']['webserver_url'].self::ICON_PATH.'/'.$cat['data']['icon']; $cat_actions[$cat['id']]['iconUrl'] = $GLOBALS['egw_info']['server']['webserver_url'].self::ICON_PATH.'/'.$cat['data']['icon'];
} }
@ -1083,7 +1083,7 @@ class Nextmatch extends Etemplate\Widget
'prefix' => $prefix, 'prefix' => $prefix,
); );
// add category icon // add category icon
if ($cat['data']['icon'] && file_exists(EGW_SERVER_ROOT.self::ICON_PATH.'/'.basename($cat['data']['icon']))) if (!empty($cat['data']['icon']) && file_exists(EGW_SERVER_ROOT.self::ICON_PATH.'/'.basename($cat['data']['icon'])))
{ {
$cat_actions[$cat['id']]['iconUrl'] = $GLOBALS['egw_info']['server']['webserver_url'].self::ICON_PATH.'/'.$cat['data']['icon']; $cat_actions[$cat['id']]['iconUrl'] = $GLOBALS['egw_info']['server']['webserver_url'].self::ICON_PATH.'/'.$cat['data']['icon'];
} }
@ -1222,7 +1222,7 @@ class Nextmatch extends Etemplate\Widget
// Run on all the sub-templates // Run on all the sub-templates
foreach(array('template', 'header_left', 'header_right', 'header_row') as $sub_template) foreach(array('template', 'header_left', 'header_right', 'header_row') as $sub_template)
{ {
if($this->attrs[$sub_template]) if (!empty($this->attrs[$sub_template]))
{ {
$row_template = Template::instance($this->attrs[$sub_template]); $row_template = Template::instance($this->attrs[$sub_template]);
$row_template->run($method_name, $params, $respect_disabled); $row_template->run($method_name, $params, $respect_disabled);
@ -1230,14 +1230,6 @@ class Nextmatch extends Etemplate\Widget
} }
} }
$params[0] = $old_param0; $params[0] = $old_param0;
// Prevent troublesome keys from breaking the nextmatch
// TODO: Figure out where these come from
foreach(array('$row','${row}', '$', '0','1','2') as $key)
{
if(is_array(self::$request->content[$cname])) unset(self::$request->content[$cname][$key]);
if(is_array(self::$request->preserve[$cname])) unset(self::$request->preserve[$cname][$key]);
}
} }
/** /**

View File

@ -196,7 +196,7 @@ class Preferences
foreach((array)$ids as $id) foreach((array)$ids as $id)
{ {
// if prefs are not returned, null or not an array, read them from db // if prefs are not returned, null or not an array, read them from db
if (!isset($prefs[$id]) && !is_array($prefs[$id])) $db_read[] = $id; if (!isset($prefs[$id]) || !is_array($prefs[$id])) $db_read[] = $id;
} }
if ($db_read) if ($db_read)
{ {
@ -237,7 +237,7 @@ class Preferences
$replace = $with = array(); $replace = $with = array();
foreach($vals as $key => $val) foreach($vals as $key => $val)
{ {
if ($this->debug) error_log(__METHOD__." replacing \$\$$key\$\$ with $val "); if (!empty($this->debug)) error_log(__METHOD__." replacing \$\$$key\$\$ with $val ");
$replace[] = '$$'.$key.'$$'; $replace[] = '$$'.$key.'$$';
$with[] = $val; $with[] = $val;
} }
@ -275,7 +275,7 @@ class Preferences
*/ */
function standard_substitutes() function standard_substitutes()
{ {
if ($this->debug) error_log(__METHOD__." is called "); if (!empty($this->debug)) error_log(__METHOD__." is called ");
if (!is_array(@$GLOBALS['egw_info']['user']['preferences'])) if (!is_array(@$GLOBALS['egw_info']['user']['preferences']))
{ {
$GLOBALS['egw_info']['user']['preferences'] = $this->data; // else no lang() $GLOBALS['egw_info']['user']['preferences'] = $this->data; // else no lang()
@ -301,7 +301,7 @@ class Preferences
'email' => lang('email-address of the user, eg. "%1"',$this->values['email']), 'email' => lang('email-address of the user, eg. "%1"',$this->values['email']),
'date' => lang('todays date, eg. "%1"',$this->values['date']), 'date' => lang('todays date, eg. "%1"',$this->values['date']),
); );
if ($this->debug) error_log(__METHOD__.print_r($this->vars,true)); if (!empty($this->debug)) error_log(__METHOD__.print_r($this->vars,true));
// do the substituetion in the effective prefs (data) // do the substituetion in the effective prefs (data)
// //
foreach($this->data as $app => $data) foreach($this->data as $app => $data)
@ -421,7 +421,7 @@ class Preferences
default: default:
foreach($values as $app => $vals) foreach($values as $app => $vals)
{ {
$this->group[$app] = (array)$vals + (array)$this->group[$app]; $this->group[$app] = (array)$vals + ($this->group[$app] ?? []);
} }
break; break;
} }
@ -474,7 +474,7 @@ class Preferences
} }
// setup the standard substitutes and substitutes the data in $this->data // setup the standard substitutes and substitutes the data in $this->data
// //
if ($GLOBALS['egw_info']['flags']['load_translations'] !== false) if (!empty($GLOBALS['egw_info']['flags']['load_translations']))
{ {
$this->standard_substitutes(); $this->standard_substitutes();
} }

View File

@ -1363,7 +1363,7 @@ class Session
return false; return false;
} }
if ($GLOBALS['egw_info']['server']['sessions_checkip']) if (!empty($GLOBALS['egw_info']['server']['sessions_checkip']))
{ {
if (strtoupper(substr(PHP_OS,0,3)) != 'WIN' && (!$GLOBALS['egw_info']['user']['session_ip'] || if (strtoupper(substr(PHP_OS,0,3)) != 'WIN' && (!$GLOBALS['egw_info']['user']['session_ip'] ||
$GLOBALS['egw_info']['user']['session_ip'] != $this->getuser_ip())) $GLOBALS['egw_info']['user']['session_ip'] != $this->getuser_ip()))
@ -1538,7 +1538,7 @@ class Session
} }
// check if the url already contains a query and ensure that vars is an array and all strings are in extravars // check if the url already contains a query and ensure that vars is an array and all strings are in extravars
list($ret_url,$othervars) = explode('?', $url, 2); if (strpos($ret_url=$url, '?') !== false) list($ret_url,$othervars) = explode('?', $url, 2);
if ($extravars && is_array($extravars)) if ($extravars && is_array($extravars))
{ {
$vars += $extravars; $vars += $extravars;
@ -1720,7 +1720,7 @@ class Session
{ {
if (PHP_SAPI === "cli") return; // gives warnings and has no benefit if (PHP_SAPI === "cli") return; // gives warnings and has no benefit
if ($GLOBALS['egw_info']['server']['cookiedomain']) if (!empty($GLOBALS['egw_info']['server']['cookiedomain']))
{ {
// Admin set domain, eg. .domain.com to allow egw.domain.com and www.domain.com // Admin set domain, eg. .domain.com to allow egw.domain.com and www.domain.com
self::$cookie_domain = $GLOBALS['egw_info']['server']['cookiedomain']; self::$cookie_domain = $GLOBALS['egw_info']['server']['cookiedomain'];
@ -1741,7 +1741,7 @@ class Session
// setcookie dont likes domains without dots, leaving it empty, gets setcookie to fill the domain in // setcookie dont likes domains without dots, leaving it empty, gets setcookie to fill the domain in
self::$cookie_domain = ''; self::$cookie_domain = '';
} }
if (!$GLOBALS['egw_info']['server']['cookiepath'] || if (empty($GLOBALS['egw_info']['server']['cookiepath']) ||
!(self::$cookie_path = parse_url($GLOBALS['egw_info']['server']['webserver_url'],PHP_URL_PATH))) !(self::$cookie_path = parse_url($GLOBALS['egw_info']['server']['webserver_url'],PHP_URL_PATH)))
{ {
self::$cookie_path = '/'; self::$cookie_path = '/';
@ -1851,7 +1851,7 @@ class Session
private function update_dla($update_access_log=false) private function update_dla($update_access_log=false)
{ {
// This way XML-RPC users aren't always listed as xmlrpc.php // This way XML-RPC users aren't always listed as xmlrpc.php
if (isset($_GET['menuaction'])) if (isset($_GET['menuaction']) && strpos($_GET['menuaction'], '.ajax_exec.template.') !== false)
{ {
list(, $action) = explode('.ajax_exec.template.', $_GET['menuaction']); list(, $action) = explode('.ajax_exec.template.', $_GET['menuaction']);

View File

@ -349,8 +349,8 @@ class Vfs extends Vfs\Base
{ {
//error_log(__METHOD__."(".print_r($base,true).",".print_r($options,true).",".print_r($exec,true).",".print_r($exec_params,true).")\n"); //error_log(__METHOD__."(".print_r($base,true).",".print_r($options,true).",".print_r($exec,true).",".print_r($exec_params,true).")\n");
$type = $options['type']; // 'd', 'f' or 'F' $type = $options['type'] ?? null; // 'd', 'f' or 'F'
$dirs_last = $options['depth']; // put content of dirs before the dir itself $dirs_last = !empty($options['depth']); // put content of dirs before the dir itself
// show dirs on top by default, if no recursive listing (allways disabled if $type specified, as unnecessary) // show dirs on top by default, if no recursive listing (allways disabled if $type specified, as unnecessary)
$dirsontop = !$type && (isset($options['dirsontop']) ? (boolean)$options['dirsontop'] : isset($options['maxdepth'])&&$options['maxdepth']>0); $dirsontop = !$type && (isset($options['dirsontop']) ? (boolean)$options['dirsontop'] : isset($options['maxdepth'])&&$options['maxdepth']>0);
if ($dirsontop) $options['need_mime'] = true; // otherwise dirsontop can NOT work if ($dirsontop) $options['need_mime'] = true; // otherwise dirsontop can NOT work
@ -386,7 +386,7 @@ class Vfs extends Vfs\Base
$options['gid'] = 0; $options['gid'] = 0;
} }
} }
if ($options['order'] == 'mime') if (isset($options['order']) && $options['order'] === 'mime')
{ {
$options['need_mime'] = true; // we need to return the mime colum $options['need_mime'] = true; // we need to return the mime colum
} }
@ -403,7 +403,7 @@ class Vfs extends Vfs\Base
], ],
]); ]);
$url = $options['url']; $url = $options['url'] ?? null;
if (!is_array($base)) if (!is_array($base))
{ {
@ -422,7 +422,7 @@ class Vfs extends Vfs\Base
$options['remove'] = count($base) == 1 ? count(explode('/',$path))-3+(int)(substr($path,-1)!='/') : 0; $options['remove'] = count($base) == 1 ? count(explode('/',$path))-3+(int)(substr($path,-1)!='/') : 0;
} }
$is_dir = is_dir($path); $is_dir = is_dir($path);
if ((int)$options['mindepth'] == 0 && (!$dirs_last || !$is_dir)) if (empty($options['mindepth']) && (!$dirs_last || !$is_dir))
{ {
self::_check_add($options,$path,$result); self::_check_add($options,$path,$result);
} }
@ -434,11 +434,11 @@ class Vfs extends Vfs\Base
{ {
if ($fname == '.' || $fname == '..') continue; // ignore current and parent dir! if ($fname == '.' || $fname == '..') continue; // ignore current and parent dir!
if (self::is_hidden($fname, $options['show-deleted']) && !$options['hidden']) continue; // ignore hidden files if (self::is_hidden($fname, $options['show-deleted'] ?? false) && !$options['hidden']) continue; // ignore hidden files
$file = self::concat($path, $fname); $file = self::concat($path, $fname);
if ((int)$options['mindepth'] <= 1) if (!isset($options['mindepth']) || (int)$options['mindepth'] <= 1)
{ {
self::_check_add($options,$file,$result); self::_check_add($options,$file,$result);
} }
@ -459,7 +459,7 @@ class Vfs extends Vfs\Base
} }
closedir($dir); closedir($dir);
} }
if ($is_dir && (int)$options['mindepth'] == 0 && $dirs_last) if ($is_dir && empty($options['mindepth']) && $dirs_last)
{ {
self::_check_add($options,$path,$result); self::_check_add($options,$path,$result);
} }
@ -569,9 +569,9 @@ class Vfs extends Vfs\Base
*/ */
private static function _check_add($options,$path,&$result) private static function _check_add($options,$path,&$result)
{ {
$type = $options['type']; // 'd' or 'f' $type = $options['type'] ?? null; // 'd' or 'f'
if ($options['url']) if (!empty($options['url']))
{ {
if (($stat = @lstat($path))) if (($stat = @lstat($path)))
{ {
@ -595,7 +595,7 @@ class Vfs extends Vfs\Base
$stat['path'] = self::parse_url($path,PHP_URL_PATH); $stat['path'] = self::parse_url($path,PHP_URL_PATH);
$stat['name'] = $options['remove'] > 0 ? implode('/',array_slice(explode('/',$stat['path']),$options['remove'])) : self::basename($path); $stat['name'] = $options['remove'] > 0 ? implode('/',array_slice(explode('/',$stat['path']),$options['remove'])) : self::basename($path);
if ($options['mime'] || $options['need_mime']) if (!empty($options['mime']) || !empty($options['need_mime']))
{ {
$stat['mime'] = self::mime_content_type($path); $stat['mime'] = self::mime_content_type($path);
} }
@ -642,7 +642,7 @@ class Vfs extends Vfs\Base
return; // not create/modified in the spezified time return; // not create/modified in the spezified time
} }
// do we return url or just vfs pathes // do we return url or just vfs pathes
if (!$options['url']) if (empty($options['url']))
{ {
$path = self::parse_url($path,PHP_URL_PATH); $path = self::parse_url($path,PHP_URL_PATH);
} }
@ -1227,7 +1227,7 @@ class Vfs extends Vfs\Base
} }
} }
} }
return $component >= 0 ? $result[$component2str[$component]] : $result; return $component >= 0 ? ($result[$component2str[$component]] ?? null) : $result;
} }
/** /**
@ -1240,7 +1240,7 @@ class Vfs extends Vfs\Base
*/ */
static function dirname($_url) static function dirname($_url)
{ {
list($url,$query) = explode('?',$_url,2); // strip the query first, as it can contain slashes if (strpos($url=$_url, '?') !== false) list($url, $query) = explode('?',$_url,2); // strip the query first, as it can contain slashes
if ($url == '/' || $url[0] != '/' && self::parse_url($url,PHP_URL_PATH) == '/') if ($url == '/' || $url[0] != '/' && self::parse_url($url,PHP_URL_PATH) == '/')
{ {
@ -1283,7 +1283,7 @@ class Vfs extends Vfs\Base
*/ */
static function concat($_url,$relative) static function concat($_url,$relative)
{ {
list($url,$query) = explode('?',$_url,2); if (strpos($url=$_url, '?') !== false) list($url, $query) = explode('?',$_url,2);
if (substr($url,-1) == '/') $url = substr($url,0,-1); if (substr($url,-1) == '/') $url = substr($url,0,-1);
$ret = ($relative === '' || $relative[0] == '/' ? $url.$relative : $url.'/'.$relative); $ret = ($relative === '' || $relative[0] == '/' ? $url.$relative : $url.'/'.$relative);
@ -2264,17 +2264,17 @@ class Vfs extends Vfs\Base
} }
} }
} }
if (!$mime && is_dir($url)) if (empty($mime) && is_dir($url))
{ {
$mime = self::DIR_MIME_TYPE; $mime = self::DIR_MIME_TYPE;
} }
// if we operate on the regular filesystem and the mime_content_type function is available --> use it // if we operate on the regular filesystem and the mime_content_type function is available --> use it
if (!$mime && !$scheme && function_exists('mime_content_type')) if (empty($mime) && !$scheme && function_exists('mime_content_type'))
{ {
$mime = mime_content_type($path); $mime = mime_content_type($path);
} }
// using EGw's own mime magic (currently only checking the extension!) // using EGw's own mime magic (currently only checking the extension!)
if (!$mime) if (empty($mime))
{ {
$mime = MimeMagic::filename2mime(self::parse_url($url,PHP_URL_PATH)); $mime = MimeMagic::filename2mime(self::parse_url($url,PHP_URL_PATH));
} }

View File

@ -21,7 +21,7 @@ use EGroupware\Api\Egw;
// E_STRICT in PHP 5.4 gives various strict warnings in working code, which can NOT be easy fixed in all use-cases :-( // E_STRICT in PHP 5.4 gives various strict warnings in working code, which can NOT be easy fixed in all use-cases :-(
// Only variables should be assigned by reference, eg. soetemplate::tree_walk() // Only variables should be assigned by reference, eg. soetemplate::tree_walk()
// Declaration of <extended method> should be compatible with <parent method>, varios places where method parameters change // Declaration of <extended method> should be compatible with <parent method>, various places where method parameters change
// --> switching it off for now, as it makes error-log unusable // --> switching it off for now, as it makes error-log unusable
error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED); error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

View File

@ -16,7 +16,7 @@ use EGroupware\Api;
/** /**
* Translate message only if translation object is already loaded * Translate message only if translation object is already loaded
* *
* This function is usefull for exception handlers or early stages of the initialisation of the egw object, * This function is useful for exception handlers or early stages of the initialisation of the egw object,
* as calling lang would try to load the translations, evtl. cause more errors, eg. because there's no db-connection. * as calling lang would try to load the translations, evtl. cause more errors, eg. because there's no db-connection.
* *
* @param string $key message in englich with %1, %2, ... placeholders * @param string $key message in englich with %1, %2, ... placeholders
@ -36,7 +36,7 @@ function try_lang($key,$vars=null)
} }
/** /**
* Clasify exception for a headline and log it to error_log, if not running as cli * Classify exception for a headline and log it to error_log, if not running as cli
* *
* @param Exception|Error $e * @param Exception|Error $e
* @param string &$headline * @param string &$headline
@ -82,7 +82,7 @@ function _egw_log_exception($e,&$headline=null)
} }
/** /**
* Fail a little bit more gracefully then an uncought exception * Fail a little more gracefully then an uncaught exception
* *
* Does NOT return * Does NOT return
* *
@ -159,7 +159,7 @@ if (!isset($GLOBALS['egw_info']['flags']['no_exception_handler']) || $GLOBALS['e
} }
/** /**
* Fail a little bit more gracefully then a catchable fatal error, by throwing an exception * Fail a little more gracefully then a catchable fatal error, by throwing an exception
* *
* @param int $errno level of the error raised: E_* constants * @param int $errno level of the error raised: E_* constants
* @param string $errstr error message * @param string $errstr error message
@ -178,7 +178,7 @@ function egw_error_handler ($errno, $errstr, $errfile, $errline)
case E_WARNING: case E_WARNING:
case E_USER_WARNING: case E_USER_WARNING:
// skip message for warnings supressed via @-error-control-operator (eg. @is_dir($path)) // skip message for warnings suppressed via @-error-control-operator (eg. @is_dir($path))
// can be commented out to get suppressed warnings too! // can be commented out to get suppressed warnings too!
if ((error_reporting() & $errno) && PHP_VERSION < 8.0) if ((error_reporting() & $errno) && PHP_VERSION < 8.0)
{ {

View File

@ -96,7 +96,7 @@ foreach(array('_COOKIE','_GET','_POST','_REQUEST','HTTP_GET_VARS','HTTP_POST_VAR
} }
} }
// do the check for script-tags only for _GET and _POST or if we found something in _GET and _POST // do the check for script-tags only for _GET and _POST or if we found something in _GET and _POST
// speeds up the execusion a bit // speeds up the execution a bit
if (isset($GLOBALS[$where]) && is_array($GLOBALS[$where]) && ($n < 3 || isset($GLOBALS['egw_unset_vars']))) if (isset($GLOBALS[$where]) && is_array($GLOBALS[$where]) && ($n < 3 || isset($GLOBALS['egw_unset_vars'])))
{ {
_check_script_tag($GLOBALS[$where],$where); _check_script_tag($GLOBALS[$where],$where);
@ -143,8 +143,8 @@ if (ini_get('register_globals'))
* *
* Should be used for all external content, to guard against exploidts. * Should be used for all external content, to guard against exploidts.
* *
* PHP 7.0+ can be told not to instanciate any classes (and calling eg. it's destructor). * PHP 7.0+ can be told not to instantiate any classes (and calling eg. it's destructor).
* In fact it instanciates it as __PHP_Incomplete_Class without any methods and therefore disarming threads. * In fact it instantiates it as __PHP_Incomplete_Class without any methods and therefore disarming threads.
* *
* @param string $str * @param string $str
* @return mixed * @return mixed