an other chunk of fixed PHP 8.0 Warnings

This commit is contained in:
Ralf Becker 2021-10-07 10:14:08 +02:00
parent 45f039da95
commit 91bd7c7aeb
42 changed files with 222 additions and 221 deletions

View File

@ -15,8 +15,7 @@
namespace EGroupware\Api; namespace EGroupware\Api;
// allow to set an application depending authentication type (eg. for syncml, groupdav, ...) // allow to set an application depending authentication type (eg. for syncml, groupdav, ...)
if (isset($GLOBALS['egw_info']['server']['auth_type_'.$GLOBALS['egw_info']['flags']['currentapp']]) && if (!empty($GLOBALS['egw_info']['server']['auth_type_'.$GLOBALS['egw_info']['flags']['currentapp']]))
$GLOBALS['egw_info']['server']['auth_type_'.$GLOBALS['egw_info']['flags']['currentapp']])
{ {
$GLOBALS['egw_info']['server']['auth_type'] = $GLOBALS['egw_info']['server']['auth_type_'.$GLOBALS['egw_info']['flags']['currentapp']]; $GLOBALS['egw_info']['server']['auth_type'] = $GLOBALS['egw_info']['server']['auth_type_'.$GLOBALS['egw_info']['flags']['currentapp']];
} }
@ -223,11 +222,11 @@ class Auth
{ {
return true; return true;
} }
if (is_null($passwordAgeBorder) && $GLOBALS['egw_info']['server']['change_pwd_every_x_days']) if (is_null($passwordAgeBorder) && !empty($GLOBALS['egw_info']['server']['change_pwd_every_x_days']))
{ {
$passwordAgeBorder = (DateTime::to('now','ts')-($GLOBALS['egw_info']['server']['change_pwd_every_x_days']*86400)); $passwordAgeBorder = (DateTime::to('now','ts')-($GLOBALS['egw_info']['server']['change_pwd_every_x_days']*86400));
} }
if (is_null($daysLeftUntilChangeReq) && $GLOBALS['egw_info']['server']['warn_about_upcoming_pwd_change']) if (is_null($daysLeftUntilChangeReq) && !empty($GLOBALS['egw_info']['server']['warn_about_upcoming_pwd_change']))
{ {
// maxage - passwordage = days left until change is required // maxage - passwordage = days left until change is required
$daysLeftUntilChangeReq = ($GLOBALS['egw_info']['server']['change_pwd_every_x_days'] - ((DateTime::to('now','ts')-($alpwchange_val?$alpwchange_val:0))/86400)); $daysLeftUntilChangeReq = ($GLOBALS['egw_info']['server']['change_pwd_every_x_days'] - ((DateTime::to('now','ts')-($alpwchange_val?$alpwchange_val:0))/86400));
@ -235,9 +234,9 @@ class Auth
if ($alpwchange_val == 0 || // admin requested password change if ($alpwchange_val == 0 || // admin requested password change
$passwordAgeBorder > $alpwchange_val || // change password every N days policy requests change $passwordAgeBorder > $alpwchange_val || // change password every N days policy requests change
// user should be warned N days in advance about change and is not yet // user should be warned N days in advance about change and is not yet
$GLOBALS['egw_info']['server']['change_pwd_every_x_days'] && !empty($GLOBALS['egw_info']['server']['change_pwd_every_x_days']) &&
$GLOBALS['egw_info']['user']['apps']['preferences'] && !empty($GLOBALS['egw_info']['user']['apps']['preferences']) &&
$GLOBALS['egw_info']['server']['warn_about_upcoming_pwd_change'] && !empty($GLOBALS['egw_info']['server']['warn_about_upcoming_pwd_change']) &&
$GLOBALS['egw_info']['server']['warn_about_upcoming_pwd_change'] > $daysLeftUntilChangeReq && $GLOBALS['egw_info']['server']['warn_about_upcoming_pwd_change'] > $daysLeftUntilChangeReq &&
$UserKnowsAboutPwdChange !== true) $UserKnowsAboutPwdChange !== true)
{ {
@ -255,8 +254,8 @@ class Auth
else else
{ {
// login page does not inform user about passwords about to expire // login page does not inform user about passwords about to expire
if ($GLOBALS['egw_info']['flags']['currentapp'] != 'login' && if ($GLOBALS['egw_info']['flags']['currentapp'] !== 'login' &&
($GLOBALS['egw_info']['flags']['currentapp'] != 'home' || ($GLOBALS['egw_info']['flags']['currentapp'] !== 'home' ||
strpos($_SERVER['SCRIPT_NAME'], '/home/') !== false)) strpos($_SERVER['SCRIPT_NAME'], '/home/') !== false))
{ {
$UserKnowsAboutPwdChange = true; $UserKnowsAboutPwdChange = true;

View File

@ -415,9 +415,9 @@ class Storage
*/ */
function allow_account_edit($user=null) function allow_account_edit($user=null)
{ {
return $GLOBALS['egw_info']['server']['allow_account_edit'] && return !empty($GLOBALS['egw_info']['server']['allow_account_edit']) &&
array_intersect($GLOBALS['egw_info']['server']['allow_account_edit'], array_intersect($GLOBALS['egw_info']['server']['allow_account_edit'],
$GLOBALS['egw']->accounts->memberships($user ? $user : $this->user, true)); $GLOBALS['egw']->accounts->memberships($user ?: $this->user, true));
} }
/** /**

View File

@ -591,7 +591,7 @@ class Db
$this->setupType = $this->Type; $this->setupType = $this->Type;
$this->Type = 'mysql'; $this->Type = 'mysql';
} }
if ($new_connection) if (!empty($new_connection))
{ {
foreach(get_included_files() as $file) foreach(get_included_files() as $file)
{ {
@ -1599,7 +1599,7 @@ class Db
{ {
return $array; return $array;
} }
if (!$column_definitions) if (empty($column_definitions))
{ {
$column_definitions = $this->column_definitions; $column_definitions = $this->column_definitions;
} }

View File

@ -125,7 +125,7 @@ class Pdo
// Exception reveals password, so we ignore the exception and connect again without pw, to get the right exception without pw // Exception reveals password, so we ignore the exception and connect again without pw, to get the right exception without pw
self::$pdo = new \PDO($dsn,$egw_db->User,'$egw_db->Password'); self::$pdo = new \PDO($dsn,$egw_db->User,'$egw_db->Password');
} }
if ($query) if (!empty($query))
{ {
self::$pdo->exec($query); self::$pdo->exec($query);
} }

View File

@ -117,22 +117,22 @@ class Etemplate extends Etemplate\Widget\Template
foreach(count(array_filter(array_keys($extras), 'is_int')) ? $extras : array($extras) as $extra) foreach(count(array_filter(array_keys($extras), 'is_int')) ? $extras : array($extras) as $extra)
{ {
if ($extra['data'] && is_array($extra['data'])) if (!empty($extra['data']) && is_array($extra['data']))
{ {
$content = array_merge($content, $extra['data']); $content = array_merge($content, $extra['data']);
} }
if ($extra['preserve'] && is_array($extra['preserve'])) if (!empty($extra['preserve']) && is_array($extra['preserve']))
{ {
$preserv = array_merge($preserv, $extra['preserve']); $preserv = array_merge($preserv, $extra['preserve']);
} }
if ($extra['readonlys'] && is_array($extra['readonlys'])) if (!empty($extra['readonlys']) && is_array($extra['readonlys']))
{ {
$readonlys = array_merge($readonlys, $extra['readonlys']); $readonlys = array_merge($readonlys, $extra['readonlys']);
} }
if ($extra['sel_options'] && is_array($extra['sel_options'])) if (!empty($extra['sel_options']) && is_array($extra['sel_options']))
{ {
$sel_options = array_merge($sel_options, $extra['sel_options']); $sel_options = array_merge($sel_options, $extra['sel_options']);
} }
@ -177,7 +177,7 @@ class Etemplate extends Etemplate\Widget\Template
} }
// some apps (eg. InfoLog) set app_header only in get_rows depending on filter settings // some apps (eg. InfoLog) set app_header only in get_rows depending on filter settings
self::$request->app_header = $GLOBALS['egw_info']['flags']['app_header']; self::$request->app_header = $GLOBALS['egw_info']['flags']['app_header'] ?? null;
// compile required translations translations // compile required translations translations
$currentapp = $GLOBALS['egw_info']['flags']['currentapp']; $currentapp = $GLOBALS['egw_info']['flags']['currentapp'];
@ -209,7 +209,7 @@ class Etemplate extends Etemplate\Widget\Template
'currentapp' => $currentapp, 'currentapp' => $currentapp,
); );
if($data['content']['nm']['rows'] && is_array($data['content']['nm']['rows'])) if (!empty($data['content']['nm']['rows']) && is_array($data['content']['nm']['rows']))
{ {
// Deep copy rows so we don't lose them when request is set to null // Deep copy rows so we don't lose them when request is set to null
// (some content by reference) // (some content by reference)
@ -420,7 +420,7 @@ class Etemplate extends Etemplate\Widget\Template
} }
$tcontent = is_array($content) ? $content : $tcontent = is_array($content) ? $content :
self::complete_array_merge(self::$request->preserv, $validated); self::complete_array_merge(self::$request->preserv ?? [], $validated);
$hook_data = Hooks::process( $hook_data = Hooks::process(
array( array(

View File

@ -428,9 +428,9 @@ class Request
* @param string $var * @param string $var
* @param mixed $val * @param mixed $val
*/ */
public function __set($var,$val) public function __set($var, $val)
{ {
if ($this->data[$var] !== $val) if (!isset($this->data[$var]) || $this->data[$var] !== $val)
{ {
$this->data[$var] = $val; $this->data[$var] = $val;
//error_log(__METHOD__."('$var', ...) data of id=$this->id changed ..."); //error_log(__METHOD__."('$var', ...) data of id=$this->id changed ...");

View File

@ -98,7 +98,7 @@ class Customfields extends Transformer
$form_name = self::form_name($cname, $this->id, $expand); $form_name = self::form_name($cname, $this->id, $expand);
// Store properties at top level, so all customfield widgets can share // Store properties at top level, so all customfield widgets can share
if($this->attrs['app']) if (!empty($this->attrs['app']))
{ {
$app = $this->attrs['app']; $app = $this->attrs['app'];
} }
@ -141,12 +141,12 @@ class Customfields extends Transformer
// app changed // app changed
$customfields = Api\Storage\Customfields::get($app); $customfields = Api\Storage\Customfields::get($app);
} }
if($this->attrs['customfields']) if (!empty($this->attrs['customfields']))
{ {
$customfields = $this->attrs['customfields']; $customfields = $this->attrs['customfields'];
} }
// Filter fields // Filter fields
if($this->attrs['field-names']) if (!empty($this->attrs['field-names']))
{ {
$fields_name = explode(',', $this->attrs['field-names']); $fields_name = explode(',', $this->attrs['field-names']);
foreach($fields_name as &$f) foreach($fields_name as &$f)
@ -162,8 +162,8 @@ class Customfields extends Transformer
$fields = $customfields; $fields = $customfields;
$use_private = self::expand_name($this->attrs['use-private'],0,0,'','',self::$cont); $use_private = self::expand_name($this->attrs['use-private'] ?? null,0,0,'','',self::$cont);
$this->attrs['sub-type'] = self::expand_name($this->attrs['sub-type'],0,0,'','',self::$cont); $this->attrs['sub-type'] = self::expand_name($this->attrs['sub-type'] ?? null,0,0,'','',self::$cont);
foreach((array)$fields as $key => $field) foreach((array)$fields as $key => $field)
{ {
@ -174,7 +174,7 @@ class Customfields extends Transformer
} }
// Remove filtered fields // Remove filtered fields
if($field_filters && in_array($key, $negate_fields) && in_array($key, $field_filters)) if (!empty($field_filters) && in_array($key, $negate_fields) && in_array($key, $field_filters))
{ {
unset($fields[$key]); unset($fields[$key]);
} }
@ -284,7 +284,7 @@ class Customfields extends Transformer
$type = $field['type']; $type = $field['type'];
// Link-tos needs to change from appname to link-to // Link-tos needs to change from appname to link-to
if($link_types[$field['type']]) if (!empty($link_types[$field['type']]))
{ {
if($type == 'filemanager') if($type == 'filemanager')
{ {
@ -314,8 +314,8 @@ class Customfields extends Transformer
{ {
$widget->attrs['data_format'] = $type == 'date' ? 'Y-m-d' : 'Y-m-d H:i:s'; $widget->attrs['data_format'] = $type == 'date' ? 'Y-m-d' : 'Y-m-d H:i:s';
} }
if($field['values']['min']) $widget->attrs['min'] = $field['values']['min']; if (isset($field['values']['min'])) $widget->attrs['min'] = $field['values']['min'];
if($field['values']['max']) $widget->attrs['min'] = $field['values']['max']; if (isset($field['values']['max'])) $widget->attrs['min'] = $field['values']['max'];
break; break;
case 'vfs-upload': case 'vfs-upload':
@ -355,7 +355,7 @@ class Customfields extends Transformer
$field['values'] = Api\Storage\Customfields::get_options_from_file($field['values']['@']); $field['values'] = Api\Storage\Customfields::get_options_from_file($field['values']['@']);
} }
// keep extra values set by app code, eg. addressbook advanced search // keep extra values set by app code, eg. addressbook advanced search
if (is_array(self::$request->sel_options[self::$prefix.$fname])) if (!empty(self::$request->sel_options[self::$prefix.$fname]) && is_array(self::$request->sel_options[self::$prefix.$fname]))
{ {
self::$request->sel_options[self::$prefix.$fname] += (array)$field['values']; self::$request->sel_options[self::$prefix.$fname] += (array)$field['values'];
} }

View File

@ -42,7 +42,7 @@ class Description extends Etemplate\Widget
*/ */
public function beforeSendToClient($cname, array $expand=null) public function beforeSendToClient($cname, array $expand=null)
{ {
if ($this->attrs['activate_links']) if (!empty($this->attrs['activate_links']))
{ {
$form_name = self::form_name($cname, $this->id, $expand); $form_name = self::form_name($cname, $this->id, $expand);
$value =& self::get_array(self::$request->content, $form_name); $value =& self::get_array(self::$request->content, $form_name);

View File

@ -36,17 +36,17 @@ class Image extends Etemplate\Widget
$image = $value != '' ? $value : $this->attrs['src']; $image = $value != '' ? $value : $this->attrs['src'];
if (is_string($image)) list($app,$img) = explode('/',$image,2); if (is_string($image)) list($app,$img) = explode('/',$image,2)+[null,null];
if (!$app || !$img || !is_dir(EGW_SERVER_ROOT.'/'.$app) || strpos($img,'/')!==false) if (empty($app) || empty($img) || !is_dir(EGW_SERVER_ROOT.'/'.$app) || strpos($img,'/')!==false)
{ {
$img = $image; $img = $image;
list($app) = explode('.',$form_name); list($app) = explode('.',$form_name);
} }
$src = Api\Image::find($app, $img); $src = Api\Image::find($app, $img);
if(!$this->id) /*if(!$this->id)
{ {
// self::setElementAttribute($this->attrs['src'], 'id', $this->attrs['src']); // self::setElementAttribute($this->attrs['src'], 'id', $this->attrs['src']);
} }*/
self::setElementAttribute($this->attrs['src'], 'src', $src); self::setElementAttribute($this->attrs['src'], 'src', $src);
} }
} }

View File

@ -130,13 +130,13 @@ class Nextmatch extends Etemplate\Widget
$send_value = $value; $send_value = $value;
list($app) = explode('.',$value['get_rows']); list($app) = explode('.',$value['get_rows']);
if(!$GLOBALS['egw_info']['apps'][$app]) if (empty($GLOBALS['egw_info']['apps'][$app]))
{ {
list($app) = explode('.',$this->attrs['template']); list($app) = explode('.',$this->attrs['template']);
} }
// Check for a favorite in URL // Check for a favorite in URL
if($_GET['favorite'] && $value['favorites']) if (!empty($_GET['favorite']) && !empty($value['favorites']))
{ {
$safe_name = preg_replace('/[^A-Za-z0-9-_]/','_',strip_tags($_GET['favorite'])); $safe_name = preg_replace('/[^A-Za-z0-9-_]/','_',strip_tags($_GET['favorite']));
$pref_name = "favorite_" .$safe_name; $pref_name = "favorite_" .$safe_name;
@ -210,7 +210,7 @@ class Nextmatch extends Etemplate\Widget
} }
// Favorite group for admins // Favorite group for admins
if($GLOBALS['egw_info']['apps']['admin'] && $value['favorites']) if (!empty($GLOBALS['egw_info']['apps']['admin']) && !empty($value['favorites']))
{ {
self::$request->sel_options[$form_name]['favorite']['group'] = array('all' => lang('All users')) + self::$request->sel_options[$form_name]['favorite']['group'] = array('all' => lang('All users')) +
Select::typeOptions('select-account',',groups'); Select::typeOptions('select-account',',groups');
@ -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 && empty($egw_actions[$prefix.'select_all'])) if ($first_level && $group !== false && ($action['group']??null) != $group && empty($egw_actions[$prefix.'select_all']))
{ {
$egw_actions[$prefix.'select_all'] = array( $egw_actions[$prefix.'select_all'] = array(

View File

@ -49,7 +49,8 @@ class Password extends Etemplate\Widget\Textbox
{ {
$form_name = self::form_name($cname, $this->id, $expand); $form_name = self::form_name($cname, $this->id, $expand);
$value =& self::get_array(self::$request->content, $form_name); $value =& self::get_array(self::$request->content, $form_name);
$plaintext = !in_array(self::expand_name($this->attrs['plaintext'],$expand['c'], $expand['row'], $expand['c_'], $expand['row_'], $expand['cont']), $plaintext = !empty($this->attrs['plaintext']) && !in_array(
self::expand_name($this->attrs['plaintext'], $expand['c'] ?? null, $expand['row'] ?? null, $expand['c_'] ?? null, $expand['row_'] ?? null, $expand['cont']),
['false', '0']); ['false', '0']);
if (!empty($value)) if (!empty($value))

View File

@ -109,14 +109,14 @@ class Select extends Etemplate\Widget
{ {
parent::set_attrs($xml, $cloned); parent::set_attrs($xml, $cloned);
if ($this->attrs['multiple'] !== 'dynamic') if (!isset($this->attrs['multiple']) || $this->attrs['multiple'] !== 'dynamic')
{ {
$this->attrs['multiple'] = !isset($this->attrs['multiple']) ? false : $this->attrs['multiple'] = !isset($this->attrs['multiple']) ? false :
!(!$this->attrs['multiple'] || $this->attrs['multiple'] === 'false'); !(!$this->attrs['multiple'] || $this->attrs['multiple'] === 'false');
} }
// set attrs[multiple] from attrs[options], unset options only if it just contains number or rows // set attrs[multiple] from attrs[options], unset options only if it just contains number or rows
if ($this->attrs['options'] > 1) if (isset($this->attrs['options']) && $this->attrs['options'] > 1)
{ {
$this->attrs['multiple'] = (int)$this->attrs['options']; $this->attrs['multiple'] = (int)$this->attrs['options'];
if ((string)$this->attrs['multiple'] == $this->attrs['options']) if ((string)$this->attrs['multiple'] == $this->attrs['options'])
@ -124,7 +124,7 @@ class Select extends Etemplate\Widget
unset($this->attrs['options']); unset($this->attrs['options']);
} }
} }
elseif($this->attrs['rows'] > 1) elseif(isset($this->attrs['rows']) && $this->attrs['rows'] > 1)
{ {
$this->attrs['multiple'] = true; $this->attrs['multiple'] = true;
} }
@ -311,8 +311,8 @@ class Select extends Etemplate\Widget
{ {
$form_name = self::form_name($cname, $this->id, $expand); $form_name = self::form_name($cname, $this->id, $expand);
} }
if (!is_array(self::$request->sel_options[$form_name])) self::$request->sel_options[$form_name] = array(); if (empty(self::$request->sel_options[$form_name]) || !is_array(self::$request->sel_options[$form_name])) self::$request->sel_options[$form_name] = [];
$type = $this->attrs['type'] ? $this->attrs['type'] : $this->type; $type = $this->attrs['type'] ?? $this->type;
if ($type != 'select' && $type != 'menupopup') if ($type != 'select' && $type != 'menupopup')
{ {
// Check selection preference, we may be able to skip reading some data // Check selection preference, we may be able to skip reading some data
@ -335,8 +335,8 @@ class Select extends Etemplate\Widget
if (!isset($form_names_done[$form_name]) && if (!isset($form_names_done[$form_name]) &&
($type_options = self::typeOptions($this, ($type_options = self::typeOptions($this,
// typeOptions thinks # of rows is the first thing in options // typeOptions thinks # of rows is the first thing in options
($this->attrs['rows'] && strpos($this->attrs['options'], $this->attrs['rows']) !== 0 ? $this->attrs['rows'].','.$this->attrs['options'] : $this->attrs['options']), (!empty($this->attrs['rows']) && !empty($this->attrs['options']) && strpos($this->attrs['options'], $this->attrs['rows']) !== 0 ? $this->attrs['rows'].','.$this->attrs['options'] : $this->attrs['options']),
$no_lang, $this->attrs['readonly'], self::get_array(self::$request->content, $form_name), $form_name))) $no_lang, $this->attrs['readonly'] ?? false, self::get_array(self::$request->content, $form_name), $form_name)))
{ {
self::fix_encoded_options($type_options); self::fix_encoded_options($type_options);
@ -356,7 +356,7 @@ class Select extends Etemplate\Widget
$options = (isset(self::$request->sel_options[$form_name]) ? $form_name : $this->id); $options = (isset(self::$request->sel_options[$form_name]) ? $form_name : $this->id);
if(is_array(self::$request->sel_options[$options])) if(is_array(self::$request->sel_options[$options]))
{ {
if(in_array($this->attrs['type'], self::$cached_types) && !isset($form_names_done[$options])) if (isset($this->attrs['type']) && in_array($this->attrs['type'], self::$cached_types) && !isset($form_names_done[$options]))
{ {
// Fix any custom options from application // Fix any custom options from application
self::fix_encoded_options(self::$request->sel_options[$options],true); self::fix_encoded_options(self::$request->sel_options[$options],true);
@ -561,7 +561,7 @@ class Select extends Etemplate\Widget
$field = self::expand_name($field, 0, 0,'','',self::$cont); $field = self::expand_name($field, 0, 0,'','',self::$cont);
} }
list($rows,$type,$type2,$type3,$type4,$type5) = $legacy_options; list($rows,$type,$type2,$type3,$type4,$type5) = $legacy_options+[null,null,null,null,null,null];
$no_lang = false; $no_lang = false;
$options = array(); $options = array();
switch ($widget_type) switch ($widget_type)
@ -644,7 +644,7 @@ class Select extends Etemplate\Widget
// These are extra info for easy dealing with categories // These are extra info for easy dealing with categories
// client side, without extra loading // client side, without extra loading
'main' => (int)$cat['main'], 'main' => (int)$cat['main'],
'children' => $cat['children'], 'children' => $cat['children'] ?? null,
//add different class per level to allow different styling for each category level: //add different class per level to allow different styling for each category level:
'class' => "cat_level". $cat['level'] 'class' => "cat_level". $cat['level']
); );

View File

@ -68,7 +68,7 @@ class Template extends Etemplate\Widget
list($name) = explode('?', $_name); // remove optional cache-buster list($name) = explode('?', $_name); // remove optional cache-buster
if (isset(self::$cache[$name]) || !($path = self::relPath($name, $template_set, $version, $load_via))) if (isset(self::$cache[$name]) || !($path = self::relPath($name, $template_set, $version, $load_via)))
{ {
if ((!$path || self::read($load_via, $template_set)) && isset(self::$cache[$name])) if ((empty($path) || self::read($load_via, $template_set)) && isset(self::$cache[$name]))
{ {
//error_log(__METHOD__."('$name', '$template_set', '$version', '$load_via') read from cache"); //error_log(__METHOD__."('$name', '$template_set', '$version', '$load_via') read from cache");
return self::$cache[$name]; return self::$cache[$name];
@ -146,7 +146,7 @@ class Template extends Etemplate\Widget
{ {
static $prefixes = null; static $prefixes = null;
unset($version); // not used currently unset($version); // not used currently
list($app, $rest) = explode('.', $load_via ?: $name, 2); list($app, $rest) = explode('.', $load_via ?: $name, 2)+[null,null];
if (empty($template_set)) if (empty($template_set))
{ {
@ -184,7 +184,7 @@ class Template extends Etemplate\Widget
$path = $prefix.$path; $path = $prefix.$path;
} }
//error_log(__METHOD__."('$name', '$template_set') returning ".array2string($path)); //error_log(__METHOD__."('$name', '$template_set') returning ".array2string($path));
return $path; return $path ?? null;
} }
/** /**
@ -243,16 +243,16 @@ class Template extends Etemplate\Widget
{ {
$cname =& $params[0]; $cname =& $params[0];
$old_cname = $params[0]; $old_cname = $params[0];
if ($this->attrs['content']) $cname = self::form_name($cname, $this->attrs['content'], $params[1]); if (!empty($this->attrs['content'])) $cname = self::form_name($cname, $this->attrs['content'], $params[1]);
// Check for template from content, and run over it // Check for template from content, and run over it
// templates included via template tag have their name to load them from in attribute "template" // templates included via template tag have their name to load them from in attribute "template"
$expand_name = self::expand_name($this->id ? $this->id : $this->attrs['template'], '','','','',self::$request->content); $expand_name = self::expand_name($this->id ?: $this->attrs['template'], '','','','',self::$request->content);
if(!$expand_name && $this->id && $this->attrs['template']) if(!$expand_name && $this->id && $this->attrs['template'])
{ {
$expand_name = $this->attrs['template']; $expand_name = $this->attrs['template'];
} }
if($this->original_name) if (!empty($this->original_name))
{ {
$expand_name = self::expand_name($this->original_name, '','','','',self::$request->content); $expand_name = self::expand_name($this->original_name, '','','','',self::$request->content);
} }

View File

@ -62,14 +62,14 @@ class Textbox extends Etemplate\Widget
parent::set_attrs($xml, $cloned); parent::set_attrs($xml, $cloned);
// Legacy handling only // Legacy handling only
// A negative size triggered the HTML readonly attibute, but not etemplate readonly, // A negative size triggered the HTML readonly attribute, but not etemplate readonly,
// so you got an input element, but it was not editable. // so you got an input element, but it was not editable.
if ($this->attrs['size'] < 0) if (isset($this->attrs['size']) && $this->attrs['size'] < 0)
{ {
self::setElementAttribute($this->id, 'size', abs($this->attrs['size'])); self::setElementAttribute($this->id, 'size', abs($this->attrs['size']));
self::$request->readonlys[$this->id] = false; self::$request->readonlys[$this->id] = false;
self::setElementAttribute($this->id, 'readonly', true); self::setElementAttribute($this->id, 'readonly', true);
trigger_error("Using a negative size to set textbox readonly. " .$this, E_USER_DEPRECATED); //trigger_error("Using a negative size to set textbox readonly. " .$this, E_USER_DEPRECATED);
} }
return $this; return $this;
} }

View File

@ -143,7 +143,7 @@ class Tree extends Etemplate\Widget
parent::set_attrs($xml, $cloned); parent::set_attrs($xml, $cloned);
// set attrs[multiple] from attrs[options] // set attrs[multiple] from attrs[options]
if ($this->attrs['options'] > 1) if (isset($this->attrs['options']) && (int)$this->attrs['options'] > 1)
{ {
self::setElementAttribute($this->id, 'multiple', true); self::setElementAttribute($this->id, 'multiple', true);
} }
@ -297,21 +297,21 @@ class Tree extends Etemplate\Widget
{ {
$form_name = self::form_name($cname, $this->id); $form_name = self::form_name($cname, $this->id);
if (($templated_path = self::templateImagePath($this->attrs['image_path'])) != $this->attrs['image_path']) if (!empty($this->attrs['image_path']) && ($templated_path = self::templateImagePath($this->attrs['image_path'])) != $this->attrs['image_path'])
{ {
self::setElementAttribute($form_name, 'image_path', $this->attrs['image_path'] = $templated_path); self::setElementAttribute($form_name, 'image_path', $this->attrs['image_path'] = $templated_path);
//error_log(__METHOD__."() setting templated image-path for $form_name: $templated_path"); //error_log(__METHOD__."() setting templated image-path for $form_name: $templated_path");
} }
if (!is_array(self::$request->sel_options[$form_name])) self::$request->sel_options[$form_name] = array(); if (empty(self::$request->sel_options[$form_name])) self::$request->sel_options[$form_name] = [];
if ($this->attrs['type']) if (!empty($this->attrs['type']))
{ {
// += to keep further options set by app code // += to keep further options set by app code
self::$request->sel_options[$form_name] += self::typeOptions($this->attrs['type'], $this->attrs['options'], self::$request->sel_options[$form_name] += self::typeOptions($this->attrs['type'], $this->attrs['options'] ?? null,
$no_lang, $this->attrs['readonly'], self::get_array(self::$request->content, $form_name), $form_name); $no_lang, $this->attrs['readonly'] ?? null, self::get_array(self::$request->content, $form_name), $form_name);
// if no_lang was modified, forward modification to the client // if no_lang was modified, forward modification to the client
if ($no_lang != $this->attr['no_lang']) if (!isset($this->attr['no_lang']) || $no_lang != $this->attr['no_lang'])
{ {
self::setElementAttribute($form_name, 'no_lang', $no_lang); self::setElementAttribute($form_name, 'no_lang', $no_lang);
} }
@ -440,7 +440,7 @@ class Tree extends Etemplate\Widget
*/ */
public static function typeOptions($widget_type, $legacy_options, &$no_lang=false, $readonly=false, $value=null, $form_name=null) public static function typeOptions($widget_type, $legacy_options, &$no_lang=false, $readonly=false, $value=null, $form_name=null)
{ {
list($rows,$type,$type2,$type3) = explode(',',$legacy_options); list($rows,$type,$type2,$type3) = explode(',', $legacy_options)+[null,null,null,null];
$no_lang = false; $no_lang = false;
$options = array(); $options = array();

View File

@ -37,10 +37,10 @@ class Vfs extends File
*/ */
public function beforeSendToClient($cname, $expand = array()) public function beforeSendToClient($cname, $expand = array())
{ {
if($this->type == 'vfs-upload' || $this->attrs['type'] == 'vfs-upload') if ($this->type === 'vfs-upload' || !empty($this->attrs['type']) && $this->attrs['type'] === 'vfs-upload')
{ {
$form_name = self::form_name($cname, $this->id, $expand ? $expand : array('cont'=>self::$request->content)); $form_name = self::form_name($cname, $this->id, $expand ? $expand : array('cont'=>self::$request->content));
if($this->attrs['path']) if (!empty($this->attrs['path']))
{ {
$path = self::expand_name($this->attrs['path'],$expand['c'], $expand['row'], $expand['c_'], $expand['row_'], $expand['cont']); $path = self::expand_name($this->attrs['path'],$expand['c'], $expand['row'], $expand['c_'], $expand['row_'], $expand['cont']);
} }

View File

@ -2,12 +2,12 @@
/** /**
* EGroupware - Framework for Ajax based templates: jdots & Pixelegg * EGroupware - Framework for Ajax based templates: jdots & Pixelegg
* *
* @link http://www.stylite.de * @link https://www.egroupware.org
* @package api * @package api
* @subpackage framework * @subpackage framework
* @author Andreas Stöckel <as@stylite.de> * @author Andreas Stöckel
* @author Ralf Becker <rb@stylite.de> * @author Ralf Becker <rb@egroupware.org>
* @author Nathan Gray <ng@stylite.de> * @author Nathan Gray <ng@egroupware.org>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
*/ */
@ -16,7 +16,7 @@ namespace EGroupware\Api\Framework;
use EGroupware\Api; use EGroupware\Api;
/** /**
* Stylite jdots template * Framework for Ajax based templates
*/ */
abstract class Ajax extends Api\Framework abstract class Ajax extends Api\Framework
{ {
@ -88,13 +88,13 @@ abstract class Ajax extends Api\Framework
$width = self::DEFAULT_SIDEBAR_WIDTH; $width = self::DEFAULT_SIDEBAR_WIDTH;
//Check whether the width had been stored explicitly for the jdots template, use that value //Check whether the width had been stored explicitly for the jdots template, use that value
if ($GLOBALS['egw_info']['user']['preferences'][$app]['jdotssideboxwidth']) if (!empty($GLOBALS['egw_info']['user']['preferences'][$app]['jdotssideboxwidth']))
{ {
$width = (int)$GLOBALS['egw_info']['user']['preferences'][$app]['jdotssideboxwidth']; $width = (int)$GLOBALS['egw_info']['user']['preferences'][$app]['jdotssideboxwidth'];
// error_log(__METHOD__.__LINE__."($app):$width --> reading jdotssideboxwidth"); // error_log(__METHOD__.__LINE__."($app):$width --> reading jdotssideboxwidth");
} }
//Otherwise use the legacy "idotssideboxwidth" value //Otherwise use the legacy "idotssideboxwidth" value
else if ($GLOBALS['egw_info']['user']['preferences'][$app]['idotssideboxwidth']) elseif (!empty($GLOBALS['egw_info']['user']['preferences'][$app]['idotssideboxwidth']))
{ {
$width = (int)$GLOBALS['egw_info']['user']['preferences'][$app]['idotssideboxwidth']; $width = (int)$GLOBALS['egw_info']['user']['preferences'][$app]['idotssideboxwidth'];
// error_log(__METHOD__.__LINE__."($app):$width --> reading idotssideboxwidth"); // error_log(__METHOD__.__LINE__."($app):$width --> reading idotssideboxwidth");
@ -249,7 +249,7 @@ abstract class Ajax extends Api\Framework
{ {
if (empty($GLOBALS['egw_info']['flags']['java_script'])) $GLOBALS['egw_info']['flags']['java_script']=''; if (empty($GLOBALS['egw_info']['flags']['java_script'])) $GLOBALS['egw_info']['flags']['java_script']='';
// eT2 sets $GLOBALS['egw_info']['flags']['nonavbar'] === 'popup' for popups, Etemplate::exec($outputmode === 2) // eT2 sets $GLOBALS['egw_info']['flags']['nonavbar'] === 'popup' for popups, Etemplate::exec($outputmode === 2)
$extra['check-framework'] = $_GET['cd'] !== 'no' && $GLOBALS['egw_info']['flags']['nonavbar'] !== 'popup'; $extra['check-framework'] = (!isset($_GET['cd']) || $_GET['cd'] !== 'no') && $GLOBALS['egw_info']['flags']['nonavbar'] !== 'popup';
} }
} }
@ -1047,16 +1047,16 @@ abstract class Ajax extends Api\Framework
if (self::$footer_done) return; // prevent (multiple) footers if (self::$footer_done) return; // prevent (multiple) footers
self::$footer_done = true; self::$footer_done = true;
if (!isset($GLOBALS['egw_info']['flags']['nofooter']) || !$GLOBALS['egw_info']['flags']['nofooter']) if (empty($GLOBALS['egw_info']['flags']['nofooter']))
{ {
if ($no_framework && $GLOBALS['egw_info']['user']['preferences']['common']['show_generation_time']) if ($no_framework && !empty($GLOBALS['egw_info']['user']['preferences']['common']['show_generation_time']))
{ {
$vars = $this->_get_footer(); $vars = $this->_get_footer();
$footer = "\n".$vars['page_generation_time']."\n"; $footer = "\n".$vars['page_generation_time']."\n";
} }
} }
return $footer. return ($footer??'').
$GLOBALS['egw_info']['flags']['need_footer']."\n". // eg. javascript, which need to be at the end of the page ($GLOBALS['egw_info']['flags']['need_footer']??'')."\n". // eg. javascript, which need to be at the end of the page
"</body>\n</html>\n"; "</body>\n</html>\n";
} }

View File

@ -49,12 +49,12 @@ class Bundle
unset($GLOBALS['egw_info']['server']['debug_minify']); unset($GLOBALS['egw_info']['server']['debug_minify']);
$file2bundle = array(); $file2bundle = array();
if ($GLOBALS['egw_info']['server']['debug_minify'] !== 'True') if (!isset($GLOBALS['egw_info']['server']['debug_minify']) || $GLOBALS['egw_info']['server']['debug_minify'] !== 'True')
{ {
// get used bundles and cache them on tree-level for 2h // get used bundles and cache them on tree-level for 2h
//$bundles = self::all(); Cache::setTree(__CLASS__, 'bundles', $bundles, 7200); //$bundles = self::all(); Cache::setTree(__CLASS__, 'bundles', $bundles, 7200);
$bundles = Cache::getTree(__CLASS__, 'bundles', array(__CLASS__, 'all'), array(), 7200); $bundles = Cache::getTree(__CLASS__, 'bundles', array(__CLASS__, 'all'), array(), 7200);
$bundles_ts = $bundles['.ts']; $bundles_ts = $bundles['.ts'] ?? null;
unset($bundles['.ts']); unset($bundles['.ts']);
foreach($bundles as $name => $files) foreach($bundles as $name => $files)
{ {
@ -83,7 +83,7 @@ class Bundle
if (!isset($to_include[$file])) if (!isset($to_include[$file]))
{ {
if (($bundle = $file2bundle[$file])) if (($bundle = $file2bundle[$file] ?? false))
{ {
//error_log(__METHOD__."() requiring bundle $bundle for $file"); //error_log(__METHOD__."() requiring bundle $bundle for $file");
if (!in_array($bundle, $included_bundles)) if (!in_array($bundle, $included_bundles))
@ -108,10 +108,10 @@ class Bundle
else else
{ {
unset($query); unset($query);
list($path, $query) = explode('?', $file, 2); list($path, $query) = explode('?', $file, 2)+[null,null];
$mod = filemtime(EGW_SERVER_ROOT.$path); $mod = filemtime(EGW_SERVER_ROOT.$path);
// check if we have a more recent minified version of the file and use it // check if we have a more recent minified version of the file and use it
if ($GLOBALS['egw_info']['server']['debug_minify'] !== 'True' && if ((!isset($GLOBALS['egw_info']['server']['debug_minify']) || $GLOBALS['egw_info']['server']['debug_minify'] !== 'True') &&
substr($path, -3) == '.js' && file_exists(EGW_SERVER_ROOT.($min_path = substr($path, 0, -3).'.min.js')) && substr($path, -3) == '.js' && file_exists(EGW_SERVER_ROOT.($min_path = substr($path, 0, -3).'.min.js')) &&
(($min_mod = filemtime(EGW_SERVER_ROOT.$min_path)) >= $mod)) (($min_mod = filemtime(EGW_SERVER_ROOT.$min_path)) >= $mod))
{ {

View File

@ -113,7 +113,7 @@ class CssIncludes
{ {
foreach(self::resolve_css_includes($path) as $path) foreach(self::resolve_css_includes($path) as $path)
{ {
list($file,$query) = explode('?',$path,2); list($file,$query) = explode('?',$path,2)+[null,null];
if (($mod = filemtime(EGW_SERVER_ROOT.$file)) > $max_modified) $max_modified = $mod; if (($mod = filemtime(EGW_SERVER_ROOT.$file)) > $max_modified) $max_modified = $mod;
// do NOT include app.css or categories.php, as it changes from app to app // do NOT include app.css or categories.php, as it changes from app to app

View File

@ -100,6 +100,7 @@ class Html
// use preg_replace_callback as we experienced problems with links such as <www.example.tld/pfad/zu/einer/pdf-Datei.pdf> // use preg_replace_callback as we experienced problems with links such as <www.example.tld/pfad/zu/einer/pdf-Datei.pdf>
$result4 = preg_replace_callback( $Expr, function ($match) { $result4 = preg_replace_callback( $Expr, function ($match) {
//error_log(__METHOD__.__LINE__.array2string($match)); //error_log(__METHOD__.__LINE__.array2string($match));
$match += [null,null,null,null];
if ($match[4]==';' && (strlen($match[3])-4) >=0 && strpos($match[3],'&gt',strlen($match[3])-4)!==false) if ($match[4]==';' && (strlen($match[3])-4) >=0 && strpos($match[3],'&gt',strlen($match[3])-4)!==false)
{ {
$match[3] = substr($match[3],0,strpos($match[3],'&gt',strlen($match[3])-4)); $match[3] = substr($match[3],0,strpos($match[3],'&gt',strlen($match[3])-4));
@ -111,7 +112,7 @@ class Html
$match[4] = "&gt;"; $match[4] = "&gt;";
} }
//error_log(__METHOD__.__LINE__.array2string($match)); //error_log(__METHOD__.__LINE__.array2string($match));
return $match[1]."<a href=\"http://www".$match[2].$match[3]."\" target=\"_blank\">"."www".$match[2].$match[3]."</a>".$match[4]; return $match[1]."<a href=\"https://www".$match[2].$match[3]."\" target=\"_blank\">"."www".$match[2].$match[3]."</a>".$match[4];
}, $result3 ); }, $result3 );
} }
return $result4; return $result4;

View File

@ -127,7 +127,7 @@ class Storage
{ {
echo "<p>solink.get_links($app,".print_r($id,true).",$only_app,$order,$deleted)</p>\n"; echo "<p>solink.get_links($app,".print_r($id,true).",$only_app,$order,$deleted)</p>\n";
} }
if (($not_only = $only_app[0] == '!')) if (!empty($only_app) && ($not_only = $only_app[0] == '!'))
{ {
$only_app = substr($only_app,1); $only_app = substr($only_app,1);
} }
@ -173,7 +173,7 @@ class Storage
catch(Api\Db\Exception $e) { catch(Api\Db\Exception $e) {
_egw_log_exception($e); _egw_log_exception($e);
} }
return is_array($id) ? $links : ($links[$id] ? $links[$id] : array()); return is_array($id) ? $links : ($links[$id] ?? []);
} }
private static function _add2links($row,$left,$only_app,$not_only,array &$links) private static function _add2links($row,$left,$only_app,$not_only,array &$links)

View File

@ -3211,7 +3211,7 @@ class Mail
} }
//error_log(__METHOD__.__LINE__.array2string($autoFolderObjects)); //error_log(__METHOD__.__LINE__.array2string($autoFolderObjects));
if (!$isGoogleMail) { if (!$isGoogleMail) {
$folders = array_merge($inboxFolderObject,$autoFolderObjects,(array)$inboxSubFolderObjects,(array)$folders,(array)$typeFolderObject['others'] ?? [],(array)$typeFolderObject['shared'] ?? []); $folders = array_merge($inboxFolderObject,$autoFolderObjects,(array)$inboxSubFolderObjects,(array)$folders,(array)($typeFolderObject['others'] ?? []),(array)($typeFolderObject['shared'] ?? []));
} else { } else {
// avoid calling sortByAutoFolder as it is not regarding subfolders // avoid calling sortByAutoFolder as it is not regarding subfolders
$gAutoFolderObjectsTmp = $googleAutoFolderObjects; $gAutoFolderObjectsTmp = $googleAutoFolderObjects;

View File

@ -549,7 +549,7 @@ class Account implements \ArrayAccess
$row = array_merge($row, Credentials::from_session($row)); $row = array_merge($row, Credentials::from_session($row));
} }
// fill an empty ident_realname or ident_email of current user with data from user account // fill an empty ident_realname or ident_email of current user with data from user account
if ($replace_placeholders && (!isset($user) || $user == $GLOBALS['egw_info']['user']['acount_id'])) if ($replace_placeholders && (!isset($user) || $user == $GLOBALS['egw_info']['user']['account_id']))
{ {
if (empty($row['ident_realname'])) $row['ident_realname'] = $GLOBALS['egw_info']['user']['account_fullname']; if (empty($row['ident_realname'])) $row['ident_realname'] = $GLOBALS['egw_info']['user']['account_fullname'];
if (empty($row['ident_email'])) $row['ident_email'] = $GLOBALS['egw_info']['user']['account_email']; if (empty($row['ident_email'])) $row['ident_email'] = $GLOBALS['egw_info']['user']['account_email'];

View File

@ -169,7 +169,7 @@ class Html
if ($addbracesforendtag === true ) if ($addbracesforendtag === true )
{ {
if (stripos($_body,'<'.$tag)!==false) $ct = preg_match_all('#<'.$tag.'(?:\s.*)?>(.+)</'.$endtag.'>#isU', $_body, $found); if (stripos($_body,'<'.$tag)!==false) $ct = preg_match_all('#<'.$tag.'(?:\s.*)?>(.+)</'.$endtag.'>#isU', $_body, $found);
if ($ct>0) if (isset($ct) && $ct>0)
{ {
//error_log(__METHOD__.__LINE__.array2string($found[0])); //error_log(__METHOD__.__LINE__.array2string($found[0]));
// only replace what we have found // only replace what we have found
@ -495,7 +495,7 @@ class Html
$html = preg_replace('/&(?!#?[a-zA-Z0-9]+;)/', '&amp;', $html); $html = preg_replace('/&(?!#?[a-zA-Z0-9]+;)/', '&amp;', $html);
$dom = new \DOMDocument('1.0','UTF-8'); $dom = new \DOMDocument('1.0','UTF-8');
if(!$dom->loadHTML( if (!@$dom->loadHTML(
'<?xml encoding="UTF-8">'. Api\Translation::convert($html,preg_match('/<meta[^>]+content="[^>"]+charset=([^;"]+)/i', $html, $matches) ? $matches[1] : false, 'utf8'), '<?xml encoding="UTF-8">'. Api\Translation::convert($html,preg_match('/<meta[^>]+content="[^>"]+charset=([^;"]+)/i', $html, $matches) ? $matches[1] : false, 'utf8'),
LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD | LIBXML_NOBLANKS LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD | LIBXML_NOBLANKS
)) ))

View File

@ -360,8 +360,8 @@ class Imap extends Horde_Imap_Client_Socket implements Imap\PushIface
*/ */
static function getTimeOut($_use='IMAP') static function getTimeOut($_use='IMAP')
{ {
$timeout = $GLOBALS['egw_info']['user']['preferences']['mail']['connectionTimeout']; if (empty($timeout = $GLOBALS['egw_info']['user']['preferences']['mail']['connectionTimeout']) || !((int)$timeout > 0))
if (empty($timeout) || !($timeout > 0)) $timeout = $_use == 'SIEVE' ? 10 : 20; // this is the default value $timeout = $_use == 'SIEVE' ? 10 : 20; // this is the default value
return $timeout; return $timeout;
} }
@ -742,7 +742,7 @@ class Imap extends Horde_Imap_Client_Socket implements Imap\PushIface
* @param string $returnAttributes true means return an assoc array containing mailbox names and mailbox attributes * @param string $returnAttributes true means return an assoc array containing mailbox names and mailbox attributes
* false - the default - means return an array of mailboxes with only selected attributes like delimiter * false - the default - means return an array of mailboxes with only selected attributes like delimiter
* *
* @return mixed array of mailboxes * @return ?array array of mailboxes or null
*/ */
function listSubscribedMailboxes($reference = '' , $restriction_search = 0, $returnAttributes = false) function listSubscribedMailboxes($reference = '' , $restriction_search = 0, $returnAttributes = false)
{ {
@ -794,10 +794,10 @@ class Imap extends Horde_Imap_Client_Socket implements Imap\PushIface
} }
else else
{ {
$ret[$k]=array('MAILBOX'=>$k,'ATTRIBUTES'=>$box['attributes'],'delimiter'=>($box['delimiter']?$box['delimiter']:$this->getDelimiter('personal')),'SUBSCRIBED'=>true); $ret[$k]=array('MAILBOX'=>$k,'ATTRIBUTES'=>$box['attributes'],'delimiter'=>($box['delimiter']?:$this->getDelimiter('personal')),'SUBSCRIBED'=>true);
} }
} }
return $ret; return $ret ?? null;
} }
/** /**

View File

@ -73,7 +73,7 @@ class Notifications
$account_specific = 0; $account_specific = 0;
foreach($rows as $row) foreach($rows as $row)
{ {
if ($row['account_id']) if (!empty($row['account_id']))
{ {
$account_specific = $row['account_id']; $account_specific = $row['account_id'];
} }
@ -82,7 +82,7 @@ class Notifications
{ {
self::$cache[$acc_id][$row['account_id']][] = $row['notif_folder']; self::$cache[$acc_id][$row['account_id']][] = $row['notif_folder'];
} // make sure set the account_specific correctly when notify_folder gets removed } // make sure set the account_specific correctly when notify_folder gets removed
elseif (!$row['account_id'] && !is_array($account_id) && is_array($rows[$account_id])) elseif (empty($row['account_id']) && !is_array($account_id) && is_array($rows[$account_id]))
{ {
$account_specific = $account_id; $account_specific = $account_id;
} }

View File

@ -150,10 +150,10 @@ class Script
$rule['anyof'] = ($bits[8] & $anyofbit); $rule['anyof'] = ($bits[8] & $anyofbit);
$rule['keep'] = ($bits[8] & $keepbit); $rule['keep'] = ($bits[8] & $keepbit);
$rule['regexp'] = ($bits[8] & $regexbit); $rule['regexp'] = ($bits[8] & $regexbit);
$rule['bodytransform'] = ($bits[12]); $rule['bodytransform'] = ($bits[12]??null);
$rule['field_bodytransform'] = ($bits[13]); $rule['field_bodytransform'] = ($bits[13]??null);
$rule['ctype'] = ($bits[14]); $rule['ctype'] = ($bits[14]??null);
$rule['field_ctype_val'] = ($bits[15]); $rule['field_ctype_val'] = ($bits[15]??null);
$rule['unconditional'] = 0; $rule['unconditional'] = 0;
if (!$rule['from'] && !$rule['to'] && !$rule['subject'] && if (!$rule['from'] && !$rule['to'] && !$rule['subject'] &&
!$rule['field'] && !$rule['size'] && $rule['action']) { !$rule['field'] && !$rule['size'] && $rule['action']) {
@ -188,7 +188,7 @@ class Script
} }
$vacation['addresses'] = &$vaddresses; $vacation['addresses'] = &$vaddresses;
$vacation['forwards'] = $bits[5]; $vacation['forwards'] = $bits[5]??null;
} }
break; break;
case "notify": case "notify":

View File

@ -94,7 +94,7 @@ class Sql extends Mail\Smtp
); );
} }
} }
if ($this->debug) error_log(__METHOD__."('$_accountName') returning ".array2string($emailAddresses)); if (!empty($this->debug)) error_log(__METHOD__."('$_accountName') returning ".array2string($emailAddresses));
return $emailAddresses; return $emailAddresses;
} }
@ -191,7 +191,7 @@ class Sql extends Mail\Smtp
case self::TYPE_MAILBOX: case self::TYPE_MAILBOX:
$userData['mailMessageStore'] = $row['mail_value']; $userData['mailMessageStore'] = $row['mail_value'];
//error_log(__METHOD__."('$user') row=".array2string($row).', enabled[$row[account_id]]='.array2string($enabled[$row['account_id']]).', forwardOnly[$row[account_id]]='.array2string($forwardOnly[$row['account_id']])); //error_log(__METHOD__."('$user') row=".array2string($row).', enabled[$row[account_id]]='.array2string($enabled[$row['account_id']]).', forwardOnly[$row[account_id]]='.array2string($forwardOnly[$row['account_id']]));
if ($row['account_id'] > 0 && $enabled[$row['account_id']] && !$forwardOnly[$row['account_id']]) if ($row['account_id'] > 0 && !empty($enabled[$row['account_id']]) && empty($forwardOnly[$row['account_id']]))
{ {
$userData['uid'][] = $this->accounts->id2name($row['account_id'], 'account_lid'); $userData['uid'][] = $this->accounts->id2name($row['account_id'], 'account_lid');
$userData['mailbox'][] = $row['mail_value']; $userData['mailbox'][] = $row['mail_value'];
@ -218,7 +218,7 @@ class Sql extends Mail\Smtp
} }
} }
} }
if ($this->debug) error_log(__METHOD__."('$user') returning ".array2string($userData)); if (!empty($this->debug)) error_log(__METHOD__."('$user') returning ".array2string($userData));
return $userData; return $userData;
} }
@ -240,7 +240,7 @@ class Sql extends Mail\Smtp
function setUserData($_uidnumber, array $_mailAlternateAddress, array $_mailForwardingAddress, $_deliveryMode, function setUserData($_uidnumber, array $_mailAlternateAddress, array $_mailForwardingAddress, $_deliveryMode,
$_accountStatus, $_mailLocalAddress, $_quota, $_forwarding_only=false, $_setMailbox=null) $_accountStatus, $_mailLocalAddress, $_quota, $_forwarding_only=false, $_setMailbox=null)
{ {
if ($this->debug) error_log(__METHOD__."($_uidnumber, ".array2string($_mailAlternateAddress).', '.array2string($_mailForwardingAddress).", '$_deliveryMode', '$_accountStatus', '$_mailLocalAddress', $_quota, forwarding_only=".array2string($_forwarding_only).') '.function_backtrace()); if (!empty($this->debug)) error_log(__METHOD__."($_uidnumber, ".array2string($_mailAlternateAddress).', '.array2string($_mailForwardingAddress).", '$_deliveryMode', '$_accountStatus', '$_mailLocalAddress', $_quota, forwarding_only=".array2string($_forwarding_only).') '.function_backtrace());
if (!$_forwarding_only && $this->accounts->id2name($_uidnumber, 'account_email') !== $_mailLocalAddress) if (!$_forwarding_only && $this->accounts->id2name($_uidnumber, 'account_email') !== $_mailLocalAddress)
{ {

View File

@ -564,7 +564,7 @@ class Mailer extends Horde_Mime_Mail
if (!isset($flowed)) $flowed = $this->_body && !in_array($this->_body->getType(), array('multipart/encrypted', 'multipart/signed')); if (!isset($flowed)) $flowed = $this->_body && !in_array($this->_body->getType(), array('multipart/encrypted', 'multipart/signed'));
// check if flowed is disabled in mail site configuration // check if flowed is disabled in mail site configuration
if (($config = Config::read('mail')) && $config['disable_rfc3676_flowed']) if (($config = Config::read('mail')) && !empty($config['disable_rfc3676_flowed']))
{ {
$flowed = false; $flowed = false;
} }
@ -616,7 +616,7 @@ class Mailer extends Horde_Mime_Mail
} }
// log mails to file specified in $GLOBALS['egw_info']['server']['log_mail'] or error_log for true // log mails to file specified in $GLOBALS['egw_info']['server']['log_mail'] or error_log for true
if ($GLOBALS['egw_info']['server']['log_mail']) if (!empty($GLOBALS['egw_info']['server']['log_mail']))
{ {
$msg = $GLOBALS['egw_info']['server']['log_mail'] !== true ? date('Y-m-d H:i:s')."\n" : ''; $msg = $GLOBALS['egw_info']['server']['log_mail'] !== true ? date('Y-m-d H:i:s')."\n" : '';
$msg .= (!isset($e) ? 'Mail send' : 'Mail NOT send'). $msg .= (!isset($e) ? 'Mail send' : 'Mail NOT send').
@ -732,7 +732,7 @@ class Mailer extends Horde_Mime_Mail
$recipients->add($h->getAddressList()); $recipients->add($h->getAddressList());
} }
} }
if ($this->_bcc) { if (!empty($this->_bcc)) {
$recipients->add($this->_bcc); $recipients->add($this->_bcc);
} }

View File

@ -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
if (strpos($ret_url=$url, '?') !== false) list($ret_url,$othervars) = explode('?', $url, 2)+[null,null]; list($ret_url,$othervars) = explode('?', $url, 2)+[null,null];
if ($extravars && is_array($extravars)) if ($extravars && is_array($extravars))
{ {
$vars += $extravars; $vars += $extravars;

View File

@ -636,13 +636,13 @@ abstract class Tracking
{ {
//error_log(__METHOD__."() data[$this->assigned_field]=".print_r($data[$this->assigned_field],true).", old[$this->assigned_field]=".print_r($old[$this->assigned_field],true)); //error_log(__METHOD__."() data[$this->assigned_field]=".print_r($data[$this->assigned_field],true).", old[$this->assigned_field]=".print_r($old[$this->assigned_field],true));
$old_assignees = array(); $old_assignees = array();
$assignees = $assigned ? $assigned : array(); $assignees = $assigned ?? array();
if ($data[$this->assigned_field]) // current assignments if (!empty($data[$this->assigned_field])) // current assignments
{ {
$assignees = is_array($data[$this->assigned_field]) ? $assignees = is_array($data[$this->assigned_field]) ?
$data[$this->assigned_field] : explode(',',$data[$this->assigned_field]); $data[$this->assigned_field] : explode(',',$data[$this->assigned_field]);
} }
if ($old && $old[$this->assigned_field]) if ($old && !empty($old[$this->assigned_field]))
{ {
$old_assignees = is_array($old[$this->assigned_field]) ? $old_assignees = is_array($old[$this->assigned_field]) ?
$old[$this->assigned_field] : explode(',',$old[$this->assigned_field]); $old[$this->assigned_field] : explode(',',$old[$this->assigned_field]);
@ -1127,18 +1127,18 @@ abstract class Tracking
//if ($modified) error_log("data[$name]=".print_r($data[$name],true).", old[$name]=".print_r($old[$name],true)." --> modified=".(int)$modified); //if ($modified) error_log("data[$name]=".print_r($data[$name],true).", old[$name]=".print_r($old[$name],true)." --> modified=".(int)$modified);
if (empty($detail['value']) && !$modified) continue; // skip unchanged, empty values if (empty($detail['value']) && !$modified) continue; // skip unchanged, empty values
$body .= $this->format_line($html_email,$detail['type'],$modified, $body .= $this->format_line($html_email, $detail['type'] ?? null, $modified,
$detail['label'] ? $detail['label'] : '', $detail['value']); $detail['label'] ?? '', $detail['value']);
} }
if ($html_email) if ($html_email)
{ {
$body .= "</table>\n"; $body .= "</table>\n";
} }
if(($sig = $this->get_signature($data,$old,$receiver))) if (($sig = $this->get_signature($data,$old,$receiver)))
{ {
$body .= ($html_email ? '<br />':'') . "\n$sig"; $body .= ($html_email ? '<br />':'') . "\n$sig";
} }
if (!$html_email && $data['tr_edit_mode'] == 'html') if (!$html_email && isset($data['tr_edit_mode']) && $data['tr_edit_mode'] === 'html')
{ {
$body = Api\Mail\Html::convertHTMLToText($body); $body = Api\Mail\Html::convertHTMLToText($body);
} }
@ -1271,7 +1271,7 @@ abstract class Tracking
$merge_class = $this->app.'_merge'; $merge_class = $this->app.'_merge';
$merge = new $merge_class(); $merge = new $merge_class();
$error = null; $error = null;
$sig = $merge->merge_string($config['signature'], array($data[$this->id_field]), $error, 'text/html'); $sig = $merge->merge_string($config['signature']??null, array($data[$this->id_field]), $error, 'text/html');
if($error) if($error)
{ {
error_log($error); error_log($error);

View File

@ -335,21 +335,20 @@ class Base
$url = str_replace($matches[0], $matches[1] . Vfs::concat($matches[2], substr($parts['path'], strlen($mounted))), $url); $url = str_replace($matches[0], $matches[1] . Vfs::concat($matches[2], substr($parts['path'], strlen($mounted))), $url);
} }
if($replace_user_pass_host) if ($replace_user_pass_host)
{ {
$url = str_replace(array('$user', $url = strtr($url, [
'$pass', '$user' => $parts['user'],
'$host', '$pass' => $parts['pass'],
'$home'), array($parts['user'], '$host' => $parts['host'],
$parts['pass'], '$home' => $parts['home'],
$parts['host'], ]);
$parts['home']), $url);
} }
if($parts['query']) if (isset($parts['query']))
{ {
$url .= '?' . $parts['query']; $url .= '?' . $parts['query'];
} }
if($parts['fragment']) if (isset($parts['fragment']))
{ {
$url .= '#' . $parts['fragment']; $url .= '#' . $parts['fragment'];
} }
@ -657,7 +656,7 @@ class Base
return false; return false;
} }
$k = (string)Vfs::parse_url($url, PHP_URL_SCHEME); $k = (string)Vfs::parse_url($url, PHP_URL_SCHEME);
if(!(is_array($scheme2urls[$k]))) if (!isset($scheme2urls[$k]))
{ {
$scheme2urls[$k] = array(); $scheme2urls[$k] = array();
} }

View File

@ -798,11 +798,11 @@ class StreamWrapper extends Base implements StreamWrapperIface
{ {
$stat['url'] = $url; $stat['url'] = $url;
} }
if (($stat['mode'] & 0222) && self::url_is_readonly($stat['url'])) if ($stat && ($stat['mode'] & 0222) && self::url_is_readonly($stat['url']))
{ {
$stat['mode'] &= ~0222; $stat['mode'] &= ~0222;
} }
if($stat['url'] && $query && strpos($stat['url'],'?'.$query)===false) if ($stat && $stat['url'] && $query && strpos($stat['url'],'?'.$query) === false)
{ {
$stat['url'] .= '?'.$query; $stat['url'] .= '?'.$query;
} }
@ -998,7 +998,7 @@ class StreamWrapper extends Base implements StreamWrapperIface
} }
else else
{ {
$vfs_fstab = $GLOBALS['egw_info']['user']['preferences']['common']['vfs_fstab']; $vfs_fstab = $GLOBALS['egw_info']['user']['preferences']['common']['vfs_fstab'] ?? [];
} }
if (!empty($vfs_fstab) && is_array($vfs_fstab)) if (!empty($vfs_fstab) && is_array($vfs_fstab))
{ {

View File

@ -228,7 +228,7 @@ class infolog_bo
{ {
foreach(array_keys($config_data['status']) as $key) foreach(array_keys($config_data['status']) as $key)
{ {
if (!is_array($this->status[$key])) if (!isset($this->status[$key]) || !is_array($this->status[$key]))
{ {
$this->status[$key] = array(); $this->status[$key] = array();
} }
@ -262,17 +262,17 @@ class infolog_bo
$save_config = true; $save_config = true;
} }
} }
if ($save_config) Api\Config::save_value('customfields',$this->customfields,'infolog'); if (!empty($save_config)) Api\Config::save_value('customfields',$this->customfields,'infolog');
} }
if (is_array($config_data['responsible_edit'])) if (isset($config_data['responsible_edit']) && is_array($config_data['responsible_edit']))
{ {
$this->responsible_edit = array_merge($this->responsible_edit,$config_data['responsible_edit']); $this->responsible_edit = array_merge($this->responsible_edit,$config_data['responsible_edit']);
} }
if (is_array($config_data['copy_excludefields'])) if (isset($config_data['copy_excludefields']) && is_array($config_data['copy_excludefields']))
{ {
$this->copy_excludefields = array_merge($this->copy_excludefields,$config_data['copy_excludefields']); $this->copy_excludefields = array_merge($this->copy_excludefields,$config_data['copy_excludefields']);
} }
if (is_array($config_data['sub_excludefields']) && $config_data['sub_excludefields']) if (!empty($config_data['sub_excludefields']) && is_array($config_data['sub_excludefields']))
{ {
$this->sub_excludefields = array_merge($this->sub_excludefields,$config_data['sub_excludefields']); $this->sub_excludefields = array_merge($this->sub_excludefields,$config_data['sub_excludefields']);
} }
@ -286,7 +286,7 @@ class infolog_bo
} }
$this->history = $config_data['history']; $this->history = $config_data['history'];
$this->limit_modified_n_month = $config_data['limit_modified_n_month']; $this->limit_modified_n_month = $config_data['limit_modified_n_month'] ?? null;
} }
// sort types by there translation // sort types by there translation
foreach($this->enums['type'] as $key => $val) foreach($this->enums['type'] as $key => $val)
@ -629,12 +629,14 @@ class infolog_bo
if (!$info_id || ($data = $this->so->read($info_id)) === False) if (!$info_id || ($data = $this->so->read($info_id)) === False)
{ {
return null; $null = null;
return $null;
} }
if (!$ignore_acl && !$this->check_access($data,Acl::READ)) // check behind read, to prevent a double read if (!$ignore_acl && !$this->check_access($data,Acl::READ)) // check behind read, to prevent a double read
{ {
return False; $false = False;
return $false;
} }
if ($data['info_subject'] == $this->subject_from_des($data['info_des'])) if ($data['info_subject'] == $this->subject_from_des($data['info_des']))

View File

@ -1,6 +1,6 @@
<?php <?php
/** /**
* eGroupWare - Infolog - importexport * EGroupware - InfoLog - importexport
* *
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package infolog * @package infolog
@ -8,13 +8,12 @@
* @link http://www.egroupware.org * @link http://www.egroupware.org
* @author Nathan Gray * @author Nathan Gray
* @copyright Nathan Gray * @copyright Nathan Gray
* @version $Id$
*/ */
/** /**
* class infolog_egw_record * class infolog_egw_record
* *
* compability layer for iface_egw_record needet for importexport * compatibility layer for iface_egw_record needed for importexport
*/ */
class infolog_egw_record implements importexport_iface_egw_record class infolog_egw_record implements importexport_iface_egw_record
{ {
@ -53,7 +52,7 @@ class infolog_egw_record implements importexport_iface_egw_record
* @param string $_attribute_name * @param string $_attribute_name
*/ */
public function __get($_attribute_name) { public function __get($_attribute_name) {
return $this->record[$_attribute_name]; return $this->record[$_attribute_name] ?? null;
} }
/** /**

View File

@ -138,7 +138,7 @@ class infolog_merge extends Api\Storage\Merge
// Set any missing custom fields, or the marker will stay // Set any missing custom fields, or the marker will stay
foreach($this->bo->customfields as $name => $field) foreach($this->bo->customfields as $name => $field)
{ {
if(!$array['#'.$name]) if (empty($array['#'.$name]))
{ {
$array['#'.$name] = ''; $array['#'.$name] = '';
} }

View File

@ -144,7 +144,7 @@ class infolog_tracking extends Api\Storage\Tracking
*/ */
function get_subject($data, $old, $deleted = null, $receiver = null) function get_subject($data, $old, $deleted = null, $receiver = null)
{ {
if ($data['prefix']) if (!empty($data['prefix']))
{ {
$prefix = $data['prefix']; // async notification $prefix = $data['prefix']; // async notification
} }
@ -172,7 +172,7 @@ class infolog_tracking extends Api\Storage\Tracking
*/ */
function get_message($data, $old, $receiver = null) function get_message($data, $old, $receiver = null)
{ {
if ($data['message']) return $data['message']; // async notification if (!empty($data['message'])) return $data['message']; // async notification
if (!$old || $old['info_status'] == 'deleted') if (!$old || $old['info_status'] == 'deleted')
{ {
@ -345,16 +345,16 @@ class infolog_tracking extends Api\Storage\Tracking
return ''; return '';
} }
// Per-type notification // Per-type notification
$type_config = $info_config[self::CUSTOM_NOTIFICATION][$data['info_type']]; $type_config = $info_config[self::CUSTOM_NOTIFICATION][$data['info_type']] ?? null;
$global = $info_config[self::CUSTOM_NOTIFICATION]['~global~']; $global = $info_config[self::CUSTOM_NOTIFICATION]['~global~'];
// Disabled // Disabled
if(!$type_config['use_custom'] && !$global['use_custom']) return ''; if(empty($type_config['use_custom']) && empty($global['use_custom'])) return '';
// Type or globabl // Type or global
$config = trim(strip_tags($type_config['message'])) != '' && $type_config['use_custom'] ? $type_config['message'] : $global['message']; $config = trim(strip_tags($type_config['message'])) != '' && $type_config['use_custom'] ? $type_config['message'] : $global['message'];
break; break;
} }
return $config; return $config ?? null;
} }
} }

View File

@ -1874,7 +1874,7 @@ class infolog_ui
$content['link_to']['to_app'] = 'infolog'; $content['link_to']['to_app'] = 'infolog';
$content['link_to']['to_id'] = $info_id; $content['link_to']['to_id'] = $info_id;
/* $info_link_id is never defined
if ($info_link_id && strpos($info_link_id,':') !== false) // updating info_link_id if necessary if ($info_link_id && strpos($info_link_id,':') !== false) // updating info_link_id if necessary
{ {
list($app,$id) = explode(':',$info_link_id); list($app,$id) = explode(':',$info_link_id);
@ -1903,7 +1903,7 @@ class infolog_ui
// we need eg. the new modification date, for further updates // we need eg. the new modification date, for further updates
$content = array_merge($content,$to_write); $content = array_merge($content,$to_write);
} }
} }*/
// Need to purge description history after encryption? // Need to purge description history after encryption?
if($content['clean_history']) if($content['clean_history'])
@ -2115,7 +2115,7 @@ class infolog_ui
// remove types owned by groups the user has no edit grant (current type is made readonly) // remove types owned by groups the user has no edit grant (current type is made readonly)
foreach($this->bo->group_owners as $type => $group) foreach($this->bo->group_owners as $type => $group)
{ {
if (!($this->bo->grants[$group] & Acl::EDIT)) if (!(($this->bo->grants[$group]??0) & Acl::EDIT))
{ {
if ($type == $content['info_type']) if ($type == $content['info_type'])
{ {
@ -2172,7 +2172,7 @@ class infolog_ui
$readonlys['action'] = true; $readonlys['action'] = true;
} }
// ToDo: use the old status before the delete // ToDo: use the old status before the delete
if ($info_id && $undelete) if ($info_id && !empty($undelete))
{ {
$content['info_status'] = $this->bo->status['defaults'][$content['info_type']]; $content['info_status'] = $this->bo->status['defaults'][$content['info_type']];
$this->tmpl->setElementAttribute('button[save]', 'label', 'Un-Delete'); $this->tmpl->setElementAttribute('button[save]', 'label', 'Un-Delete');
@ -2187,7 +2187,7 @@ class infolog_ui
// use a typ-specific template (infolog.edit.xyz), if one exists, otherwise fall back to the generic one // use a typ-specific template (infolog.edit.xyz), if one exists, otherwise fall back to the generic one
if (!$this->tmpl->read('infolog.edit.'.$content['info_type'])) if (!$this->tmpl->read('infolog.edit.'.$content['info_type']))
{ {
$this->tmpl->read($print ? 'infolog.edit.print':'infolog.edit'); $this->tmpl->read(!empty($print) ? 'infolog.edit.print' : 'infolog.edit');
} }
if ($this->bo->has_customfields($content['info_type'])) if ($this->bo->has_customfields($content['info_type']))
{ {
@ -2252,7 +2252,7 @@ class infolog_ui
$tracking = new infolog_tracking($this); $tracking = new infolog_tracking($this);
foreach($tracking->field2history as $field => $history) foreach($tracking->field2history as $field => $history)
{ {
$history_stati[$history] = $tracking->field2label[$field]; $history_stati[$history] = $tracking->field2label[$field] ?? null;
} }
// Modified date removed from field2history, we don't need that in the history // Modified date removed from field2history, we don't need that in the history
$history_stati['Mo'] = $tracking->field2label['info_datemodified']; $history_stati['Mo'] = $tracking->field2label['info_datemodified'];
@ -2276,20 +2276,20 @@ class infolog_ui
'to_tracker' => array('label' => 'Tracker', 'title' => 'Convert to a ticket'), 'to_tracker' => array('label' => 'Tracker', 'title' => 'Convert to a ticket'),
), ),
); );
if ($GLOBALS['egw_info']['user']['apps']['calendar']) if (!empty($GLOBALS['egw_info']['user']['apps']['calendar']))
{ {
$sel_options['action']['schedule'] = array('label' => 'Schedule', 'title' => 'Schedule appointment'); $sel_options['action']['schedule'] = array('label' => 'Schedule', 'title' => 'Schedule appointment');
} }
if ($GLOBALS['egw_info']['user']['apps']['stylite'] && !$GLOBALS['egw_info']['server']['disable_pgp_encryption']) if (!empty($GLOBALS['egw_info']['user']['apps']['stylite']) && empty($GLOBALS['egw_info']['server']['disable_pgp_encryption']))
{ {
$content['encryption_ts'] = filemtime(EGW_SERVER_ROOT.'/stylite/js/app.js'); $content['encryption_ts'] = filemtime(EGW_SERVER_ROOT.'/stylite/js/app.js');
} }
elseif ($GLOBALS['egw_info']['server']['disable_pgp_encryption']) elseif (!empty($GLOBALS['egw_info']['server']['disable_pgp_encryption']))
{ {
$readonlys['encrypt'] = true; $readonlys['encrypt'] = true;
} }
$GLOBALS['egw_info']['flags']['app_header'] = lang('InfoLog').' - '. $GLOBALS['egw_info']['flags']['app_header'] = lang('InfoLog').' - '.
($content['status_only'] ? lang('Edit Status') : lang('Edit')); (!empty($content['status_only']) ? lang('Edit Status') : lang('Edit'));
$GLOBALS['egw_info']['flags']['params']['manual'] = array('page' => ($info_id ? 'ManualInfologEdit' : 'ManualInfologAdd')); $GLOBALS['egw_info']['flags']['params']['manual'] = array('page' => ($info_id ? 'ManualInfologEdit' : 'ManualInfologAdd'));
//error_log(substr($content['info_des'],1793,10)); //error_log(substr($content['info_des'],1793,10));
//$content['info_des'] = substr($content['info_des'],0,1793); //$content['info_des'] = substr($content['info_des'],0,1793);

View File

@ -216,7 +216,7 @@ class mail_compose
); );
$acc_smime = Mail\Smime::get_acc_smime($content['mailaccount']); $acc_smime = Mail\Smime::get_acc_smime($content['mailaccount']);
if ($acc_smime['acc_smime_password']) if ($acc_smime && !empty($acc_smime['acc_smime_password']))
{ {
$actions = array_merge($actions, array( $actions = array_merge($actions, array(
'smime_sign' => array ( 'smime_sign' => array (
@ -271,9 +271,9 @@ class mail_compose
} }
unset($actions['pgp']); unset($actions['pgp']);
} }
if ($GLOBALS['egw_info']['server']['disable_pgp_encryption']) unset($actions['pgp']); if (!empty($GLOBALS['egw_info']['server']['disable_pgp_encryption'])) unset($actions['pgp']);
// remove vfs actions if the user has no run access to filemanager // remove vfs actions if the user has no run access to filemanager
if (!$GLOBALS['egw_info']['user']['apps']['filemanager']) if (empty($GLOBALS['egw_info']['user']['apps']['filemanager']))
{ {
unset($actions['save2vfs']); unset($actions['save2vfs']);
unset($actions['selectFromVFSForCompose']); unset($actions['selectFromVFSForCompose']);
@ -1242,16 +1242,16 @@ class mail_compose
// address stuff like from, to, cc, replyto // address stuff like from, to, cc, replyto
$destinationRows = 0; $destinationRows = 0;
foreach(self::$destinations as $destination) { foreach(self::$destinations as $destination) {
if (!is_array($content[$destination])) if (!empty($content[$destination]) && !is_array($content[$destination]))
{ {
if (!empty($content[$destination])) $content[$destination] = (array)$content[$destination]; $content[$destination] = (array)$content[$destination];
} }
$addr_content = $content[strtolower($destination)]; $addr_content = $content[strtolower($destination)] ?? [];
// we clear the given address array and rebuild it // we clear the given address array and rebuild it
unset($content[strtolower($destination)]); unset($content[strtolower($destination)]);
foreach((array)$addr_content as $key => $value) { foreach($addr_content as $value) {
if ($value=="NIL@NIL") continue; if ($value === "NIL@NIL") continue;
if ($destination=='replyto' && str_replace('"','',$value) == if ($destination === 'replyto' && str_replace('"','',$value) ===
str_replace('"','',$identities[$this->mail_bo->getDefaultIdentity()])) str_replace('"','',$identities[$this->mail_bo->getDefaultIdentity()]))
{ {
// preserve/restore the value to content. // preserve/restore the value to content.
@ -1261,7 +1261,7 @@ class mail_compose
//error_log(__METHOD__.__LINE__.array2string(array('key'=>$key,'value'=>$value))); //error_log(__METHOD__.__LINE__.array2string(array('key'=>$key,'value'=>$value)));
$value = str_replace("\"\"",'"', htmlspecialchars_decode($value, ENT_COMPAT)); $value = str_replace("\"\"",'"', htmlspecialchars_decode($value, ENT_COMPAT));
foreach(Mail::parseAddressList($value) as $addressObject) { foreach(Mail::parseAddressList($value) as $addressObject) {
if ($addressObject->host == '.SYNTAX-ERROR.') continue; if ($addressObject->host === '.SYNTAX-ERROR.') continue;
$address = imap_rfc822_write_address($addressObject->mailbox,$addressObject->host,$addressObject->personal); $address = imap_rfc822_write_address($addressObject->mailbox,$addressObject->host,$addressObject->personal);
//$address = Mail::htmlentities($address, $this->displayCharset); //$address = Mail::htmlentities($address, $this->displayCharset);
$content[strtolower($destination)][]=$address; $content[strtolower($destination)][]=$address;
@ -1289,7 +1289,7 @@ class mail_compose
$content['mail_'.($content['mimeType'] == 'html'?'html':'plain').'text'] =$content['body']; $content['mail_'.($content['mimeType'] == 'html'?'html':'plain').'text'] =$content['body'];
$content['showtempname']=0; $content['showtempname']=0;
//if (is_array($content['attachments']))error_log(__METHOD__.__LINE__.'before merging content with uploadforCompose:'.array2string($content['attachments'])); //if (is_array($content['attachments']))error_log(__METHOD__.__LINE__.'before merging content with uploadforCompose:'.array2string($content['attachments']));
$content['attachments']=(is_array($content['attachments'])&&is_array($content['uploadForCompose'])?array_merge($content['attachments'],(!empty($content['uploadForCompose'])?$content['uploadForCompose']:array())):(is_array($content['uploadForCompose'])?$content['uploadForCompose']:(is_array($content['attachments'])?$content['attachments']:null))); $content['attachments'] = array_merge($content['attachments'] ?? [], $content['uploadForCompose'] ?? []);
//if (is_array($content['attachments'])) foreach($content['attachments'] as $k => &$file) $file['delete['.$file['tmp_name'].']']=0; //if (is_array($content['attachments'])) foreach($content['attachments'] as $k => &$file) $file['delete['.$file['tmp_name'].']']=0;
$content['no_griddata'] = empty($content['attachments']); $content['no_griddata'] = empty($content['attachments']);
$preserv['attachments'] = $content['attachments']; $preserv['attachments'] = $content['attachments'];
@ -1297,21 +1297,21 @@ class mail_compose
//if (is_array($content['attachments']))error_log(__METHOD__.__LINE__.' Attachments:'.array2string($content['attachments'])); //if (is_array($content['attachments']))error_log(__METHOD__.__LINE__.' Attachments:'.array2string($content['attachments']));
// if no filemanager -> no vfsFileSelector // if no filemanager -> no vfsFileSelector
if (!$GLOBALS['egw_info']['user']['apps']['filemanager']) if (empty($GLOBALS['egw_info']['user']['apps']['filemanager']))
{ {
$content['vfsNotAvailable'] = "mail_DisplayNone"; $content['vfsNotAvailable'] = "mail_DisplayNone";
} }
// if no infolog -> no save as infolog // if no infolog -> no save as infolog
if (!$GLOBALS['egw_info']['user']['apps']['infolog']) if (empty($GLOBALS['egw_info']['user']['apps']['infolog']))
{ {
$content['noInfologAvailable'] = "mail_DisplayNone"; $content['noInfologAvailable'] = "mail_DisplayNone";
} }
// if no tracker -> no save as tracker // if no tracker -> no save as tracker
if (!$GLOBALS['egw_info']['user']['apps']['tracker']) if (empty($GLOBALS['egw_info']['user']['apps']['tracker']))
{ {
$content['noTrackerAvailable'] = "mail_DisplayNone"; $content['noTrackerAvailable'] = "mail_DisplayNone";
} }
if (!$GLOBALS['egw_info']['user']['apps']['infolog'] && !$GLOBALS['egw_info']['user']['apps']['tracker']) if (empty($GLOBALS['egw_info']['user']['apps']['infolog']) && empty($GLOBALS['egw_info']['user']['apps']['tracker']))
{ {
$content['noSaveAsAvailable'] = "mail_DisplayNone"; $content['noSaveAsAvailable'] = "mail_DisplayNone";
} }
@ -1324,12 +1324,12 @@ class mail_compose
$sel_options['mimeType'] = self::$mimeTypes; $sel_options['mimeType'] = self::$mimeTypes;
$sel_options['priority'] = self::$priorities; $sel_options['priority'] = self::$priorities;
$sel_options['filemode'] = Vfs\Sharing::$modes; $sel_options['filemode'] = Vfs\Sharing::$modes;
if (!isset($content['priority']) || empty($content['priority'])) $content['priority']=3; if (empty($content['priority'])) $content['priority']=3;
//$GLOBALS['egw_info']['flags']['currentapp'] = 'mail';//should not be needed //$GLOBALS['egw_info']['flags']['currentapp'] = 'mail';//should not be needed
$etpl = new Etemplate('mail.compose'); $etpl = new Etemplate('mail.compose');
$etpl->setElementAttribute('composeToolbar', 'actions', self::getToolbarActions($content)); $etpl->setElementAttribute('composeToolbar', 'actions', self::getToolbarActions($content));
if ($content['mimeType']=='html') if ($content['mimeType'] === 'html')
{ {
//mode="$cont[rtfEditorFeatures]" validation_rules="$cont[validation_rules]" base_href="$cont[upload_dir]" //mode="$cont[rtfEditorFeatures]" validation_rules="$cont[validation_rules]" base_href="$cont[upload_dir]"
$_htmlConfig = Mail::$htmLawed_config; $_htmlConfig = Mail::$htmLawed_config;
@ -1340,7 +1340,7 @@ class mail_compose
Mail::$htmLawed_config = $_htmlConfig; Mail::$htmLawed_config = $_htmlConfig;
} }
if (isset($content['composeID'])&&!empty($content['composeID'])) if (!empty($content['composeID']))
{ {
$composeCache = $content; $composeCache = $content;
unset($composeCache['body']); unset($composeCache['body']);
@ -1348,23 +1348,23 @@ class mail_compose
unset($composeCache['mail_plaintext']); unset($composeCache['mail_plaintext']);
Api\Cache::setCache(Api\Cache::SESSION,'mail','composeCache'.trim($GLOBALS['egw_info']['user']['account_id']).'_'.$this->composeID,$composeCache,$expiration=60*60*2); Api\Cache::setCache(Api\Cache::SESSION,'mail','composeCache'.trim($GLOBALS['egw_info']['user']['account_id']).'_'.$this->composeID,$composeCache,$expiration=60*60*2);
} }
if (!isset($_content['serverID'])||empty($_content['serverID'])) if (empty($_content['serverID']))
{ {
$content['serverID'] = $this->mail_bo->profileID; $content['serverID'] = $this->mail_bo->profileID;
} }
$preserv['serverID'] = $content['serverID']; $preserv['serverID'] = $content['serverID'];
$preserv['lastDrafted'] = $content['lastDrafted']; $preserv['lastDrafted'] = $content['lastDrafted'] ?? null;
$preserv['processedmail_id'] = $content['processedmail_id']; $preserv['processedmail_id'] = $content['processedmail_id'] ?? null;
$preserv['references'] = $content['references']; $preserv['references'] = $content['references'] ?? null;
$preserv['in-reply-to'] = $content['in-reply-to']; $preserv['in-reply-to'] = $content['in-reply-to'] ?? null;
// thread-topic is a proprietary microsoft header and deprecated with the current version // thread-topic is a proprietary microsoft header and deprecated with the current version
// horde does not support the encoding of thread-topic, and probably will not no so in the future // horde does not support the encoding of thread-topic, and probably will not no so in the future
//$preserv['thread-topic'] = $content['thread-topic']; //$preserv['thread-topic'] = $content['thread-topic'];
$preserv['thread-index'] = $content['thread-index']; $preserv['thread-index'] = $content['thread-index'] ?? null;
$preserv['list-id'] = $content['list-id']; $preserv['list-id'] = $content['list-id'] ?? null;
$preserv['mode'] = $content['mode']; $preserv['mode'] = $content['mode'] ?? null;
// convert it back to checkbox expectations // convert it back to checkbox expectations
if($content['mimeType'] == 'html') { if($content['mimeType'] === 'html') {
$content['mimeType']=1; $content['mimeType']=1;
} else { } else {
$content['mimeType']=0; $content['mimeType']=0;
@ -1391,11 +1391,11 @@ class mail_compose
// Resolve distribution list before send content to client // Resolve distribution list before send content to client
foreach(array('to', 'cc', 'bcc', 'replyto') as $f) foreach(array('to', 'cc', 'bcc', 'replyto') as $f)
{ {
if (is_array($content[$f])) $content[$f]= self::resolveEmailAddressList ($content[$f]); if (isset($content[$f]) && is_array($content[$f])) $content[$f]= self::resolveEmailAddressList ($content[$f]);
} }
// set filemode icons for all attachments // set filemode icons for all attachments
if($content['attachments'] && is_array($content['attachments'])) if(!empty($content['attachments']))
{ {
foreach($content['attachments'] as &$attach) foreach($content['attachments'] as &$attach)
{ {
@ -1407,9 +1407,9 @@ class mail_compose
} }
} }
$content['to'] = self::resolveEmailAddressList($content['to']); if (isset($content['to'])) $content['to'] = self::resolveEmailAddressList($content['to']);
$content['html_toolbar'] = empty(Mail::$mailConfig['html_toolbar']) ? $content['html_toolbar'] = empty(Mail::$mailConfig['html_toolbar']) ?
join(',', Etemplate\Widget\HtmlArea::$toolbar_default_list) : join(',', Mail::$mailConfig['html_toolbar']); implode(',', Etemplate\Widget\HtmlArea::$toolbar_default_list) : implode(',', Mail::$mailConfig['html_toolbar']);
//error_log(__METHOD__.__LINE__.array2string($content)); //error_log(__METHOD__.__LINE__.array2string($content));
$etpl->exec('mail.mail_compose.compose',$content,$sel_options,array(),$preserv,2); $etpl->exec('mail.mail_compose.compose',$content,$sel_options,array(),$preserv,2);
} }
@ -2485,7 +2485,7 @@ class mail_compose
if(!empty($_formData['list-id'])) { if(!empty($_formData['list-id'])) {
$_mailObject->addHeader('List-Id', $_formData['list-id']); $_mailObject->addHeader('List-Id', $_formData['list-id']);
} }
if($_formData['disposition']=='on') { if(isset($_formData['disposition']) && $_formData['disposition'] === 'on') {
$_mailObject->addHeader('Disposition-Notification-To', $_identity['ident_email']); $_mailObject->addHeader('Disposition-Notification-To', $_identity['ident_email']);
} }
@ -2522,7 +2522,7 @@ class mail_compose
if ($_formData['attachments'] && $_formData['filemode'] != Vfs\Sharing::ATTACH && !$_autosaving) if ($_formData['attachments'] && $_formData['filemode'] != Vfs\Sharing::ATTACH && !$_autosaving)
{ {
$attachment_links = $this->_getAttachmentLinks($_formData['attachments'], $_formData['filemode'], $attachment_links = $this->_getAttachmentLinks($_formData['attachments'], $_formData['filemode'],
$_formData['mimeType'] == 'html', $_formData['mimeType'] === 'html',
array_unique(array_merge((array)$_formData['to'], (array)$_formData['cc'], (array)$_formData['bcc'])), array_unique(array_merge((array)$_formData['to'], (array)$_formData['cc'], (array)$_formData['bcc'])),
$_formData['expiration'], $_formData['password']); $_formData['expiration'], $_formData['password']);
} }
@ -2530,7 +2530,7 @@ class mail_compose
{ {
case 'html': case 'html':
$body = $_formData['body']; $body = $_formData['body'];
if ($attachment_links) if (!empty($attachment_links))
{ {
if (strpos($body, '<!-- HTMLSIGBEGIN -->') !== false) if (strpos($body, '<!-- HTMLSIGBEGIN -->') !== false)
{ {
@ -2567,7 +2567,7 @@ class mail_compose
default: default:
$body = $this->convertHTMLToText($_formData['body'],false, false, true, true); $body = $this->convertHTMLToText($_formData['body'],false, false, true, true);
if ($attachment_links) $body .= $attachment_links; if (!empty($attachment_links)) $body .= $attachment_links;
#$_mailObject->Body = $_formData['body']; #$_mailObject->Body = $_formData['body'];
if(!empty($signature)) { if(!empty($signature)) {
@ -2653,7 +2653,7 @@ class mail_compose
} }
if ($connection_opened) $mail_bo->closeConnection(); if ($connection_opened) $mail_bo->closeConnection();
} }
return is_array($inline_images)?$inline_images:array(); return $inline_images ?? [];
} }
/** /**
@ -2761,7 +2761,7 @@ class mail_compose
$dmailbox = $dhA['folder']; $dmailbox = $dhA['folder'];
// beware: do not delete the original mail as found in processedmail_id // beware: do not delete the original mail as found in processedmail_id
$pMuid=''; $pMuid='';
if ($content['processedmail_id']) if (!empty($content['processedmail_id']))
{ {
$pMhA = mail_ui::splitRowID($content['processedmail_id']); $pMhA = mail_ui::splitRowID($content['processedmail_id']);
$pMuid = $pMhA['msgUID']; $pMuid = $pMhA['msgUID'];
@ -3021,7 +3021,7 @@ class mail_compose
// create the messages and store inline images // create the messages and store inline images
$inline_images = $this->createMessage($mail, $_formData, $identity); $inline_images = $this->createMessage($mail, $_formData, $identity);
// remember the identity // remember the identity
if ($_formData['to_infolog'] == 'on' || $_formData['to_tracker'] == 'on') $fromAddress = $mail->From;//$mail->FromName.($mail->FromName?' <':'').$mail->From.($mail->FromName?'>':''); if (!empty($mail->From) && ($_formData['to_infolog'] == 'on' || $_formData['to_tracker'] == 'on')) $fromAddress = $mail->From;//$mail->FromName.($mail->FromName?' <':'').$mail->From.($mail->FromName?'>':'');
#print "<pre>". $mail->getMessageHeader() ."</pre><hr><br>"; #print "<pre>". $mail->getMessageHeader() ."</pre><hr><br>";
#print "<pre>". $mail->getMessageBody() ."</pre><hr><br>"; #print "<pre>". $mail->getMessageBody() ."</pre><hr><br>";
#exit; #exit;
@ -3317,14 +3317,14 @@ class mail_compose
if (isset($lastDrafted['uid']) && !empty($lastDrafted['uid'])) $lastDrafted['uid']=trim($lastDrafted['uid']); if (isset($lastDrafted['uid']) && !empty($lastDrafted['uid'])) $lastDrafted['uid']=trim($lastDrafted['uid']);
// manually drafted, do not delete // manually drafted, do not delete
// will be handled later on IF mode was $_formData['mode']=='composefromdraft' // will be handled later on IF mode was $_formData['mode']=='composefromdraft'
if (isset($lastDrafted['uid']) && (empty($lastDrafted['uid']) || $lastDrafted['uid'] == $this->sessionData['uid'])) $lastDrafted=false; if (isset($lastDrafted['uid']) && (empty($lastDrafted['uid']) || $lastDrafted['uid'] == ($this->sessionData['uid']??null))) $lastDrafted=false;
//error_log(__METHOD__.__LINE__.array2string($lastDrafted)); //error_log(__METHOD__.__LINE__.array2string($lastDrafted));
} }
if ($lastDrafted && is_array($lastDrafted) && $mail_bo->isDraftFolder($lastDrafted['folder'])) if ($lastDrafted && is_array($lastDrafted) && $mail_bo->isDraftFolder($lastDrafted['folder']))
{ {
try try
{ {
if ($this->sessionData['lastDrafted'] != $this->sessionData['uid'] || !($_formData['mode']=='composefromdraft' && if ($this->sessionData['lastDrafted'] != ($this->sessionData['uid']??null) || !($_formData['mode']=='composefromdraft' &&
($_formData['to_infolog'] == 'on' || $_formData['to_tracker'] == 'on' || $_formData['to_calendar'] == 'on' )&&$this->sessionData['attachments'])) ($_formData['to_infolog'] == 'on' || $_formData['to_tracker'] == 'on' || $_formData['to_calendar'] == 'on' )&&$this->sessionData['attachments']))
{ {
//error_log(__METHOD__.__LINE__."#".$lastDrafted['uid'].'#'.$lastDrafted['folder'].array2string($_formData)); //error_log(__METHOD__.__LINE__."#".$lastDrafted['uid'].'#'.$lastDrafted['folder'].array2string($_formData));
@ -3399,7 +3399,7 @@ class mail_compose
} }
if (is_array($this->sessionData['cc'])) $mailaddresses['cc'] = $this->sessionData['cc']; if (is_array($this->sessionData['cc'])) $mailaddresses['cc'] = $this->sessionData['cc'];
if (is_array($this->sessionData['bcc'])) $mailaddresses['bcc'] = $this->sessionData['bcc']; if (is_array($this->sessionData['bcc'])) $mailaddresses['bcc'] = $this->sessionData['bcc'];
if (!empty($mailaddresses)) $mailaddresses['from'] = Mail\Html::decodeMailHeader($fromAddress); if (!empty($mailaddresses) && !empty($fromAddress)) $mailaddresses['from'] = Mail\Html::decodeMailHeader($fromAddress);
if ($_formData['to_infolog'] == 'on' || $_formData['to_tracker'] == 'on' || $_formData['to_calendar'] == 'on' ) if ($_formData['to_infolog'] == 'on' || $_formData['to_tracker'] == 'on' || $_formData['to_calendar'] == 'on' )
{ {
@ -3407,7 +3407,7 @@ class mail_compose
foreach(array('to_infolog','to_tracker','to_calendar') as $app_key) foreach(array('to_infolog','to_tracker','to_calendar') as $app_key)
{ {
$entryid = $_formData['to_integrate_ids'][0][$app_key]; $entryid = $_formData['to_integrate_ids'][0][$app_key] ?? null;
if ($_formData[$app_key] == 'on') if ($_formData[$app_key] == 'on')
{ {
$app_name = substr($app_key,3); $app_name = substr($app_key,3);

View File

@ -425,7 +425,7 @@ class mail_ui
protected static function image_proxy() protected static function image_proxy()
{ {
$configs = Api\Config::read('mail'); $configs = Api\Config::read('mail');
$image_proxy = $configs[self::IMAGE_PROXY_CONFIG] ?: self::DEFAULT_IMAGE_PROXY; $image_proxy = $configs[self::IMAGE_PROXY_CONFIG] ?? self::DEFAULT_IMAGE_PROXY;
if (strpos(self::EGROUPWARE_IMAGE_PROXY, parse_url($image_proxy, PHP_URL_HOST))) if (strpos(self::EGROUPWARE_IMAGE_PROXY, parse_url($image_proxy, PHP_URL_HOST)))
{ {
$image_proxy = self::EGROUPWARE_IMAGE_PROXY; $image_proxy = self::EGROUPWARE_IMAGE_PROXY;
@ -565,7 +565,7 @@ class mail_ui
$etpl->setElementAttribute(self::$nm_index.'[foldertree]','actions', $this->get_tree_actions()); $etpl->setElementAttribute(self::$nm_index.'[foldertree]','actions', $this->get_tree_actions());
// sending preview toolbar actions // sending preview toolbar actions
if ($content['mailSplitter']) $etpl->setElementAttribute('mailPreview[toolbar]', 'actions', $this->get_toolbar_actions()); if (!empty($content['mailSplitter'])) $etpl->setElementAttribute('mailPreview[toolbar]', 'actions', $this->get_toolbar_actions());
// We need to send toolbar actions to client-side because view template needs them // We need to send toolbar actions to client-side because view template needs them
if (Api\Header\UserAgent::mobile()) $sel_options['toolbar'] = $this->get_toolbar_actions(); if (Api\Header\UserAgent::mobile()) $sel_options['toolbar'] = $this->get_toolbar_actions();
@ -1827,7 +1827,7 @@ $filter['before']= date("d-M-Y", $cutoffdate2);
// we have an own created rowID; prepend app=mail // we have an own created rowID; prepend app=mail
array_unshift($res,'mail'); array_unshift($res,'mail');
} }
return array('app'=>$res[0], 'accountID'=>$res[1], 'profileID'=>$res[2], 'folder'=>base64_decode($res[3]), 'msgUID'=>$res[4]); return array('app'=>$res[0], 'accountID'=>$res[1]??null, 'profileID'=>$res[2]??null, 'folder'=>base64_decode($res[3]??null), 'msgUID'=>$res[4]??null);
} }
/** /**

View File

@ -160,7 +160,7 @@ class notifications_popup implements notifications_iface {
foreach ($rs as $notification) { foreach ($rs as $notification) {
$actions = null; $actions = null;
$data = json_decode($notification['notify_data'], true); $data = json_decode($notification['notify_data'], true);
if ($data['appname'] && $data['data']) if (!empty($data['appname']) && !empty($data['data']))
{ {
$_actions = Api\Hooks::process (array( $_actions = Api\Hooks::process (array(
'location' => 'notifications_actions', 'location' => 'notifications_actions',
@ -175,7 +175,7 @@ class notifications_popup implements notifications_iface {
'created' => Api\DateTime::server2user($notification['notify_created']), 'created' => Api\DateTime::server2user($notification['notify_created']),
'current' => new Api\DateTime('now'), 'current' => new Api\DateTime('now'),
'actions' => is_array($actions)?$actions:NULL, 'actions' => is_array($actions)?$actions:NULL,
'extra_data' => ($data['data'] ? $data['data'] : array()) 'extra_data' => $data['data'] ?? [],
); );
} }

View File

@ -85,13 +85,13 @@ class pixelegg_framework extends Api\Framework\Ajax
{ {
$ret = parent::_get_css(); $ret = parent::_get_css();
// color to use // color to use
$color = str_replace('custom',$GLOBALS['egw_info']['user']['preferences']['common']['template_custom_color'], $color = str_replace('custom', $GLOBALS['egw_info']['user']['preferences']['common']['template_custom_color'] ?? null,
$GLOBALS['egw_info']['user']['preferences']['common']['template_color']); $GLOBALS['egw_info']['user']['preferences']['common']['template_color'] ?? null);
// Create a dark variant of the color // Create a dark variant of the color
$color_darker = empty($color) ? '' :$this->_color_shader($color, -30); $color_darker = empty($color) ? '' :$this->_color_shader($color, -30);
if (preg_match('/^(#[0-9A-F]+|[A-Z]+)$/i', $GLOBALS['egw_info']['user']['preferences']['common']['sidebox_custom_color'])) if (!empty($GLOBALS['egw_info']['user']['preferences']['common']['sidebox_custom_color']) && preg_match('/^(#[0-9A-F]+|[A-Z]+)$/i', $GLOBALS['egw_info']['user']['preferences']['common']['sidebox_custom_color']))
{ {
$sidebox_color_hover = $GLOBALS['egw_info']['user']['preferences']['common']['sidebox_custom_color']; $sidebox_color_hover = $GLOBALS['egw_info']['user']['preferences']['common']['sidebox_custom_color'];
$sidebox_color = $this->_color_shader($sidebox_color_hover, -30); $sidebox_color = $this->_color_shader($sidebox_color_hover, -30);
@ -101,7 +101,7 @@ class pixelegg_framework extends Api\Framework\Ajax
$sidebox_color_hover = $color; $sidebox_color_hover = $color;
$sidebox_color = $color_darker; $sidebox_color = $color_darker;
} }
if (preg_match('/^(#[0-9A-F]+|[A-Z]+)$/i', $GLOBALS['egw_info']['user']['preferences']['common']['loginbox_custom_color'])) if (!empty($GLOBALS['egw_info']['user']['preferences']['common']['loginbox_custom_color']) && preg_match('/^(#[0-9A-F]+|[A-Z]+)$/i', $GLOBALS['egw_info']['user']['preferences']['common']['loginbox_custom_color']))
{ {
$loginbox_color = $GLOBALS['egw_info']['user']['preferences']['common']['loginbox_custom_color']; $loginbox_color = $GLOBALS['egw_info']['user']['preferences']['common']['loginbox_custom_color'];
} }
@ -109,8 +109,8 @@ class pixelegg_framework extends Api\Framework\Ajax
{ {
$loginbox_color = $color_darker; $loginbox_color = $color_darker;
} }
//alway set header logo used in sharing regardless of custom color being set //always set header logo used in sharing regardless of custom color being set
$header = $GLOBALS['egw_info']['server']['login_logo_header'] ? Api\Framework::get_login_logo_or_bg_url('login_logo_header', 'logo') $header = !empty($GLOBALS['egw_info']['server']['login_logo_header']) ? Api\Framework::get_login_logo_or_bg_url('login_logo_header', 'logo')
: Api\Framework::get_login_logo_or_bg_url('login_logo_file', 'logo'); : Api\Framework::get_login_logo_or_bg_url('login_logo_file', 'logo');
$ret['app_css'] .= " $ret['app_css'] .= "
/* /*