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 18a92797ad
commit 7c40fc0981
42 changed files with 222 additions and 221 deletions

View File

@ -15,8 +15,7 @@
namespace EGroupware\Api;
// 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']]) &&
$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']['server']['auth_type_'.$GLOBALS['egw_info']['flags']['currentapp']];
}
@ -223,11 +222,11 @@ class Auth
{
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));
}
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
$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
$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
$GLOBALS['egw_info']['server']['change_pwd_every_x_days'] &&
$GLOBALS['egw_info']['user']['apps']['preferences'] &&
$GLOBALS['egw_info']['server']['warn_about_upcoming_pwd_change'] &&
!empty($GLOBALS['egw_info']['server']['change_pwd_every_x_days']) &&
!empty($GLOBALS['egw_info']['user']['apps']['preferences']) &&
!empty($GLOBALS['egw_info']['server']['warn_about_upcoming_pwd_change']) &&
$GLOBALS['egw_info']['server']['warn_about_upcoming_pwd_change'] > $daysLeftUntilChangeReq &&
$UserKnowsAboutPwdChange !== true)
{
@ -255,8 +254,8 @@ class Auth
else
{
// login page does not inform user about passwords about to expire
if ($GLOBALS['egw_info']['flags']['currentapp'] != 'login' &&
($GLOBALS['egw_info']['flags']['currentapp'] != 'home' ||
if ($GLOBALS['egw_info']['flags']['currentapp'] !== 'login' &&
($GLOBALS['egw_info']['flags']['currentapp'] !== 'home' ||
strpos($_SERVER['SCRIPT_NAME'], '/home/') !== false))
{
$UserKnowsAboutPwdChange = true;

View File

@ -415,9 +415,9 @@ class Storage
*/
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'],
$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->Type = 'mysql';
}
if ($new_connection)
if (!empty($new_connection))
{
foreach(get_included_files() as $file)
{
@ -1599,7 +1599,7 @@ class Db
{
return $array;
}
if (!$column_definitions)
if (empty($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
self::$pdo = new \PDO($dsn,$egw_db->User,'$egw_db->Password');
}
if ($query)
if (!empty($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)
{
if ($extra['data'] && is_array($extra['data']))
if (!empty($extra['data']) && is_array($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']);
}
if ($extra['readonlys'] && is_array($extra['readonlys']))
if (!empty($extra['readonlys']) && is_array($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']);
}
@ -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
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
$currentapp = $GLOBALS['egw_info']['flags']['currentapp'];
@ -209,7 +209,7 @@ class Etemplate extends Etemplate\Widget\Template
'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
// (some content by reference)
@ -414,7 +414,7 @@ class Etemplate extends Etemplate\Widget\Template
}
$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(
array(

View File

@ -428,9 +428,9 @@ class Request
* @param string $var
* @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;
//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);
// Store properties at top level, so all customfield widgets can share
if($this->attrs['app'])
if (!empty($this->attrs['app']))
{
$app = $this->attrs['app'];
}
@ -141,12 +141,12 @@ class Customfields extends Transformer
// app changed
$customfields = Api\Storage\Customfields::get($app);
}
if($this->attrs['customfields'])
if (!empty($this->attrs['customfields']))
{
$customfields = $this->attrs['customfields'];
}
// Filter fields
if($this->attrs['field-names'])
if (!empty($this->attrs['field-names']))
{
$fields_name = explode(',', $this->attrs['field-names']);
foreach($fields_name as &$f)
@ -162,8 +162,8 @@ class Customfields extends Transformer
$fields = $customfields;
$use_private = self::expand_name($this->attrs['use-private'],0,0,'','',self::$cont);
$this->attrs['sub-type'] = self::expand_name($this->attrs['sub-type'],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'] ?? null,0,0,'','',self::$cont);
foreach((array)$fields as $key => $field)
{
@ -174,7 +174,7 @@ class Customfields extends Transformer
}
// 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]);
}
@ -284,7 +284,7 @@ class Customfields extends Transformer
$type = $field['type'];
// Link-tos needs to change from appname to link-to
if($link_types[$field['type']])
if (!empty($link_types[$field['type']]))
{
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';
}
if($field['values']['min']) $widget->attrs['min'] = $field['values']['min'];
if($field['values']['max']) $widget->attrs['min'] = $field['values']['max'];
if (isset($field['values']['min'])) $widget->attrs['min'] = $field['values']['min'];
if (isset($field['values']['max'])) $widget->attrs['min'] = $field['values']['max'];
break;
case 'vfs-upload':
@ -355,7 +355,7 @@ class Customfields extends Transformer
$field['values'] = Api\Storage\Customfields::get_options_from_file($field['values']['@']);
}
// 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'];
}

View File

@ -42,7 +42,7 @@ class Description extends Etemplate\Widget
*/
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);
$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'];
if (is_string($image)) list($app,$img) = explode('/',$image,2);
if (!$app || !$img || !is_dir(EGW_SERVER_ROOT.'/'.$app) || strpos($img,'/')!==false)
if (is_string($image)) list($app,$img) = explode('/',$image,2)+[null,null];
if (empty($app) || empty($img) || !is_dir(EGW_SERVER_ROOT.'/'.$app) || strpos($img,'/')!==false)
{
$img = $image;
list($app) = explode('.',$form_name);
}
$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'], 'src', $src);
}
}

View File

@ -130,13 +130,13 @@ class Nextmatch extends Etemplate\Widget
$send_value = $value;
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']);
}
// 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']));
$pref_name = "favorite_" .$safe_name;
@ -210,7 +210,7 @@ class Nextmatch extends Etemplate\Widget
}
// 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')) +
Select::typeOptions('select-account',',groups');
@ -894,7 +894,7 @@ class Nextmatch extends Etemplate\Widget
if ($default_attrs) $action += $default_attrs;
// 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(

View File

@ -49,7 +49,8 @@ class Password extends Etemplate\Widget\Textbox
{
$form_name = self::form_name($cname, $this->id, $expand);
$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']);
if (!empty($value))

View File

@ -109,14 +109,14 @@ class Select extends Etemplate\Widget
{
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'] || $this->attrs['multiple'] === 'false');
}
// 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'];
if ((string)$this->attrs['multiple'] == $this->attrs['options'])
@ -124,7 +124,7 @@ class Select extends Etemplate\Widget
unset($this->attrs['options']);
}
}
elseif($this->attrs['rows'] > 1)
elseif(isset($this->attrs['rows']) && $this->attrs['rows'] > 1)
{
$this->attrs['multiple'] = true;
}
@ -311,8 +311,8 @@ class Select extends Etemplate\Widget
{
$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();
$type = $this->attrs['type'] ? $this->attrs['type'] : $this->type;
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->type;
if ($type != 'select' && $type != 'menupopup')
{
// 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]) &&
($type_options = self::typeOptions($this,
// 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']),
$no_lang, $this->attrs['readonly'], self::get_array(self::$request->content, $form_name), $form_name)))
(!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'] ?? false, self::get_array(self::$request->content, $form_name), $form_name)))
{
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);
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
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);
}
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;
$options = array();
switch ($widget_type)
@ -644,7 +644,7 @@ class Select extends Etemplate\Widget
// These are extra info for easy dealing with categories
// client side, without extra loading
'main' => (int)$cat['main'],
'children' => $cat['children'],
'children' => $cat['children'] ?? null,
//add different class per level to allow different styling for each category 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
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");
return self::$cache[$name];
@ -146,7 +146,7 @@ class Template extends Etemplate\Widget
{
static $prefixes = null;
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))
{
@ -184,7 +184,7 @@ class Template extends Etemplate\Widget
$path = $prefix.$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];
$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
// 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'])
{
$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);
}

View File

@ -62,14 +62,14 @@ class Textbox extends Etemplate\Widget
parent::set_attrs($xml, $cloned);
// 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.
if ($this->attrs['size'] < 0)
if (isset($this->attrs['size']) && $this->attrs['size'] < 0)
{
self::setElementAttribute($this->id, 'size', abs($this->attrs['size']));
self::$request->readonlys[$this->id] = false;
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;
}

View File

@ -143,7 +143,7 @@ class Tree extends Etemplate\Widget
parent::set_attrs($xml, $cloned);
// 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);
}
@ -297,21 +297,21 @@ class Tree extends Etemplate\Widget
{
$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);
//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 ($this->attrs['type'])
if (empty(self::$request->sel_options[$form_name])) self::$request->sel_options[$form_name] = [];
if (!empty($this->attrs['type']))
{
// += to keep further options set by app code
self::$request->sel_options[$form_name] += self::typeOptions($this->attrs['type'], $this->attrs['options'],
$no_lang, $this->attrs['readonly'], self::get_array(self::$request->content, $form_name), $form_name);
self::$request->sel_options[$form_name] += self::typeOptions($this->attrs['type'], $this->attrs['options'] ?? null,
$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 != $this->attr['no_lang'])
if (!isset($this->attr['no_lang']) || $no_lang != $this->attr['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)
{
list($rows,$type,$type2,$type3) = explode(',',$legacy_options);
list($rows,$type,$type2,$type3) = explode(',', $legacy_options)+[null,null,null,null];
$no_lang = false;
$options = array();

View File

@ -37,10 +37,10 @@ class Vfs extends File
*/
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));
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']);
}

View File

@ -2,12 +2,12 @@
/**
* EGroupware - Framework for Ajax based templates: jdots & Pixelegg
*
* @link http://www.stylite.de
* @link https://www.egroupware.org
* @package api
* @subpackage framework
* @author Andreas Stöckel <as@stylite.de>
* @author Ralf Becker <rb@stylite.de>
* @author Nathan Gray <ng@stylite.de>
* @author Andreas Stöckel
* @author Ralf Becker <rb@egroupware.org>
* @author Nathan Gray <ng@egroupware.org>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
*/
@ -16,7 +16,7 @@ namespace EGroupware\Api\Framework;
use EGroupware\Api;
/**
* Stylite jdots template
* Framework for Ajax based templates
*/
abstract class Ajax extends Api\Framework
{
@ -88,13 +88,13 @@ abstract class Ajax extends Api\Framework
$width = self::DEFAULT_SIDEBAR_WIDTH;
//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'];
// error_log(__METHOD__.__LINE__."($app):$width --> reading jdotssideboxwidth");
}
//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'];
// 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']='';
// 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';
}
}
@ -1045,16 +1045,16 @@ abstract class Ajax extends Api\Framework
if (self::$footer_done) return; // prevent (multiple) footers
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();
$footer = "\n".$vars['page_generation_time']."\n";
}
}
return $footer.
$GLOBALS['egw_info']['flags']['need_footer']."\n". // eg. javascript, which need to be at the end of the page
return ($footer??'').
($GLOBALS['egw_info']['flags']['need_footer']??'')."\n". // eg. javascript, which need to be at the end of the page
"</body>\n</html>\n";
}

