Scrutinizer Auto-Fixes

This commit consists of patches automatically generated for this project on https://scrutinizer-ci.com
This commit is contained in:
Scrutinizer Auto-Fixer 2019-11-26 11:52:04 +00:00
parent cb352407eb
commit 057ab6a059
3 changed files with 420 additions and 420 deletions

View File

@ -39,7 +39,7 @@ $action = GETPOST('action', 'alpha');
$value = GETPOST('value', 'alpha'); $value = GETPOST('value', 'alpha');
$label = GETPOST('label', 'alpha'); $label = GETPOST('label', 'alpha');
$scandir = GETPOST('scan_dir', 'alpha'); $scandir = GETPOST('scan_dir', 'alpha');
$type='contract'; $type = 'contract';
if (empty($conf->global->HOLIDAY_ADDON)) if (empty($conf->global->HOLIDAY_ADDON))
{ {
@ -59,9 +59,9 @@ if ($action == 'updateMask')
$maskvalue = GETPOST('maskholiday', 'alpha'); $maskvalue = GETPOST('maskholiday', 'alpha');
if ($maskconst) $res = dolibarr_set_const($db, $maskconst, $maskvalue, 'chaine', 0, '', $conf->entity); if ($maskconst) $res = dolibarr_set_const($db, $maskconst, $maskvalue, 'chaine', 0, '', $conf->entity);
if (! $res > 0) $error++; if (!$res > 0) $error++;
if (! $error) if (!$error)
{ {
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
} }
@ -73,20 +73,20 @@ if ($action == 'updateMask')
elseif ($action == 'specimen') // For contract elseif ($action == 'specimen') // For contract
{ {
$modele= GETPOST('module', 'alpha'); $modele = GETPOST('module', 'alpha');
$holiday = new Holiday($db); $holiday = new Holiday($db);
$holiday->initAsSpecimen(); $holiday->initAsSpecimen();
// Search template files // Search template files
$file=''; $classname=''; $filefound=0; $file = ''; $classname = ''; $filefound = 0;
$dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']); $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
foreach($dirmodels as $reldir) foreach ($dirmodels as $reldir)
{ {
$file=dol_buildpath($reldir."core/modules/holiday/doc/pdf_".$modele.".modules.php", 0); $file = dol_buildpath($reldir."core/modules/holiday/doc/pdf_".$modele.".modules.php", 0);
if (file_exists($file)) if (file_exists($file))
{ {
$filefound=1; $filefound = 1;
$classname = "pdf_".$modele; $classname = "pdf_".$modele;
break; break;
} }
@ -159,15 +159,15 @@ elseif ($action == 'setmod')
elseif ($action == 'set_other') elseif ($action == 'set_other')
{ {
$freetext= GETPOST('HOLIDAY_FREE_TEXT', 'none'); // No alpha here, we want exact string $freetext = GETPOST('HOLIDAY_FREE_TEXT', 'none'); // No alpha here, we want exact string
$res1 = dolibarr_set_const($db, "HOLIDAY_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity); $res1 = dolibarr_set_const($db, "HOLIDAY_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity);
$draft= GETPOST('HOLIDAY_DRAFT_WATERMARK', 'alpha'); $draft = GETPOST('HOLIDAY_DRAFT_WATERMARK', 'alpha');
$res2 = dolibarr_set_const($db, "HOLIDAY_DRAFT_WATERMARK", trim($draft), 'chaine', 0, '', $conf->entity); $res2 = dolibarr_set_const($db, "HOLIDAY_DRAFT_WATERMARK", trim($draft), 'chaine', 0, '', $conf->entity);
if (! $res1 > 0 || ! $res2 > 0) $error++; if (!$res1 > 0 || !$res2 > 0) $error++;
if (! $error) if (!$error)
{ {
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
} }
@ -182,16 +182,16 @@ elseif ($action == 'set_other')
* View * View
*/ */
$dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']); $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
llxHeader(); llxHeader();
$form=new Form($db); $form = new Form($db);
$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
print load_fiche_titre($langs->trans("HolidaySetup"), $linkback, 'title_setup'); print load_fiche_titre($langs->trans("HolidaySetup"), $linkback, 'title_setup');
$head=holiday_admin_prepare_head(); $head = holiday_admin_prepare_head();
dol_fiche_head($head, 'holiday', $langs->trans("Holidays"), -1, 'holiday'); dol_fiche_head($head, 'holiday', $langs->trans("Holidays"), -1, 'holiday');
@ -222,11 +222,11 @@ foreach ($dirmodels as $reldir)
$handle = opendir($dir); $handle = opendir($dir);
if (is_resource($handle)) if (is_resource($handle))
{ {
while (($file = readdir($handle))!==false) while (($file = readdir($handle)) !== false)
{ {
if (substr($file, 0, 12) == 'mod_holiday_' && substr($file, dol_strlen($file)-3, 3) == 'php') if (substr($file, 0, 12) == 'mod_holiday_' && substr($file, dol_strlen($file) - 3, 3) == 'php')
{ {
$file = substr($file, 0, dol_strlen($file)-4); $file = substr($file, 0, dol_strlen($file) - 4);
require_once $dir.$file.'.php'; require_once $dir.$file.'.php';
@ -244,9 +244,9 @@ foreach ($dirmodels as $reldir)
// Show example of numbering model // Show example of numbering model
print '<td class="nowrap">'; print '<td class="nowrap">';
$tmp=$module->getExample(); $tmp = $module->getExample();
if (preg_match('/^Error/', $tmp)) { $langs->load("errors"); print '<div class="error">'.$langs->trans($tmp).'</div>'; } if (preg_match('/^Error/', $tmp)) { $langs->load("errors"); print '<div class="error">'.$langs->trans($tmp).'</div>'; }
elseif ($tmp=='NotConfigured') print $langs->trans($tmp); elseif ($tmp == 'NotConfigured') print $langs->trans($tmp);
else print $tmp; else print $tmp;
print '</td>'."\n"; print '</td>'."\n";
@ -263,21 +263,21 @@ foreach ($dirmodels as $reldir)
} }
print '</td>'; print '</td>';
$holiday=new Holiday($db); $holiday = new Holiday($db);
$holiday->initAsSpecimen(); $holiday->initAsSpecimen();
// Info // Info
$htmltooltip=''; $htmltooltip = '';
$htmltooltip.=''.$langs->trans("Version").': <b>'.$module->getVersion().'</b><br>'; $htmltooltip .= ''.$langs->trans("Version").': <b>'.$module->getVersion().'</b><br>';
$nextval=$module->getNextValue($mysoc, $holiday); $nextval = $module->getNextValue($mysoc, $holiday);
if ("$nextval" != $langs->trans("NotAvailable")) { // Keep " on nextval if ("$nextval" != $langs->trans("NotAvailable")) { // Keep " on nextval
$htmltooltip.=''.$langs->trans("NextValue").': '; $htmltooltip .= ''.$langs->trans("NextValue").': ';
if ($nextval) { if ($nextval) {
if (preg_match('/^Error/', $nextval) || $nextval=='NotConfigured') if (preg_match('/^Error/', $nextval) || $nextval == 'NotConfigured')
$nextval = $langs->trans($nextval); $nextval = $langs->trans($nextval);
$htmltooltip.=$nextval.'<br>'; $htmltooltip .= $nextval.'<br>';
} else { } else {
$htmltooltip.=$langs->trans($module->error).'<br>'; $htmltooltip .= $langs->trans($module->error).'<br>';
} }
} }
@ -317,14 +317,14 @@ print load_fiche_titre($langs->trans("TemplatePDFHolidays"), '', '');
// Defined model definition table // Defined model definition table
$def = array(); $def = array();
$sql = "SELECT nom"; $sql = "SELECT nom";
$sql.= " FROM ".MAIN_DB_PREFIX."document_model"; $sql .= " FROM ".MAIN_DB_PREFIX."document_model";
$sql.= " WHERE type = '".$type."'"; $sql .= " WHERE type = '".$type."'";
$sql.= " AND entity = ".$conf->entity; $sql .= " AND entity = ".$conf->entity;
$resql=$db->query($sql); $resql = $db->query($sql);
if ($resql) if ($resql)
{ {
$i = 0; $i = 0;
$num_rows=$db->num_rows($resql); $num_rows = $db->num_rows($resql);
while ($i < $num_rows) while ($i < $num_rows)
{ {
$array = $db->fetch_array($resql); $array = $db->fetch_array($resql);
@ -353,42 +353,42 @@ clearstatcache();
foreach ($dirmodels as $reldir) foreach ($dirmodels as $reldir)
{ {
foreach (array('','/doc') as $valdir) foreach (array('', '/doc') as $valdir)
{ {
$dir = dol_buildpath($reldir."core/modules/holiday".$valdir); $dir = dol_buildpath($reldir."core/modules/holiday".$valdir);
if (is_dir($dir)) if (is_dir($dir))
{ {
$handle=opendir($dir); $handle = opendir($dir);
if (is_resource($handle)) if (is_resource($handle))
{ {
while (($file = readdir($handle))!==false) while (($file = readdir($handle)) !== false)
{ {
$filelist[]=$file; $filelist[] = $file;
} }
closedir($handle); closedir($handle);
arsort($filelist); arsort($filelist);
foreach($filelist as $file) foreach ($filelist as $file)
{ {
if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file))
{ {
if (file_exists($dir.'/'.$file)) if (file_exists($dir.'/'.$file))
{ {
$name = substr($file, 4, dol_strlen($file) -16); $name = substr($file, 4, dol_strlen($file) - 16);
$classname = substr($file, 0, dol_strlen($file) -12); $classname = substr($file, 0, dol_strlen($file) - 12);
require_once $dir.'/'.$file; require_once $dir.'/'.$file;
$module = new $classname($db); $module = new $classname($db);
$modulequalified=1; $modulequalified = 1;
if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) $modulequalified=0; if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) $modulequalified = 0;
if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) $modulequalified=0; if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) $modulequalified = 0;
if ($modulequalified) if ($modulequalified)
{ {
print '<tr class="oddeven"><td width="100">'; print '<tr class="oddeven"><td width="100">';
print (empty($module->name)?$name:$module->name); print (empty($module->name) ? $name : $module->name);
print "</td><td>\n"; print "</td><td>\n";
if (method_exists($module, 'info')) print $module->info($langs); if (method_exists($module, 'info')) print $module->info($langs);
else print $module->description; else print $module->description;
@ -424,17 +424,17 @@ foreach ($dirmodels as $reldir)
// Info // Info
$htmltooltip = ''.$langs->trans("Name").': '.$module->name; $htmltooltip = ''.$langs->trans("Name").': '.$module->name;
$htmltooltip.='<br>'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); $htmltooltip .= '<br>'.$langs->trans("Type").': '.($module->type ? $module->type : $langs->trans("Unknown"));
if ($module->type == 'pdf') if ($module->type == 'pdf')
{ {
$htmltooltip.='<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur; $htmltooltip .= '<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur;
} }
$htmltooltip.='<br><br><u>'.$langs->trans("FeaturesSupported").':</u>'; $htmltooltip .= '<br><br><u>'.$langs->trans("FeaturesSupported").':</u>';
$htmltooltip.='<br>'.$langs->trans("Logo").': '.yn($module->option_logo, 1, 1); $htmltooltip .= '<br>'.$langs->trans("Logo").': '.yn($module->option_logo, 1, 1);
$htmltooltip.='<br>'.$langs->trans("PaymentMode").': '.yn($module->option_modereg, 1, 1); $htmltooltip .= '<br>'.$langs->trans("PaymentMode").': '.yn($module->option_modereg, 1, 1);
$htmltooltip.='<br>'.$langs->trans("PaymentConditions").': '.yn($module->option_condreg, 1, 1); $htmltooltip .= '<br>'.$langs->trans("PaymentConditions").': '.yn($module->option_condreg, 1, 1);
$htmltooltip.='<br>'.$langs->trans("MultiLanguage").': '.yn($module->option_multilang, 1, 1); $htmltooltip .= '<br>'.$langs->trans("MultiLanguage").': '.yn($module->option_multilang, 1, 1);
$htmltooltip.='<br>'.$langs->trans("WatermarkOnDraftOrders").': '.yn($module->option_draft_watermark, 1, 1); $htmltooltip .= '<br>'.$langs->trans("WatermarkOnDraftOrders").': '.yn($module->option_draft_watermark, 1, 1);
print '<td align="center">'; print '<td align="center">';
@ -485,16 +485,16 @@ print '<td>'.$langs->trans("Parameter").'</td>';
print '<td align="center" width="60">'.$langs->trans("Value").'</td>'; print '<td align="center" width="60">'.$langs->trans("Value").'</td>';
print "</tr>\n"; print "</tr>\n";
$substitutionarray=pdf_getSubstitutionArray($langs, array('objectamount'), null, 2); $substitutionarray = pdf_getSubstitutionArray($langs, array('objectamount'), null, 2);
$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); $substitutionarray['__(AnyTranslationKey)__'] = $langs->trans("Translation");
$htmltext = '<i>'.$langs->trans("AvailableVariables").':<br>'; $htmltext = '<i>'.$langs->trans("AvailableVariables").':<br>';
foreach($substitutionarray as $key => $val) $htmltext.=$key.'<br>'; foreach ($substitutionarray as $key => $val) $htmltext .= $key.'<br>';
$htmltext.='</i>'; $htmltext .= '</i>';
print '<tr class="oddeven"><td colspan="2">'; print '<tr class="oddeven"><td colspan="2">';
print $form->textwithpicto($langs->trans("FreeLegalTextOnHolidays"), $langs->trans("AddCRIfTooLong").'<br><br>'.$htmltext, 1, 'help', '', 0, 2, 'tooltiphelp'); print $form->textwithpicto($langs->trans("FreeLegalTextOnHolidays"), $langs->trans("AddCRIfTooLong").'<br><br>'.$htmltext, 1, 'help', '', 0, 2, 'tooltiphelp');
print '<br>'; print '<br>';
$variablename='HOLIDAY_FREE_TEXT'; $variablename = 'HOLIDAY_FREE_TEXT';
if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT))
{ {
print '<textarea name="'.$variablename.'" class="flat" cols="120">'.$conf->global->$variablename.'</textarea>'; print '<textarea name="'.$variablename.'" class="flat" cols="120">'.$conf->global->$variablename.'</textarea>';
@ -502,7 +502,7 @@ if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT))
else else
{ {
include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
$doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes'); $doleditor = new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes');
print $doleditor->Create(); print $doleditor->Create();
} }
print '</td></tr>'."\n"; print '</td></tr>'."\n";

View File

@ -38,24 +38,24 @@ function dol_encode($chain, $key = '1')
{ {
if (is_numeric($key) && $key == '1') // rule 1 is offset of 17 for char if (is_numeric($key) && $key == '1') // rule 1 is offset of 17 for char
{ {
$output_tab=array(); $output_tab = array();
$strlength=dol_strlen($chain); $strlength = dol_strlen($chain);
for ($i=0; $i < $strlength; $i++) for ($i = 0; $i < $strlength; $i++)
{ {
$output_tab[$i] = chr(ord(substr($chain, $i, 1))+17); $output_tab[$i] = chr(ord(substr($chain, $i, 1)) + 17);
} }
$chain = implode("", $output_tab); $chain = implode("", $output_tab);
} }
elseif ($key) elseif ($key)
{ {
$result=''; $result = '';
$strlength=dol_strlen($chain); $strlength = dol_strlen($chain);
for ($i=0; $i < $strlength; $i++) for ($i = 0; $i < $strlength; $i++)
{ {
$keychar = substr($key, ($i % strlen($key))-1, 1); $keychar = substr($key, ($i % strlen($key)) - 1, 1);
$result.= chr(ord(substr($chain, $i, 1))+(ord($keychar)-65)); $result .= chr(ord(substr($chain, $i, 1)) + (ord($keychar) - 65));
} }
$chain=$result; $chain = $result;
} }
return base64_encode($chain); return base64_encode($chain);
@ -76,25 +76,25 @@ function dol_decode($chain, $key = '1')
if (is_numeric($key) && $key == '1') // rule 1 is offset of 17 for char if (is_numeric($key) && $key == '1') // rule 1 is offset of 17 for char
{ {
$output_tab=array(); $output_tab = array();
$strlength=dol_strlen($chain); $strlength = dol_strlen($chain);
for ($i=0; $i < $strlength;$i++) for ($i = 0; $i < $strlength; $i++)
{ {
$output_tab[$i] = chr(ord(substr($chain, $i, 1))-17); $output_tab[$i] = chr(ord(substr($chain, $i, 1)) - 17);
} }
$chain = implode("", $output_tab); $chain = implode("", $output_tab);
} }
elseif ($key) elseif ($key)
{ {
$result=''; $result = '';
$strlength=dol_strlen($chain); $strlength = dol_strlen($chain);
for ($i=0; $i < $strlength; $i++) for ($i = 0; $i < $strlength; $i++)
{ {
$keychar = substr($key, ($i % strlen($key))-1, 1); $keychar = substr($key, ($i % strlen($key)) - 1, 1);
$result.= chr(ord(substr($chain, $i, 1))-(ord($keychar)-65)); $result .= chr(ord(substr($chain, $i, 1)) - (ord($keychar) - 65));
} }
$chain=$result; $chain = $result;
} }
return $chain; return $chain;
@ -116,21 +116,21 @@ function dol_hash($chain, $type = '0')
global $conf; global $conf;
// No need to add salt for password_hash // No need to add salt for password_hash
if (($type == '0' || $type == 'auto') && ! empty($conf->global->MAIN_SECURITY_HASH_ALGO) && $conf->global->MAIN_SECURITY_HASH_ALGO == 'password_hash' && function_exists('password_hash')) if (($type == '0' || $type == 'auto') && !empty($conf->global->MAIN_SECURITY_HASH_ALGO) && $conf->global->MAIN_SECURITY_HASH_ALGO == 'password_hash' && function_exists('password_hash'))
{ {
return password_hash($chain, PASSWORD_DEFAULT); return password_hash($chain, PASSWORD_DEFAULT);
} }
// Salt value // Salt value
if (! empty($conf->global->MAIN_SECURITY_SALT)) $chain=$conf->global->MAIN_SECURITY_SALT.$chain; if (!empty($conf->global->MAIN_SECURITY_SALT)) $chain = $conf->global->MAIN_SECURITY_SALT.$chain;
if ($type == '1' || $type == 'sha1') return sha1($chain); if ($type == '1' || $type == 'sha1') return sha1($chain);
elseif ($type == '2' || $type == 'sha1md5') return sha1(md5($chain)); elseif ($type == '2' || $type == 'sha1md5') return sha1(md5($chain));
elseif ($type == '3' || $type == 'md5') return md5($chain); elseif ($type == '3' || $type == 'md5') return md5($chain);
elseif ($type == '4' || $type == 'md5openldap') return '{md5}'.base64_encode(mhash(MHASH_MD5, $chain)); // For OpenLdap with md5 (based on an unencrypted password in base) elseif ($type == '4' || $type == 'md5openldap') return '{md5}'.base64_encode(mhash(MHASH_MD5, $chain)); // For OpenLdap with md5 (based on an unencrypted password in base)
elseif ($type == '5') return hash('sha256', $chain); elseif ($type == '5') return hash('sha256', $chain);
elseif (! empty($conf->global->MAIN_SECURITY_HASH_ALGO) && $conf->global->MAIN_SECURITY_HASH_ALGO == 'sha1') return sha1($chain); elseif (!empty($conf->global->MAIN_SECURITY_HASH_ALGO) && $conf->global->MAIN_SECURITY_HASH_ALGO == 'sha1') return sha1($chain);
elseif (! empty($conf->global->MAIN_SECURITY_HASH_ALGO) && $conf->global->MAIN_SECURITY_HASH_ALGO == 'sha1md5') return sha1(md5($chain)); elseif (!empty($conf->global->MAIN_SECURITY_HASH_ALGO) && $conf->global->MAIN_SECURITY_HASH_ALGO == 'sha1md5') return sha1(md5($chain));
// No particular encoding defined, use default // No particular encoding defined, use default
return md5($chain); return md5($chain);
@ -151,10 +151,10 @@ function dol_verifyHash($chain, $hash, $type = '0')
{ {
global $conf; global $conf;
if ($type == '0' && ! empty($conf->global->MAIN_SECURITY_HASH_ALGO) && $conf->global->MAIN_SECURITY_HASH_ALGO == 'password_hash' && function_exists('password_verify')) { if ($type == '0' && !empty($conf->global->MAIN_SECURITY_HASH_ALGO) && $conf->global->MAIN_SECURITY_HASH_ALGO == 'password_hash' && function_exists('password_verify')) {
if ($hash[0] == '$') return password_verify($chain, $hash); if ($hash[0] == '$') return password_verify($chain, $hash);
elseif(strlen($hash) == 32) return dol_verifyHash($chain, $hash, '3'); // md5 elseif (strlen($hash) == 32) return dol_verifyHash($chain, $hash, '3'); // md5
elseif(strlen($hash) == 40) return dol_verifyHash($chain, $hash, '2'); // sha1md5 elseif (strlen($hash) == 40) return dol_verifyHash($chain, $hash, '2'); // sha1md5
return false; return false;
} }
@ -189,9 +189,9 @@ function restrictedArea($user, $features, $objectid = 0, $tableandshare = '', $f
//print ", perm: ".$features."->".$feature2."=".($user->rights->$features->$feature2->lire)."<br>"; //print ", perm: ".$features."->".$feature2."=".($user->rights->$features->$feature2->lire)."<br>";
// Get more permissions checks from hooks // Get more permissions checks from hooks
$parameters=array('features'=>$features, 'objectid'=>$objectid, 'idtype'=>$dbt_select); $parameters = array('features'=>$features, 'objectid'=>$objectid, 'idtype'=>$dbt_select);
$reshook=$hookmanager->executeHooks('restrictedArea', $parameters); $reshook = $hookmanager->executeHooks('restrictedArea', $parameters);
if (! empty($hookmanager->resArray['result'])) return true; if (!empty($hookmanager->resArray['result'])) return true;
if ($reshook > 0) return false; if ($reshook > 0) return false;
if ($dbt_select != 'rowid' && $dbt_select != 'id') $objectid = "'".$objectid."'"; if ($dbt_select != 'rowid' && $dbt_select != 'id') $objectid = "'".$objectid."'";
@ -202,227 +202,227 @@ function restrictedArea($user, $features, $objectid = 0, $tableandshare = '', $f
elseif (preg_match('/\|/', $features)) $featuresarray = explode("|", $features); elseif (preg_match('/\|/', $features)) $featuresarray = explode("|", $features);
// More subfeatures to check // More subfeatures to check
if (! empty($feature2)) $feature2 = explode("|", $feature2); if (!empty($feature2)) $feature2 = explode("|", $feature2);
// More parameters // More parameters
$params = explode('&', $tableandshare); $params = explode('&', $tableandshare);
$dbtablename=(! empty($params[0]) ? $params[0] : ''); $dbtablename = (!empty($params[0]) ? $params[0] : '');
$sharedelement=(! empty($params[1]) ? $params[1] : $dbtablename); $sharedelement = (!empty($params[1]) ? $params[1] : $dbtablename);
$listofmodules=explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL); $listofmodules = explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL);
// Check read permission from module // Check read permission from module
$readok=1; $nbko=0; $readok = 1; $nbko = 0;
foreach ($featuresarray as $feature) // first we check nb of test ko foreach ($featuresarray as $feature) // first we check nb of test ko
{ {
$featureforlistofmodule=$feature; $featureforlistofmodule = $feature;
if ($featureforlistofmodule == 'produit') $featureforlistofmodule='product'; if ($featureforlistofmodule == 'produit') $featureforlistofmodule = 'product';
if (! empty($user->socid) && ! empty($conf->global->MAIN_MODULES_FOR_EXTERNAL) && ! in_array($featureforlistofmodule, $listofmodules)) // If limits on modules for external users, module must be into list of modules for external users if (!empty($user->socid) && !empty($conf->global->MAIN_MODULES_FOR_EXTERNAL) && !in_array($featureforlistofmodule, $listofmodules)) // If limits on modules for external users, module must be into list of modules for external users
{ {
$readok=0; $nbko++; $readok = 0; $nbko++;
continue; continue;
} }
if ($feature == 'societe') if ($feature == 'societe')
{ {
if (! $user->rights->societe->lire && ! $user->rights->fournisseur->lire) { $readok=0; $nbko++; } if (!$user->rights->societe->lire && !$user->rights->fournisseur->lire) { $readok = 0; $nbko++; }
} }
elseif ($feature == 'contact') elseif ($feature == 'contact')
{ {
if (! $user->rights->societe->contact->lire) { $readok=0; $nbko++; } if (!$user->rights->societe->contact->lire) { $readok = 0; $nbko++; }
} }
elseif ($feature == 'produit|service') elseif ($feature == 'produit|service')
{ {
if (! $user->rights->produit->lire && ! $user->rights->service->lire) { $readok=0; $nbko++; } if (!$user->rights->produit->lire && !$user->rights->service->lire) { $readok = 0; $nbko++; }
} }
elseif ($feature == 'prelevement') elseif ($feature == 'prelevement')
{ {
if (! $user->rights->prelevement->bons->lire) { $readok=0; $nbko++; } if (!$user->rights->prelevement->bons->lire) { $readok = 0; $nbko++; }
} }
elseif ($feature == 'cheque') elseif ($feature == 'cheque')
{ {
if (! $user->rights->banque->cheque) { $readok=0; $nbko++; } if (!$user->rights->banque->cheque) { $readok = 0; $nbko++; }
} }
elseif ($feature == 'projet') elseif ($feature == 'projet')
{ {
if (! $user->rights->projet->lire && ! $user->rights->projet->all->lire) { $readok=0; $nbko++; } if (!$user->rights->projet->lire && !$user->rights->projet->all->lire) { $readok = 0; $nbko++; }
} }
elseif (! empty($feature2)) // This is for permissions on 2 levels elseif (!empty($feature2)) // This is for permissions on 2 levels
{ {
$tmpreadok=1; $tmpreadok = 1;
foreach($feature2 as $subfeature) foreach ($feature2 as $subfeature)
{ {
if ($subfeature == 'user' && $user->id == $objectid) continue; // A user can always read its own card if ($subfeature == 'user' && $user->id == $objectid) continue; // A user can always read its own card
if (! empty($subfeature) && empty($user->rights->$feature->$subfeature->lire) && empty($user->rights->$feature->$subfeature->read)) { $tmpreadok=0; } if (!empty($subfeature) && empty($user->rights->$feature->$subfeature->lire) && empty($user->rights->$feature->$subfeature->read)) { $tmpreadok = 0; }
elseif (empty($subfeature) && empty($user->rights->$feature->lire) && empty($user->rights->$feature->read)) { $tmpreadok=0; } elseif (empty($subfeature) && empty($user->rights->$feature->lire) && empty($user->rights->$feature->read)) { $tmpreadok = 0; }
else { $tmpreadok=1; break; } // Break is to bypass second test if the first is ok else { $tmpreadok = 1; break; } // Break is to bypass second test if the first is ok
} }
if (! $tmpreadok) // We found a test on feature that is ko if (!$tmpreadok) // We found a test on feature that is ko
{ {
$readok=0; // All tests are ko (we manage here the and, the or will be managed later using $nbko). $readok = 0; // All tests are ko (we manage here the and, the or will be managed later using $nbko).
$nbko++; $nbko++;
} }
} }
elseif (! empty($feature) && ($feature!='user' && $feature!='usergroup')) // This is permissions on 1 level elseif (!empty($feature) && ($feature != 'user' && $feature != 'usergroup')) // This is permissions on 1 level
{ {
if (empty($user->rights->$feature->lire) if (empty($user->rights->$feature->lire)
&& empty($user->rights->$feature->read) && empty($user->rights->$feature->read)
&& empty($user->rights->$feature->run)) { $readok=0; $nbko++; } && empty($user->rights->$feature->run)) { $readok = 0; $nbko++; }
} }
} }
// If a or and at least one ok // If a or and at least one ok
if (preg_match('/\|/', $features) && $nbko < count($featuresarray)) $readok=1; if (preg_match('/\|/', $features) && $nbko < count($featuresarray)) $readok = 1;
if (! $readok) accessforbidden(); if (!$readok) accessforbidden();
//print "Read access is ok"; //print "Read access is ok";
// Check write permission from module (we need to know write permission to create but also to delete drafts record) // Check write permission from module (we need to know write permission to create but also to delete drafts record)
$createok=1; $nbko=0; $createok = 1; $nbko = 0;
if (GETPOST('action', 'aZ09') == 'create' || GETPOST('action', 'aZ09') == 'update' || ((GETPOST("action", "aZ09") == 'confirm_delete' && GETPOST("confirm", "aZ09") == 'yes') || GETPOST("action", "aZ09") == 'delete')) if (GETPOST('action', 'aZ09') == 'create' || GETPOST('action', 'aZ09') == 'update' || ((GETPOST("action", "aZ09") == 'confirm_delete' && GETPOST("confirm", "aZ09") == 'yes') || GETPOST("action", "aZ09") == 'delete'))
{ {
foreach ($featuresarray as $feature) foreach ($featuresarray as $feature)
{ {
if ($feature == 'contact') if ($feature == 'contact')
{ {
if (! $user->rights->societe->contact->creer) { $createok=0; $nbko++; } if (!$user->rights->societe->contact->creer) { $createok = 0; $nbko++; }
} }
elseif ($feature == 'produit|service') elseif ($feature == 'produit|service')
{ {
if (! $user->rights->produit->creer && ! $user->rights->service->creer) { $createok=0; $nbko++; } if (!$user->rights->produit->creer && !$user->rights->service->creer) { $createok = 0; $nbko++; }
} }
elseif ($feature == 'prelevement') elseif ($feature == 'prelevement')
{ {
if (! $user->rights->prelevement->bons->creer) { $createok=0; $nbko++; } if (!$user->rights->prelevement->bons->creer) { $createok = 0; $nbko++; }
} }
elseif ($feature == 'commande_fournisseur') elseif ($feature == 'commande_fournisseur')
{ {
if (! $user->rights->fournisseur->commande->creer) { $createok=0; $nbko++; } if (!$user->rights->fournisseur->commande->creer) { $createok = 0; $nbko++; }
} }
elseif ($feature == 'banque') elseif ($feature == 'banque')
{ {
if (! $user->rights->banque->modifier) { $createok=0; $nbko++; } if (!$user->rights->banque->modifier) { $createok = 0; $nbko++; }
} }
elseif ($feature == 'cheque') elseif ($feature == 'cheque')
{ {
if (! $user->rights->banque->cheque) { $createok=0; $nbko++; } if (!$user->rights->banque->cheque) { $createok = 0; $nbko++; }
} }
elseif (! empty($feature2)) // This is for permissions on one level elseif (!empty($feature2)) // This is for permissions on one level
{ {
foreach($feature2 as $subfeature) foreach ($feature2 as $subfeature)
{ {
if (empty($user->rights->$feature->$subfeature->creer) if (empty($user->rights->$feature->$subfeature->creer)
&& empty($user->rights->$feature->$subfeature->write) && empty($user->rights->$feature->$subfeature->write)
&& empty($user->rights->$feature->$subfeature->create)) { && empty($user->rights->$feature->$subfeature->create)) {
$createok=0; $createok = 0;
$nbko++; $nbko++;
} else { } else {
$createok=1; $createok = 1;
// Break to bypass second test if the first is ok // Break to bypass second test if the first is ok
break; break;
} }
} }
} }
elseif (! empty($feature)) // This is for permissions on 2 levels ('creer' or 'write') elseif (!empty($feature)) // This is for permissions on 2 levels ('creer' or 'write')
{ {
//print '<br>feature='.$feature.' creer='.$user->rights->$feature->creer.' write='.$user->rights->$feature->write; //print '<br>feature='.$feature.' creer='.$user->rights->$feature->creer.' write='.$user->rights->$feature->write;
if (empty($user->rights->$feature->creer) if (empty($user->rights->$feature->creer)
&& empty($user->rights->$feature->write) && empty($user->rights->$feature->write)
&& empty($user->rights->$feature->create)) { && empty($user->rights->$feature->create)) {
$createok=0; $createok = 0;
$nbko++; $nbko++;
} }
} }
} }
// If a or and at least one ok // If a or and at least one ok
if (preg_match('/\|/', $features) && $nbko < count($featuresarray)) $createok=1; if (preg_match('/\|/', $features) && $nbko < count($featuresarray)) $createok = 1;
if ((GETPOST('action', 'aZ09') == 'create' || GETPOST('action', 'aZ09') == 'update') && ! $createok) accessforbidden(); if ((GETPOST('action', 'aZ09') == 'create' || GETPOST('action', 'aZ09') == 'update') && !$createok) accessforbidden();
//print "Write access is ok"; //print "Write access is ok";
} }
// Check create user permission // Check create user permission
$createuserok=1; $createuserok = 1;
if (GETPOST('action', 'aZ09') == 'confirm_create_user' && GETPOST("confirm", 'aZ09') == 'yes') if (GETPOST('action', 'aZ09') == 'confirm_create_user' && GETPOST("confirm", 'aZ09') == 'yes')
{ {
if (! $user->rights->user->user->creer) $createuserok=0; if (!$user->rights->user->user->creer) $createuserok = 0;
if (! $createuserok) accessforbidden(); if (!$createuserok) accessforbidden();
//print "Create user access is ok"; //print "Create user access is ok";
} }
// Check delete permission from module // Check delete permission from module
$deleteok=1; $nbko=0; $deleteok = 1; $nbko = 0;
if ((GETPOST("action", "aZ09") == 'confirm_delete' && GETPOST("confirm", "aZ09") == 'yes') || GETPOST("action", "aZ09") == 'delete') if ((GETPOST("action", "aZ09") == 'confirm_delete' && GETPOST("confirm", "aZ09") == 'yes') || GETPOST("action", "aZ09") == 'delete')
{ {
foreach ($featuresarray as $feature) foreach ($featuresarray as $feature)
{ {
if ($feature == 'contact') if ($feature == 'contact')
{ {
if (! $user->rights->societe->contact->supprimer) $deleteok=0; if (!$user->rights->societe->contact->supprimer) $deleteok = 0;
} }
elseif ($feature == 'produit|service') elseif ($feature == 'produit|service')
{ {
if (! $user->rights->produit->supprimer && ! $user->rights->service->supprimer) $deleteok=0; if (!$user->rights->produit->supprimer && !$user->rights->service->supprimer) $deleteok = 0;
} }
elseif ($feature == 'commande_fournisseur') elseif ($feature == 'commande_fournisseur')
{ {
if (! $user->rights->fournisseur->commande->supprimer) $deleteok=0; if (!$user->rights->fournisseur->commande->supprimer) $deleteok = 0;
} }
elseif ($feature == 'banque') elseif ($feature == 'banque')
{ {
if (! $user->rights->banque->modifier) $deleteok=0; if (!$user->rights->banque->modifier) $deleteok = 0;
} }
elseif ($feature == 'cheque') elseif ($feature == 'cheque')
{ {
if (! $user->rights->banque->cheque) $deleteok=0; if (!$user->rights->banque->cheque) $deleteok = 0;
} }
elseif ($feature == 'ecm') elseif ($feature == 'ecm')
{ {
if (! $user->rights->ecm->upload) $deleteok=0; if (!$user->rights->ecm->upload) $deleteok = 0;
} }
elseif ($feature == 'ftp') elseif ($feature == 'ftp')
{ {
if (! $user->rights->ftp->write) $deleteok=0; if (!$user->rights->ftp->write) $deleteok = 0;
}elseif ($feature == 'salaries') }elseif ($feature == 'salaries')
{ {
if (! $user->rights->salaries->delete) $deleteok=0; if (!$user->rights->salaries->delete) $deleteok = 0;
} }
elseif ($feature == 'salaries') elseif ($feature == 'salaries')
{ {
if (! $user->rights->salaries->delete) $deleteok=0; if (!$user->rights->salaries->delete) $deleteok = 0;
} }
elseif (! empty($feature2)) // This is for permissions on 2 levels elseif (!empty($feature2)) // This is for permissions on 2 levels
{ {
foreach($feature2 as $subfeature) foreach ($feature2 as $subfeature)
{ {
if (empty($user->rights->$feature->$subfeature->supprimer) && empty($user->rights->$feature->$subfeature->delete)) $deleteok=0; if (empty($user->rights->$feature->$subfeature->supprimer) && empty($user->rights->$feature->$subfeature->delete)) $deleteok = 0;
else { $deleteok=1; break; } // For bypass the second test if the first is ok else { $deleteok = 1; break; } // For bypass the second test if the first is ok
} }
} }
elseif (! empty($feature)) // This is used for permissions on 1 level elseif (!empty($feature)) // This is used for permissions on 1 level
{ {
//print '<br>feature='.$feature.' creer='.$user->rights->$feature->supprimer.' write='.$user->rights->$feature->delete; //print '<br>feature='.$feature.' creer='.$user->rights->$feature->supprimer.' write='.$user->rights->$feature->delete;
if (empty($user->rights->$feature->supprimer) if (empty($user->rights->$feature->supprimer)
&& empty($user->rights->$feature->delete) && empty($user->rights->$feature->delete)
&& empty($user->rights->$feature->run)) $deleteok=0; && empty($user->rights->$feature->run)) $deleteok = 0;
} }
} }
// If a or and at least one ok // If a or and at least one ok
if (preg_match('/\|/', $features) && $nbko < count($featuresarray)) $deleteok=1; if (preg_match('/\|/', $features) && $nbko < count($featuresarray)) $deleteok = 1;
if (! $deleteok && ! ($isdraft && $createok)) accessforbidden(); if (!$deleteok && !($isdraft && $createok)) accessforbidden();
//print "Delete access is ok"; //print "Delete access is ok";
} }
// If we have a particular object to check permissions on, we check this object // If we have a particular object to check permissions on, we check this object
// is linked to a company allowed to $user. // is linked to a company allowed to $user.
if (! empty($objectid) && $objectid > 0) if (!empty($objectid) && $objectid > 0)
{ {
$ok = checkUserAccessToObject($user, $featuresarray, $objectid, $tableandshare, $feature2, $dbt_keyfield, $dbt_select); $ok = checkUserAccessToObject($user, $featuresarray, $objectid, $tableandshare, $feature2, $dbt_keyfield, $dbt_select);
$params=array('objectid' => $objectid, 'features' => join(',', $featuresarray), 'features2' => $feature2); $params = array('objectid' => $objectid, 'features' => join(',', $featuresarray), 'features2' => $feature2);
return $ok ? 1 : accessforbidden('', 1, 1, 0, $params); return $ok ? 1 : accessforbidden('', 1, 1, 0, $params);
} }
@ -449,65 +449,65 @@ function checkUserAccessToObject($user, $featuresarray, $objectid = 0, $tableand
// More parameters // More parameters
$params = explode('&', $tableandshare); $params = explode('&', $tableandshare);
$dbtablename=(! empty($params[0]) ? $params[0] : ''); $dbtablename = (!empty($params[0]) ? $params[0] : '');
$sharedelement=(! empty($params[1]) ? $params[1] : $dbtablename); $sharedelement = (!empty($params[1]) ? $params[1] : $dbtablename);
foreach ($featuresarray as $feature) foreach ($featuresarray as $feature)
{ {
$sql=''; $sql = '';
// For backward compatibility // For backward compatibility
if ($feature == 'member') $feature='adherent'; if ($feature == 'member') $feature = 'adherent';
if ($feature == 'project') $feature='projet'; if ($feature == 'project') $feature = 'projet';
if ($feature == 'task') $feature='projet_task'; if ($feature == 'task') $feature = 'projet_task';
$check = array('adherent','banque','bom','don','user','usergroup','product','produit','service','produit|service','categorie','resource','expensereport','holiday'); // Test on entity only (Objects with no link to company) $check = array('adherent', 'banque', 'bom', 'don', 'user', 'usergroup', 'product', 'produit', 'service', 'produit|service', 'categorie', 'resource', 'expensereport', 'holiday'); // Test on entity only (Objects with no link to company)
$checksoc = array('societe'); // Test for societe object $checksoc = array('societe'); // Test for societe object
$checkother = array('contact','agenda'); // Test on entity and link to third party. Allowed if link is empty (Ex: contacts...). $checkother = array('contact', 'agenda'); // Test on entity and link to third party. Allowed if link is empty (Ex: contacts...).
$checkproject = array('projet','project'); // Test for project object $checkproject = array('projet', 'project'); // Test for project object
$checktask = array('projet_task'); $checktask = array('projet_task');
$nocheck = array('barcode','stock'); // No test $nocheck = array('barcode', 'stock'); // No test
//$checkdefault = 'all other not already defined'; // Test on entity and link to third party. Not allowed if link is empty (Ex: invoice, orders...). //$checkdefault = 'all other not already defined'; // Test on entity and link to third party. Not allowed if link is empty (Ex: invoice, orders...).
// If dbtablename not defined, we use same name for table than module name // If dbtablename not defined, we use same name for table than module name
if (empty($dbtablename)) if (empty($dbtablename))
{ {
$dbtablename = $feature; $dbtablename = $feature;
$sharedelement = (! empty($params[1]) ? $params[1] : $dbtablename); // We change dbtablename, so we set sharedelement too. $sharedelement = (!empty($params[1]) ? $params[1] : $dbtablename); // We change dbtablename, so we set sharedelement too.
} }
// Check permission for object with entity // Check permission for object with entity
if (in_array($feature, $check)) if (in_array($feature, $check))
{ {
$sql = "SELECT COUNT(dbt.".$dbt_select.") as nb"; $sql = "SELECT COUNT(dbt.".$dbt_select.") as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
if (($feature == 'user' || $feature == 'usergroup') && ! empty($conf->multicompany->enabled)) if (($feature == 'user' || $feature == 'usergroup') && !empty($conf->multicompany->enabled))
{ {
if (! empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE)) if (!empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE))
{ {
if ($conf->entity == 1 && $user->admin && ! $user->entity) if ($conf->entity == 1 && $user->admin && !$user->entity)
{ {
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND dbt.entity IS NOT NULL"; $sql .= " AND dbt.entity IS NOT NULL";
} }
else else
{ {
$sql.= ",".MAIN_DB_PREFIX."usergroup_user as ug"; $sql .= ",".MAIN_DB_PREFIX."usergroup_user as ug";
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND ((ug.fk_user = dbt.rowid"; $sql .= " AND ((ug.fk_user = dbt.rowid";
$sql.= " AND ug.entity IN (".getEntity('usergroup')."))"; $sql .= " AND ug.entity IN (".getEntity('usergroup')."))";
$sql.= " OR dbt.entity = 0)"; // Show always superadmin $sql .= " OR dbt.entity = 0)"; // Show always superadmin
} }
} }
else { else {
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND dbt.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND dbt.entity IN (".getEntity($sharedelement, 1).")";
} }
} }
else else
{ {
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND dbt.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND dbt.entity IN (".getEntity($sharedelement, 1).")";
} }
} }
elseif (in_array($feature, $checksoc)) // We check feature = checksoc elseif (in_array($feature, $checksoc)) // We check feature = checksoc
@ -518,23 +518,23 @@ function checkUserAccessToObject($user, $featuresarray, $objectid = 0, $tableand
if ($user->socid <> $objectid) return false; if ($user->socid <> $objectid) return false;
} }
// If internal user: Check permission for internal users that are restricted on their objects // If internal user: Check permission for internal users that are restricted on their objects
elseif (! empty($conf->societe->enabled) && ($user->rights->societe->lire && ! $user->rights->societe->client->voir)) elseif (!empty($conf->societe->enabled) && ($user->rights->societe->lire && !$user->rights->societe->client->voir))
{ {
$sql = "SELECT COUNT(sc.fk_soc) as nb"; $sql = "SELECT COUNT(sc.fk_soc) as nb";
$sql.= " FROM (".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql .= " FROM (".MAIN_DB_PREFIX."societe_commerciaux as sc";
$sql.= ", ".MAIN_DB_PREFIX."societe as s)"; $sql .= ", ".MAIN_DB_PREFIX."societe as s)";
$sql.= " WHERE sc.fk_soc IN (".$objectid.")"; $sql .= " WHERE sc.fk_soc IN (".$objectid.")";
$sql.= " AND sc.fk_user = ".$user->id; $sql .= " AND sc.fk_user = ".$user->id;
$sql.= " AND sc.fk_soc = s.rowid"; $sql .= " AND sc.fk_soc = s.rowid";
$sql.= " AND s.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND s.entity IN (".getEntity($sharedelement, 1).")";
} }
// If multicompany and internal users with all permissions, check user is in correct entity // If multicompany and internal users with all permissions, check user is in correct entity
elseif (! empty($conf->multicompany->enabled)) elseif (!empty($conf->multicompany->enabled))
{ {
$sql = "SELECT COUNT(s.rowid) as nb"; $sql = "SELECT COUNT(s.rowid) as nb";
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql .= " FROM ".MAIN_DB_PREFIX."societe as s";
$sql.= " WHERE s.rowid IN (".$objectid.")"; $sql .= " WHERE s.rowid IN (".$objectid.")";
$sql.= " AND s.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND s.entity IN (".getEntity($sharedelement, 1).")";
} }
} }
elseif (in_array($feature, $checkother)) // Test on entity and link to societe. Allowed if link is empty (Ex: contacts...). elseif (in_array($feature, $checkother)) // Test on entity and link to societe. Allowed if link is empty (Ex: contacts...).
@ -543,110 +543,110 @@ function checkUserAccessToObject($user, $featuresarray, $objectid = 0, $tableand
if ($user->socid > 0) if ($user->socid > 0)
{ {
$sql = "SELECT COUNT(dbt.".$dbt_select.") as nb"; $sql = "SELECT COUNT(dbt.".$dbt_select.") as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND dbt.fk_soc = ".$user->socid; $sql .= " AND dbt.fk_soc = ".$user->socid;
} }
// If internal user: Check permission for internal users that are restricted on their objects // If internal user: Check permission for internal users that are restricted on their objects
elseif (! empty($conf->societe->enabled) && ($user->rights->societe->lire && ! $user->rights->societe->client->voir)) elseif (!empty($conf->societe->enabled) && ($user->rights->societe->lire && !$user->rights->societe->client->voir))
{ {
$sql = "SELECT COUNT(dbt.".$dbt_select.") as nb"; $sql = "SELECT COUNT(dbt.".$dbt_select.") as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON dbt.fk_soc = sc.fk_soc AND sc.fk_user = '".$user->id."'"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON dbt.fk_soc = sc.fk_soc AND sc.fk_user = '".$user->id."'";
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND (dbt.fk_soc IS NULL OR sc.fk_soc IS NOT NULL)"; // Contact not linked to a company or to a company of user $sql .= " AND (dbt.fk_soc IS NULL OR sc.fk_soc IS NOT NULL)"; // Contact not linked to a company or to a company of user
$sql.= " AND dbt.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND dbt.entity IN (".getEntity($sharedelement, 1).")";
} }
// If multicompany and internal users with all permissions, check user is in correct entity // If multicompany and internal users with all permissions, check user is in correct entity
elseif (! empty($conf->multicompany->enabled)) elseif (!empty($conf->multicompany->enabled))
{ {
$sql = "SELECT COUNT(dbt.".$dbt_select.") as nb"; $sql = "SELECT COUNT(dbt.".$dbt_select.") as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND dbt.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND dbt.entity IN (".getEntity($sharedelement, 1).")";
} }
} }
elseif (in_array($feature, $checkproject)) elseif (in_array($feature, $checkproject))
{ {
if (! empty($conf->projet->enabled) && empty($user->rights->projet->all->lire)) if (!empty($conf->projet->enabled) && empty($user->rights->projet->all->lire))
{ {
include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
$projectstatic=new Project($db); $projectstatic = new Project($db);
$tmps=$projectstatic->getProjectsAuthorizedForUser($user, 0, 1, 0); $tmps = $projectstatic->getProjectsAuthorizedForUser($user, 0, 1, 0);
$tmparray=explode(',', $tmps); $tmparray = explode(',', $tmps);
if (! in_array($objectid, $tmparray)) return false; if (!in_array($objectid, $tmparray)) return false;
} }
else else
{ {
$sql = "SELECT COUNT(dbt.".$dbt_select.") as nb"; $sql = "SELECT COUNT(dbt.".$dbt_select.") as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND dbt.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND dbt.entity IN (".getEntity($sharedelement, 1).")";
} }
} }
elseif (in_array($feature, $checktask)) elseif (in_array($feature, $checktask))
{ {
if (! empty($conf->projet->enabled) && empty($user->rights->projet->all->lire)) if (!empty($conf->projet->enabled) && empty($user->rights->projet->all->lire))
{ {
$task = new Task($db); $task = new Task($db);
$task->fetch($objectid); $task->fetch($objectid);
include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
$projectstatic=new Project($db); $projectstatic = new Project($db);
$tmps=$projectstatic->getProjectsAuthorizedForUser($user, 0, 1, 0); $tmps = $projectstatic->getProjectsAuthorizedForUser($user, 0, 1, 0);
$tmparray=explode(',', $tmps); $tmparray = explode(',', $tmps);
if (! in_array($task->fk_project, $tmparray)) return false; if (!in_array($task->fk_project, $tmparray)) return false;
} }
else else
{ {
$sql = "SELECT COUNT(dbt.".$dbt_select.") as nb"; $sql = "SELECT COUNT(dbt.".$dbt_select.") as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND dbt.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND dbt.entity IN (".getEntity($sharedelement, 1).")";
} }
} }
elseif (! in_array($feature, $nocheck)) // By default (case of $checkdefault), we check on object entity + link to third party on field $dbt_keyfield elseif (!in_array($feature, $nocheck)) // By default (case of $checkdefault), we check on object entity + link to third party on field $dbt_keyfield
{ {
// If external user: Check permission for external users // If external user: Check permission for external users
if ($user->socid > 0) if ($user->socid > 0)
{ {
if (empty($dbt_keyfield)) dol_print_error('', 'Param dbt_keyfield is required but not defined'); if (empty($dbt_keyfield)) dol_print_error('', 'Param dbt_keyfield is required but not defined');
$sql = "SELECT COUNT(dbt.".$dbt_keyfield.") as nb"; $sql = "SELECT COUNT(dbt.".$dbt_keyfield.") as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql.= " WHERE dbt.rowid IN (".$objectid.")"; $sql .= " WHERE dbt.rowid IN (".$objectid.")";
$sql.= " AND dbt.".$dbt_keyfield." = ".$user->socid; $sql .= " AND dbt.".$dbt_keyfield." = ".$user->socid;
} }
// If internal user: Check permission for internal users that are restricted on their objects // If internal user: Check permission for internal users that are restricted on their objects
elseif (! empty($conf->societe->enabled) && ($user->rights->societe->lire && ! $user->rights->societe->client->voir)) elseif (!empty($conf->societe->enabled) && ($user->rights->societe->lire && !$user->rights->societe->client->voir))
{ {
if (empty($dbt_keyfield)) dol_print_error('', 'Param dbt_keyfield is required but not defined'); if (empty($dbt_keyfield)) dol_print_error('', 'Param dbt_keyfield is required but not defined');
$sql = "SELECT COUNT(sc.fk_soc) as nb"; $sql = "SELECT COUNT(sc.fk_soc) as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql.= ", ".MAIN_DB_PREFIX."societe as s"; $sql .= ", ".MAIN_DB_PREFIX."societe as s";
$sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND sc.fk_soc = dbt.".$dbt_keyfield; $sql .= " AND sc.fk_soc = dbt.".$dbt_keyfield;
$sql.= " AND dbt.".$dbt_keyfield." = s.rowid"; $sql .= " AND dbt.".$dbt_keyfield." = s.rowid";
$sql.= " AND dbt.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND dbt.entity IN (".getEntity($sharedelement, 1).")";
$sql.= " AND sc.fk_user = ".$user->id; $sql .= " AND sc.fk_user = ".$user->id;
} }
// If multicompany and internal users with all permissions, check user is in correct entity // If multicompany and internal users with all permissions, check user is in correct entity
elseif (! empty($conf->multicompany->enabled)) elseif (!empty($conf->multicompany->enabled))
{ {
$sql = "SELECT COUNT(dbt.".$dbt_select.") as nb"; $sql = "SELECT COUNT(dbt.".$dbt_select.") as nb";
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt"; $sql .= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
$sql.= " WHERE dbt.".$dbt_select." IN (".$objectid.")"; $sql .= " WHERE dbt.".$dbt_select." IN (".$objectid.")";
$sql.= " AND dbt.entity IN (".getEntity($sharedelement, 1).")"; $sql .= " AND dbt.entity IN (".getEntity($sharedelement, 1).")";
} }
} }
if ($sql) if ($sql)
{ {
$resql=$db->query($sql); $resql = $db->query($sql);
if ($resql) if ($resql)
{ {
$obj = $db->fetch_object($resql); $obj = $db->fetch_object($resql);
if (! $obj || $obj->nb < count(explode(',', $objectid))) return false; if (!$obj || $obj->nb < count(explode(',', $objectid))) return false;
} }
else else
{ {
@ -671,10 +671,10 @@ function checkUserAccessToObject($user, $featuresarray, $objectid = 0, $tableand
function accessforbidden($message = '', $printheader = 1, $printfooter = 1, $showonlymessage = 0, $params = null) function accessforbidden($message = '', $printheader = 1, $printfooter = 1, $showonlymessage = 0, $params = null)
{ {
global $conf, $db, $user, $langs, $hookmanager; global $conf, $db, $user, $langs, $hookmanager;
if (! is_object($langs)) if (!is_object($langs))
{ {
include_once DOL_DOCUMENT_ROOT.'/core/class/translate.class.php'; include_once DOL_DOCUMENT_ROOT.'/core/class/translate.class.php';
$langs=new Translate('', $conf); $langs = new Translate('', $conf);
$langs->setDefaultLang(); $langs->setDefaultLang();
} }
@ -686,7 +686,7 @@ function accessforbidden($message = '', $printheader = 1, $printfooter = 1, $sho
elseif (function_exists("llxHeaderVierge")) llxHeaderVierge(''); elseif (function_exists("llxHeaderVierge")) llxHeaderVierge('');
} }
print '<div class="error">'; print '<div class="error">';
if (! $message) print $langs->trans("ErrorForbidden"); if (!$message) print $langs->trans("ErrorForbidden");
else print $message; else print $message;
print '</div>'; print '</div>';
print '<br>'; print '<br>';
@ -700,7 +700,7 @@ function accessforbidden($message = '', $printheader = 1, $printfooter = 1, $sho
$hookmanager->initHooks(array('main')); $hookmanager->initHooks(array('main'));
} }
$parameters = array('message'=>$message, 'params'=>$params); $parameters = array('message'=>$message, 'params'=>$params);
$reshook=$hookmanager->executeHooks('getAccessForbiddenMessage', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks $reshook = $hookmanager->executeHooks('getAccessForbiddenMessage', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
print $hookmanager->resPrint; print $hookmanager->resPrint;
if (empty($reshook)) if (empty($reshook))
{ {

View File

@ -64,11 +64,11 @@ class EmailCollector extends CommonObject
/** /**
* @var array List of child tables. To test if we can delete object. * @var array List of child tables. To test if we can delete object.
*/ */
protected $childtables=array(); protected $childtables = array();
/** /**
* @var array List of child tables. To know object to delete on cascade. * @var array List of child tables. To know object to delete on cascade.
*/ */
protected $childtablesoncascade=array('emailcollector_emailcollectorfilter','emailcollector_emailcollectoraction'); protected $childtablesoncascade = array('emailcollector_emailcollectorfilter', 'emailcollector_emailcollectoraction');
/** /**
@ -94,8 +94,8 @@ class EmailCollector extends CommonObject
/** /**
* @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor.
*/ */
public $fields=array( public $fields = array(
'rowid' => array('type'=>'integer', 'label'=>'TechnicalID','visible'=>2, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1), 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'visible'=>2, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1),
'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'default'=>1, 'notnull'=>1, 'index'=>1, 'position'=>20), 'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'default'=>1, 'notnull'=>1, 'index'=>1, 'position'=>20),
'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'help'=>'Example: MyCollector1'), 'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'help'=>'Example: MyCollector1'),
'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'visible'=>1, 'enabled'=>1, 'position'=>30, 'notnull'=>-1, 'searchall'=>1, 'help'=>'Example: My Email collector'), 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'visible'=>1, 'enabled'=>1, 'position'=>30, 'notnull'=>-1, 'searchall'=>1, 'help'=>'Example: My Email collector'),
@ -107,7 +107,7 @@ class EmailCollector extends CommonObject
//'filter' => array('type'=>'text', 'label'=>'Filter', 'visible'=>1, 'enabled'=>1, 'position'=>105), //'filter' => array('type'=>'text', 'label'=>'Filter', 'visible'=>1, 'enabled'=>1, 'position'=>105),
//'actiontodo' => array('type'=>'varchar(255)', 'label'=>'ActionToDo', 'visible'=>1, 'enabled'=>1, 'position'=>106), //'actiontodo' => array('type'=>'varchar(255)', 'label'=>'ActionToDo', 'visible'=>1, 'enabled'=>1, 'position'=>106),
'target_directory' => array('type'=>'varchar(255)', 'label'=>'MailboxTargetDirectory', 'visible'=>1, 'enabled'=>1, 'position'=>110, 'notnull'=>0, 'comment'=>"Where to store messages once processed"), 'target_directory' => array('type'=>'varchar(255)', 'label'=>'MailboxTargetDirectory', 'visible'=>1, 'enabled'=>1, 'position'=>110, 'notnull'=>0, 'comment'=>"Where to store messages once processed"),
'maxemailpercollect' => array('type'=>'integer', 'label'=>'MaxEmailCollectPerCollect','visible'=>-1, 'enabled'=>1, 'position'=>111, 'default'=>100), 'maxemailpercollect' => array('type'=>'integer', 'label'=>'MaxEmailCollectPerCollect', 'visible'=>-1, 'enabled'=>1, 'position'=>111, 'default'=>100),
'datelastresult' => array('type'=>'datetime', 'label'=>'DateLastCollectResult', 'visible'=>1, 'enabled'=>'$action != "create" && $action != "edit"', 'position'=>121, 'notnull'=>-1,), 'datelastresult' => array('type'=>'datetime', 'label'=>'DateLastCollectResult', 'visible'=>1, 'enabled'=>'$action != "create" && $action != "edit"', 'position'=>121, 'notnull'=>-1,),
'codelastresult' => array('type'=>'varchar(16)', 'label'=>'CodeLastResult', 'visible'=>1, 'enabled'=>'$action != "create" && $action != "edit"', 'position'=>122, 'notnull'=>-1,), 'codelastresult' => array('type'=>'varchar(16)', 'label'=>'CodeLastResult', 'visible'=>1, 'enabled'=>'$action != "create" && $action != "edit"', 'position'=>122, 'notnull'=>-1,),
'lastresult' => array('type'=>'varchar(255)', 'label'=>'LastResult', 'visible'=>1, 'enabled'=>'$action != "create" && $action != "edit"', 'position'=>123, 'notnull'=>-1,), 'lastresult' => array('type'=>'varchar(255)', 'label'=>'LastResult', 'visible'=>1, 'enabled'=>'$action != "create" && $action != "edit"', 'position'=>123, 'notnull'=>-1,),
@ -222,13 +222,13 @@ class EmailCollector extends CommonObject
} }
// Translate some data of arrayofkeyval // Translate some data of arrayofkeyval
foreach($this->fields as $key => $val) foreach ($this->fields as $key => $val)
{ {
if (is_array($val['arrayofkeyval'])) if (is_array($val['arrayofkeyval']))
{ {
foreach($val['arrayofkeyval'] as $key2 => $val2) foreach ($val['arrayofkeyval'] as $key2 => $val2)
{ {
$this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); $this->fields[$key]['arrayofkeyval'][$key2] = $langs->trans($val2);
} }
} }
} }
@ -279,10 +279,10 @@ class EmailCollector extends CommonObject
if (is_array($object->array_options) && count($object->array_options) > 0) if (is_array($object->array_options) && count($object->array_options) > 0)
{ {
$extrafields->fetch_name_optionals_label($this->table_element); $extrafields->fetch_name_optionals_label($this->table_element);
foreach($object->array_options as $key => $option) foreach ($object->array_options as $key => $option)
{ {
$shortkey = preg_replace('/options_/', '', $key); $shortkey = preg_replace('/options_/', '', $key);
if (! empty($extrafields->attributes[$this->element]['unique'][$shortkey])) if (!empty($extrafields->attributes[$this->element]['unique'][$shortkey]))
{ {
//var_dump($key); var_dump($clonedObj->array_options[$key]); exit; //var_dump($key); var_dump($clonedObj->array_options[$key]); exit;
unset($object->array_options[$key]); unset($object->array_options[$key]);
@ -437,38 +437,38 @@ class EmailCollector extends CommonObject
{ {
global $conf, $langs, $hookmanager; global $conf, $langs, $hookmanager;
if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips if (!empty($conf->dol_no_mouse_hover)) $notooltip = 1; // Force disable tooltips
$result = ''; $result = '';
$label = '<u>' . $langs->trans("EmailCollector") . '</u>'; $label = '<u>'.$langs->trans("EmailCollector").'</u>';
$label.= '<br>'; $label .= '<br>';
$label.= '<b>' . $langs->trans('Ref') . ':</b> ' . $this->ref; $label .= '<b>'.$langs->trans('Ref').':</b> '.$this->ref;
$url = dol_buildpath('/admin/emailcollector_card.php', 1).'?id='.$this->id; $url = dol_buildpath('/admin/emailcollector_card.php', 1).'?id='.$this->id;
if ($option != 'nolink') if ($option != 'nolink')
{ {
// Add param to save lastsearch_values or not // Add param to save lastsearch_values or not
$add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0); $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
if ($save_lastsearch_value == -1 && preg_match('/list\.php/', $_SERVER["PHP_SELF"])) { if ($save_lastsearch_value == -1 && preg_match('/list\.php/', $_SERVER["PHP_SELF"])) {
$add_save_lastsearch_values=1; $add_save_lastsearch_values = 1;
} }
if ($add_save_lastsearch_values) { if ($add_save_lastsearch_values) {
$url.='&save_lastsearch_values=1'; $url .= '&save_lastsearch_values=1';
} }
} }
$linkclose=''; $linkclose = '';
if (empty($notooltip)) if (empty($notooltip))
{ {
if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
{ {
$label=$langs->trans("ShowEmailCollector"); $label = $langs->trans("ShowEmailCollector");
$linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"'; $linkclose .= ' alt="'.dol_escape_htmltag($label, 1).'"';
} }
$linkclose.=' title="'.dol_escape_htmltag($label, 1).'"'; $linkclose .= ' title="'.dol_escape_htmltag($label, 1).'"';
$linkclose.=' class="classfortooltip'.($morecss?' '.$morecss:'').'"'; $linkclose .= ' class="classfortooltip'.($morecss ? ' '.$morecss : '').'"';
/* /*
$hookmanager->initHooks(array('myobjectdao')); $hookmanager->initHooks(array('myobjectdao'));
@ -681,7 +681,7 @@ class EmailCollector extends CommonObject
$flags .= '/novalidate-cert'; $flags .= '/novalidate-cert';
//$flags.='/readonly'; //$flags.='/readonly';
//$flags.='/debug'; //$flags.='/debug';
if ($norsh || ! empty($conf->global->IMPA_FORCE_NORSH)) $flags .= '/norsh'; if ($norsh || !empty($conf->global->IMPA_FORCE_NORSH)) $flags .= '/norsh';
$connectstringserver = '{'.$this->host.':993'.$flags.'}'; $connectstringserver = '{'.$this->host.':993'.$flags.'}';
@ -698,13 +698,13 @@ class EmailCollector extends CommonObject
{ {
if (function_exists('mb_convert_encoding')) { if (function_exists('mb_convert_encoding')) {
// change spaces by entropy because mb_convert fail with spaces // change spaces by entropy because mb_convert fail with spaces
$str=preg_replace("/ /", "xyxy", $str); $str = preg_replace("/ /", "xyxy", $str);
// if mb_convert work // if mb_convert work
if ($str = mb_convert_encoding($str, "UTF-7")) { if ($str = mb_convert_encoding($str, "UTF-7")) {
// change characters // change characters
$str=preg_replace("/\+A/", "&A", $str); $str = preg_replace("/\+A/", "&A", $str);
// change to spaces again // change to spaces again
$str=preg_replace("/xyxy/", " ", $str); $str = preg_replace("/xyxy/", " ", $str);
return $str; return $str;
} else { } else {
// print error and return false // print error and return false
@ -762,59 +762,59 @@ class EmailCollector extends CommonObject
// Overwrite values with values extracted from source email // Overwrite values with values extracted from source email
// $this->actionparam = 'opportunity_status=123;abc=EXTRACT:BODY:....' // $this->actionparam = 'opportunity_status=123;abc=EXTRACT:BODY:....'
$arrayvaluetouse = dolExplodeIntoArray($actionparam, ';', '='); $arrayvaluetouse = dolExplodeIntoArray($actionparam, ';', '=');
foreach($arrayvaluetouse as $propertytooverwrite => $valueforproperty) foreach ($arrayvaluetouse as $propertytooverwrite => $valueforproperty)
{ {
$tmpclass=''; $tmpproperty=''; $tmpclass = ''; $tmpproperty = '';
$tmparray=explode('.', $propertytooverwrite); $tmparray = explode('.', $propertytooverwrite);
if (count($tmparray) == 2) if (count($tmparray) == 2)
{ {
$tmpclass=$tmparray[0]; $tmpclass = $tmparray[0];
$tmpproperty=$tmparray[1]; $tmpproperty = $tmparray[1];
} }
else else
{ {
$tmpproperty=$tmparray[0]; $tmpproperty = $tmparray[0];
} }
if ($tmpclass && ($tmpclass != $object->element)) continue; // Property is for another type of object if ($tmpclass && ($tmpclass != $object->element)) continue; // Property is for another type of object
//if (property_exists($object, $tmpproperty) || preg_match('/^options_/', $tmpproperty)) //if (property_exists($object, $tmpproperty) || preg_match('/^options_/', $tmpproperty))
if ($tmpproperty) if ($tmpproperty)
{ {
$sourcestring=''; $sourcestring = '';
$sourcefield=''; $sourcefield = '';
$regexstring=''; $regexstring = '';
//$transformationstring=''; //$transformationstring='';
$regforregex=array(); $regforregex = array();
if (preg_match('/^EXTRACT:([a-zA-Z0-9]+):(.*):([^:])$/', $valueforproperty, $regforregex)) if (preg_match('/^EXTRACT:([a-zA-Z0-9]+):(.*):([^:])$/', $valueforproperty, $regforregex))
{ {
$sourcefield=$regforregex[1]; $sourcefield = $regforregex[1];
$regexstring=$regforregex[2]; $regexstring = $regforregex[2];
//$transofrmationstring=$regforregex[3]; //$transofrmationstring=$regforregex[3];
} }
elseif (preg_match('/^EXTRACT:([a-zA-Z0-9]+):(.*)$/', $valueforproperty, $regforregex)) elseif (preg_match('/^EXTRACT:([a-zA-Z0-9]+):(.*)$/', $valueforproperty, $regforregex))
{ {
$sourcefield=$regforregex[1]; $sourcefield = $regforregex[1];
$regexstring=$regforregex[2]; $regexstring = $regforregex[2];
} }
if (! empty($sourcefield) && ! empty($regexstring)) if (!empty($sourcefield) && !empty($regexstring))
{ {
if (strtolower($sourcefield) == 'body') $sourcestring=$messagetext; if (strtolower($sourcefield) == 'body') $sourcestring = $messagetext;
elseif (strtolower($sourcefield) == 'subject') $sourcestring=$subject; elseif (strtolower($sourcefield) == 'subject') $sourcestring = $subject;
elseif (strtolower($sourcefield) == 'header') $sourcestring=$header; elseif (strtolower($sourcefield) == 'header') $sourcestring = $header;
if ($sourcestring) if ($sourcestring)
{ {
$regforval=array(); $regforval = array();
$regexoptions=''; $regexoptions = '';
if (strtolower($sourcefield) == 'body') $regexoptions='ms'; // The m means ^ and $ char is valid at each new line. The s means the char '.' is valid for new lines char too if (strtolower($sourcefield) == 'body') $regexoptions = 'ms'; // The m means ^ and $ char is valid at each new line. The s means the char '.' is valid for new lines char too
if (strtolower($sourcefield) == 'header') $regexoptions='m'; // The m means ^ and $ char is valid at each new line. if (strtolower($sourcefield) == 'header') $regexoptions = 'm'; // The m means ^ and $ char is valid at each new line.
//var_dump($tmpproperty.' - '.$regexstring.' - '.$regexoptions.' - '.$sourcestring); //var_dump($tmpproperty.' - '.$regexstring.' - '.$regexoptions.' - '.$sourcestring);
if (preg_match('/'.$regexstring.'/'.$regexoptions, $sourcestring, $regforval)) if (preg_match('/'.$regexstring.'/'.$regexoptions, $sourcestring, $regforval))
{ {
//var_dump($regforval[1]);exit; //var_dump($regforval[1]);exit;
// Overwrite param $tmpproperty // Overwrite param $tmpproperty
$object->$tmpproperty = isset($regforval[1])?trim($regforval[1]):null; $object->$tmpproperty = isset($regforval[1]) ?trim($regforval[1]) : null;
} }
else else
{ {
@ -832,24 +832,24 @@ class EmailCollector extends CommonObject
} }
elseif (preg_match('/^(SET|SETIFEMPTY):(.*)$/', $valueforproperty, $regforregex)) elseif (preg_match('/^(SET|SETIFEMPTY):(.*)$/', $valueforproperty, $regforregex))
{ {
$valuecurrent=''; $valuecurrent = '';
if (preg_match('/^options_/', $tmpproperty)) $valuecurrent = $object->array_options[preg_replace('/^options_/', '', $tmpproperty)]; if (preg_match('/^options_/', $tmpproperty)) $valuecurrent = $object->array_options[preg_replace('/^options_/', '', $tmpproperty)];
else $valuecurrent = $object->$tmpproperty; else $valuecurrent = $object->$tmpproperty;
if ($regforregex[1] == 'SET' || empty($valuecurrent)) if ($regforregex[1] == 'SET' || empty($valuecurrent))
{ {
$valuetouse = $regforregex[2]; $valuetouse = $regforregex[2];
$substitutionarray=array(); $substitutionarray = array();
$matcharray=array(); $matcharray = array();
preg_match_all('/__([a-z0-9]+(?:_[a-z0-9]+)?)__/i', $valuetouse, $matcharray); preg_match_all('/__([a-z0-9]+(?:_[a-z0-9]+)?)__/i', $valuetouse, $matcharray);
//var_dump($tmpproperty.' - '.$object->$tmpproperty.' - '.$valuetouse); var_dump($matcharray); //var_dump($tmpproperty.' - '.$object->$tmpproperty.' - '.$valuetouse); var_dump($matcharray);
if (is_array($matcharray[1])) // $matcharray[1] is array with list of substitution key found without the __ if (is_array($matcharray[1])) // $matcharray[1] is array with list of substitution key found without the __
{ {
foreach($matcharray[1] as $keytoreplace) foreach ($matcharray[1] as $keytoreplace)
{ {
if ($keytoreplace && isset($object->$keytoreplace)) if ($keytoreplace && isset($object->$keytoreplace))
{ {
$substitutionarray['__'.$keytoreplace.'__']=$object->$keytoreplace; $substitutionarray['__'.$keytoreplace.'__'] = $object->$keytoreplace;
} }
} }
} }
@ -928,7 +928,7 @@ class EmailCollector extends CommonObject
$connectstringtarget = $connectstringserver.imap_utf7_encode($targetdir); $connectstringtarget = $connectstringserver.imap_utf7_encode($targetdir);
$connection = imap_open($connectstringsource, $this->login, $this->password); $connection = imap_open($connectstringsource, $this->login, $this->password);
if (! $connection) if (!$connection)
{ {
$this->error = 'Failed to open IMAP connection '.$connectstringsource; $this->error = 'Failed to open IMAP connection '.$connectstringsource;
return -3; return -3;
@ -936,58 +936,58 @@ class EmailCollector extends CommonObject
imap_errors(); // Clear stack of errors. imap_errors(); // Clear stack of errors.
// $conf->global->MAIL_PREFIX_FOR_EMAIL_ID must be defined // $conf->global->MAIL_PREFIX_FOR_EMAIL_ID must be defined
$host=dol_getprefix('email'); $host = dol_getprefix('email');
// Define the IMAP search string // Define the IMAP search string
// See https://tools.ietf.org/html/rfc3501#section-6.4.4 for IMAPv4 (PHP not yet compatible) // See https://tools.ietf.org/html/rfc3501#section-6.4.4 for IMAPv4 (PHP not yet compatible)
// See https://tools.ietf.org/html/rfc1064 page 13 for IMAPv2 // See https://tools.ietf.org/html/rfc1064 page 13 for IMAPv2
//$search='ALL'; //$search='ALL';
$search='UNDELETED'; // Seems not supported by some servers $search = 'UNDELETED'; // Seems not supported by some servers
$searchhead=''; $searchhead = '';
$searchfilterdoltrackid=0; $searchfilterdoltrackid = 0;
$searchfilternodoltrackid=0; $searchfilternodoltrackid = 0;
foreach($this->filters as $rule) foreach ($this->filters as $rule)
{ {
if (empty($rule['status'])) continue; if (empty($rule['status'])) continue;
if ($rule['type'] == 'to') $search.=($search?' ':'').'TO "'.str_replace('"', '', $rule['rulevalue']).'"'; if ($rule['type'] == 'to') $search .= ($search ? ' ' : '').'TO "'.str_replace('"', '', $rule['rulevalue']).'"';
if ($rule['type'] == 'bcc') $search.=($search?' ':'').'BCC'; if ($rule['type'] == 'bcc') $search .= ($search ? ' ' : '').'BCC';
if ($rule['type'] == 'cc') $search.=($search?' ':'').'CC'; if ($rule['type'] == 'cc') $search .= ($search ? ' ' : '').'CC';
if ($rule['type'] == 'from') $search.=($search?' ':'').'FROM "'.str_replace('"', '', $rule['rulevalue']).'"'; if ($rule['type'] == 'from') $search .= ($search ? ' ' : '').'FROM "'.str_replace('"', '', $rule['rulevalue']).'"';
if ($rule['type'] == 'subject') $search.=($search?' ':'').'SUBJECT "'.str_replace('"', '', $rule['rulevalue']).'"'; if ($rule['type'] == 'subject') $search .= ($search ? ' ' : '').'SUBJECT "'.str_replace('"', '', $rule['rulevalue']).'"';
if ($rule['type'] == 'body') $search.=($search?' ':'').'BODY "'.str_replace('"', '', $rule['rulevalue']).'"'; if ($rule['type'] == 'body') $search .= ($search ? ' ' : '').'BODY "'.str_replace('"', '', $rule['rulevalue']).'"';
if ($rule['type'] == 'header') $search.=($search?' ':'').'HEADER '.$rule['rulevalue']; if ($rule['type'] == 'header') $search .= ($search ? ' ' : '').'HEADER '.$rule['rulevalue'];
if ($rule['type'] == 'notinsubject') $search.=($search?' ':'').'SUBJECT NOT "'.str_replace('"', '', $rule['rulevalue']).'"'; if ($rule['type'] == 'notinsubject') $search .= ($search ? ' ' : '').'SUBJECT NOT "'.str_replace('"', '', $rule['rulevalue']).'"';
if ($rule['type'] == 'notinbody') $search.=($search?' ':'').'BODY NOT "'.str_replace('"', '', $rule['rulevalue']).'"'; if ($rule['type'] == 'notinbody') $search .= ($search ? ' ' : '').'BODY NOT "'.str_replace('"', '', $rule['rulevalue']).'"';
if ($rule['type'] == 'seen') $search.=($search?' ':'').'SEEN'; if ($rule['type'] == 'seen') $search .= ($search ? ' ' : '').'SEEN';
if ($rule['type'] == 'unseen') $search.=($search?' ':'').'UNSEEN'; if ($rule['type'] == 'unseen') $search .= ($search ? ' ' : '').'UNSEEN';
if ($rule['type'] == 'unanswered') $search.=($search?' ':'').'UNANSWERED'; if ($rule['type'] == 'unanswered') $search .= ($search ? ' ' : '').'UNANSWERED';
if ($rule['type'] == 'answered') $search.=($search?' ':'').'ANSWERED'; if ($rule['type'] == 'answered') $search .= ($search ? ' ' : '').'ANSWERED';
if ($rule['type'] == 'smaller') $search.=($search?' ':'').'SMALLER "'.str_replace('"', '', $rule['rulevalue']).'"'; if ($rule['type'] == 'smaller') $search .= ($search ? ' ' : '').'SMALLER "'.str_replace('"', '', $rule['rulevalue']).'"';
if ($rule['type'] == 'larger') $search.=($search?' ':'').'LARGER "'.str_replace('"', '', $rule['rulevalue']).'"'; if ($rule['type'] == 'larger') $search .= ($search ? ' ' : '').'LARGER "'.str_replace('"', '', $rule['rulevalue']).'"';
if ($rule['type'] == 'withtrackingid') { $searchfilterdoltrackid++; $searchhead.='/References.*@'.preg_quote($host, '/').'/'; } if ($rule['type'] == 'withtrackingid') { $searchfilterdoltrackid++; $searchhead .= '/References.*@'.preg_quote($host, '/').'/'; }
if ($rule['type'] == 'withouttrackingid') { $searchfilternodoltrackid++; $searchhead.='! /References.*@'.preg_quote($host, '/').'/';} if ($rule['type'] == 'withouttrackingid') { $searchfilternodoltrackid++; $searchhead .= '! /References.*@'.preg_quote($host, '/').'/'; }
} }
if (empty($targetdir)) // Use last date as filter if there is no targetdir defined. if (empty($targetdir)) // Use last date as filter if there is no targetdir defined.
{ {
$fromdate=0; $fromdate = 0;
if ($this->datelastok) $fromdate = $this->datelastok; if ($this->datelastok) $fromdate = $this->datelastok;
if ($fromdate > 0) $search.=($search?' ':'').'SINCE '.date('j-M-Y', $fromdate - 1); // SENTSINCE not supported. Date must be X-Abc-9999 (X on 1 digit if < 10) if ($fromdate > 0) $search .= ($search ? ' ' : '').'SINCE '.date('j-M-Y', $fromdate - 1); // SENTSINCE not supported. Date must be X-Abc-9999 (X on 1 digit if < 10)
//$search.=($search?' ':'').'SINCE 8-Apr-2018'; //$search.=($search?' ':'').'SINCE 8-Apr-2018';
} }
dol_syslog("IMAP search string = ".$search); dol_syslog("IMAP search string = ".$search);
//var_dump($search); //var_dump($search);
$nbemailprocessed=0; $nbemailprocessed = 0;
$nbemailok=0; $nbemailok = 0;
$nbactiondone=0; $nbactiondone = 0;
// Scan IMAP inbox // Scan IMAP inbox
$arrayofemail= imap_search($connection, $search, null, "UTF-8"); $arrayofemail = imap_search($connection, $search, null, "UTF-8");
if ($arrayofemail === false) if ($arrayofemail === false)
{ {
// Nothing found or search string not understood // Nothing found or search string not understood
@ -1001,7 +1001,7 @@ class EmailCollector extends CommonObject
} }
// Loop on each email found // Loop on each email found
if (! $error && ! empty($arrayofemail) && count($arrayofemail) > 0) if (!$error && !empty($arrayofemail) && count($arrayofemail) > 0)
{ {
// Loop to get part html and plain // Loop to get part html and plain
/* /*
@ -1078,7 +1078,7 @@ class EmailCollector extends CommonObject
dol_syslog("Start of loop on email", LOG_INFO, 1); dol_syslog("Start of loop on email", LOG_INFO, 1);
foreach($arrayofemail as $imapemail) foreach ($arrayofemail as $imapemail)
{ {
if ($nbemailprocessed > 1000) if ($nbemailprocessed > 1000)
{ {
@ -1086,7 +1086,7 @@ class EmailCollector extends CommonObject
} }
$header = imap_fetchheader($connection, $imapemail, 0); $header = imap_fetchheader($connection, $imapemail, 0);
$matches=array(); $matches = array();
preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)\r\n/m', $header, $matches); preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)\r\n/m', $header, $matches);
$headers = array_combine($matches[1], $matches[2]); $headers = array_combine($matches[1], $matches[2]);
//var_dump($headers); //var_dump($headers);
@ -1206,26 +1206,26 @@ class EmailCollector extends CommonObject
//print $messagetext; //print $messagetext;
//exit; //exit;
$fromstring=$overview[0]->from; $fromstring = $overview[0]->from;
$sender=$overview[0]->sender; $sender = $overview[0]->sender;
$to=$overview[0]->to; $to = $overview[0]->to;
$sendtocc=$overview[0]->cc; $sendtocc = $overview[0]->cc;
$sendtobcc=$overview[0]->bcc; $sendtobcc = $overview[0]->bcc;
$date=$overview[0]->udate; $date = $overview[0]->udate;
$msgid=str_replace(array('<','>'), '', $overview[0]->message_id); $msgid = str_replace(array('<', '>'), '', $overview[0]->message_id);
$subject=$overview[0]->subject; $subject = $overview[0]->subject;
//var_dump($msgid);exit; //var_dump($msgid);exit;
$reg=array(); $reg = array();
if (preg_match('/^(.*)<(.*)>$/', $fromstring, $reg)) if (preg_match('/^(.*)<(.*)>$/', $fromstring, $reg))
{ {
$from=$reg[2]; $from = $reg[2];
$fromtext=$reg[1]; $fromtext = $reg[1];
} }
else else
{ {
$from = $fromstring; $from = $fromstring;
$fromtext=''; $fromtext = '';
} }
$fk_element_id = 0; $fk_element_type = ''; $fk_element_id = 0; $fk_element_type = '';
@ -1375,10 +1375,10 @@ class EmailCollector extends CommonObject
else $descriptiontitle = $langs->trans("ActionAC_".$actioncode).' - '.$langs->trans("MailFrom").' '.$from; else $descriptiontitle = $langs->trans("ActionAC_".$actioncode).' - '.$langs->trans("MailFrom").' '.$from;
$descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("MailTopic").' : '.dol_escape_htmltag($subject)); $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("MailTopic").' : '.dol_escape_htmltag($subject));
$descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("MailFrom").($langs->trans("MailFrom") != 'From' ? ' (From)':'').' : '.dol_escape_htmltag($fromstring)); $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("MailFrom").($langs->trans("MailFrom") != 'From' ? ' (From)' : '').' : '.dol_escape_htmltag($fromstring));
if ($sender) $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("Sender").($langs->trans("Sender") != 'Sender' ? ' (Sender)':'').' : '.dol_escape_htmltag($sender)); if ($sender) $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("Sender").($langs->trans("Sender") != 'Sender' ? ' (Sender)' : '').' : '.dol_escape_htmltag($sender));
$descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("MailTo").($langs->trans("MailTo") != 'To' ? ' (To)':'').' : '.dol_escape_htmltag($to)); $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("MailTo").($langs->trans("MailTo") != 'To' ? ' (To)' : '').' : '.dol_escape_htmltag($to));
if ($sendtocc) $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("MailCC").($langs->trans("MailCC") != 'CC' ? ' (CC)':'').' : '.dol_escape_htmltag($sendtocc)); if ($sendtocc) $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("MailCC").($langs->trans("MailCC") != 'CC' ? ' (CC)' : '').' : '.dol_escape_htmltag($sendtocc));
//if ($bcc) $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("Bcc").' : '.dol_escape_htmltag($bcc)); //if ($bcc) $descriptionmeta = dol_concatdesc($descriptionmeta, $langs->trans("Bcc").' : '.dol_escape_htmltag($bcc));
} }
@ -1394,38 +1394,38 @@ class EmailCollector extends CommonObject
else else
{ {
$actionparam = $operation['actionparam']; $actionparam = $operation['actionparam'];
$nametouseforthirdparty=''; $nametouseforthirdparty = '';
// $this->actionparam = 'SET:aaa' or 'EXTRACT:BODY:....' // $this->actionparam = 'SET:aaa' or 'EXTRACT:BODY:....'
$arrayvaluetouse = dolExplodeIntoArray($actionparam, ';', '='); $arrayvaluetouse = dolExplodeIntoArray($actionparam, ';', '=');
foreach($arrayvaluetouse as $propertytooverwrite => $valueforproperty) foreach ($arrayvaluetouse as $propertytooverwrite => $valueforproperty)
{ {
$sourcestring=''; $sourcestring = '';
$sourcefield=''; $sourcefield = '';
$regexstring=''; $regexstring = '';
$regforregex=array(); $regforregex = array();
if (preg_match('/^EXTRACT:([a-zA-Z0-9]+):(.*)$/', $valueforproperty, $regforregex)) if (preg_match('/^EXTRACT:([a-zA-Z0-9]+):(.*)$/', $valueforproperty, $regforregex))
{ {
$sourcefield=$regforregex[1]; $sourcefield = $regforregex[1];
$regexstring=$regforregex[2]; $regexstring = $regforregex[2];
} }
if (! empty($sourcefield) && ! empty($regexstring)) if (!empty($sourcefield) && !empty($regexstring))
{ {
if (strtolower($sourcefield) == 'body') $sourcestring=$messagetext; if (strtolower($sourcefield) == 'body') $sourcestring = $messagetext;
elseif (strtolower($sourcefield) == 'subject') $sourcestring=$subject; elseif (strtolower($sourcefield) == 'subject') $sourcestring = $subject;
elseif (strtolower($sourcefield) == 'header') $sourcestring=$header; elseif (strtolower($sourcefield) == 'header') $sourcestring = $header;
if ($sourcestring) if ($sourcestring)
{ {
$regforval=array(); $regforval = array();
//var_dump($regexstring);var_dump($sourcestring); //var_dump($regexstring);var_dump($sourcestring);
if (preg_match('/'.$regexstring.'/ms', $sourcestring, $regforval)) if (preg_match('/'.$regexstring.'/ms', $sourcestring, $regforval))
{ {
//var_dump($regforval[1]);exit; //var_dump($regforval[1]);exit;
// Overwrite param $tmpproperty // Overwrite param $tmpproperty
$nametouseforthirdparty = isset($regforval[1])?trim($regforval[1]):null; $nametouseforthirdparty = isset($regforval[1]) ?trim($regforval[1]) : null;
} }
else else
{ {
@ -1515,7 +1515,7 @@ class EmailCollector extends CommonObject
// TODO Check if $msg ID already in database for $conf->entity // TODO Check if $msg ID already in database for $conf->entity
if (! $alreadycreated) if (!$alreadycreated)
{ {
if ($projectstatic->id > 0) if ($projectstatic->id > 0)
{ {
@ -1545,7 +1545,7 @@ class EmailCollector extends CommonObject
$actioncomm->type_code = 'AC_OTH_AUTO'; // Type of event ('AC_OTH', 'AC_OTH_AUTO', 'AC_XXX'...) $actioncomm->type_code = 'AC_OTH_AUTO'; // Type of event ('AC_OTH', 'AC_OTH_AUTO', 'AC_XXX'...)
$actioncomm->code = 'AC_'.$actioncode; $actioncomm->code = 'AC_'.$actioncode;
$actioncomm->label = $langs->trans("ActionAC_".$actioncode).' - '.$langs->trans("MailFrom").' '.$from; $actioncomm->label = $langs->trans("ActionAC_".$actioncode).' - '.$langs->trans("MailFrom").' '.$from;
$actioncomm->note_private= $descriptionfull; $actioncomm->note_private = $descriptionfull;
$actioncomm->fk_project = $projectstatic->id; $actioncomm->fk_project = $projectstatic->id;
$actioncomm->datep = $date; $actioncomm->datep = $date;
$actioncomm->datef = $date; $actioncomm->datef = $date;
@ -1558,14 +1558,14 @@ class EmailCollector extends CommonObject
// Fields when action is an email (content should be added into note) // Fields when action is an email (content should be added into note)
$actioncomm->email_msgid = $msgid; $actioncomm->email_msgid = $msgid;
$actioncomm->email_from = $fromstring; $actioncomm->email_from = $fromstring;
$actioncomm->email_sender= $sender; $actioncomm->email_sender = $sender;
$actioncomm->email_to = $to; $actioncomm->email_to = $to;
$actioncomm->email_tocc = $sendtocc; $actioncomm->email_tocc = $sendtocc;
$actioncomm->email_tobcc = $sendtobcc; $actioncomm->email_tobcc = $sendtobcc;
$actioncomm->email_subject = $subject; $actioncomm->email_subject = $subject;
$actioncomm->errors_to = ''; $actioncomm->errors_to = '';
if (! in_array($fk_element_type, array('societe','contact','project','user'))) if (!in_array($fk_element_type, array('societe', 'contact', 'project', 'user')))
{ {
$actioncomm->fk_element = $fk_element_id; $actioncomm->fk_element = $fk_element_id;
$actioncomm->elementtype = $fk_element_type; $actioncomm->elementtype = $fk_element_type;
@ -1637,18 +1637,18 @@ class EmailCollector extends CommonObject
if (empty($projecttocreate->ref)) if (empty($projecttocreate->ref))
{ {
// Get next project Ref // Get next project Ref
$defaultref=''; $defaultref = '';
$modele = empty($conf->global->PROJECT_ADDON)?'mod_project_simple':$conf->global->PROJECT_ADDON; $modele = empty($conf->global->PROJECT_ADDON) ? 'mod_project_simple' : $conf->global->PROJECT_ADDON;
// Search template files // Search template files
$file=''; $classname=''; $filefound=0; $reldir=''; $file = ''; $classname = ''; $filefound = 0; $reldir = '';
$dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']); $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
foreach($dirmodels as $reldir) foreach ($dirmodels as $reldir)
{ {
$file=dol_buildpath($reldir."core/modules/project/".$modele.'.php', 0); $file = dol_buildpath($reldir."core/modules/project/".$modele.'.php', 0);
if (file_exists($file)) if (file_exists($file))
{ {
$filefound=1; $filefound = 1;
$classname = $modele; $classname = $modele;
break; break;
} }
@ -1656,7 +1656,7 @@ class EmailCollector extends CommonObject
if ($filefound) if ($filefound)
{ {
$result=dol_include_once($reldir."core/modules/project/".$modele.'.php'); $result = dol_include_once($reldir."core/modules/project/".$modele.'.php');
$modProject = new $classname; $modProject = new $classname;
if ($savesocid > 0) if ($savesocid > 0)
@ -1752,18 +1752,18 @@ class EmailCollector extends CommonObject
if (empty($tickettocreate->ref)) if (empty($tickettocreate->ref))
{ {
// Get next project Ref // Get next project Ref
$defaultref=''; $defaultref = '';
$modele = empty($conf->global->TICKET_ADDON)?'mod_ticket_simple':$conf->global->TICKET_ADDON; $modele = empty($conf->global->TICKET_ADDON) ? 'mod_ticket_simple' : $conf->global->TICKET_ADDON;
// Search template files // Search template files
$file=''; $classname=''; $filefound=0; $reldir=''; $file = ''; $classname = ''; $filefound = 0; $reldir = '';
$dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']); $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
foreach($dirmodels as $reldir) foreach ($dirmodels as $reldir)
{ {
$file=dol_buildpath($reldir."core/modules/ticket/".$modele.'.php', 0); $file = dol_buildpath($reldir."core/modules/ticket/".$modele.'.php', 0);
if (file_exists($file)) if (file_exists($file))
{ {
$filefound=1; $filefound = 1;
$classname = $modele; $classname = $modele;
break; break;
} }
@ -1771,7 +1771,7 @@ class EmailCollector extends CommonObject
if ($filefound) if ($filefound)
{ {
$result=dol_include_once($reldir."core/modules/ticket/".$modele.'.php'); $result = dol_include_once($reldir."core/modules/ticket/".$modele.'.php');
$modTicket = new $classname; $modTicket = new $classname;
if ($savesocid > 0) if ($savesocid > 0)
@ -1878,13 +1878,13 @@ class EmailCollector extends CommonObject
} }
} }
$output=$langs->trans('XEmailsDoneYActionsDone', $nbemailprocessed, $nbemailok, $nbactiondone); $output = $langs->trans('XEmailsDoneYActionsDone', $nbemailprocessed, $nbemailok, $nbactiondone);
dol_syslog("End of loop on emails", LOG_INFO, -1); dol_syslog("End of loop on emails", LOG_INFO, -1);
} }
else else
{ {
$output=$langs->trans('NoNewEmailToProcess'); $output = $langs->trans('NoNewEmailToProcess');
} }
imap_expunge($connection); // To validate any move imap_expunge($connection); // To validate any move
@ -1896,7 +1896,7 @@ class EmailCollector extends CommonObject
$this->debuginfo = 'IMAP search string used : '.$search; $this->debuginfo = 'IMAP search string used : '.$search;
if ($searchhead) $this->debuginfo .= '<br>Then search string into email header : '.$searchhead; if ($searchhead) $this->debuginfo .= '<br>Then search string into email header : '.$searchhead;
if (! $error) $this->datelastok = $now; if (!$error) $this->datelastok = $now;
if (!empty($this->errors)) $this->lastresult .= " - ".join(" - ", $this->errors); if (!empty($this->errors)) $this->lastresult .= " - ".join(" - ", $this->errors);
$this->codelastresult = ($error ? 'KO' : 'OK'); $this->codelastresult = ($error ? 'KO' : 'OK');
@ -1922,7 +1922,7 @@ class EmailCollector extends CommonObject
{ {
// input $mbox = IMAP stream, $mid = message id // input $mbox = IMAP stream, $mid = message id
// output all the following: // output all the following:
global $charset,$htmlmsg,$plainmsg,$attachments; global $charset, $htmlmsg, $plainmsg, $attachments;
$htmlmsg = $plainmsg = $charset = ''; $htmlmsg = $plainmsg = $charset = '';
$attachments = array(); $attachments = array();
@ -1939,7 +1939,7 @@ class EmailCollector extends CommonObject
} else { } else {
// multipart: cycle through each part // multipart: cycle through each part
foreach ($s->parts as $partno0 => $p) { foreach ($s->parts as $partno0 => $p) {
$this->getpart($mbox, $mid, $p, $partno0+1); $this->getpart($mbox, $mid, $p, $partno0 + 1);
} }
} }
} }
@ -1971,16 +1971,16 @@ class EmailCollector extends CommonObject
private function getpart($mbox, $mid, $p, $partno) private function getpart($mbox, $mid, $p, $partno)
{ {
// $partno = '1', '2', '2.1', '2.1.3', etc for multipart, 0 if simple // $partno = '1', '2', '2.1', '2.1.3', etc for multipart, 0 if simple
global $htmlmsg,$plainmsg,$charset,$attachments; global $htmlmsg, $plainmsg, $charset, $attachments;
// DECODE DATA // DECODE DATA
$data = ($partno)? $data = ($partno) ?
imap_fetchbody($mbox, $mid, $partno): // multipart imap_fetchbody($mbox, $mid, $partno) : // multipart
imap_body($mbox, $mid); // simple imap_body($mbox, $mid); // simple
// Any part may be encoded, even plain text messages, so check everything. // Any part may be encoded, even plain text messages, so check everything.
if ($p->encoding==4) if ($p->encoding == 4)
$data = quoted_printable_decode($data); $data = quoted_printable_decode($data);
elseif ($p->encoding==3) elseif ($p->encoding == 3)
$data = base64_decode($data); $data = base64_decode($data);
// PARAMETERS // PARAMETERS
@ -2006,19 +2006,19 @@ class EmailCollector extends CommonObject
// so an attached text file (type 0) is not mistaken as the message. // so an attached text file (type 0) is not mistaken as the message.
if ($params['filename'] || $params['name']) { if ($params['filename'] || $params['name']) {
// filename may be given as 'Filename' or 'Name' or both // filename may be given as 'Filename' or 'Name' or both
$filename = ($params['filename'])? $params['filename'] : $params['name']; $filename = ($params['filename']) ? $params['filename'] : $params['name'];
// filename may be encoded, so see imap_mime_header_decode() // filename may be encoded, so see imap_mime_header_decode()
$attachments[$filename] = $data; // this is a problem if two files have same name $attachments[$filename] = $data; // this is a problem if two files have same name
} }
// TEXT // TEXT
if ($p->type==0 && $data) { if ($p->type == 0 && $data) {
// Messages may be split in different parts because of inline attachments, // Messages may be split in different parts because of inline attachments,
// so append parts together with blank row. // so append parts together with blank row.
if (strtolower($p->subtype)=='plain') if (strtolower($p->subtype) == 'plain')
$plainmsg .= trim($data) ."\n\n"; $plainmsg .= trim($data)."\n\n";
else else
$htmlmsg .= $data ."<br><br>"; $htmlmsg .= $data."<br><br>";
$charset = $params['charset']; // assume all parts are same charset $charset = $params['charset']; // assume all parts are same charset
} }
@ -2027,7 +2027,7 @@ class EmailCollector extends CommonObject
// but AOL uses type 1 (multipart), which is not handled here. // but AOL uses type 1 (multipart), which is not handled here.
// There are no PHP functions to parse embedded messages, // There are no PHP functions to parse embedded messages,
// so this just appends the raw source to the main message. // so this just appends the raw source to the main message.
elseif ($p->type==2 && $data) { elseif ($p->type == 2 && $data) {
$plainmsg .= $data."\n\n"; $plainmsg .= $data."\n\n";
} }
@ -2035,7 +2035,7 @@ class EmailCollector extends CommonObject
if ($p->parts) { if ($p->parts) {
foreach ($p->parts as $partno0=>$p2) foreach ($p->parts as $partno0=>$p2)
{ {
$this->getpart($mbox, $mid, $p2, $partno.'.'.($partno0+1)); // 1.2, 1.2.1, etc. $this->getpart($mbox, $mid, $p2, $partno.'.'.($partno0 + 1)); // 1.2, 1.2.1, etc.
} }
} }
} }