View File

@ -44,12 +44,12 @@ class Bundle
public static function js_includes(array $js_includes)
{
$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
//$bundles = self::all(); Cache::setTree(__CLASS__, 'bundles', $bundles, 7200);
$bundles = Cache::getTree(__CLASS__, 'bundles', array(__CLASS__, 'all'), array(), 7200);
$bundles_ts = $bundles['.ts'];
$bundles_ts = $bundles['.ts'] ?? null;
unset($bundles['.ts']);
foreach($bundles as $name => $files)
{
@ -78,7 +78,7 @@ class Bundle
if (!isset($to_include[$file]))
{
if (($bundle = $file2bundle[$file]))
if (($bundle = $file2bundle[$file] ?? false))
{
//error_log(__METHOD__."() requiring bundle $bundle for $file");
if (!in_array($bundle, $included_bundles))
@ -103,10 +103,10 @@ class Bundle
else
{
unset($query);
list($path, $query) = explode('?', $file, 2);
list($path, $query) = explode('?', $file, 2)+[null,null];
$mod = filemtime(EGW_SERVER_ROOT.$path);
// 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')) &&
(($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)
{
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;
// 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>
$result4 = preg_replace_callback( $Expr, function ($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)
{
$match[3] = substr($match[3],0,strpos($match[3],'&gt',strlen($match[3])-4));
@ -111,7 +112,7 @@ class Html
$match[4] = "&gt;";
}
//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 );
}
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";
}
if (($not_only = $only_app[0] == '!'))
if (!empty($only_app) && ($not_only = $only_app[0] == '!'))
{
$only_app = substr($only_app,1);
}
@ -173,7 +173,7 @@ class Storage
catch(Api\Db\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)

View File

@ -3211,7 +3211,7 @@ class Mail
}
//error_log(__METHOD__.__LINE__.array2string($autoFolderObjects));
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 {
// avoid calling sortByAutoFolder as it is not regarding subfolders
$gAutoFolderObjectsTmp = $googleAutoFolderObjects;

View File

@ -549,7 +549,7 @@ class Account implements \ArrayAccess
$row = array_merge($row, Credentials::from_session($row));
}
// 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_email'])) $row['ident_email'] = $GLOBALS['egw_info']['user']['account_email'];

View File

@ -169,7 +169,7 @@ class Html
if ($addbracesforendtag === true )
{
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]));
// only replace what we have found
@ -495,7 +495,7 @@ class Html
$html = preg_replace('/&(?!#?[a-zA-Z0-9]+;)/', '&amp;', $html);
$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'),
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')
{
$timeout = $GLOBALS['egw_info']['user']['preferences']['mail']['connectionTimeout'];
if (empty($timeout) || !($timeout > 0)) $timeout = $_use == 'SIEVE' ? 10 : 20; // this is the default value
if (empty($timeout = $GLOBALS['egw_info']['user']['preferences']['mail']['connectionTimeout']) || !((int)$timeout > 0))
$timeout = $_use == 'SIEVE' ? 10 : 20; // this is the default value
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
* 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)
{
@ -794,10 +794,10 @@ class Imap extends Horde_Imap_Client_Socket implements Imap\PushIface
}
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;
foreach($rows as $row)
{
if ($row['account_id'])
if (!empty($row['account_id']))
{
$account_specific = $row['account_id'];
}
@ -82,7 +82,7 @@ class Notifications
{
self::$cache[$acc_id][$row['account_id']][] = $row['notif_folder'];
} // 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;
}

View File

@ -150,10 +150,10 @@ class Script
$rule['anyof'] = ($bits[8] & $anyofbit);
$rule['keep'] = ($bits[8] & $keepbit);
$rule['regexp'] = ($bits[8] & $regexbit);
$rule['bodytransform'] = ($bits[12]);
$rule['field_bodytransform'] = ($bits[13]);
$rule['ctype'] = ($bits[14]);
$rule['field_ctype_val'] = ($bits[15]);
$rule['bodytransform'] = ($bits[12]??null);
$rule['field_bodytransform'] = ($bits[13]??null);
$rule['ctype'] = ($bits[14]??null);
$rule['field_ctype_val'] = ($bits[15]??null);
$rule['unconditional'] = 0;
if (!$rule['from'] && !$rule['to'] && !$rule['subject'] &&
!$rule['field'] && !$rule['size'] && $rule['action']) {
@ -188,7 +188,7 @@ class Script
}
$vacation['addresses'] = &$vaddresses;
$vacation['forwards'] = $bits[5];
$vacation['forwards'] = $bits[5]??null;
}
break;
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;
}
@ -191,7 +191,7 @@ class Sql extends Mail\Smtp
case self::TYPE_MAILBOX:
$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']]));
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['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;
}
@ -240,7 +240,7 @@ class Sql extends Mail\Smtp
function setUserData($_uidnumber, array $_mailAlternateAddress, array $_mailForwardingAddress, $_deliveryMode,
$_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)
{

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'));
// 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;
}
@ -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
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 .= (!isset($e) ? 'Mail send' : 'Mail NOT send').
@ -732,7 +732,7 @@ class Mailer extends Horde_Mime_Mail
$recipients->add($h->getAddressList());
}
}
if ($this->_bcc) {
if (!empty($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
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))
{
$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));
$old_assignees = array();
$assignees = $assigned ? $assigned : array();
if ($data[$this->assigned_field]) // current assignments
$assignees = $assigned ?? array();
if (!empty($data[$this->assigned_field])) // current assignments
{
$assignees = is_array($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[$this->assigned_field] : explode(',',$old[$this->assigned_field]);
@ -1126,18 +1126,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 (empty($detail['value']) && !$modified) continue; // skip unchanged, empty values
$body .= $this->format_line($html_email,$detail['type'],$modified,
$detail['label'] ? $detail['label'] : '', $detail['value']);
$body .= $this->format_line($html_email, $detail['type'] ?? null, $modified,
$detail['label'] ?? '', $detail['value']);
}
if ($html_email)
{
$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";
}
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);
}
@ -1270,7 +1270,7 @@ abstract class Tracking
$merge_class = $this->app.'_merge';
$merge = new $merge_class();
$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)
{
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);
}
if($replace_user_pass_host)
if ($replace_user_pass_host)
{
$url = str_replace(array('$user',
'$pass',
'$host',
'$home'), array($parts['user'],
$parts['pass'],
$parts['host'],
$parts['home']), $url);
$url = strtr($url, [
'$user' => $parts['user'],
'$pass' => $parts['pass'],
'$host' => $parts['host'],
'$home' => $parts['home'],
]);
}
if($parts['query'])
if (isset($parts['query']))
{
$url .= '?' . $parts['query'];
}
if($parts['fragment'])
if (isset($parts['fragment']))
{
$url .= '#' . $parts['fragment'];
}
@ -657,7 +656,7 @@ class Base
return false;
}
$k = (string)Vfs::parse_url($url, PHP_URL_SCHEME);
if(!(is_array($scheme2urls[$k])))
if (!isset($scheme2urls[$k]))
{
$scheme2urls[$k] = array();
}

View File

@ -798,11 +798,11 @@ class StreamWrapper extends Base implements StreamWrapperIface
{
$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;
}
if($stat['url'] && $query && strpos($stat['url'],'?'.$query)===false)
if ($stat && $stat['url'] && $query && strpos($stat['url'],'?'.$query) === false)
{
$stat['url'] .= '?'.$query;
}
@ -998,7 +998,7 @@ class StreamWrapper extends Base implements StreamWrapperIface
}
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))
{

View File

@ -228,7 +228,7 @@ class infolog_bo
{
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();
}
@ -262,17 +262,17 @@ class infolog_bo
$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']);
}
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']);
}
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']);
}
@ -286,7 +286,7 @@ class infolog_bo
}
$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
foreach($this->enums['type'] as $key => $val)
@ -629,12 +629,14 @@ class infolog_bo
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
{
return False;
$false = False;
return $false;
}
if ($data['info_subject'] == $this->subject_from_des($data['info_des']))

View File

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

View File

@ -119,7 +119,7 @@ class infolog_merge extends Api\Storage\Merge
// Set any missing custom fields, or the marker will stay
foreach($this->bo->customfields as $name => $field)
{
if(!$array['#'.$name])
if (empty($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)
{
if ($data['prefix'])
if (!empty($data['prefix']))
{
$prefix = $data['prefix']; // async notification
}
@ -172,7 +172,7 @@ class infolog_tracking extends Api\Storage\Tracking
*/
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')
{
@ -341,16 +341,16 @@ class infolog_tracking extends Api\Storage\Tracking
return '';
}
// 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~'];
// 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'];
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_id'] = $info_id;
/* $info_link_id is never defined
if ($info_link_id && strpos($info_link_id,':') !== false) // updating info_link_id if necessary
{
list($app,$id) = explode(':',$info_link_id);
@ -1903,7 +1903,7 @@ class infolog_ui
// we need eg. the new modification date, for further updates
$content = array_merge($content,$to_write);
}
}
}*/
// Need to purge description history after encryption?
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)
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'])
{
@ -2172,7 +2172,7 @@ class infolog_ui
$readonlys['action'] = true;
}
// 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']];
$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
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']))
{
@ -2252,7 +2252,7 @@ class infolog_ui
$tracking = new infolog_tracking($this);
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
$history_stati['Mo'] = $tracking->field2label['info_datemodified'];
@ -2276,20 +2276,20 @@ class infolog_ui
'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');
}
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');
}
elseif ($GLOBALS['egw_info']['server']['disable_pgp_encryption'])
elseif (!empty($GLOBALS['egw_info']['server']['disable_pgp_encryption']))
{
$readonlys['encrypt'] = true;
}
$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'));
//error_log(substr($content['info_des'],1793,10));
//$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']);
if ($acc_smime['acc_smime_password'])
if ($acc_smime && !empty($acc_smime['acc_smime_password']))
{
$actions = array_merge($actions, array(
'smime_sign' => array (
@ -271,9 +271,9 @@ class mail_compose
}
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
if (!$GLOBALS['egw_info']['user']['apps']['filemanager'])
if (empty($GLOBALS['egw_info']['user']['apps']['filemanager']))
{
unset($actions['save2vfs']);
unset($actions['selectFromVFSForCompose']);
@ -1242,16 +1242,16 @@ class mail_compose
// address stuff like from, to, cc, replyto
$destinationRows = 0;
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
unset($content[strtolower($destination)]);
foreach((array)$addr_content as $key => $value) {
if ($value=="NIL@NIL") continue;
if ($destination=='replyto' && str_replace('"','',$value) ==
foreach($addr_content as $value) {
if ($value === "NIL@NIL") continue;
if ($destination === 'replyto' && str_replace('"','',$value) ===
str_replace('"','',$identities[$this->mail_bo->getDefaultIdentity()]))
{
// preserve/restore the value to content.
@ -1261,7 +1261,7 @@ class mail_compose
//error_log(__METHOD__.__LINE__.array2string(array('key'=>$key,'value'=>$value)));
$value = str_replace("\"\"",'"', htmlspecialchars_decode($value, ENT_COMPAT));
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 = Mail::htmlentities($address, $this->displayCharset);
$content[strtolower($destination)][]=$address;
@ -1289,7 +1289,7 @@ class mail_compose
$content['mail_'.($content['mimeType'] == 'html'?'html':'plain').'text'] =$content['body'];
$content['showtempname']=0;
//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;
$content['no_griddata'] = empty($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 no filemanager -> no vfsFileSelector
if (!$GLOBALS['egw_info']['user']['apps']['filemanager'])
if (empty($GLOBALS['egw_info']['user']['apps']['filemanager']))
{
$content['vfsNotAvailable'] = "mail_DisplayNone";
}
// 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";
}
// 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";
}
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";
}
@ -1324,12 +1324,12 @@ class mail_compose
$sel_options['mimeType'] = self::$mimeTypes;
$sel_options['priority'] = self::$priorities;
$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
$etpl = new Etemplate('mail.compose');
$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]"
$_htmlConfig = Mail::$htmLawed_config;
@ -1340,7 +1340,7 @@ class mail_compose
Mail::$htmLawed_config = $_htmlConfig;
}
if (isset($content['composeID'])&&!empty($content['composeID']))
if (!empty($content['composeID']))
{
$composeCache = $content;
unset($composeCache['body']);
@ -1348,23 +1348,23 @@ class mail_compose
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);
}
if (!isset($_content['serverID'])||empty($_content['serverID']))
if (empty($_content['serverID']))
{
$content['serverID'] = $this->mail_bo->profileID;
}
$preserv['serverID'] = $content['serverID'];
$preserv['lastDrafted'] = $content['lastDrafted'];
$preserv['processedmail_id'] = $content['processedmail_id'];
$preserv['references'] = $content['references'];
$preserv['in-reply-to'] = $content['in-reply-to'];
$preserv['lastDrafted'] = $content['lastDrafted'] ?? null;
$preserv['processedmail_id'] = $content['processedmail_id'] ?? null;
$preserv['references'] = $content['references'] ?? null;
$preserv['in-reply-to'] = $content['in-reply-to'] ?? null;
// 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
//$preserv['thread-topic'] = $content['thread-topic'];
$preserv['thread-index'] = $content['thread-index'];
$preserv['list-id'] = $content['list-id'];
$preserv['mode'] = $content['mode'];
$preserv['thread-index'] = $content['thread-index'] ?? null;
$preserv['list-id'] = $content['list-id'] ?? null;
$preserv['mode'] = $content['mode'] ?? null;
// convert it back to checkbox expectations
if($content['mimeType'] == 'html') {
if($content['mimeType'] === 'html') {
$content['mimeType']=1;
} else {
$content['mimeType']=0;
@ -1391,11 +1391,11 @@ class mail_compose
// Resolve distribution list before send content to client
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
if($content['attachments'] && is_array($content['attachments']))
if(!empty($content['attachments']))
{
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']) ?
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));
$etpl->exec('mail.mail_compose.compose',$content,$sel_options,array(),$preserv,2);
}
@ -2485,7 +2485,7 @@ class mail_compose
if(!empty($_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']);
}
@ -2522,7 +2522,7 @@ class mail_compose
if ($_formData['attachments'] && $_formData['filemode'] != Vfs\Sharing::ATTACH && !$_autosaving)
{
$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'])),
$_formData['expiration'], $_formData['password']);
}
@ -2530,7 +2530,7 @@ class mail_compose
{
case 'html':
$body = $_formData['body'];
if ($attachment_links)
if (!empty($attachment_links))
{
if (strpos($body, '<!-- HTMLSIGBEGIN -->') !== false)
{
@ -2567,7 +2567,7 @@ class mail_compose
default:
$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'];
if(!empty($signature)) {
@ -2653,7 +2653,7 @@ class mail_compose
}
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'];
// beware: do not delete the original mail as found in processedmail_id
$pMuid='';
if ($content['processedmail_id'])
if (!empty($content['processedmail_id']))
{
$pMhA = mail_ui::splitRowID($content['processedmail_id']);
$pMuid = $pMhA['msgUID'];
@ -3021,7 +3021,7 @@ class mail_compose
// create the messages and store inline images
$inline_images = $this->createMessage($mail, $_formData, $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->getMessageBody() ."</pre><hr><br>";
#exit;
@ -3317,14 +3317,14 @@ class mail_compose
if (isset($lastDrafted['uid']) && !empty($lastDrafted['uid'])) $lastDrafted['uid']=trim($lastDrafted['uid']);
// manually drafted, do not delete
// 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));
}
if ($lastDrafted && is_array($lastDrafted) && $mail_bo->isDraftFolder($lastDrafted['folder']))
{
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']))
{
//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['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' )
{
@ -3407,7 +3407,7 @@ class mail_compose
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')
{
$app_name = substr($app_key,3);

View File

@ -425,7 +425,7 @@ class mail_ui
protected static function image_proxy()
{
$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)))
{
$image_proxy = self::EGROUPWARE_IMAGE_PROXY;
@ -565,7 +565,7 @@ class mail_ui
$etpl->setElementAttribute(self::$nm_index.'[foldertree]','actions', $this->get_tree_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
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
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) {
$actions = null;
$data = json_decode($notification['notify_data'], true);
if ($data['appname'] && $data['data'])
if (!empty($data['appname']) && !empty($data['data']))
{
$_actions = Api\Hooks::process (array(
'location' => 'notifications_actions',
@ -175,7 +175,7 @@ class notifications_popup implements notifications_iface {
'created' => Api\DateTime::server2user($notification['notify_created']),
'current' => new Api\DateTime('now'),
'actions' => is_array($actions)?$actions:NULL,
'extra_data' => ($data['data'] ? $data['data'] : array())
'extra_data' => $data['data'] ?? [],
);
}

View File

@ -104,13 +104,13 @@ class pixelegg_framework extends Api\Framework\Ajax
{
$ret = parent::_get_css();
// color to use
$color = str_replace('custom',$GLOBALS['egw_info']['user']['preferences']['common']['template_custom_color'],
$GLOBALS['egw_info']['user']['preferences']['common']['template_color']);
$color = str_replace('custom', $GLOBALS['egw_info']['user']['preferences']['common']['template_custom_color'] ?? null,
$GLOBALS['egw_info']['user']['preferences']['common']['template_color'] ?? null);
// Create a dark variant of the color
$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 = $this->_color_shader($sidebox_color_hover, -30);
@ -120,7 +120,7 @@ class pixelegg_framework extends Api\Framework\Ajax
$sidebox_color_hover = $color;
$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'];
}
@ -128,8 +128,8 @@ class pixelegg_framework extends Api\Framework\Ajax
{
$loginbox_color = $color_darker;
}
//alway 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')
//always set header logo used in sharing regardless of custom color being set
$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');
$ret['app_css'] .= "
/*