Merge branch 'develop' of https://github.com/Dolibarr/dolibarr.git into
develop_ldap Conflicts: htdocs/adherents/card.php
This commit is contained in:
commit
791c385e5b
@ -138,6 +138,16 @@ if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'e
|
|||||||
|
|
||||||
if (empty($reshook))
|
if (empty($reshook))
|
||||||
{
|
{
|
||||||
|
if ($cancel)
|
||||||
|
{
|
||||||
|
if (! empty($backtopage))
|
||||||
|
{
|
||||||
|
header("Location: ".$backtopage);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
$action='';
|
||||||
|
}
|
||||||
|
|
||||||
if ($action == 'setuserid' && ($user->rights->user->self->creer || $user->rights->user->user->creer))
|
if ($action == 'setuserid' && ($user->rights->user->self->creer || $user->rights->user->user->creer))
|
||||||
{
|
{
|
||||||
$error=0;
|
$error=0;
|
||||||
@ -239,6 +249,7 @@ if (empty($reshook))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
if ($action == 'confirm_sendinfo' && $confirm == 'yes')
|
if ($action == 'confirm_sendinfo' && $confirm == 'yes')
|
||||||
{
|
{
|
||||||
if ($object->email)
|
if ($object->email)
|
||||||
@ -251,7 +262,7 @@ if (empty($reshook))
|
|||||||
$langs->load("mails");
|
$langs->load("mails");
|
||||||
setEventMessages($langs->trans("MailSuccessfulySent", $from, $object->email), null, 'mesgs');
|
setEventMessages($langs->trans("MailSuccessfulySent", $from, $object->email), null, 'mesgs');
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
if ($action == 'update' && ! $cancel && $user->rights->adherent->creer)
|
if ($action == 'update' && ! $cancel && $user->rights->adherent->creer)
|
||||||
{
|
{
|
||||||
@ -724,10 +735,21 @@ if (empty($reshook))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Actions when printing a doc from card
|
||||||
|
include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php';
|
||||||
|
|
||||||
// Actions to build doc
|
// Actions to build doc
|
||||||
$upload_dir = $conf->adherent->dir_output;
|
$upload_dir = $conf->adherent->dir_output;
|
||||||
$permissioncreate=$user->rights->adherent->creer;
|
$permissioncreate=$user->rights->adherent->creer;
|
||||||
include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
|
include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
|
||||||
|
|
||||||
|
// Actions to send emails
|
||||||
|
$trigger_name='MEMBER_SENTBYMAIL';
|
||||||
|
$paramname='id';
|
||||||
|
$mode='emailfrommember';
|
||||||
|
$trackid='mem'.$object->id;
|
||||||
|
include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1354,10 +1376,10 @@ else
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Confirm send card by mail
|
// Confirm send card by mail
|
||||||
if ($action == 'sendinfo')
|
/*if ($action == 'sendinfo')
|
||||||
{
|
{
|
||||||
print $form->formconfirm("card.php?rowid=".$id,$langs->trans("SendCardByMail"),$langs->trans("ConfirmSendCardByMail",$object->email),"confirm_sendinfo",'',0,1);
|
print $form->formconfirm("card.php?rowid=".$id,$langs->trans("SendCardByMail"),$langs->trans("ConfirmSendCardByMail",$object->email),"confirm_sendinfo",'',0,1);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
// Confirm terminate
|
// Confirm terminate
|
||||||
if ($action == 'resign')
|
if ($action == 'resign')
|
||||||
@ -1600,6 +1622,31 @@ else
|
|||||||
if (empty($reshook)) {
|
if (empty($reshook)) {
|
||||||
if ($action != 'valid' && $action != 'editlogin' && $action != 'editthirdparty')
|
if ($action != 'valid' && $action != 'editlogin' && $action != 'editthirdparty')
|
||||||
{
|
{
|
||||||
|
// Send
|
||||||
|
if ($object->statut == 1) {
|
||||||
|
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&action=presend&mode=init#formmailbeforetitle">' . $langs->trans('SendByMail') . '</a></div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send card by email
|
||||||
|
// TODO Remove this to replace with a template
|
||||||
|
/*
|
||||||
|
if ($user->rights->adherent->creer)
|
||||||
|
{
|
||||||
|
if ($object->statut >= 1)
|
||||||
|
{
|
||||||
|
if ($object->email) print '<div class="inline-block divButAction"><a class="butAction" href="card.php?rowid='.$object->id.'&action=sendinfo">'.$langs->trans("SendCardByMail")."</a></div>\n";
|
||||||
|
else print '<div class="inline-block divButAction"><a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans("NoEMail")).'">'.$langs->trans("SendCardByMail")."</a></div>\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print '<div class="inline-block divButAction"><font class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans("ValidateBefore")).'">'.$langs->trans("SendCardByMail")."</font></div>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print '<div class="inline-block divButAction"><font class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans("NotEnoughPermissions")).'">'.$langs->trans("SendCardByMail")."</font></div>";
|
||||||
|
}*/
|
||||||
|
|
||||||
// Modify
|
// Modify
|
||||||
if ($user->rights->adherent->creer)
|
if ($user->rights->adherent->creer)
|
||||||
{
|
{
|
||||||
@ -1636,24 +1683,6 @@ else
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send card by email
|
|
||||||
if ($user->rights->adherent->creer)
|
|
||||||
{
|
|
||||||
if ($object->statut >= 1)
|
|
||||||
{
|
|
||||||
if ($object->email) print '<div class="inline-block divButAction"><a class="butAction" href="card.php?rowid='.$object->id.'&action=sendinfo">'.$langs->trans("SendCardByMail")."</a></div>\n";
|
|
||||||
else print '<div class="inline-block divButAction"><a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans("NoEMail")).'">'.$langs->trans("SendCardByMail")."</a></div>\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print '<div class="inline-block divButAction"><font class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans("ValidateBefore")).'">'.$langs->trans("SendCardByMail")."</font></div>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print '<div class="inline-block divButAction"><font class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans("NotEnoughPermissions")).'">'.$langs->trans("SendCardByMail")."</font></div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Terminate
|
// Terminate
|
||||||
if ($object->statut >= 1)
|
if ($object->statut >= 1)
|
||||||
{
|
{
|
||||||
@ -1730,7 +1759,13 @@ else
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Select mail models is same action as presend
|
||||||
|
if (GETPOST('modelselected')) {
|
||||||
|
$action = 'presend';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($action != 'presend')
|
||||||
|
{
|
||||||
print '<div class="fichecenter"><div class="fichehalfleft">';
|
print '<div class="fichecenter"><div class="fichehalfleft">';
|
||||||
print '<a name="builddoc"></a>'; // ancre
|
print '<a name="builddoc"></a>'; // ancre
|
||||||
|
|
||||||
@ -1769,13 +1804,20 @@ else
|
|||||||
print '</div><div class="fichehalfright"><div class="ficheaddleft">';
|
print '</div><div class="fichehalfright"><div class="ficheaddleft">';
|
||||||
|
|
||||||
// List of actions on element
|
// List of actions on element
|
||||||
/* Already in tab Agenda/Events
|
|
||||||
include_once DOL_DOCUMENT_ROOT . '/core/class/html.formactions.class.php';
|
include_once DOL_DOCUMENT_ROOT . '/core/class/html.formactions.class.php';
|
||||||
$formactions = new FormActions($db);
|
$formactions = new FormActions($db);
|
||||||
$somethingshown = $formactions->showactions($object, 'member', $socid, 1);
|
$somethingshown = $formactions->showactions($object, 'member', $socid, 1, 'listactions', 10);
|
||||||
*/
|
|
||||||
print '</div></div></div>';
|
|
||||||
|
|
||||||
|
print '</div></div></div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Presend form
|
||||||
|
$modelmail='member';
|
||||||
|
$defaulttopic='SendMemberRef';
|
||||||
|
$diroutput = $conf->adherent->dir_output;
|
||||||
|
$trackid = 'mem'.$object->id;
|
||||||
|
|
||||||
|
include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -213,8 +213,6 @@ class Adherent extends CommonObject
|
|||||||
|
|
||||||
// Substitutions
|
// Substitutions
|
||||||
$substitutionarray=array(
|
$substitutionarray=array(
|
||||||
'__DOL_MAIN_URL_ROOT__'=>DOL_MAIN_URL_ROOT,
|
|
||||||
'__ID__'=>$msgishtml?dol_htmlentitiesbr($this->id):$this->id,
|
|
||||||
'__CIVILITY__'=>$this->getCivilityLabel(),
|
'__CIVILITY__'=>$this->getCivilityLabel(),
|
||||||
'__FIRSTNAME__'=>$msgishtml?dol_htmlentitiesbr($this->firstname):$this->firstname,
|
'__FIRSTNAME__'=>$msgishtml?dol_htmlentitiesbr($this->firstname):$this->firstname,
|
||||||
'__LASTNAME__'=>$msgishtml?dol_htmlentitiesbr($this->lastname):$this->lastname,
|
'__LASTNAME__'=>$msgishtml?dol_htmlentitiesbr($this->lastname):$this->lastname,
|
||||||
@ -222,42 +220,16 @@ class Adherent extends CommonObject
|
|||||||
'__COMPANY__'=>$msgishtml?dol_htmlentitiesbr($this->societe):$this->societe,
|
'__COMPANY__'=>$msgishtml?dol_htmlentitiesbr($this->societe):$this->societe,
|
||||||
'__ADDRESS__'=>$msgishtml?dol_htmlentitiesbr($this->address):$this->address,
|
'__ADDRESS__'=>$msgishtml?dol_htmlentitiesbr($this->address):$this->address,
|
||||||
'__ZIP__'=>$msgishtml?dol_htmlentitiesbr($this->zip):$this->zip,
|
'__ZIP__'=>$msgishtml?dol_htmlentitiesbr($this->zip):$this->zip,
|
||||||
'__TOWN_'=>$msgishtml?dol_htmlentitiesbr($this->town):$this->town,
|
'__TOWN__'=>$msgishtml?dol_htmlentitiesbr($this->town):$this->town,
|
||||||
'__COUNTRY__'=>$msgishtml?dol_htmlentitiesbr($this->country):$this->country,
|
'__COUNTRY__'=>$msgishtml?dol_htmlentitiesbr($this->country):$this->country,
|
||||||
'__EMAIL__'=>$msgishtml?dol_htmlentitiesbr($this->email):$this->email,
|
'__EMAIL__'=>$msgishtml?dol_htmlentitiesbr($this->email):$this->email,
|
||||||
'__BIRTH__'=>$msgishtml?dol_htmlentitiesbr($birthday):$birthday,
|
'__BIRTH__'=>$msgishtml?dol_htmlentitiesbr($birthday):$birthday,
|
||||||
'__PHOTO__'=>$msgishtml?dol_htmlentitiesbr($this->photo):$this->photo,
|
'__PHOTO__'=>$msgishtml?dol_htmlentitiesbr($this->photo):$this->photo,
|
||||||
'__LOGIN__'=>$msgishtml?dol_htmlentitiesbr($this->login):$this->login,
|
'__LOGIN__'=>$msgishtml?dol_htmlentitiesbr($this->login):$this->login,
|
||||||
'__PASSWORD__'=>$msgishtml?dol_htmlentitiesbr($this->pass):$this->pass,
|
'__PASSWORD__'=>$msgishtml?dol_htmlentitiesbr($this->pass):$this->pass,
|
||||||
// For backward compatibility
|
'__PHONE__'=>$msgishtml?dol_htmlentitiesbr($this->phone):$this->phone,
|
||||||
'%DOL_MAIN_URL_ROOT%'=>DOL_MAIN_URL_ROOT,
|
'__PHONEPRO__'=>$msgishtml?dol_htmlentitiesbr($this->phone_perso):$this->phone_perso,
|
||||||
'%ID%'=>$msgishtml?dol_htmlentitiesbr($this->id):$this->id,
|
'__PHONEMOBILE__'=>$msgishtml?dol_htmlentitiesbr($this->phone_mobile):$this->phone_mobile,
|
||||||
'%CIVILITY%'=>$this->getCivilityLabel(),
|
|
||||||
'%FIRSTNAME%'=>$msgishtml?dol_htmlentitiesbr($this->firstname):$this->firstname,
|
|
||||||
'%LASTNAME%'=>$msgishtml?dol_htmlentitiesbr($this->lastname):$this->lastname,
|
|
||||||
'%FULLNAME%'=>$msgishtml?dol_htmlentitiesbr($this->getFullName($langs)):$this->getFullName($langs),
|
|
||||||
'%COMPANY%'=>$msgishtml?dol_htmlentitiesbr($this->societe):$this->societe,
|
|
||||||
'%ADDRESS%'=>$msgishtml?dol_htmlentitiesbr($this->address):$this->address,
|
|
||||||
'%ZIP%'=>$msgishtml?dol_htmlentitiesbr($this->zip):$this->zip,
|
|
||||||
'%TOWN%'=>$msgishtml?dol_htmlentitiesbr($this->town):$this->town,
|
|
||||||
'%COUNTRY%'=>$msgishtml?dol_htmlentitiesbr($this->country):$this->country,
|
|
||||||
'%EMAIL%'=>$msgishtml?dol_htmlentitiesbr($this->email):$this->email,
|
|
||||||
'%BIRTH%'=>$msgishtml?dol_htmlentitiesbr($birthday):$birthday,
|
|
||||||
'%PHOTO%'=>$msgishtml?dol_htmlentitiesbr($this->photo):$this->photo,
|
|
||||||
'%LOGIN%'=>$msgishtml?dol_htmlentitiesbr($this->login):$this->login,
|
|
||||||
'%PASSWORD%'=>$msgishtml?dol_htmlentitiesbr($this->pass):$this->pass,
|
|
||||||
'%TYPE%'=>$msgishtml?dol_htmlentitiesbr($this->type):$this->type,
|
|
||||||
'%PHONE_PRO%'=>$msgishtml?dol_htmlentitiesbr($this->phone):$this->phone,
|
|
||||||
'%PHONE_PERSO%'=>$msgishtml?dol_htmlentitiesbr($this->phone_perso):$this->phone_perso,
|
|
||||||
'%PHONE_MOBILE%'=>$msgishtml?dol_htmlentitiesbr($this->phone_mobile):$this->phone_mobile,
|
|
||||||
// For backward compatibility
|
|
||||||
'%INFOS%'=>$msgishtml?dol_htmlentitiesbr($infos):$infos,
|
|
||||||
'%SOCIETE%'=>$msgishtml?dol_htmlentitiesbr($this->societe):$this->societe,
|
|
||||||
'%PRENOM%'=>$msgishtml?dol_htmlentitiesbr($this->firstname):$this->firstname,
|
|
||||||
'%NOM%'=>$msgishtml?dol_htmlentitiesbr($this->lastname):$this->lastname,
|
|
||||||
'%CP%'=>$msgishtml?dol_htmlentitiesbr($this->zip):$this->zip,
|
|
||||||
'%VILLE%'=>$msgishtml?dol_htmlentitiesbr($this->town):$this->town,
|
|
||||||
'%PAYS%'=>$msgishtml?dol_htmlentitiesbr($this->country):$this->country,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
complete_substitutions_array($substitutionarray, $langs, $this);
|
complete_substitutions_array($substitutionarray, $langs, $this);
|
||||||
@ -1191,7 +1163,7 @@ class Adherent extends CommonObject
|
|||||||
// Load other properties
|
// Load other properties
|
||||||
$result=$this->fetch_subscriptions();
|
$result=$this->fetch_subscriptions();
|
||||||
|
|
||||||
return $result;
|
return $this->id;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -82,8 +82,8 @@ if ($action == 'removebackgroundlogin' && ! empty($conf->global->MAIN_LOGIN_BACK
|
|||||||
|
|
||||||
if ($action == 'update')
|
if ($action == 'update')
|
||||||
{
|
{
|
||||||
dolibarr_set_const($db, "MAIN_LANG_DEFAULT", $_POST["main_lang_default"],'chaine',0,'',$conf->entity);
|
dolibarr_set_const($db, "MAIN_LANG_DEFAULT", $_POST["MAIN_LANG_DEFAULT"],'chaine',0,'',$conf->entity);
|
||||||
dolibarr_set_const($db, "MAIN_MULTILANGS", $_POST["main_multilangs"],'chaine',0,'',$conf->entity);
|
dolibarr_set_const($db, "MAIN_MULTILANGS", $_POST["MAIN_MULTILANGS"],'chaine',0,'',$conf->entity);
|
||||||
|
|
||||||
dolibarr_set_const($db, "MAIN_THEME", $_POST["main_theme"],'chaine',0,'',$conf->entity);
|
dolibarr_set_const($db, "MAIN_THEME", $_POST["main_theme"],'chaine',0,'',$conf->entity);
|
||||||
|
|
||||||
@ -231,14 +231,14 @@ if ($action == 'edit') // Edit
|
|||||||
|
|
||||||
// Default language
|
// Default language
|
||||||
print '<tr class="oddeven"><td class="titlefield">'.$langs->trans("DefaultLanguage").'</td><td>';
|
print '<tr class="oddeven"><td class="titlefield">'.$langs->trans("DefaultLanguage").'</td><td>';
|
||||||
print $formadmin->select_language($conf->global->MAIN_LANG_DEFAULT, 'main_lang_default', 1, 0, 0, 0, 0, 'minwidth300');
|
print $formadmin->select_language($conf->global->MAIN_LANG_DEFAULT, 'MAIN_LANG_DEFAULT', 1, 0, 0, 0, 0, 'minwidth300');
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '<td width="20"> </td>';
|
print '<td width="20"> </td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
// Multilingual GUI
|
// Multilingual GUI
|
||||||
print '<tr class="oddeven"><td class="titlefield">'.$langs->trans("EnableMultilangInterface").'</td><td>';
|
print '<tr class="oddeven"><td class="titlefield">'.$langs->trans("EnableMultilangInterface").'</td><td>';
|
||||||
print $form->selectyesno('main_multilangs',$conf->global->MAIN_MULTILANGS,1);
|
print $form->selectyesno('MAIN_MULTILANGS',$conf->global->MAIN_MULTILANGS,1);
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '<td width="20"> </td>';
|
print '<td width="20"> </td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|||||||
@ -78,6 +78,9 @@ $offset = $listlimit * $page ;
|
|||||||
$pageprev = $page - 1;
|
$pageprev = $page - 1;
|
||||||
$pagenext = $page + 1;
|
$pagenext = $page + 1;
|
||||||
|
|
||||||
|
if (empty($sortfield)) $sortfield='label, lang, position';
|
||||||
|
if (empty($sortorder)) $sortorder='ASC';
|
||||||
|
|
||||||
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
|
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
|
||||||
$hookmanager->initHooks(array('emailtemplates'));
|
$hookmanager->initHooks(array('emailtemplates'));
|
||||||
|
|
||||||
@ -87,7 +90,7 @@ $tabname[25]= MAIN_DB_PREFIX."c_email_templates";
|
|||||||
|
|
||||||
// Criteria to sort dictionaries
|
// Criteria to sort dictionaries
|
||||||
$tabsqlsort=array();
|
$tabsqlsort=array();
|
||||||
$tabsqlsort[25]="label ASC";
|
$tabsqlsort[25]="label ASC, lang ASC, position ASC";
|
||||||
|
|
||||||
// Nom des champs en resultat de select pour affichage du dictionnaire
|
// Nom des champs en resultat de select pour affichage du dictionnaire
|
||||||
$tabfield=array();
|
$tabfield=array();
|
||||||
@ -122,17 +125,30 @@ $formmail=new FormMail($db);
|
|||||||
if (empty($conf->global->MAIN_EMAIL_TEMPLATES_FOR_OBJECT_LINES))
|
if (empty($conf->global->MAIN_EMAIL_TEMPLATES_FOR_OBJECT_LINES))
|
||||||
{
|
{
|
||||||
$tmp=FormMail::getAvailableSubstitKey('formemail');
|
$tmp=FormMail::getAvailableSubstitKey('formemail');
|
||||||
$tmp['__(AnyTranslationKey)__']='__(AnyTranslationKey)__';
|
$tmp['__(AnyTranslationKey)__']='Translation';
|
||||||
$helpsubstit = $langs->trans("AvailableVariables").':<br>'.implode('<br>', $tmp);
|
$helpsubstit = $langs->trans("AvailableVariables").':<br>';
|
||||||
$helpsubstitforlines = $langs->trans("AvailableVariables").':<br>'.implode('<br>', $tmp);
|
$helpsubstitforlines = $langs->trans("AvailableVariables").':<br>';
|
||||||
|
foreach($tmp as $key => $val)
|
||||||
|
{
|
||||||
|
$helpsubstit.=$key.' -> '.$val.'<br>';
|
||||||
|
$helpsubstitforlines.=$key.' -> '.$val.'<br>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$tmp=FormMail::getAvailableSubstitKey('formemailwithlines');
|
$tmp=FormMail::getAvailableSubstitKey('formemailwithlines');
|
||||||
$tmp['__(AnyTranslationKey)__']='__(AnyTranslationKey)__';
|
$tmp['__(AnyTranslationKey)__']='Translation';
|
||||||
$helpsubstit = $langs->trans("AvailableVariables").':<br>'.implode('<br>', $tmp);
|
$helpsubstit = $langs->trans("AvailableVariables").':<br>';
|
||||||
|
$helpsubstitforlines = $langs->trans("AvailableVariables").':<br>';
|
||||||
|
foreach($tmp as $key => $val)
|
||||||
|
{
|
||||||
|
$helpsubstit.=$key.' -> '.$val.'<br>';
|
||||||
|
}
|
||||||
$tmp=FormMail::getAvailableSubstitKey('formemailforlines');
|
$tmp=FormMail::getAvailableSubstitKey('formemailforlines');
|
||||||
$helpsubstitforlines = $langs->trans("AvailableVariables").':<br>'.implode('<br>', $tmp);
|
foreach($tmp as $key => $val)
|
||||||
|
{
|
||||||
|
$helpsubstitforlines.=$key.' -> '.$val.'<br>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -159,6 +175,7 @@ if ($conf->supplier_proposal->enabled) $elementList['supplier_proposal_send']=$l
|
|||||||
if ($conf->fournisseur->enabled) $elementList['order_supplier_send']=$langs->trans('MailToSendSupplierOrder');
|
if ($conf->fournisseur->enabled) $elementList['order_supplier_send']=$langs->trans('MailToSendSupplierOrder');
|
||||||
if ($conf->fournisseur->enabled) $elementList['invoice_supplier_send']=$langs->trans('MailToSendSupplierInvoice');
|
if ($conf->fournisseur->enabled) $elementList['invoice_supplier_send']=$langs->trans('MailToSendSupplierInvoice');
|
||||||
if ($conf->societe->enabled) $elementList['thirdparty']=$langs->trans('MailToThirdparty');
|
if ($conf->societe->enabled) $elementList['thirdparty']=$langs->trans('MailToThirdparty');
|
||||||
|
if ($conf->adherent->enabled) $elementList['member']=$langs->trans('MailToMember');
|
||||||
if ($conf->contrat->enabled) $elementList['contract']=$langs->trans('MailToSendContract');
|
if ($conf->contrat->enabled) $elementList['contract']=$langs->trans('MailToSendContract');
|
||||||
$elementList['all']=$langs->trans('VisibleEverywhere');
|
$elementList['all']=$langs->trans('VisibleEverywhere');
|
||||||
$elementList['none']=$langs->trans('VisibleNowhere');
|
$elementList['none']=$langs->trans('VisibleNowhere');
|
||||||
@ -217,7 +234,7 @@ if (empty($reshook))
|
|||||||
if ($value == 'content') $value='content-'.$rowid;
|
if ($value == 'content') $value='content-'.$rowid;
|
||||||
if ($value == 'content_lines') $value='content_lines-'.$rowid;
|
if ($value == 'content_lines') $value='content_lines-'.$rowid;
|
||||||
|
|
||||||
if ((! isset($_POST[$value]) || $_POST[$value]=='' || $_POST[$value]=='-1') && $value != 'lang' && $value != 'fk_user')
|
if ((! isset($_POST[$value]) || $_POST[$value]=='' || $_POST[$value]=='-1') && $value != 'lang' && $value != 'fk_user' && $value != 'position')
|
||||||
{
|
{
|
||||||
$ok=0;
|
$ok=0;
|
||||||
$fieldnamekey=$listfield[$f];
|
$fieldnamekey=$listfield[$f];
|
||||||
@ -270,10 +287,9 @@ if (empty($reshook))
|
|||||||
$i=0;
|
$i=0;
|
||||||
foreach ($listfieldinsert as $f => $value)
|
foreach ($listfieldinsert as $f => $value)
|
||||||
{
|
{
|
||||||
|
//var_dump($i.' - '.$listfieldvalue[$i].' - '.$_POST[$listfieldvalue[$i]].' - '.$value);
|
||||||
$keycode=$listfieldvalue[$i];
|
$keycode=$listfieldvalue[$i];
|
||||||
if ($value == 'lang') $keycode='langcode';
|
if ($value == 'lang') $keycode='langcode';
|
||||||
|
|
||||||
//var_dump($i.' - '.$listfieldvalue[$i].' - '.$_POST[$listfieldvalue[$i]].' - '.$value);
|
|
||||||
if ($value == 'entity') $_POST[$keycode] = $conf->entity;
|
if ($value == 'entity') $_POST[$keycode] = $conf->entity;
|
||||||
if ($i) $sql.=",";
|
if ($i) $sql.=",";
|
||||||
if ($value == 'fk_user' && ! ($_POST[$keycode] > 0)) $_POST[$keycode]='';
|
if ($value == 'fk_user' && ! ($_POST[$keycode] > 0)) $_POST[$keycode]='';
|
||||||
@ -520,7 +536,7 @@ foreach ($fieldlist as $field => $value)
|
|||||||
$valuetoshow=$langs->trans($valuetoshow); // try to translate
|
$valuetoshow=$langs->trans($valuetoshow); // try to translate
|
||||||
$align="left";
|
$align="left";
|
||||||
if ($fieldlist[$field]=='fk_user') { $valuetoshow=$langs->trans("Owner");}
|
if ($fieldlist[$field]=='fk_user') { $valuetoshow=$langs->trans("Owner");}
|
||||||
if ($fieldlist[$field]=='lang') { $valuetoshow=$langs->trans("Language"); }
|
if ($fieldlist[$field]=='lang') { $valuetoshow=(empty($conf->global->MAIN_MULTILANGS) ? ' ' : $langs->trans("Language")); }
|
||||||
if ($fieldlist[$field]=='type') { $valuetoshow=$langs->trans("Type"); }
|
if ($fieldlist[$field]=='type') { $valuetoshow=$langs->trans("Type"); }
|
||||||
if ($fieldlist[$field]=='code') { $valuetoshow=$langs->trans("Code"); }
|
if ($fieldlist[$field]=='code') { $valuetoshow=$langs->trans("Code"); }
|
||||||
if ($fieldlist[$field]=='libelle' || $fieldlist[$field]=='label') { $valuetoshow=$langs->trans("Label"); }
|
if ($fieldlist[$field]=='libelle' || $fieldlist[$field]=='label') { $valuetoshow=$langs->trans("Label"); }
|
||||||
@ -573,7 +589,7 @@ $errors = $hookmanager->errors;
|
|||||||
|
|
||||||
if (empty($reshook))
|
if (empty($reshook))
|
||||||
{
|
{
|
||||||
if ($tabname[$id] == MAIN_DB_PREFIX . 'c_email_templates' && $action == 'edit') {
|
if ($action == 'edit') {
|
||||||
fieldList($fieldlist, $obj, $tabname[$id], 'hide');
|
fieldList($fieldlist, $obj, $tabname[$id], 'hide');
|
||||||
} else {
|
} else {
|
||||||
fieldList($fieldlist, $obj, $tabname[$id], 'add');
|
fieldList($fieldlist, $obj, $tabname[$id], 'add');
|
||||||
@ -681,6 +697,10 @@ if ($resql)
|
|||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
elseif ($value == 'topic') print '<td class="liste_titre"><input type="text" name="search_topic" value="'.dol_escape_htmltag($search_topic).'"></td>';
|
elseif ($value == 'topic') print '<td class="liste_titre"><input type="text" name="search_topic" value="'.dol_escape_htmltag($search_topic).'"></td>';
|
||||||
|
elseif ($value == 'type_template')
|
||||||
|
{
|
||||||
|
print '<td class="liste_titre">'.$form->selectarray('search_type_template', $elementList, $search_type_template, 1, 0, 0, '', 0, 0, 0, '', 'maxwidth100onsmartphone').'</td>';
|
||||||
|
}
|
||||||
elseif (! in_array($value, array('content', 'content_lines'))) print '<td class="liste_titre"></td>';
|
elseif (! in_array($value, array('content', 'content_lines'))) print '<td class="liste_titre"></td>';
|
||||||
}
|
}
|
||||||
if (empty($conf->global->MAIN_EMAIL_TEMPLATES_FOR_OBJECT_LINES)) print '<td class="liste_titre"></td>';
|
if (empty($conf->global->MAIN_EMAIL_TEMPLATES_FOR_OBJECT_LINES)) print '<td class="liste_titre"></td>';
|
||||||
@ -829,6 +849,8 @@ if ($resql)
|
|||||||
if ($value == 'private')
|
if ($value == 'private')
|
||||||
{
|
{
|
||||||
$align="center";
|
$align="center";
|
||||||
|
if ($valuetoshow) $valuetoshow=yn($valuetoshow);
|
||||||
|
else $valuetoshow='';
|
||||||
}
|
}
|
||||||
if ($value == 'position')
|
if ($value == 'position')
|
||||||
{
|
{
|
||||||
@ -1032,9 +1054,17 @@ function fieldList($fieldlist, $obj='', $tabname='', $context='')
|
|||||||
if ($fieldlist[$field]=='sortorder' || $fieldlist[$field]=='sens' || $fieldlist[$field]=='category_type') $size='size="2" ';
|
if ($fieldlist[$field]=='sortorder' || $fieldlist[$field]=='sens' || $fieldlist[$field]=='category_type') $size='size="2" ';
|
||||||
|
|
||||||
print '<td'.($classtd?' class="'.$classtd.'"':'').'>';
|
print '<td'.($classtd?' class="'.$classtd.'"':'').'>';
|
||||||
if ($fieldlist[$field]=='private' && empty($user->admin))
|
if ($fieldlist[$field]=='private')
|
||||||
{
|
{
|
||||||
print '<input type="text" '.$size.'class="flat'.($class?' '.$class:'').'" value="1" name="'.$fieldlist[$field].'">';
|
if (empty($user->admin))
|
||||||
|
{
|
||||||
|
print $form->selectyesno($fieldlist[$field], '1', 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//print '<input type="text" '.$size.'class="flat'.($class?' '.$class:'').'" value="1" name="'.$fieldlist[$field].'">';
|
||||||
|
print $form->selectyesno($fieldlist[$field], (isset($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:''), 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -397,7 +397,7 @@ if ($action == 'update')
|
|||||||
$datep=dol_mktime($fulldayevent?'00':$aphour, $fulldayevent?'00':$apmin, 0, $_POST["apmonth"], $_POST["apday"], $_POST["apyear"]);
|
$datep=dol_mktime($fulldayevent?'00':$aphour, $fulldayevent?'00':$apmin, 0, $_POST["apmonth"], $_POST["apday"], $_POST["apyear"]);
|
||||||
$datef=dol_mktime($fulldayevent?'23':$p2hour, $fulldayevent?'59':$p2min, $fulldayevent?'59':'0', $_POST["p2month"], $_POST["p2day"], $_POST["p2year"]);
|
$datef=dol_mktime($fulldayevent?'23':$p2hour, $fulldayevent?'59':$p2min, $fulldayevent?'59':'0', $_POST["p2month"], $_POST["p2day"], $_POST["p2year"]);
|
||||||
|
|
||||||
$object->fk_action = dol_getIdFromCode($db, GETPOST("actioncode"), 'c_actioncomm');
|
$object->type_id = dol_getIdFromCode($db, GETPOST("actioncode"), 'c_actioncomm');
|
||||||
$object->label = GETPOST("label");
|
$object->label = GETPOST("label");
|
||||||
$object->datep = $datep;
|
$object->datep = $datep;
|
||||||
$object->datef = $datef;
|
$object->datef = $datef;
|
||||||
@ -407,8 +407,6 @@ if ($action == 'update')
|
|||||||
$object->location = GETPOST('location');
|
$object->location = GETPOST('location');
|
||||||
$object->socid = GETPOST("socid");
|
$object->socid = GETPOST("socid");
|
||||||
$object->contactid = GETPOST("contactid",'int');
|
$object->contactid = GETPOST("contactid",'int');
|
||||||
//$object->societe->id = $_POST["socid"]; // deprecated
|
|
||||||
//$object->contact->id = $_POST["contactid"]; // deprecated
|
|
||||||
$object->fk_project = GETPOST("projectid",'int');
|
$object->fk_project = GETPOST("projectid",'int');
|
||||||
$object->note = GETPOST("note");
|
$object->note = GETPOST("note");
|
||||||
$object->pnote = GETPOST("note");
|
$object->pnote = GETPOST("note");
|
||||||
@ -869,7 +867,7 @@ if ($id > 0)
|
|||||||
$datep=dol_mktime($fulldayevent?'00':$aphour, $fulldayevent?'00':$apmin, 0, $_POST["apmonth"], $_POST["apday"], $_POST["apyear"]);
|
$datep=dol_mktime($fulldayevent?'00':$aphour, $fulldayevent?'00':$apmin, 0, $_POST["apmonth"], $_POST["apday"], $_POST["apyear"]);
|
||||||
$datef=dol_mktime($fulldayevent?'23':$p2hour, $fulldayevent?'59':$p2min, $fulldayevent?'59':'0', $_POST["p2month"], $_POST["p2day"], $_POST["p2year"]);
|
$datef=dol_mktime($fulldayevent?'23':$p2hour, $fulldayevent?'59':$p2min, $fulldayevent?'59':'0', $_POST["p2month"], $_POST["p2day"], $_POST["p2year"]);
|
||||||
|
|
||||||
$object->fk_action = dol_getIdFromCode($db, GETPOST("actioncode"), 'c_actioncomm');
|
$object->type_id = dol_getIdFromCode($db, GETPOST("actioncode"), 'c_actioncomm');
|
||||||
$object->label = GETPOST("label");
|
$object->label = GETPOST("label");
|
||||||
$object->datep = $datep;
|
$object->datep = $datep;
|
||||||
$object->datef = $datef;
|
$object->datef = $datef;
|
||||||
@ -879,8 +877,6 @@ if ($id > 0)
|
|||||||
$object->location = GETPOST('location');
|
$object->location = GETPOST('location');
|
||||||
$object->socid = GETPOST("socid");
|
$object->socid = GETPOST("socid");
|
||||||
$object->contactid = GETPOST("contactid",'int');
|
$object->contactid = GETPOST("contactid",'int');
|
||||||
//$object->societe->id = $_POST["socid"]; // deprecated
|
|
||||||
//$object->contact->id = $_POST["contactid"]; // deprecated
|
|
||||||
$object->fk_project = GETPOST("projectid",'int');
|
$object->fk_project = GETPOST("projectid",'int');
|
||||||
|
|
||||||
$object->note = GETPOST("note");
|
$object->note = GETPOST("note");
|
||||||
|
|||||||
@ -754,7 +754,7 @@ class ActionComm extends CommonObject
|
|||||||
|
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."actioncomm ";
|
$sql = "UPDATE ".MAIN_DB_PREFIX."actioncomm ";
|
||||||
$sql.= " SET percent = '".$this->db->escape($this->percentage)."'";
|
$sql.= " SET percent = '".$this->db->escape($this->percentage)."'";
|
||||||
if ($this->fk_action > 0) $sql.= ", fk_action = '".$this->db->escape($this->fk_action)."'";
|
if ($this->type_id > 0) $sql.= ", fk_action = '".$this->db->escape($this->type_id)."'";
|
||||||
$sql.= ", label = ".($this->label ? "'".$this->db->escape($this->label)."'":"null");
|
$sql.= ", label = ".($this->label ? "'".$this->db->escape($this->label)."'":"null");
|
||||||
$sql.= ", datep = ".(strval($this->datep)!='' ? "'".$this->db->idate($this->datep)."'" : 'null');
|
$sql.= ", datep = ".(strval($this->datep)!='' ? "'".$this->db->idate($this->datep)."'" : 'null');
|
||||||
$sql.= ", datep2 = ".(strval($this->datef)!='' ? "'".$this->db->idate($this->datef)."'" : 'null');
|
$sql.= ", datep2 = ".(strval($this->datef)!='' ? "'".$this->db->idate($this->datef)."'" : 'null');
|
||||||
|
|||||||
@ -57,24 +57,17 @@ $hookmanager->initHooks(array('mailingcard','globalcard'));
|
|||||||
|
|
||||||
// Array of possible substitutions (See also file mailing-send.php that should manage same substitutions)
|
// Array of possible substitutions (See also file mailing-send.php that should manage same substitutions)
|
||||||
$object->substitutionarray=FormMail::getAvailableSubstitKey('emailing');
|
$object->substitutionarray=FormMail::getAvailableSubstitKey('emailing');
|
||||||
$object->substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation");
|
|
||||||
|
|
||||||
$object->substitutionarrayfortest=array(
|
|
||||||
'__ID__' => 'TESTIdRecord',
|
// Set $object->substitutionarrayfortest
|
||||||
//'__EMAIL__' => 'TESTEMail', // Done into "send" action
|
$signature = ((!empty($user->signature) && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN))?$user->signature:'');
|
||||||
'__LASTNAME__' => 'TESTLastname',
|
|
||||||
'__FIRSTNAME__' => 'TESTFirstname',
|
$targetobject = null; // Not defined with mass emailing
|
||||||
'__MAILTOEMAIL__' => 'TESTMailtoEmail',
|
|
||||||
'__OTHER1__' => 'TESTOther1',
|
$parameters=array('mode'=>'emailing');
|
||||||
'__OTHER2__' => 'TESTOther2',
|
$substitutionarray=FormMail::getAvailableSubstitKey('emailing', $targetobject);
|
||||||
'__OTHER3__' => 'TESTOther3',
|
|
||||||
'__OTHER4__' => 'TESTOther4',
|
$object->substitutionarrayfortest = $substitutionarray;
|
||||||
'__OTHER5__' => 'TESTOther5',
|
|
||||||
'__SIGNATURE__' => (($user->signature && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN))?$user->signature:''),
|
|
||||||
'__CHECK_READ__' => 'TagCheckMail',
|
|
||||||
'__UNSUBSCRIBE__' => 'TagUnsubscribe'
|
|
||||||
//,'__PERSONALIZED__' => 'TESTPersonalized' // Not used yet
|
|
||||||
);
|
|
||||||
|
|
||||||
// List of sending methods
|
// List of sending methods
|
||||||
$listofmethods=array();
|
$listofmethods=array();
|
||||||
@ -205,24 +198,28 @@ if (empty($reshook))
|
|||||||
$tmpfield=explode('=',$other[2],2); $other3=(isset($tmpfield[1])?$tmpfield[1]:$tmpfield[0]);
|
$tmpfield=explode('=',$other[2],2); $other3=(isset($tmpfield[1])?$tmpfield[1]:$tmpfield[0]);
|
||||||
$tmpfield=explode('=',$other[3],2); $other4=(isset($tmpfield[1])?$tmpfield[1]:$tmpfield[0]);
|
$tmpfield=explode('=',$other[3],2); $other4=(isset($tmpfield[1])?$tmpfield[1]:$tmpfield[0]);
|
||||||
$tmpfield=explode('=',$other[4],2); $other5=(isset($tmpfield[1])?$tmpfield[1]:$tmpfield[0]);
|
$tmpfield=explode('=',$other[4],2); $other5=(isset($tmpfield[1])?$tmpfield[1]:$tmpfield[0]);
|
||||||
|
|
||||||
$signature = ((!empty($user->signature) && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN))?$user->signature:'');
|
$signature = ((!empty($user->signature) && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN))?$user->signature:'');
|
||||||
|
|
||||||
// Array of possible substitutions (See also fie mailing-send.php that should manage same substitutions)
|
$targetobject = null; // Not defined with mass emailing
|
||||||
$substitutionarray=array(
|
$parameters=array('mode'=>'emailing');
|
||||||
'__ID__' => $obj->source_id,
|
$substitutionarray=getCommonSubstitutionArray($langs, 2, array('object','objectamount'), $targetobject); // Note: On mass emailing, this is null because be don't know object
|
||||||
'__EMAIL__' => $obj->email,
|
|
||||||
'__LASTNAME__' => $obj->lastname,
|
// Array of possible substitutions (See also file mailing-send.php that should manage same substitutions)
|
||||||
'__FIRSTNAME__' => $obj->firstname,
|
$substitutionarray['__ID__'] = $obj->source_id;
|
||||||
'__MAILTOEMAIL__' => '<a href="mailto:'.$obj->email.'">'.$obj->email.'</a>',
|
$substitutionarray['__EMAIL__'] = $obj->email;
|
||||||
'__OTHER1__' => $other1,
|
$substitutionarray['__LASTNAME__'] = $obj->lastname;
|
||||||
'__OTHER2__' => $other2,
|
$substitutionarray['__FIRSTNAME__'] = $obj->firstname;
|
||||||
'__OTHER3__' => $other3,
|
$substitutionarray['__MAILTOEMAIL__'] = '<a href="mailto:'.$obj->email.'">'.$obj->email.'</a>';
|
||||||
'__OTHER4__' => $other4,
|
$substitutionarray['__OTHER1__'] = $other1;
|
||||||
'__OTHER5__' => $other5,
|
$substitutionarray['__OTHER2__'] = $other2;
|
||||||
'__SIGNATURE__' => $signature, // Signature is empty when ran from command line or taken from user in parameter)
|
$substitutionarray['__OTHER3__'] = $other3;
|
||||||
'__CHECK_READ__' => '<img src="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-read.php?tag='.$obj->tag.'&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'" width="1" height="1" style="width:1px;height:1px" border="0"/>',
|
$substitutionarray['__OTHER4__'] = $other4;
|
||||||
'__UNSUBSCRIBE__' => '<a href="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-unsubscribe.php?tag='.$obj->tag.'&unsuscrib=1&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'" target="_blank">'.$langs->trans("MailUnsubcribe").'</a>'
|
$substitutionarray['__OTHER5__'] = $other5;
|
||||||
);
|
$substitutionarray['__SIGNATURE__'] = $signature; // Signature is empty when ran from command line or taken from user in parameter)
|
||||||
|
$substitutionarray['__CHECK_READ__'] = '<img src="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-read.php?tag='.$obj->tag.'&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'" width="1" height="1" style="width:1px;height:1px" border="0"/>';
|
||||||
|
$substitutionarray['__UNSUBSCRIBE__'] = '<a href="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-unsubscribe.php?tag='.$obj->tag.'&unsuscrib=1&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'" target="_blank">'.$langs->trans("MailUnsubcribe").'</a>';
|
||||||
|
|
||||||
$onlinepaymentenabled = 0;
|
$onlinepaymentenabled = 0;
|
||||||
if (! empty($conf->paypal->enabled)) $onlinepaymentenabled++;
|
if (! empty($conf->paypal->enabled)) $onlinepaymentenabled++;
|
||||||
if (! empty($conf->paybox->enabled)) $onlinepaymentenabled++;
|
if (! empty($conf->paybox->enabled)) $onlinepaymentenabled++;
|
||||||
@ -230,18 +227,20 @@ if (empty($reshook))
|
|||||||
if ($onlinepaymentenabled && ! empty($conf->global->PAYMENT_SECURITY_TOKEN))
|
if ($onlinepaymentenabled && ! empty($conf->global->PAYMENT_SECURITY_TOKEN))
|
||||||
{
|
{
|
||||||
$substitutionarray['__SECUREKEYPAYMENT__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
$substitutionarray['__SECUREKEYPAYMENT__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
||||||
|
if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE))
|
||||||
if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYMENT_MEMBER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
{
|
||||||
else $substitutionarray['__SECUREKEYPAYMENT_MEMBER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'membersubscription' . $obj->source_id, 2);
|
$substitutionarray['__SECUREKEYPAYMENT_MEMBER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
||||||
|
$substitutionarray['__SECUREKEYPAYMENT_ORDER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
||||||
if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYMENT_ORDER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
$substitutionarray['__SECUREKEYPAYMENT_INVOICE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
||||||
else $substitutionarray['__SECUREKEYPAYMENT_ORDER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'order' . $obj->source_id, 2);
|
$substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
||||||
|
}
|
||||||
if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYMENT_INVOICE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
else
|
||||||
else $substitutionarray['__SECUREKEYPAYMENT_INVOICE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'invoice' . $obj->source_id, 2);
|
{
|
||||||
|
$substitutionarray['__SECUREKEYPAYMENT_MEMBER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'membersubscription' . $obj->source_id, 2);
|
||||||
if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
$substitutionarray['__SECUREKEYPAYMENT_ORDER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'order' . $obj->source_id, 2);
|
||||||
else $substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'contractline' . $obj->source_id, 2);
|
$substitutionarray['__SECUREKEYPAYMENT_INVOICE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'invoice' . $obj->source_id, 2);
|
||||||
|
$substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'contractline' . $obj->source_id, 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* For backward compatibility */
|
/* For backward compatibility */
|
||||||
if (! empty($conf->paypal->enabled) && ! empty($conf->global->PAYPAL_SECURITY_TOKEN))
|
if (! empty($conf->paypal->enabled) && ! empty($conf->global->PAYPAL_SECURITY_TOKEN))
|
||||||
@ -261,6 +260,7 @@ if (empty($reshook))
|
|||||||
else $substitutionarray['__SECUREKEYPAYPAL_CONTRACTLINE__']=dol_hash($conf->global->PAYPAL_SECURITY_TOKEN . 'contractline' . $obj->source_id, 2);
|
else $substitutionarray['__SECUREKEYPAYPAL_CONTRACTLINE__']=dol_hash($conf->global->PAYPAL_SECURITY_TOKEN . 'contractline' . $obj->source_id, 2);
|
||||||
}
|
}
|
||||||
//$substitutionisok=true;
|
//$substitutionisok=true;
|
||||||
|
|
||||||
complete_substitutions_array($substitutionarray, $langs);
|
complete_substitutions_array($substitutionarray, $langs);
|
||||||
$newsubject=make_substitutions($subject,$substitutionarray);
|
$newsubject=make_substitutions($subject,$substitutionarray);
|
||||||
$newmessage=make_substitutions($message,$substitutionarray);
|
$newmessage=make_substitutions($message,$substitutionarray);
|
||||||
@ -431,9 +431,12 @@ if (empty($reshook))
|
|||||||
$msgishtml=-1; // Inconnu par defaut
|
$msgishtml=-1; // Inconnu par defaut
|
||||||
if (preg_match('/[\s\t]*<html>/i',$object->body)) $msgishtml=1;
|
if (preg_match('/[\s\t]*<html>/i',$object->body)) $msgishtml=1;
|
||||||
|
|
||||||
$object->substitutionarrayfortest['__EMAIL__'] = $object->sendto; // other are set at begin of page
|
// other are set at begin of page
|
||||||
|
$object->substitutionarrayfortest['__EMAIL__'] = $object->sendto;
|
||||||
|
$object->substitutionarrayfortest['__MAILTOEMAIL__'] = '<a href="mailto:'.$object->sendto.'">'.$object->sendto.'</a>';
|
||||||
|
|
||||||
// Pratique les substitutions sur le sujet et message
|
// Pratique les substitutions sur le sujet et message
|
||||||
|
complete_substitutions_array($object->substitutionarrayfortest, $langs);
|
||||||
$tmpsujet=make_substitutions($object->sujet,$object->substitutionarrayfortest);
|
$tmpsujet=make_substitutions($object->sujet,$object->substitutionarrayfortest);
|
||||||
$tmpbody=make_substitutions($object->body,$object->substitutionarrayfortest);
|
$tmpbody=make_substitutions($object->body,$object->substitutionarrayfortest);
|
||||||
|
|
||||||
@ -1073,7 +1076,7 @@ else
|
|||||||
$formmail->substit=$object->substitutionarrayfortest;
|
$formmail->substit=$object->substitutionarrayfortest;
|
||||||
// Tableau des parametres complementaires du post
|
// Tableau des parametres complementaires du post
|
||||||
$formmail->param["action"]="send";
|
$formmail->param["action"]="send";
|
||||||
$formmail->param["models"]="body";
|
$formmail->param["models"]='none';
|
||||||
$formmail->param["mailid"]=$object->id;
|
$formmail->param["mailid"]=$object->id;
|
||||||
$formmail->param["returnurl"]=$_SERVER['PHP_SELF']."?id=".$object->id;
|
$formmail->param["returnurl"]=$_SERVER['PHP_SELF']."?id=".$object->id;
|
||||||
|
|
||||||
|
|||||||
@ -1210,11 +1210,6 @@ if (empty($reshook))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Actions to build doc
|
|
||||||
$upload_dir = $conf->commande->dir_output;
|
|
||||||
$permissioncreate = $user->rights->commande->creer;
|
|
||||||
include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
|
|
||||||
|
|
||||||
if ($action == 'update_extras')
|
if ($action == 'update_extras')
|
||||||
{
|
{
|
||||||
// Fill array 'array_options' with data from update form
|
// Fill array 'array_options' with data from update form
|
||||||
@ -1254,6 +1249,11 @@ if (empty($reshook))
|
|||||||
// Actions when printing a doc from card
|
// Actions when printing a doc from card
|
||||||
include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php';
|
include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php';
|
||||||
|
|
||||||
|
// Actions to build doc
|
||||||
|
$upload_dir = $conf->commande->dir_output;
|
||||||
|
$permissioncreate = $user->rights->commande->creer;
|
||||||
|
include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
|
||||||
|
|
||||||
// Actions to send emails
|
// Actions to send emails
|
||||||
$trigger_name='ORDER_SENTBYMAIL';
|
$trigger_name='ORDER_SENTBYMAIL';
|
||||||
$paramname='id';
|
$paramname='id';
|
||||||
|
|||||||
@ -152,8 +152,8 @@ class FactureRec extends CommonInvoice
|
|||||||
$sql.= ", '".$this->db->escape($user->id)."'";
|
$sql.= ", '".$this->db->escape($user->id)."'";
|
||||||
$sql.= ", ".(! empty($facsrc->fk_project)?"'".$facsrc->fk_project."'":"null");
|
$sql.= ", ".(! empty($facsrc->fk_project)?"'".$facsrc->fk_project."'":"null");
|
||||||
$sql.= ", ".(! empty($facsrc->fk_account)?"'".$facsrc->fk_account."'":"null");
|
$sql.= ", ".(! empty($facsrc->fk_account)?"'".$facsrc->fk_account."'":"null");
|
||||||
$sql.= ", '".$this->db->escape($facsrc->cond_reglement_id)."'";
|
$sql.= ", ".($facsrc->cond_reglement_id > 0 ? $this->db->escape($facsrc->cond_reglement_id) : "null");
|
||||||
$sql.= ", '".$this->db->escape($facsrc->mode_reglement_id)."'";
|
$sql.= ", ".($facsrc->mode_reglement_id > 0 ? $this->db->escape($facsrc->mode_reglement_id) : "null");
|
||||||
$sql.= ", ".$this->usenewprice;
|
$sql.= ", ".$this->usenewprice;
|
||||||
$sql.= ", ".$this->frequency;
|
$sql.= ", ".$this->frequency;
|
||||||
$sql.= ", '".$this->db->escape($this->unit_frequency)."'";
|
$sql.= ", '".$this->db->escape($this->unit_frequency)."'";
|
||||||
@ -329,7 +329,6 @@ class FactureRec extends CommonInvoice
|
|||||||
|
|
||||||
if ($this->statut == self::STATUS_DRAFT) $this->brouillon = 1;
|
if ($this->statut == self::STATUS_DRAFT) $this->brouillon = 1;
|
||||||
|
|
||||||
|
|
||||||
// Retreive all extrafield for thirdparty
|
// Retreive all extrafield for thirdparty
|
||||||
// fetch optionals attributes and labels
|
// fetch optionals attributes and labels
|
||||||
require_once(DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php');
|
require_once(DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php');
|
||||||
@ -447,7 +446,6 @@ class FactureRec extends CommonInvoice
|
|||||||
$line->price = $objp->price;
|
$line->price = $objp->price;
|
||||||
$line->remise = $objp->remise;
|
$line->remise = $objp->remise;
|
||||||
|
|
||||||
|
|
||||||
// Retreive all extrafield for thirdparty
|
// Retreive all extrafield for thirdparty
|
||||||
// fetch optionals attributes and labels
|
// fetch optionals attributes and labels
|
||||||
require_once(DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php');
|
require_once(DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php');
|
||||||
|
|||||||
@ -1051,6 +1051,23 @@ class Facture extends CommonInvoice
|
|||||||
else return -1;
|
else return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return link to download file from a direct external access
|
||||||
|
*
|
||||||
|
* @param int $withpicto Add download picto into link
|
||||||
|
* @return string HTML link to file
|
||||||
|
*/
|
||||||
|
function getDirectExternalLink($withpicto=0)
|
||||||
|
{
|
||||||
|
// Define $urlwithroot
|
||||||
|
$urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root));
|
||||||
|
$urlwithroot=$urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file
|
||||||
|
//$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current
|
||||||
|
|
||||||
|
$url='eee';
|
||||||
|
return '<a href="'.$urlwithroot.'/document.php?modulepart=invoice&" target="_download" rel="noindex, nofollow">'.$this->ref.'</a>';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return clicable link of object (with eventually picto)
|
* Return clicable link of object (with eventually picto)
|
||||||
*
|
*
|
||||||
|
|||||||
@ -70,13 +70,17 @@ $search_societe=GETPOST('search_societe');
|
|||||||
$search_montant_ht=GETPOST('search_montant_ht');
|
$search_montant_ht=GETPOST('search_montant_ht');
|
||||||
$search_montant_vat=GETPOST('search_montant_vat');
|
$search_montant_vat=GETPOST('search_montant_vat');
|
||||||
$search_montant_ttc=GETPOST('search_montant_ttc');
|
$search_montant_ttc=GETPOST('search_montant_ttc');
|
||||||
|
$search_payment_mode=GETPOST('search_payment_mode');
|
||||||
|
$search_payment_term=GETPOST('search_payment_term');
|
||||||
$day=GETPOST('day');
|
$day=GETPOST('day');
|
||||||
$year=GETPOST('year');
|
$year=GETPOST('year');
|
||||||
$month=GETPOST('month');
|
$month=GETPOST('month');
|
||||||
$day_date_when=GETPOST('day_date_when');
|
$day_date_when=GETPOST('day_date_when');
|
||||||
$year_date_when=GETPOST('year_date_when');
|
$year_date_when=GETPOST('year_date_when');
|
||||||
$month_date_when=GETPOST('month_date_when');
|
$month_date_when=GETPOST('month_date_when');
|
||||||
$search_frequency=GETPOST('search_frequency');
|
$search_recurring=GETPOST('search_recurring','int');
|
||||||
|
$search_frequency=GETPOST('search_frequency','alpha');
|
||||||
|
$search_unit_frequency=GETPOST('search_unit_frequency','alpha');
|
||||||
|
|
||||||
$limit = GETPOST('limit')?GETPOST('limit','int'):$conf->liste_limit;
|
$limit = GETPOST('limit')?GETPOST('limit','int'):$conf->liste_limit;
|
||||||
$sortfield = GETPOST("sortfield",'alpha');
|
$sortfield = GETPOST("sortfield",'alpha');
|
||||||
@ -111,29 +115,6 @@ $permissionnote = $user->rights->facture->creer; // Used by the include of actio
|
|||||||
$permissiondellink=$user->rights->facture->creer; // Used by the include of actions_dellink.inc.php
|
$permissiondellink=$user->rights->facture->creer; // Used by the include of actions_dellink.inc.php
|
||||||
$permissiontoedit = $user->rights->facture->creer; // Used by the include of actions_lineupdonw.inc.php
|
$permissiontoedit = $user->rights->facture->creer; // Used by the include of actions_lineupdonw.inc.php
|
||||||
|
|
||||||
$arrayfields=array(
|
|
||||||
'f.titre'=>array('label'=>$langs->trans("Ref"), 'checked'=>1),
|
|
||||||
's.nom'=>array('label'=>$langs->trans("ThirdParty"), 'checked'=>1),
|
|
||||||
'f.total'=>array('label'=>$langs->trans("AmountHT"), 'checked'=>1),
|
|
||||||
'f.tva'=>array('label'=>$langs->trans("AmountVAT"), 'checked'=>1),
|
|
||||||
'f.total_ttc'=>array('label'=>$langs->trans("AmountTTC"), 'checked'=>1),
|
|
||||||
'f.frequency'=>array('label'=>$langs->trans("RecurringInvoiceTemplate"), 'checked'=>1),
|
|
||||||
'f.nb_gen_done'=>array('label'=>$langs->trans("NbOfGenerationDone"), 'checked'=>1),
|
|
||||||
'f.date_last_gen'=>array('label'=>$langs->trans("DateLastGeneration"), 'checked'=>1),
|
|
||||||
'f.date_when'=>array('label'=>$langs->trans("NextDateToExecution"), 'checked'=>1),
|
|
||||||
'status'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>100),
|
|
||||||
'f.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500),
|
|
||||||
'f.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500),
|
|
||||||
);
|
|
||||||
// Extra fields
|
|
||||||
if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
|
|
||||||
{
|
|
||||||
foreach($extrafields->attribute_label as $key => $val)
|
|
||||||
{
|
|
||||||
$arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>$extrafields->attribute_list[$key], 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>$extrafields->attribute_perms[$key]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Actions
|
* Actions
|
||||||
@ -168,13 +149,17 @@ if (empty($reshook))
|
|||||||
$search_montant_ht='';
|
$search_montant_ht='';
|
||||||
$search_montant_vat='';
|
$search_montant_vat='';
|
||||||
$search_montant_ttc='';
|
$search_montant_ttc='';
|
||||||
|
$search_montant_mode='';
|
||||||
|
$search_montant_term='';
|
||||||
$day='';
|
$day='';
|
||||||
$year='';
|
$year='';
|
||||||
$month='';
|
$month='';
|
||||||
$day_date_when='';
|
$day_date_when='';
|
||||||
$year_date_when='';
|
$year_date_when='';
|
||||||
$month_date_when='';
|
$month_date_when='';
|
||||||
|
$search_recurring='';
|
||||||
$search_frequency='';
|
$search_frequency='';
|
||||||
|
$search_unit_frequency='';
|
||||||
$search_array_options=array();
|
$search_array_options=array();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -985,8 +970,11 @@ if ($action == 'create')
|
|||||||
|
|
||||||
// Help of substitution key
|
// Help of substitution key
|
||||||
$substitutionarray=array(
|
$substitutionarray=array(
|
||||||
'__TOTAL_HT__' => $langs->trans("AmountHT").' ('.$langs->trans("Example").': '.price($object->total_ht).')',
|
//'__TOTAL_HT__' => $langs->trans("AmountHT").' ('.$langs->trans("Example").': '.price($object->total_ht).')',
|
||||||
'__TOTAL_TTC__' => $langs->trans("AmountTTC").' ('.$langs->trans("Example").': '.price($object->total_ttc).')',
|
//'__TOTAL_TTC__' => $langs->trans("AmountTTC").' ('.$langs->trans("Example").': '.price($object->total_ttc).')',
|
||||||
|
'__AMOUNT_EXCL_TAX__' => $langs->trans("AmountHT").' ('.$langs->trans("Example").': '.price($object->total_ht).')',
|
||||||
|
'__AMOUNT_VAT__' => $langs->trans("AmountVAT").' ('.$langs->trans("Example").': '.price($object->total_tva).')',
|
||||||
|
'__AMOUNT__' => $langs->trans("AmountTTC").' ('.$langs->trans("Example").': '.price($object->total_ttc).')',
|
||||||
'__INVOICE_PREVIOUS_MONTH__' => $langs->trans("PreviousMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($object->date, -1, 'm'),'%m').')',
|
'__INVOICE_PREVIOUS_MONTH__' => $langs->trans("PreviousMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($object->date, -1, 'm'),'%m').')',
|
||||||
'__INVOICE_MONTH__' => $langs->trans("MonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($object->date,'%m').')',
|
'__INVOICE_MONTH__' => $langs->trans("MonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($object->date,'%m').')',
|
||||||
'__INVOICE_NEXT_MONTH__' => $langs->trans("NextMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($object->date, 1, 'm'),'%m').')',
|
'__INVOICE_NEXT_MONTH__' => $langs->trans("NextMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($object->date, 1, 'm'),'%m').')',
|
||||||
@ -1042,7 +1030,7 @@ if ($action == 'create')
|
|||||||
|
|
||||||
// Payment mode
|
// Payment mode
|
||||||
print "<tr><td>".$langs->trans("PaymentMode")."</td><td>";
|
print "<tr><td>".$langs->trans("PaymentMode")."</td><td>";
|
||||||
$form->form_modes_reglement($_SERVER['PHP_SELF'].'?id='.$object->id, $object->mode_reglement_id, 'none');
|
$form->form_modes_reglement($_SERVER['PHP_SELF'].'?id='.$object->id, $object->mode_reglement_id, 'none', '', 1);
|
||||||
print "</td></tr>";
|
print "</td></tr>";
|
||||||
|
|
||||||
// Project
|
// Project
|
||||||
@ -1077,7 +1065,7 @@ if ($action == 'create')
|
|||||||
|
|
||||||
print '<table class="border" width="100%">';
|
print '<table class="border" width="100%">';
|
||||||
|
|
||||||
// Frequency
|
// Frequency + unit
|
||||||
print '<tr><td class="titlefieldcreate">'.$form->textwithpicto($langs->trans("Frequency"), $langs->transnoentitiesnoconv('toolTipFrequency'))."</td><td>";
|
print '<tr><td class="titlefieldcreate">'.$form->textwithpicto($langs->trans("Frequency"), $langs->transnoentitiesnoconv('toolTipFrequency'))."</td><td>";
|
||||||
print "<input type='text' name='frequency' value='".GETPOST('frequency', 'int')."' size='4' /> ".$form->selectarray('unit_frequency', array('d'=>$langs->trans('Day'), 'm'=>$langs->trans('Month'), 'y'=>$langs->trans('Year')), (GETPOST('unit_frequency')?GETPOST('unit_frequency'):'m'));
|
print "<input type='text' name='frequency' value='".GETPOST('frequency', 'int')."' size='4' /> ".$form->selectarray('unit_frequency', array('d'=>$langs->trans('Day'), 'm'=>$langs->trans('Month'), 'y'=>$langs->trans('Year')), (GETPOST('unit_frequency')?GETPOST('unit_frequency'):'m'));
|
||||||
print "</td></tr>";
|
print "</td></tr>";
|
||||||
@ -1181,7 +1169,7 @@ else
|
|||||||
|
|
||||||
// Recurring invoice content
|
// Recurring invoice content
|
||||||
|
|
||||||
$linkback = '<a href="' . DOL_URL_ROOT . '/compta/facture/fiche-rec.php' . (! empty($socid) ? '?socid=' . $socid : '') . '">' . $langs->trans("BackToList") . '</a>';
|
$linkback = '<a href="' . DOL_URL_ROOT . '/compta/facture/invoicetemplate_list.php' . (! empty($socid) ? '?socid=' . $socid : '') . '">' . $langs->trans("BackToList") . '</a>';
|
||||||
|
|
||||||
$morehtmlref='';
|
$morehtmlref='';
|
||||||
if ($action != 'editref') $morehtmlref.=$form->editfieldkey($object->ref, 'ref', $object->ref, $object, $user->rights->facture->creer, '', '', 0, 2);
|
if ($action != 'editref') $morehtmlref.=$form->editfieldkey($object->ref, 'ref', $object->ref, $object, $user->rights->facture->creer, '', '', 0, 2);
|
||||||
@ -1307,8 +1295,11 @@ else
|
|||||||
$dateexample=dol_now();
|
$dateexample=dol_now();
|
||||||
if (! empty($object->frequency) && ! empty($object->date_when)) $dateexample=$object->date_when;
|
if (! empty($object->frequency) && ! empty($object->date_when)) $dateexample=$object->date_when;
|
||||||
$substitutionarray=array(
|
$substitutionarray=array(
|
||||||
'__TOTAL_HT__' => $langs->trans("AmountHT").' ('.$langs->trans("Example").': '.price($object->total_ht).')',
|
//'__TOTAL_HT__' => $langs->trans("AmountHT").' ('.$langs->trans("Example").': '.price($object->total_ht).')',
|
||||||
'__TOTAL_TTC__' => $langs->trans("AmountTTC").' ('.$langs->trans("Example").': '.price($object->total_ttc).')',
|
//'__TOTAL_TTC__' => $langs->trans("AmountTTC").' ('.$langs->trans("Example").': '.price($object->total_ttc).')',
|
||||||
|
'__AMOUNT_EXCL_TAX__' => $langs->trans("AmountHT").' ('.$langs->trans("Example").': '.price($object->total_ht).')',
|
||||||
|
'__AMOUNT_VAT__' => $langs->trans("AmountVAT").' ('.$langs->trans("Example").': '.price($object->total_tva).')',
|
||||||
|
'__AMOUNT__' => $langs->trans("AmountTTC").' ('.$langs->trans("Example").': '.price($object->total_ttc).')',
|
||||||
'__INVOICE_PREVIOUS_MONTH__' => $langs->trans("PreviousMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, -1, 'm'),'%m').')',
|
'__INVOICE_PREVIOUS_MONTH__' => $langs->trans("PreviousMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, -1, 'm'),'%m').')',
|
||||||
'__INVOICE_MONTH__' => $langs->trans("MonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($dateexample,'%m').')',
|
'__INVOICE_MONTH__' => $langs->trans("MonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($dateexample,'%m').')',
|
||||||
'__INVOICE_NEXT_MONTH__' => $langs->trans("NextMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, 1, 'm'),'%m').')',
|
'__INVOICE_NEXT_MONTH__' => $langs->trans("NextMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, 1, 'm'),'%m').')',
|
||||||
@ -1549,8 +1540,6 @@ else
|
|||||||
{
|
{
|
||||||
if ($action != 'editline')
|
if ($action != 'editline')
|
||||||
{
|
{
|
||||||
$var = true;
|
|
||||||
|
|
||||||
// Add free products/services
|
// Add free products/services
|
||||||
$object->formAddObjectLine(0, $mysoc, $object->thirdparty); // No date selector for template invoice
|
$object->formAddObjectLine(0, $mysoc, $object->thirdparty); // No date selector for template invoice
|
||||||
|
|
||||||
@ -1620,382 +1609,6 @@ else
|
|||||||
print '</div></div>';
|
print '</div></div>';
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* List mode
|
|
||||||
*/
|
|
||||||
$sql = "SELECT s.nom as name, s.rowid as socid, f.rowid as facid, f.titre, f.total, f.tva as total_vat, f.total_ttc, f.frequency, f.unit_frequency,";
|
|
||||||
$sql.= " f.nb_gen_done, f.nb_gen_max, f.date_last_gen, f.date_when,";
|
|
||||||
$sql.= " f.datec, f.tms";
|
|
||||||
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s,".MAIN_DB_PREFIX."facture_rec as f";
|
|
||||||
if (! $user->rights->societe->client->voir && ! $socid) {
|
|
||||||
$sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
|
|
||||||
}
|
|
||||||
$sql.= " WHERE f.fk_soc = s.rowid";
|
|
||||||
$sql.= ' AND f.entity IN ('.getEntity('facture').')';
|
|
||||||
if (! $user->rights->societe->client->voir && ! $socid) {
|
|
||||||
$sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".$user->id;
|
|
||||||
}
|
|
||||||
if ($search_ref) $sql .= natural_search('f.titre', $search_ref);
|
|
||||||
if ($search_societe) $sql .= natural_search('s.nom', $search_societe);
|
|
||||||
if ($search_montant_ht != '') $sql.= natural_search('f.total', $search_montant_ht, 1);
|
|
||||||
if ($search_montant_vat != '') $sql.= natural_search('f.tva', $search_montant_vat, 1);
|
|
||||||
if ($search_montant_ttc != '') $sql.= natural_search('f.total_ttc', $search_montant_ttc, 1);
|
|
||||||
if ($search_frequency > 0) $sql.= natural_search('f.frequency', $search_frequency);
|
|
||||||
if ($search_frequency == '1') $sql.= ' AND f.frequency > 0';
|
|
||||||
if ($search_frequency == '0') $sql.= ' AND (f.frequency IS NULL or f.frequency = 0)';
|
|
||||||
|
|
||||||
if ($month > 0)
|
|
||||||
{
|
|
||||||
if ($year > 0 && empty($day))
|
|
||||||
$sql.= " AND f.date_last_gen BETWEEN '".$db->idate(dol_get_first_day($year,$month,false))."' AND '".$db->idate(dol_get_last_day($year,$month,false))."'";
|
|
||||||
else if ($year > 0 && ! empty($day))
|
|
||||||
$sql.= " AND f.date_last_gen BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year))."' AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year))."'";
|
|
||||||
else
|
|
||||||
$sql.= " AND date_format(f.date_last_gen, '%m') = '".$month."'";
|
|
||||||
}
|
|
||||||
else if ($year > 0)
|
|
||||||
{
|
|
||||||
$sql.= " AND f.date_last_gen BETWEEN '".$db->idate(dol_get_first_day($year,1,false))."' AND '".$db->idate(dol_get_last_day($year,12,false))."'";
|
|
||||||
}
|
|
||||||
if ($month_date_when > 0)
|
|
||||||
{
|
|
||||||
if ($year_date_when > 0 && empty($day_date_when))
|
|
||||||
$sql.= " AND f.date_when BETWEEN '".$db->idate(dol_get_first_day($year_date_when,$month_date_when,false))."' AND '".$db->idate(dol_get_last_day($year_date_when,$month_date_when,false))."'";
|
|
||||||
else if ($year_date_when > 0 && ! empty($day_date_when))
|
|
||||||
$sql.= " AND f.date_date_when_reglement BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month_date_when, $day_date_when, $year_date_when))."' AND '".$db->idate(dol_mktime(23, 59, 59, $month_date_when, $day_date_when, $year_date_when))."'";
|
|
||||||
else
|
|
||||||
$sql.= " AND date_format(f.date_when, '%m') = '".$month_date_when."'";
|
|
||||||
}
|
|
||||||
else if ($year_date_when > 0)
|
|
||||||
{
|
|
||||||
$sql.= " AND f.date_when BETWEEN '".$db->idate(dol_get_first_day($year_date_when,1,false))."' AND '".$db->idate(dol_get_last_day($year_date_when,12,false))."'";
|
|
||||||
}
|
|
||||||
|
|
||||||
$nbtotalofrecords = '';
|
|
||||||
if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
|
|
||||||
{
|
|
||||||
$result = $db->query($sql);
|
|
||||||
$nbtotalofrecords = $db->num_rows($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
$sql.= $db->order($sortfield, $sortorder);
|
|
||||||
$sql.= $db->plimit($limit+1,$offset);
|
|
||||||
|
|
||||||
$resql = $db->query($sql);
|
|
||||||
if ($resql)
|
|
||||||
{
|
|
||||||
$num = $db->num_rows($resql);
|
|
||||||
|
|
||||||
$param='';
|
|
||||||
if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
|
|
||||||
if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
|
|
||||||
if ($socid) $param.='&socid='.$socid;
|
|
||||||
if ($day) $param.='&day='.$day;
|
|
||||||
if ($month) $param.='&month='.$month;
|
|
||||||
if ($year) $param.='&year=' .$year;
|
|
||||||
if ($day_date_when) $param.='&day_date_when='.$day_date_when;
|
|
||||||
if ($month_date_when) $param.='&month_date_when='.$month_date_when;
|
|
||||||
if ($year_date_when) $param.='&year_date_when=' .$year_date_when;
|
|
||||||
if ($search_ref) $param.='&search_ref=' .$search_ref;
|
|
||||||
if ($search_societe) $param.='&search_societe=' .$search_societe;
|
|
||||||
if ($search_montant_ht != '') $param.='&search_montant_ht='.$search_montant_ht;
|
|
||||||
if ($search_montant_vat != '') $param.='&search_montant_vat='.$search_montant_vat;
|
|
||||||
if ($search_montant_ttc != '') $param.='&search_montant_ttc='.$search_montant_ttc;
|
|
||||||
if ($search_frequency > 0) $param.='&search_frequency=' .$search_frequency;
|
|
||||||
if ($option) $param.="&option=".$option;
|
|
||||||
if ($optioncss != '') $param.='&optioncss='.$optioncss;
|
|
||||||
// Add $param from extra fields
|
|
||||||
foreach ($search_array_options as $key => $val)
|
|
||||||
{
|
|
||||||
$crit=$val;
|
|
||||||
$tmpkey=preg_replace('/search_options_/','',$key);
|
|
||||||
if ($val != '') $param.='&search_options_'.$tmpkey.'='.urlencode($val);
|
|
||||||
}
|
|
||||||
|
|
||||||
$massactionbutton=$form->selectMassAction('', $massaction == 'presend' ? array() : array('presend'=>$langs->trans("SendByMail"), 'builddoc'=>$langs->trans("PDFMerge")));
|
|
||||||
|
|
||||||
$varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage;
|
|
||||||
$selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields
|
|
||||||
//$selectedfields.=$form->showCheckAddButtons('checkforselect', 1);
|
|
||||||
|
|
||||||
print '<form method="POST" id="searchFormList" name="searchFormList" action="'.$_SERVER["PHP_SELF"].'">'."\n";
|
|
||||||
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
|
||||||
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
|
||||||
print '<input type="hidden" name="action" value="list">';
|
|
||||||
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
|
||||||
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
|
||||||
print '<input type="hidden" name="page" value="'.$page.'">';
|
|
||||||
print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
|
|
||||||
print '<input type="hidden" name="viewstatut" value="'.$viewstatut.'">';
|
|
||||||
|
|
||||||
print_barre_liste($langs->trans("RepeatableInvoices"),$page,$_SERVER['PHP_SELF'],$param,$sortfield,$sortorder,'',$num,$nbtotalofrecords,'title_accountancy.png',0,'','', $limit);
|
|
||||||
|
|
||||||
print $langs->trans("ToCreateAPredefinedInvoice", $langs->transnoentitiesnoconv("ChangeIntoRepeatableInvoice")).'<br><br>';
|
|
||||||
|
|
||||||
$i = 0;
|
|
||||||
|
|
||||||
print '<div class="div-table-responsive">';
|
|
||||||
print '<table class="tagtable liste'.($moreforfilter?" listwithfilterbefore":"").'">'."\n";
|
|
||||||
|
|
||||||
// Filters lines
|
|
||||||
print '<tr class="liste_titre_filter">';
|
|
||||||
// Ref
|
|
||||||
if (! empty($arrayfields['f.titre']['checked']))
|
|
||||||
{
|
|
||||||
print '<td class="liste_titre" align="left">';
|
|
||||||
print '<input class="flat" size="6" type="text" name="search_ref" value="'.dol_escape_htmltag($search_ref).'">';
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
// Thirpdarty
|
|
||||||
if (! empty($arrayfields['s.nom']['checked']))
|
|
||||||
{
|
|
||||||
print '<td class="liste_titre" align="left"><input class="flat" type="text" size="8" name="search_societe" value="'.dol_escape_htmltag($search_societe).'"></td>';
|
|
||||||
}
|
|
||||||
if (! empty($arrayfields['f.total']['checked']))
|
|
||||||
{
|
|
||||||
// Amount
|
|
||||||
print '<td class="liste_titre" align="right">';
|
|
||||||
print '<input class="flat" type="text" size="5" name="search_montant_ht" value="'.dol_escape_htmltag($search_montant_ht).'">';
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
if (! empty($arrayfields['f.tva']['checked']))
|
|
||||||
{
|
|
||||||
// Amount
|
|
||||||
print '<td class="liste_titre" align="right">';
|
|
||||||
print '<input class="flat" type="text" size="5" name="search_montant_vat" value="'.dol_escape_htmltag($search_montant_vat).'">';
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
if (! empty($arrayfields['f.total_ttc']['checked']))
|
|
||||||
{
|
|
||||||
// Amount
|
|
||||||
print '<td class="liste_titre" align="right">';
|
|
||||||
print '<input class="flat" type="text" size="5" name="search_montant_ttc" value="'.dol_escape_htmltag($search_montant_ttc).'">';
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
if (! empty($arrayfields['f.frequency']['checked']))
|
|
||||||
{
|
|
||||||
// Recurring or not
|
|
||||||
print '<td class="liste_titre" align="center">';
|
|
||||||
print $form->selectyesno('search_frequency', $search_frequency, 1, false, 1);
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
if (! empty($arrayfields['f.nb_gen_done']['checked']))
|
|
||||||
{
|
|
||||||
// Nb generation
|
|
||||||
print '<td class="liste_titre" align="center">';
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
// Date invoice
|
|
||||||
if (! empty($arrayfields['f.date_last_gen']['checked']))
|
|
||||||
{
|
|
||||||
print '<td class="liste_titre" align="center">';
|
|
||||||
if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat" type="text" size="1" maxlength="2" name="day" value="'.$day.'">';
|
|
||||||
print '<input class="flat" type="text" size="1" maxlength="2" name="month" value="'.$month.'">';
|
|
||||||
$formother->select_year($year?$year:-1,'year',1, 20, 5);
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
// Date due
|
|
||||||
if (! empty($arrayfields['f.date_when']['checked']))
|
|
||||||
{
|
|
||||||
print '<td class="liste_titre" align="center">';
|
|
||||||
if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat" type="text" size="1" maxlength="2" name="day_date_when" value="'.$day_date_when.'">';
|
|
||||||
print '<input class="flat" type="text" size="1" maxlength="2" name="month_date_when" value="'.$month_date_when.'">';
|
|
||||||
$formother->select_year($year_date_when?$year_date_when:-1,'year_date_when',1, 20, 5);
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
// Extra fields
|
|
||||||
if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
|
|
||||||
{
|
|
||||||
foreach($extrafields->attribute_label as $key => $val)
|
|
||||||
{
|
|
||||||
if (! empty($arrayfields["ef.".$key]['checked']))
|
|
||||||
{
|
|
||||||
$align=$extrafields->getAlignFlag($key);
|
|
||||||
$typeofextrafield=$extrafields->attribute_type[$key];
|
|
||||||
print '<td class="liste_titre'.($align?' '.$align:'').'">';
|
|
||||||
if (in_array($typeofextrafield, array('varchar', 'int', 'double', 'select')))
|
|
||||||
{
|
|
||||||
$crit=$val;
|
|
||||||
$tmpkey=preg_replace('/search_options_/','',$key);
|
|
||||||
$searchclass='';
|
|
||||||
if (in_array($typeofextrafield, array('varchar', 'select'))) $searchclass='searchstring';
|
|
||||||
if (in_array($typeofextrafield, array('int', 'double'))) $searchclass='searchnum';
|
|
||||||
print '<input class="flat'.($searchclass?' '.$searchclass:'').'" size="4" type="text" name="search_options_'.$tmpkey.'" value="'.dol_escape_htmltag($search_array_options['search_options_'.$tmpkey]).'">';
|
|
||||||
}
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Fields from hook
|
|
||||||
$parameters=array('arrayfields'=>$arrayfields);
|
|
||||||
$reshook=$hookmanager->executeHooks('printFieldListOption',$parameters); // Note that $action and $object may have been modified by hook
|
|
||||||
print $hookmanager->resPrint;
|
|
||||||
// Date creation
|
|
||||||
if (! empty($arrayfields['f.datec']['checked']))
|
|
||||||
{
|
|
||||||
print '<td class="liste_titre">';
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
// Date modification
|
|
||||||
if (! empty($arrayfields['f.tms']['checked']))
|
|
||||||
{
|
|
||||||
print '<td class="liste_titre">';
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
// Status
|
|
||||||
if (! empty($arrayfields['status']['checked']))
|
|
||||||
{
|
|
||||||
print '<td class="liste_titre" align="center">';
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
// Action column
|
|
||||||
print '<td class="liste_titre" align="middle">';
|
|
||||||
$searchpicto=$form->showFilterAndCheckAddButtons(0, 'checkforselect', 1);
|
|
||||||
print $searchpicto;
|
|
||||||
print '</td>';
|
|
||||||
print "</tr>\n";
|
|
||||||
|
|
||||||
|
|
||||||
print '<tr class="liste_titre">';
|
|
||||||
if (! empty($arrayfields['f.titre']['checked'])) print_liste_field_titre($arrayfields['f.titre']['label'],$_SERVER['PHP_SELF'],"f.titre","",$param,"",$sortfield,$sortorder);
|
|
||||||
if (! empty($arrayfields['s.nom']['checked'])) print_liste_field_titre($arrayfields['s.nom']['label'],$_SERVER['PHP_SELF'],"s.nom","",$param,"",$sortfield,$sortorder);
|
|
||||||
if (! empty($arrayfields['f.total']['checked'])) print_liste_field_titre($arrayfields['f.total']['label'],$_SERVER['PHP_SELF'],"f.total","",$param,'align="right"',$sortfield,$sortorder);
|
|
||||||
if (! empty($arrayfields['f.tva']['checked'])) print_liste_field_titre($arrayfields['f.tva']['label'],$_SERVER['PHP_SELF'],"f.tva","",$param,'align="right"',$sortfield,$sortorder);
|
|
||||||
if (! empty($arrayfields['f.total_ttc']['checked'])) print_liste_field_titre($arrayfields['f.total_ttc']['label'],$_SERVER['PHP_SELF'],"f.total_ttc","",$param,'align="right"',$sortfield,$sortorder);
|
|
||||||
if (! empty($arrayfields['f.frequency']['checked'])) print_liste_field_titre($arrayfields['f.frequency']['label'],$_SERVER['PHP_SELF'],"f.frequency","",$param,'align="center"',$sortfield,$sortorder);
|
|
||||||
if (! empty($arrayfields['f.nb_gen_done']['checked'])) print_liste_field_titre($arrayfields['f.nb_gen_done']['label'],$_SERVER['PHP_SELF'],"f.nb_gen_done","",$param,'align="center"',$sortfield,$sortorder);
|
|
||||||
if (! empty($arrayfields['f.date_last_gen']['checked'])) print_liste_field_titre($arrayfields['f.date_last_gen']['label'],$_SERVER['PHP_SELF'],"f.date_last_gen","",$param,'align="center"',$sortfield,$sortorder);
|
|
||||||
if (! empty($arrayfields['f.date_when']['checked'])) print_liste_field_titre($arrayfields['f.date_when']['label'],$_SERVER['PHP_SELF'],"f.date_when","",$param,'align="center"',$sortfield,$sortorder);
|
|
||||||
if (! empty($arrayfields['f.datec']['checked'])) print_liste_field_titre($arrayfields['f.datec']['label'],$_SERVER['PHP_SELF'],"f.datec","",$param,'align="center"',$sortfield,$sortorder);
|
|
||||||
if (! empty($arrayfields['f.tms']['checked'])) print_liste_field_titre($arrayfields['f.tms']['label'],$_SERVER['PHP_SELF'],"f.tms","",$param,'align="center"',$sortfield,$sortorder);
|
|
||||||
if (! empty($arrayfields['status']['checked'])) print_liste_field_titre($arrayfields['status']['label'],$_SERVER['PHP_SELF'],"","",$param,'align="center"',$sortfield,$sortorder);
|
|
||||||
print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="center"',$sortfield,$sortorder,'maxwidthsearch ')."\n";
|
|
||||||
print "</tr>\n";
|
|
||||||
|
|
||||||
|
|
||||||
if ($num > 0)
|
|
||||||
{
|
|
||||||
$var=true;
|
|
||||||
while ($i < min($num,$limit))
|
|
||||||
{
|
|
||||||
$objp = $db->fetch_object($resql);
|
|
||||||
|
|
||||||
$companystatic->id=$objp->socid;
|
|
||||||
$companystatic->name=$objp->name;
|
|
||||||
|
|
||||||
$invoicerectmp->id=$objp->id;
|
|
||||||
$invoicerectmp->frequency=$objp->frequency;
|
|
||||||
$invoicerectmp->suspend=$objp->suspend;
|
|
||||||
$invoicerectmp->unit_frequency=$objp->unit_frequency;
|
|
||||||
|
|
||||||
print '<tr class="oddeven">';
|
|
||||||
|
|
||||||
if (! empty($arrayfields['f.titre']['checked']))
|
|
||||||
{
|
|
||||||
print '<td><a href="'.$_SERVER['PHP_SELF'].'?id='.$objp->facid.'">'.img_object($langs->trans("ShowBill"),"bill").' '.$objp->titre;
|
|
||||||
print "</a></td>\n";
|
|
||||||
}
|
|
||||||
if (! empty($arrayfields['s.nom']['checked']))
|
|
||||||
{
|
|
||||||
print '<td class="tdoverflowmax200">'.$companystatic->getNomUrl(1,'customer').'</td>';
|
|
||||||
}
|
|
||||||
if (! empty($arrayfields['f.total']['checked']))
|
|
||||||
{
|
|
||||||
print '<td align="right">'.price($objp->total).'</td>'."\n";
|
|
||||||
}
|
|
||||||
if (! empty($arrayfields['f.tva']['checked']))
|
|
||||||
{
|
|
||||||
print '<td align="right">'.price($objp->total_vat).'</td>'."\n";
|
|
||||||
}
|
|
||||||
if (! empty($arrayfields['f.total_ttc']['checked']))
|
|
||||||
{
|
|
||||||
print '<td align="right">'.price($objp->total_ttc).'</td>'."\n";
|
|
||||||
}
|
|
||||||
if (! empty($arrayfields['f.frequency']['checked']))
|
|
||||||
{
|
|
||||||
print '<td align="center">'.yn($objp->frequency?1:0).'</td>';
|
|
||||||
}
|
|
||||||
if (! empty($arrayfields['f.nb_gen_done']['checked']))
|
|
||||||
{
|
|
||||||
print '<td align="center">';
|
|
||||||
print ($objp->frequency ? $objp->nb_gen_done.($objp->nb_gen_max>0?' / '. $objp->nb_gen_max:'') : '<span class="opacitymedium">'.$langs->trans('NA').'</span>');
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
if (! empty($arrayfields['f.date_last_gen']['checked']))
|
|
||||||
{
|
|
||||||
print '<td align="center">';
|
|
||||||
print ($objp->frequency ? dol_print_date($db->jdate($objp->date_last_gen),'day') : '<span class="opacitymedium">'.$langs->trans('NA').'</span>');
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
if (! empty($arrayfields['f.date_when']['checked']))
|
|
||||||
{
|
|
||||||
print '<td align="center">';
|
|
||||||
print ($objp->frequency ? dol_print_date($db->jdate($objp->date_when),'day') : '<span class="opacitymedium">'.$langs->trans('NA').'</span>');
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
if (! empty($arrayfields['f.datec']['checked']))
|
|
||||||
{
|
|
||||||
print '<td align="center">';
|
|
||||||
print dol_print_date($db->jdate($objp->datec),'dayhour');
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
if (! empty($arrayfields['f.tms']['checked']))
|
|
||||||
{
|
|
||||||
print '<td align="center">';
|
|
||||||
print dol_print_date($db->jdate($objp->tms),'dayhour');
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
if (! empty($arrayfields['status']['checked']))
|
|
||||||
{
|
|
||||||
print '<td align="center">';
|
|
||||||
print $invoicerectmp->getLibStatut(3,0);
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
// Action column
|
|
||||||
print '<td align="center">';
|
|
||||||
if ($user->rights->facture->creer)
|
|
||||||
{
|
|
||||||
if (empty($objp->frequency) || $db->jdate($objp->date_when) <= $today)
|
|
||||||
{
|
|
||||||
print '<a href="'.DOL_URL_ROOT.'/compta/facture/card.php?action=create&socid='.$objp->socid.'&fac_rec='.$objp->facid.'">';
|
|
||||||
print $langs->trans("CreateBill").'</a>';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print $langs->trans("DateIsNotEnough");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print " ";
|
|
||||||
}
|
|
||||||
print "</td>";
|
|
||||||
print "</tr>\n";
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$colspan=1;
|
|
||||||
foreach($arrayfields as $key => $val) { if (! empty($val['checked'])) $colspan++; }
|
|
||||||
print '<tr><td colspan="'.$colspan.'" class="opacitymedium">'.$langs->trans("NoRecordFound").'</td></tr>';
|
|
||||||
}
|
|
||||||
|
|
||||||
print "</table>";
|
|
||||||
print "</div>";
|
|
||||||
print "</form>";
|
|
||||||
|
|
||||||
$db->free($resql);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dol_print_error($db);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
llxFooter();
|
llxFooter();
|
||||||
|
|||||||
700
htdocs/compta/facture/invoicetemplate_list.php
Normal file
700
htdocs/compta/facture/invoicetemplate_list.php
Normal file
@ -0,0 +1,700 @@
|
|||||||
|
<?php
|
||||||
|
/* Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||||
|
* Copyright (C) 2004-2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
|
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
|
||||||
|
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
||||||
|
* Copyright (C) 2013 Juanjo Menent <jmenent@2byte.es>
|
||||||
|
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
||||||
|
* Copyright (C) 2012 Cedric Salvador <csalvador@gpcsolutions.fr>
|
||||||
|
* Copyright (C) 2015 Alexandre Spangaro <aspangaro.dolibarr@gmail.com>
|
||||||
|
* Copyright (C) 2016 Meziane Sof <virtualsof@yahoo.fr>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file htdocs/compta/facture/invoicetemplate_list.php
|
||||||
|
* \ingroup facture
|
||||||
|
* \brief Page to show list of template/recurring invoices
|
||||||
|
*/
|
||||||
|
|
||||||
|
require '../../main.inc.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture-rec.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
|
||||||
|
if (! empty($conf->projet->enabled)) {
|
||||||
|
require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
|
||||||
|
//require_once DOL_DOCUMENT_ROOT . '/core/class/html.formprojet.class.php';
|
||||||
|
}
|
||||||
|
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formprojet.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT . '/core/lib/invoice.lib.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php';
|
||||||
|
|
||||||
|
$langs->load('bills');
|
||||||
|
$langs->load('compta');
|
||||||
|
$langs->load('admin');
|
||||||
|
$langs->load('other');
|
||||||
|
|
||||||
|
$action = GETPOST('action','alpha');
|
||||||
|
$massaction = GETPOST('massaction','alpha');
|
||||||
|
$show_files = GETPOST('show_files','int');
|
||||||
|
$confirm = GETPOST('confirm','alpha');
|
||||||
|
$cancel = GETPOST('cancel', 'alpha');
|
||||||
|
$toselect = GETPOST('toselect', 'array');
|
||||||
|
$contextpage= GETPOST('contextpage','aZ')?GETPOST('contextpage','aZ'):'invoicetemplatelist'; // To manage different context of search
|
||||||
|
|
||||||
|
// Security check
|
||||||
|
$id=(GETPOST('facid','int')?GETPOST('facid','int'):GETPOST('id','int'));
|
||||||
|
$lineid=GETPOST('lineid','int');
|
||||||
|
$ref=GETPOST('ref','alpha');
|
||||||
|
if ($user->societe_id) $socid=$user->societe_id;
|
||||||
|
$objecttype = 'facture_rec';
|
||||||
|
if ($action == "create" || $action == "add") $objecttype = '';
|
||||||
|
$result = restrictedArea($user, 'facture', $id, $objecttype);
|
||||||
|
$projectid = GETPOST('projectid','int');
|
||||||
|
|
||||||
|
$search_ref=GETPOST('search_ref');
|
||||||
|
$search_societe=GETPOST('search_societe');
|
||||||
|
$search_montant_ht=GETPOST('search_montant_ht');
|
||||||
|
$search_montant_vat=GETPOST('search_montant_vat');
|
||||||
|
$search_montant_ttc=GETPOST('search_montant_ttc');
|
||||||
|
$search_payment_mode=GETPOST('search_payment_mode');
|
||||||
|
$search_payment_term=GETPOST('search_payment_term');
|
||||||
|
$day=GETPOST('day');
|
||||||
|
$year=GETPOST('year');
|
||||||
|
$month=GETPOST('month');
|
||||||
|
$day_date_when=GETPOST('day_date_when');
|
||||||
|
$year_date_when=GETPOST('year_date_when');
|
||||||
|
$month_date_when=GETPOST('month_date_when');
|
||||||
|
$search_recurring=GETPOST('search_recurring','int');
|
||||||
|
$search_frequency=GETPOST('search_frequency','alpha');
|
||||||
|
$search_unit_frequency=GETPOST('search_unit_frequency','alpha');
|
||||||
|
|
||||||
|
$limit = GETPOST('limit')?GETPOST('limit','int'):$conf->liste_limit;
|
||||||
|
$sortfield = GETPOST("sortfield",'alpha');
|
||||||
|
$sortorder = GETPOST("sortorder",'alpha');
|
||||||
|
$page = GETPOST("page",'int');
|
||||||
|
if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1
|
||||||
|
$offset = $limit * $page;
|
||||||
|
if (! $sortorder) $sortorder='DESC';
|
||||||
|
if (! $sortfield) $sortfield='f.titre';
|
||||||
|
$pageprev = $page - 1;
|
||||||
|
$pagenext = $page + 1;
|
||||||
|
|
||||||
|
$object = new FactureRec($db);
|
||||||
|
if (($id > 0 || $ref) && $action != 'create' && $action != 'add')
|
||||||
|
{
|
||||||
|
$ret = $object->fetch($id, $ref);
|
||||||
|
if (!$ret)
|
||||||
|
{
|
||||||
|
setEventMessages($langs->trans("ErrorRecordNotFound"), null, 'errors');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
|
||||||
|
$hookmanager->initHooks(array('invoicereccard','globalcard'));
|
||||||
|
$extrafields = new ExtraFields($db);
|
||||||
|
|
||||||
|
// fetch optionals attributes and labels
|
||||||
|
$extralabels = $extrafields->fetch_name_optionals_label('facture_rec');
|
||||||
|
$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
|
||||||
|
|
||||||
|
$permissionnote = $user->rights->facture->creer; // Used by the include of actions_setnotes.inc.php
|
||||||
|
$permissiondellink=$user->rights->facture->creer; // Used by the include of actions_dellink.inc.php
|
||||||
|
$permissiontoedit = $user->rights->facture->creer; // Used by the include of actions_lineupdonw.inc.php
|
||||||
|
|
||||||
|
$arrayfields=array(
|
||||||
|
'f.titre'=>array('label'=>$langs->trans("Ref"), 'checked'=>1),
|
||||||
|
's.nom'=>array('label'=>$langs->trans("ThirdParty"), 'checked'=>1),
|
||||||
|
'f.total'=>array('label'=>$langs->trans("AmountHT"), 'checked'=>1),
|
||||||
|
'f.tva'=>array('label'=>$langs->trans("AmountVAT"), 'checked'=>1),
|
||||||
|
'f.total_ttc'=>array('label'=>$langs->trans("AmountTTC"), 'checked'=>1),
|
||||||
|
'f.fk_mode_reglement'=>array('label'=>$langs->trans("PaymentMode"), 'checked'=>0),
|
||||||
|
'f.fk_cond_reglement'=>array('label'=>$langs->trans("PaymentTerm"), 'checked'=>0),
|
||||||
|
'recurring'=>array('label'=>$langs->trans("RecurringInvoiceTemplate"), 'checked'=>1),
|
||||||
|
'f.frequency'=>array('label'=>$langs->trans("Frequency"), 'checked'=>1),
|
||||||
|
'f.unit_frequency'=>array('label'=>$langs->trans("FrequencyUnit"), 'checked'=>1),
|
||||||
|
'f.nb_gen_done'=>array('label'=>$langs->trans("NbOfGenerationDone"), 'checked'=>1),
|
||||||
|
'f.date_last_gen'=>array('label'=>$langs->trans("DateLastGeneration"), 'checked'=>1),
|
||||||
|
'f.date_when'=>array('label'=>$langs->trans("NextDateToExecution"), 'checked'=>1),
|
||||||
|
'status'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>100),
|
||||||
|
'f.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500),
|
||||||
|
'f.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500),
|
||||||
|
);
|
||||||
|
// Extra fields
|
||||||
|
if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
|
||||||
|
{
|
||||||
|
foreach($extrafields->attribute_label as $key => $val)
|
||||||
|
{
|
||||||
|
$arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>$extrafields->attribute_list[$key], 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>$extrafields->attribute_perms[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Actions
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (GETPOST('cancel','alpha')) { $action='list'; $massaction=''; }
|
||||||
|
if (! GETPOST('confirmmassaction','alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') { $massaction=''; }
|
||||||
|
|
||||||
|
$parameters = array('socid' => $socid);
|
||||||
|
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
||||||
|
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||||
|
|
||||||
|
if (empty($reshook))
|
||||||
|
{
|
||||||
|
if (GETPOST('cancel','alpha')) $action='';
|
||||||
|
|
||||||
|
// Selection of new fields
|
||||||
|
include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
|
||||||
|
|
||||||
|
// Do we click on purge search criteria ?
|
||||||
|
if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') || GETPOST('button_removefilter','alpha')) // All test are required to be compatible with all browsers
|
||||||
|
{
|
||||||
|
$search_ref='';
|
||||||
|
$search_societe='';
|
||||||
|
$search_montant_ht='';
|
||||||
|
$search_montant_vat='';
|
||||||
|
$search_montant_ttc='';
|
||||||
|
$search_payment_mode='';
|
||||||
|
$search_payment_term='';
|
||||||
|
$day='';
|
||||||
|
$year='';
|
||||||
|
$month='';
|
||||||
|
$day_date_when='';
|
||||||
|
$year_date_when='';
|
||||||
|
$month_date_when='';
|
||||||
|
$search_recurring='';
|
||||||
|
$search_frequency='';
|
||||||
|
$search_unit_frequency='';
|
||||||
|
$search_array_options=array();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mass actions
|
||||||
|
/*$objectclass='MyObject';
|
||||||
|
$objectlabel='MyObject';
|
||||||
|
$permtoread = $user->rights->mymodule->read;
|
||||||
|
$permtodelete = $user->rights->mymodule->delete;
|
||||||
|
$uploaddir = $conf->mymodule->dir_output;
|
||||||
|
include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* View
|
||||||
|
*/
|
||||||
|
|
||||||
|
llxHeader('',$langs->trans("RepeatableInvoices"),'ch-facture.html#s-fac-facture-rec');
|
||||||
|
|
||||||
|
$form = new Form($db);
|
||||||
|
$formother = new FormOther($db);
|
||||||
|
if (! empty($conf->projet->enabled)) { $formproject = new FormProjets($db); }
|
||||||
|
$companystatic = new Societe($db);
|
||||||
|
$invoicerectmp = new FactureRec($db);
|
||||||
|
|
||||||
|
$now = dol_now();
|
||||||
|
$tmparray=dol_getdate($now);
|
||||||
|
$today = dol_mktime(23,59,59,$tmparray['mon'],$tmparray['mday'],$tmparray['year']); // Today is last second of current day
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List mode
|
||||||
|
*/
|
||||||
|
$sql = "SELECT s.nom as name, s.rowid as socid, f.rowid as facid, f.titre, f.total, f.tva as total_vat, f.total_ttc, f.frequency, f.unit_frequency,";
|
||||||
|
$sql.= " f.nb_gen_done, f.nb_gen_max, f.date_last_gen, f.date_when,";
|
||||||
|
$sql.= " f.datec, f.tms,";
|
||||||
|
$sql.= " f.fk_cond_reglement, f.fk_mode_reglement";
|
||||||
|
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s,".MAIN_DB_PREFIX."facture_rec as f";
|
||||||
|
if (! $user->rights->societe->client->voir && ! $socid) {
|
||||||
|
$sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
|
||||||
|
}
|
||||||
|
$sql.= " WHERE f.fk_soc = s.rowid";
|
||||||
|
$sql.= ' AND f.entity IN ('.getEntity('facture').')';
|
||||||
|
if (! $user->rights->societe->client->voir && ! $socid) {
|
||||||
|
$sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".$user->id;
|
||||||
|
}
|
||||||
|
if ($search_ref) $sql .= natural_search('f.titre', $search_ref);
|
||||||
|
if ($search_societe) $sql .= natural_search('s.nom', $search_societe);
|
||||||
|
if ($search_montant_ht != '') $sql .= natural_search('f.total', $search_montant_ht, 1);
|
||||||
|
if ($search_montant_vat != '') $sql .= natural_search('f.tva', $search_montant_vat, 1);
|
||||||
|
if ($search_montant_ttc != '') $sql .= natural_search('f.total_ttc', $search_montant_ttc, 1);
|
||||||
|
if (! empty($search_payment_mode) && $search_payment_mode != '-1') $sql .= natural_search('f.fk_mode_reglement', $search_payment_mode, 1);
|
||||||
|
if (! empty($search_payment_term) && $search_payment_term != '-1') $sql .= natural_search('f.fk_cond_reglement', $search_payment_term, 1);
|
||||||
|
if ($search_recurring == '1') $sql .= ' AND f.frequency > 0';
|
||||||
|
if ($search_recurring == '0') $sql .= ' AND (f.frequency IS NULL or f.frequency = 0)';
|
||||||
|
if ($search_frequency != '') $sql .= natural_search('f.frequency', $search_frequency, 1);
|
||||||
|
if ($search_unit_frequency != '') $sql .= natural_search('f.unit_frequency', $search_unit_frequency);
|
||||||
|
|
||||||
|
if ($month > 0)
|
||||||
|
{
|
||||||
|
if ($year > 0 && empty($day))
|
||||||
|
$sql.= " AND f.date_last_gen BETWEEN '".$db->idate(dol_get_first_day($year,$month,false))."' AND '".$db->idate(dol_get_last_day($year,$month,false))."'";
|
||||||
|
else if ($year > 0 && ! empty($day))
|
||||||
|
$sql.= " AND f.date_last_gen BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year))."' AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year))."'";
|
||||||
|
else
|
||||||
|
$sql.= " AND date_format(f.date_last_gen, '%m') = '".$month."'";
|
||||||
|
}
|
||||||
|
else if ($year > 0)
|
||||||
|
{
|
||||||
|
$sql.= " AND f.date_last_gen BETWEEN '".$db->idate(dol_get_first_day($year,1,false))."' AND '".$db->idate(dol_get_last_day($year,12,false))."'";
|
||||||
|
}
|
||||||
|
if ($month_date_when > 0)
|
||||||
|
{
|
||||||
|
if ($year_date_when > 0 && empty($day_date_when))
|
||||||
|
$sql.= " AND f.date_when BETWEEN '".$db->idate(dol_get_first_day($year_date_when,$month_date_when,false))."' AND '".$db->idate(dol_get_last_day($year_date_when,$month_date_when,false))."'";
|
||||||
|
else if ($year_date_when > 0 && ! empty($day_date_when))
|
||||||
|
$sql.= " AND f.date_date_when_reglement BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month_date_when, $day_date_when, $year_date_when))."' AND '".$db->idate(dol_mktime(23, 59, 59, $month_date_when, $day_date_when, $year_date_when))."'";
|
||||||
|
else
|
||||||
|
$sql.= " AND date_format(f.date_when, '%m') = '".$month_date_when."'";
|
||||||
|
}
|
||||||
|
else if ($year_date_when > 0)
|
||||||
|
{
|
||||||
|
$sql.= " AND f.date_when BETWEEN '".$db->idate(dol_get_first_day($year_date_when,1,false))."' AND '".$db->idate(dol_get_last_day($year_date_when,12,false))."'";
|
||||||
|
}
|
||||||
|
|
||||||
|
$nbtotalofrecords = '';
|
||||||
|
if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
|
||||||
|
{
|
||||||
|
$result = $db->query($sql);
|
||||||
|
$nbtotalofrecords = $db->num_rows($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql.= $db->order($sortfield, $sortorder);
|
||||||
|
$sql.= $db->plimit($limit+1,$offset);
|
||||||
|
|
||||||
|
$resql = $db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
$num = $db->num_rows($resql);
|
||||||
|
|
||||||
|
$param='';
|
||||||
|
if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage);
|
||||||
|
if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit);
|
||||||
|
if ($socid) $param.='&socid='.urlencode($socid);
|
||||||
|
if ($day) $param.='&day='.urlencode($day);
|
||||||
|
if ($month) $param.='&month='.urlencode($month);
|
||||||
|
if ($year) $param.='&year=' .urlencode($year);
|
||||||
|
if ($day_date_when) $param.='&day_date_when='.urlencode($day_date_when);
|
||||||
|
if ($month_date_when) $param.='&month_date_when='.urlencode($month_date_when);
|
||||||
|
if ($year_date_when) $param.='&year_date_when=' .urlencode($year_date_when);
|
||||||
|
if ($search_ref) $param.='&search_ref=' .urlencode($search_ref);
|
||||||
|
if ($search_societe) $param.='&search_societe=' .urlencode($search_societe);
|
||||||
|
if ($search_montant_ht != '') $param.='&search_montant_ht=' .urlencode($search_montant_ht);
|
||||||
|
if ($search_montant_vat != '') $param.='&search_montant_vat='.urlencode($search_montant_vat);
|
||||||
|
if ($search_montant_ttc != '') $param.='&search_montant_ttc='.urlencode($search_montant_ttc);
|
||||||
|
if ($search_payment_mode != '') $param.='&search_payment_mode='.urlencode($search_payment_mode);
|
||||||
|
if ($search_payment_type != '') $param.='&search_payment_type='.urlencode($search_payment_type);
|
||||||
|
if ($search_recurring != '' && $search_recurrning != '-1') $param.='&search_recurring=' .urlencode($search_recurring);
|
||||||
|
if ($search_frequency > 0) $param.='&search_frequency=' .urlencode($search_frequency);
|
||||||
|
if ($search_unit_frequency > 0) $param.='&search_unit_frequency='.urlencode($search_unit_frequency);
|
||||||
|
if ($option) $param.="&option=".urlencode($option);
|
||||||
|
if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss);
|
||||||
|
// Add $param from extra fields
|
||||||
|
foreach ($search_array_options as $key => $val)
|
||||||
|
{
|
||||||
|
$crit=$val;
|
||||||
|
$tmpkey=preg_replace('/search_options_/','',$key);
|
||||||
|
if ($val != '') $param.='&search_options_'.$tmpkey.'='.urlencode($val);
|
||||||
|
}
|
||||||
|
|
||||||
|
$massactionbutton=$form->selectMassAction('', $massaction == 'presend' ? array() : array('presend'=>$langs->trans("SendByMail"), 'builddoc'=>$langs->trans("PDFMerge")));
|
||||||
|
|
||||||
|
$varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage;
|
||||||
|
$selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields
|
||||||
|
//$selectedfields.=$form->showCheckAddButtons('checkforselect', 1);
|
||||||
|
|
||||||
|
print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
|
||||||
|
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
||||||
|
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||||
|
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
||||||
|
print '<input type="hidden" name="action" value="list">';
|
||||||
|
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
||||||
|
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
||||||
|
print '<input type="hidden" name="page" value="'.$page.'">';
|
||||||
|
print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
|
||||||
|
print '<input type="hidden" name="viewstatut" value="'.$viewstatut.'">';
|
||||||
|
|
||||||
|
print_barre_liste($langs->trans("RepeatableInvoices"),$page,$_SERVER['PHP_SELF'],$param,$sortfield,$sortorder,'',$num,$nbtotalofrecords,'title_accountancy.png',0,'','', $limit);
|
||||||
|
|
||||||
|
print $langs->trans("ToCreateAPredefinedInvoice", $langs->transnoentitiesnoconv("ChangeIntoRepeatableInvoice")).'<br><br>';
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
|
||||||
|
print '<div class="div-table-responsive">';
|
||||||
|
print '<table class="tagtable liste'.($moreforfilter?" listwithfilterbefore":"").'">'."\n";
|
||||||
|
|
||||||
|
// Filters lines
|
||||||
|
print '<tr class="liste_titre_filter">';
|
||||||
|
// Ref
|
||||||
|
if (! empty($arrayfields['f.titre']['checked']))
|
||||||
|
{
|
||||||
|
print '<td class="liste_titre" align="left">';
|
||||||
|
print '<input class="flat" size="6" type="text" name="search_ref" value="'.dol_escape_htmltag($search_ref).'">';
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
// Thirpdarty
|
||||||
|
if (! empty($arrayfields['s.nom']['checked']))
|
||||||
|
{
|
||||||
|
print '<td class="liste_titre" align="left"><input class="flat" type="text" size="8" name="search_societe" value="'.dol_escape_htmltag($search_societe).'"></td>';
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.total']['checked']))
|
||||||
|
{
|
||||||
|
// Amount net
|
||||||
|
print '<td class="liste_titre" align="right">';
|
||||||
|
print '<input class="flat" type="text" size="5" name="search_montant_ht" value="'.dol_escape_htmltag($search_montant_ht).'">';
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.tva']['checked']))
|
||||||
|
{
|
||||||
|
// Amount Vat
|
||||||
|
print '<td class="liste_titre" align="right">';
|
||||||
|
print '<input class="flat" type="text" size="5" name="search_montant_vat" value="'.dol_escape_htmltag($search_montant_vat).'">';
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.total_ttc']['checked']))
|
||||||
|
{
|
||||||
|
// Amount
|
||||||
|
print '<td class="liste_titre" align="right">';
|
||||||
|
print '<input class="flat" type="text" size="5" name="search_montant_ttc" value="'.dol_escape_htmltag($search_montant_ttc).'">';
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.fk_cond_reglement']['checked']))
|
||||||
|
{
|
||||||
|
// Payment term
|
||||||
|
print '<td class="liste_titre" align="right">';
|
||||||
|
print $form->select_conditions_paiements($search_payment_term, 'search_payment_term', -1, 1, 1, 'maxwidth100');
|
||||||
|
print "</td>";
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.fk_mode_reglement']['checked']))
|
||||||
|
{
|
||||||
|
// Payment mode
|
||||||
|
print '<td class="liste_titre" align="right">';
|
||||||
|
print $form->select_types_paiements($search_payment_mode, 'search_payment_mode', '', 0, 1, 1, 0, 1, 'maxwidth100');
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['recurring']['checked']))
|
||||||
|
{
|
||||||
|
// Recurring or not
|
||||||
|
print '<td class="liste_titre" align="center">';
|
||||||
|
print $form->selectyesno('search_recurring', $search_recurring, 1, false, 1);
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.frequency']['checked']))
|
||||||
|
{
|
||||||
|
// Recurring or not
|
||||||
|
print '<td class="liste_titre" align="center">';
|
||||||
|
print '<input class="flat" type="text" size="1" name="search_frequency" value="'.dol_escape_htmltag($search_frequency).'">';
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.unit_frequency']['checked']))
|
||||||
|
{
|
||||||
|
// Frequency unit
|
||||||
|
print '<td class="liste_titre" align="center">';
|
||||||
|
print '<input class="flat" type="text" size="1" name="search_unit_frequency" value="'.dol_escape_htmltag($search_unit_frequency).'">';
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.nb_gen_done']['checked']))
|
||||||
|
{
|
||||||
|
// Nb generation
|
||||||
|
print '<td class="liste_titre" align="center">';
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
// Date invoice
|
||||||
|
if (! empty($arrayfields['f.date_last_gen']['checked']))
|
||||||
|
{
|
||||||
|
print '<td class="liste_titre" align="center">';
|
||||||
|
if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat" type="text" size="1" maxlength="2" name="day" value="'.$day.'">';
|
||||||
|
print '<input class="flat" type="text" size="1" maxlength="2" name="month" value="'.$month.'">';
|
||||||
|
$formother->select_year($year?$year:-1,'year',1, 20, 5);
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
// Date due
|
||||||
|
if (! empty($arrayfields['f.date_when']['checked']))
|
||||||
|
{
|
||||||
|
print '<td class="liste_titre" align="center">';
|
||||||
|
if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat" type="text" size="1" maxlength="2" name="day_date_when" value="'.$day_date_when.'">';
|
||||||
|
print '<input class="flat" type="text" size="1" maxlength="2" name="month_date_when" value="'.$month_date_when.'">';
|
||||||
|
$formother->select_year($year_date_when?$year_date_when:-1,'year_date_when',1, 20, 5);
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
// Extra fields
|
||||||
|
if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
|
||||||
|
{
|
||||||
|
foreach($extrafields->attribute_label as $key => $val)
|
||||||
|
{
|
||||||
|
if (! empty($arrayfields["ef.".$key]['checked']))
|
||||||
|
{
|
||||||
|
$align=$extrafields->getAlignFlag($key);
|
||||||
|
$typeofextrafield=$extrafields->attribute_type[$key];
|
||||||
|
print '<td class="liste_titre'.($align?' '.$align:'').'">';
|
||||||
|
if (in_array($typeofextrafield, array('varchar', 'int', 'double', 'select')))
|
||||||
|
{
|
||||||
|
$crit=$val;
|
||||||
|
$tmpkey=preg_replace('/search_options_/','',$key);
|
||||||
|
$searchclass='';
|
||||||
|
if (in_array($typeofextrafield, array('varchar', 'select'))) $searchclass='searchstring';
|
||||||
|
if (in_array($typeofextrafield, array('int', 'double'))) $searchclass='searchnum';
|
||||||
|
print '<input class="flat'.($searchclass?' '.$searchclass:'').'" size="4" type="text" name="search_options_'.$tmpkey.'" value="'.dol_escape_htmltag($search_array_options['search_options_'.$tmpkey]).'">';
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Fields from hook
|
||||||
|
$parameters=array('arrayfields'=>$arrayfields);
|
||||||
|
$reshook=$hookmanager->executeHooks('printFieldListOption',$parameters); // Note that $action and $object may have been modified by hook
|
||||||
|
print $hookmanager->resPrint;
|
||||||
|
// Date creation
|
||||||
|
if (! empty($arrayfields['f.datec']['checked']))
|
||||||
|
{
|
||||||
|
print '<td class="liste_titre">';
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
// Date modification
|
||||||
|
if (! empty($arrayfields['f.tms']['checked']))
|
||||||
|
{
|
||||||
|
print '<td class="liste_titre">';
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
// Status
|
||||||
|
if (! empty($arrayfields['status']['checked']))
|
||||||
|
{
|
||||||
|
print '<td class="liste_titre" align="center">';
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
// Action column
|
||||||
|
print '<td class="liste_titre" align="middle">';
|
||||||
|
$searchpicto=$form->showFilterAndCheckAddButtons(0, 'checkforselect', 1);
|
||||||
|
print $searchpicto;
|
||||||
|
print '</td>';
|
||||||
|
print "</tr>\n";
|
||||||
|
|
||||||
|
|
||||||
|
print '<tr class="liste_titre">';
|
||||||
|
if (! empty($arrayfields['f.titre']['checked'])) print_liste_field_titre($arrayfields['f.titre']['label'],$_SERVER['PHP_SELF'],"f.titre","",$param,"",$sortfield,$sortorder);
|
||||||
|
if (! empty($arrayfields['s.nom']['checked'])) print_liste_field_titre($arrayfields['s.nom']['label'],$_SERVER['PHP_SELF'],"s.nom","",$param,"",$sortfield,$sortorder);
|
||||||
|
if (! empty($arrayfields['f.total']['checked'])) print_liste_field_titre($arrayfields['f.total']['label'],$_SERVER['PHP_SELF'],"f.total","",$param,'align="right"',$sortfield,$sortorder);
|
||||||
|
if (! empty($arrayfields['f.tva']['checked'])) print_liste_field_titre($arrayfields['f.tva']['label'],$_SERVER['PHP_SELF'],"f.tva","",$param,'align="right"',$sortfield,$sortorder);
|
||||||
|
if (! empty($arrayfields['f.total_ttc']['checked'])) print_liste_field_titre($arrayfields['f.total_ttc']['label'],$_SERVER['PHP_SELF'],"f.total_ttc","",$param,'align="right"',$sortfield,$sortorder);
|
||||||
|
if (! empty($arrayfields['f.fk_cond_reglement']['checked'])) print_liste_field_titre($arrayfields['f.fk_cond_reglement']['label'],$_SERVER['PHP_SELF'],"f.fk_cond_reglement","",$param,'',$sortfield,$sortorder);
|
||||||
|
if (! empty($arrayfields['f.fk_mode_reglement']['checked'])) print_liste_field_titre($arrayfields['f.fk_mode_reglement']['label'],$_SERVER['PHP_SELF'],"f.fk_mode_reglement","",$param,'',$sortfield,$sortorder);
|
||||||
|
if (! empty($arrayfields['recurring']['checked'])) print_liste_field_titre($arrayfields['recurring']['label'],$_SERVER['PHP_SELF'],"recurring","",$param,'align="center"',$sortfield,$sortorder);
|
||||||
|
if (! empty($arrayfields['f.frequency']['checked'])) print_liste_field_titre($arrayfields['f.frequency']['label'],$_SERVER['PHP_SELF'],"f.frequency","",$param,'align="center"',$sortfield,$sortorder);
|
||||||
|
if (! empty($arrayfields['f.unit_frequency']['checked'])) print_liste_field_titre($arrayfields['f.unit_frequency']['label'],$_SERVER['PHP_SELF'],"f.unit_frequency","",$param,'align="center"',$sortfield,$sortorder);
|
||||||
|
if (! empty($arrayfields['f.nb_gen_done']['checked'])) print_liste_field_titre($arrayfields['f.nb_gen_done']['label'],$_SERVER['PHP_SELF'],"f.nb_gen_done","",$param,'align="center"',$sortfield,$sortorder);
|
||||||
|
if (! empty($arrayfields['f.date_last_gen']['checked'])) print_liste_field_titre($arrayfields['f.date_last_gen']['label'],$_SERVER['PHP_SELF'],"f.date_last_gen","",$param,'align="center"',$sortfield,$sortorder);
|
||||||
|
if (! empty($arrayfields['f.date_when']['checked'])) print_liste_field_titre($arrayfields['f.date_when']['label'],$_SERVER['PHP_SELF'],"f.date_when","",$param,'align="center"',$sortfield,$sortorder);
|
||||||
|
if (! empty($arrayfields['f.datec']['checked'])) print_liste_field_titre($arrayfields['f.datec']['label'],$_SERVER['PHP_SELF'],"f.datec","",$param,'align="center"',$sortfield,$sortorder);
|
||||||
|
if (! empty($arrayfields['f.tms']['checked'])) print_liste_field_titre($arrayfields['f.tms']['label'],$_SERVER['PHP_SELF'],"f.tms","",$param,'align="center"',$sortfield,$sortorder);
|
||||||
|
if (! empty($arrayfields['status']['checked'])) print_liste_field_titre($arrayfields['status']['label'],$_SERVER['PHP_SELF'],"","",$param,'align="center"',$sortfield,$sortorder);
|
||||||
|
print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="center"',$sortfield,$sortorder,'nomaxwidthsearch ')."\n";
|
||||||
|
print "</tr>\n";
|
||||||
|
|
||||||
|
if ($num > 0)
|
||||||
|
{
|
||||||
|
$i=0;
|
||||||
|
$totalarray=array();
|
||||||
|
while ($i < min($num,$limit))
|
||||||
|
{
|
||||||
|
$objp = $db->fetch_object($resql);
|
||||||
|
if (empty($objp)) break;
|
||||||
|
|
||||||
|
$companystatic->id=$objp->socid;
|
||||||
|
$companystatic->name=$objp->name;
|
||||||
|
|
||||||
|
$invoicerectmp->id=$objp->id;
|
||||||
|
$invoicerectmp->frequency=$objp->frequency;
|
||||||
|
$invoicerectmp->suspend=$objp->suspend;
|
||||||
|
$invoicerectmp->unit_frequency=$objp->unit_frequency;
|
||||||
|
|
||||||
|
print '<tr class="oddeven">';
|
||||||
|
|
||||||
|
if (! empty($arrayfields['f.titre']['checked']))
|
||||||
|
{
|
||||||
|
print '<td><a href="'.DOL_URL_ROOT.'/compta/facture/fiche-rec.php?id='.$objp->facid.'">'.img_object($langs->trans("ShowBill"),"bill").' '.$objp->titre;
|
||||||
|
print "</a></td>\n";
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['s.nom']['checked']))
|
||||||
|
{
|
||||||
|
print '<td class="tdoverflowmax200">'.$companystatic->getNomUrl(1,'customer').'</td>';
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.total']['checked']))
|
||||||
|
{
|
||||||
|
print '<td align="right">'.price($objp->total).'</td>'."\n";
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.total';
|
||||||
|
$totalarray['val']['f.total'] += $objp->total;
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.tva']['checked']))
|
||||||
|
{
|
||||||
|
print '<td align="right">'.price($objp->total_vat).'</td>'."\n";
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.tva';
|
||||||
|
$totalarray['val']['f.tva'] += $objp->total_vat;
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.total_ttc']['checked']))
|
||||||
|
{
|
||||||
|
print '<td align="right">'.price($objp->total_ttc).'</td>'."\n";
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
if (! $i) $totalarray['pos'][$totalarray['nbfield']]='f.total_ttc';
|
||||||
|
$totalarray['val']['f.total_ttc'] += $objp->total_ttc;
|
||||||
|
}
|
||||||
|
// Payment term
|
||||||
|
if (! empty($arrayfields['f.fk_cond_reglement']['checked']))
|
||||||
|
{
|
||||||
|
print '<td align="right">';
|
||||||
|
print $form->form_conditions_reglement('', $objp->fk_cond_reglement, 'none');
|
||||||
|
print '</td>'."\n";
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
}
|
||||||
|
// Payment mode
|
||||||
|
if (! empty($arrayfields['f.fk_mode_reglement']['checked']))
|
||||||
|
{
|
||||||
|
print '<td align="right">';
|
||||||
|
print $form->form_modes_reglement('', $objp->fk_mode_reglement, 'none');
|
||||||
|
print '</td>'."\n";
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['recurring']['checked']))
|
||||||
|
{
|
||||||
|
print '<td align="center">'.yn($objp->frequency?1:0).'</td>';
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.frequency']['checked']))
|
||||||
|
{
|
||||||
|
print '<td align="center">'.($objp->frequency > 0 ? $objp->frequency : '').'</td>';
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.unit_frequency']['checked']))
|
||||||
|
{
|
||||||
|
print '<td align="center">'.($objp->frequency > 0 ? $objp->unit_frequency : '').'</td>';
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.nb_gen_done']['checked']))
|
||||||
|
{
|
||||||
|
print '<td align="center">';
|
||||||
|
print ($objp->frequency ? $objp->nb_gen_done.($objp->nb_gen_max>0?' / '. $objp->nb_gen_max:'') : '<span class="opacitymedium">'.$langs->trans('NA').'</span>');
|
||||||
|
print '</td>';
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.date_last_gen']['checked']))
|
||||||
|
{
|
||||||
|
print '<td align="center">';
|
||||||
|
print ($objp->frequency ? dol_print_date($db->jdate($objp->date_last_gen),'day') : '<span class="opacitymedium">'.$langs->trans('NA').'</span>');
|
||||||
|
print '</td>';
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.date_when']['checked']))
|
||||||
|
{
|
||||||
|
print '<td align="center">';
|
||||||
|
print ($objp->frequency ? dol_print_date($db->jdate($objp->date_when),'day') : '<span class="opacitymedium">'.$langs->trans('NA').'</span>');
|
||||||
|
print '</td>';
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.datec']['checked']))
|
||||||
|
{
|
||||||
|
print '<td align="center">';
|
||||||
|
print dol_print_date($db->jdate($objp->datec),'dayhour');
|
||||||
|
print '</td>';
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['f.tms']['checked']))
|
||||||
|
{
|
||||||
|
print '<td align="center">';
|
||||||
|
print dol_print_date($db->jdate($objp->tms),'dayhour');
|
||||||
|
print '</td>';
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields['status']['checked']))
|
||||||
|
{
|
||||||
|
print '<td align="center">';
|
||||||
|
print $invoicerectmp->getLibStatut(3,0);
|
||||||
|
print '</td>';
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
}
|
||||||
|
// Action column
|
||||||
|
print '<td align="center">';
|
||||||
|
if ($user->rights->facture->creer)
|
||||||
|
{
|
||||||
|
if (empty($objp->frequency) || $db->jdate($objp->date_when) <= $today)
|
||||||
|
{
|
||||||
|
print '<a href="'.DOL_URL_ROOT.'/compta/facture/card.php?action=create&socid='.$objp->socid.'&fac_rec='.$objp->facid.'">';
|
||||||
|
print $langs->trans("CreateBill").'</a>';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print $langs->trans("DateIsNotEnough");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print " ";
|
||||||
|
}
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
print "</td>";
|
||||||
|
|
||||||
|
print "</tr>\n";
|
||||||
|
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$colspan=1;
|
||||||
|
foreach($arrayfields as $key => $val) { if (! empty($val['checked'])) $colspan++; }
|
||||||
|
print '<tr><td colspan="'.$colspan.'" class="opacitymedium">'.$langs->trans("NoRecordFound").'</td></tr>';
|
||||||
|
}
|
||||||
|
|
||||||
|
//var_dump($totalarray);
|
||||||
|
// Show total line
|
||||||
|
if (isset($totalarray['pos']))
|
||||||
|
{
|
||||||
|
print '<tr class="liste_total">';
|
||||||
|
$i=0;
|
||||||
|
while ($i < $totalarray['nbfield'])
|
||||||
|
{
|
||||||
|
$i++;
|
||||||
|
if (! empty($totalarray['pos'][$i])) print '<td align="right">'.price($totalarray['val'][$totalarray['pos'][$i]]).'</td>';
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ($i == 1)
|
||||||
|
{
|
||||||
|
if ($num < $limit) print '<td align="left">'.$langs->trans("Total").'</td>';
|
||||||
|
else print '<td align="left">'.$langs->trans("Totalforthispage").'</td>';
|
||||||
|
}
|
||||||
|
else print '<td></td>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print '</tr>';
|
||||||
|
}
|
||||||
|
|
||||||
|
print "</table>";
|
||||||
|
print "</div>";
|
||||||
|
print "</form>";
|
||||||
|
|
||||||
|
$db->free($resql);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
|
||||||
|
llxFooter();
|
||||||
|
|
||||||
|
$db->close();
|
||||||
@ -918,51 +918,17 @@ if (empty($reshook))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generation doc (depuis lien ou depuis cartouche doc)
|
|
||||||
else if ($action == 'builddoc' && $user->rights->contrat->creer) {
|
|
||||||
if (GETPOST('model')) {
|
|
||||||
$object->setDocModel($user, GETPOST('model'));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Define output language
|
// Actions to build doc
|
||||||
$outputlangs = $langs;
|
|
||||||
if (! empty($conf->global->MAIN_MULTILANGS)) {
|
|
||||||
$outputlangs = new Translate("", $conf);
|
|
||||||
$newlang = (GETPOST('lang_id','aZ09') ? GETPOST('lang_id','aZ09') : $object->thirdparty->default_lang);
|
|
||||||
$outputlangs->setDefaultLang($newlang);
|
|
||||||
}
|
|
||||||
$ret = $object->fetch($id); // Reload to get new records
|
|
||||||
$result = $object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
|
||||||
if ($result <= 0)
|
|
||||||
{
|
|
||||||
setEventMessages($object->error, $object->errors, 'errors');
|
|
||||||
$action='';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove file in doc form
|
|
||||||
else if ($action == 'remove_file' && $user->rights->contrat->creer) {
|
|
||||||
if ($object->id > 0) {
|
|
||||||
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
|
|
||||||
|
|
||||||
$langs->load("other");
|
|
||||||
$upload_dir = $conf->contrat->dir_output;
|
$upload_dir = $conf->contrat->dir_output;
|
||||||
$file = $upload_dir . '/' . GETPOST('file');
|
$permissioncreate = $user->rights->contrat->creer;
|
||||||
$ret = dol_delete_file($file, 0, 0, 0, $object);
|
include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
|
||||||
if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('file')), null, 'mesgs');
|
|
||||||
else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('file')), null, 'errors');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Send mail
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Actions to send emails
|
// Actions to send emails
|
||||||
$trigger_name='CONTRACT_SENTBYMAIL';
|
$trigger_name='CONTRACT_SENTBYMAIL';
|
||||||
$paramname='id';
|
$paramname='id';
|
||||||
$mode='emailfromcontract';
|
$mode='emailfromcontract';
|
||||||
$trackid='cont'.$object->id;
|
$trackid='con'.$object->id;
|
||||||
include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';
|
include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';
|
||||||
|
|
||||||
|
|
||||||
@ -2164,135 +2130,13 @@ else
|
|||||||
print '</div></div></div>';
|
print '</div></div></div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Presend form
|
||||||
* Action presend
|
$modelmail='contract';
|
||||||
*/
|
$defaulttopic='SendContractRef';
|
||||||
if ($action == 'presend')
|
$diroutput = $conf->contrat->dir_output;
|
||||||
{
|
$trackid = 'con'.$object->id;
|
||||||
$object->fetch_projet();
|
|
||||||
|
|
||||||
$ref = dol_sanitizeFileName($object->ref);
|
|
||||||
include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
|
|
||||||
$fileparams = dol_most_recent_file($conf->contrat->dir_output . '/' . $ref, preg_quote($ref, '/').'[^\-]+');
|
|
||||||
$file = $fileparams['fullname'];
|
|
||||||
|
|
||||||
// Define output language
|
|
||||||
$outputlangs = $langs;
|
|
||||||
$newlang = '';
|
|
||||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id']))
|
|
||||||
$newlang = $_REQUEST['lang_id'];
|
|
||||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang))
|
|
||||||
$newlang = $object->thirdparty->default_lang;
|
|
||||||
|
|
||||||
if (!empty($newlang))
|
|
||||||
{
|
|
||||||
$outputlangs = new Translate('', $conf);
|
|
||||||
$outputlangs->setDefaultLang($newlang);
|
|
||||||
$outputlangs->load('commercial');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build document if it not exists
|
|
||||||
if (! $file || ! is_readable($file)) {
|
|
||||||
$result = $object->generateDocument(GETPOST('model') ? GETPOST('model') : $object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
|
||||||
if ($result <= 0) {
|
|
||||||
dol_print_error($db, $object->error, $object->errors);
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
$fileparams = dol_most_recent_file($conf->contrat->dir_output . '/' . $ref, preg_quote($ref, '/').'[^\-]+');
|
|
||||||
$file = $fileparams['fullname'];
|
|
||||||
}
|
|
||||||
|
|
||||||
print '<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
|
|
||||||
print '<div class="clearboth"></div>';
|
|
||||||
print '<br>';
|
|
||||||
print load_fiche_titre($langs->trans('SendByMail'));
|
|
||||||
|
|
||||||
dol_fiche_head('');
|
|
||||||
|
|
||||||
// Cree l'objet formulaire mail
|
|
||||||
include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php';
|
|
||||||
$formmail = new FormMail($db);
|
|
||||||
$formmail->param['langsmodels']=(empty($newlang)?$langs->defaultlang:$newlang);
|
|
||||||
$formmail->fromtype = (GETPOST('fromtype')?GETPOST('fromtype'):(!empty($conf->global->MAIN_MAIL_DEFAULT_FROMTYPE)?$conf->global->MAIN_MAIL_DEFAULT_FROMTYPE:'user'));
|
|
||||||
|
|
||||||
if($formmail->fromtype === 'user'){
|
|
||||||
$formmail->fromid = $user->id;
|
|
||||||
|
|
||||||
}
|
|
||||||
$formmail->trackid='cont'.$object->id;
|
|
||||||
if (! empty($conf->global->MAIN_EMAIL_ADD_TRACK_ID) && ($conf->global->MAIN_EMAIL_ADD_TRACK_ID & 2)) // If bit 2 is set
|
|
||||||
{
|
|
||||||
include DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
|
||||||
$formmail->frommail=dolAddEmailTrackId($formmail->frommail, 'ord'.$object->id);
|
|
||||||
}
|
|
||||||
$formmail->withfrom = 1;
|
|
||||||
$liste = array();
|
|
||||||
foreach ($object->thirdparty->thirdparty_and_contact_email_array(1) as $key => $value)
|
|
||||||
$liste [$key] = $value;
|
|
||||||
$formmail->withto = GETPOST('sendto') ? GETPOST('sendto') : $liste;
|
|
||||||
$formmail->withtocc = $liste;
|
|
||||||
$formmail->withtoccc = $conf->global->MAIN_EMAIL_USECCC;
|
|
||||||
if (empty($object->ref_client)) {
|
|
||||||
$formmail->withtopic = $outputlangs->trans('SendContractRef', '__CONTRACTREF__');
|
|
||||||
} else if (! empty($object->ref_client)) {
|
|
||||||
$formmail->withtopic = $outputlangs->trans('SendContractRef', '__CONTRACTREF__ (__REFCLIENT__)');
|
|
||||||
}
|
|
||||||
$formmail->withfile = 2;
|
|
||||||
$formmail->withbody = 1;
|
|
||||||
$formmail->withdeliveryreceipt = 1;
|
|
||||||
$formmail->withcancel = 1;
|
|
||||||
// Array of substitutions
|
|
||||||
$formmail->setSubstitFromObject($object);
|
|
||||||
$datenextexpiration='';
|
|
||||||
foreach($object->lines as $line)
|
|
||||||
{
|
|
||||||
if ($line->statut != 4) continue;
|
|
||||||
if ($line->date_fin_prevue > $datenextexpiration) $datenextexpiration = $line->date_fin_prevue;
|
|
||||||
}
|
|
||||||
$formmail->substit['__CONTRACT_NEXT_EXPIRATION_DATE__'] = dol_print_date($datenextexpiration, 'dayrfc');
|
|
||||||
$formmail->substit['__CONTRACT_NEXT_EXPIRATION_DATETIME__'] = dol_print_date($datenextexpiration, 'standard');
|
|
||||||
$formmail->substit['__PERSONALIZED__']='';
|
|
||||||
$formmail->substit['__CONTACTCIVNAME__']='';
|
|
||||||
|
|
||||||
$custcontact = '';
|
|
||||||
$contactarr = array();
|
|
||||||
$contactarr = $object->liste_contact(- 1, 'external');
|
|
||||||
|
|
||||||
if (is_array($contactarr) && count($contactarr) > 0)
|
|
||||||
{
|
|
||||||
foreach ($contactarr as $contact)
|
|
||||||
{
|
|
||||||
if ($contact['libelle'] == $langs->trans('TypeContact_contract_external_CUSTOMER')) { // TODO Use code and not label
|
|
||||||
$contactstatic = new Contact($db);
|
|
||||||
$contactstatic->fetch($contact['id']);
|
|
||||||
$custcontact = $contactstatic->getFullName($langs, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! empty($custcontact)) {
|
|
||||||
$formmail->substit['__CONTACTCIVNAME__'] = $custcontact;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tableau des parametres complementaires
|
|
||||||
$formmail->param['action'] = 'send';
|
|
||||||
$formmail->param['models'] = 'contract_send';
|
|
||||||
$formmail->param['models_id']=GETPOST('modelmailselected','int');
|
|
||||||
$formmail->param['contractid'] = $object->id;
|
|
||||||
$formmail->param['returnurl'] = $_SERVER["PHP_SELF"] . '?id=' . $object->id;
|
|
||||||
|
|
||||||
// Init list of files
|
|
||||||
if (GETPOST("mode") == 'init') {
|
|
||||||
$formmail->clear_attached_files();
|
|
||||||
$formmail->add_attached_files($file, basename($file), dol_mimetype($file));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Show form
|
|
||||||
print $formmail->get_form();
|
|
||||||
|
|
||||||
dol_fiche_end();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -47,6 +47,7 @@ $confirm=GETPOST('confirm','alpha');
|
|||||||
$toselect = GETPOST('toselect', 'array');
|
$toselect = GETPOST('toselect', 'array');
|
||||||
|
|
||||||
$search_name=GETPOST('search_name');
|
$search_name=GETPOST('search_name');
|
||||||
|
$search_email=GETPOST('search_email');
|
||||||
$search_town=GETPOST('search_town','alpha');
|
$search_town=GETPOST('search_town','alpha');
|
||||||
$search_zip=GETPOST('search_zip','alpha');
|
$search_zip=GETPOST('search_zip','alpha');
|
||||||
$search_state=trim(GETPOST("search_state"));
|
$search_state=trim(GETPOST("search_state"));
|
||||||
@ -116,6 +117,7 @@ $arrayfields=array(
|
|||||||
'c.ref_customer'=>array('label'=>$langs->trans("RefCustomer"), 'checked'=>1),
|
'c.ref_customer'=>array('label'=>$langs->trans("RefCustomer"), 'checked'=>1),
|
||||||
'c.ref_supplier'=>array('label'=>$langs->trans("RefSupplier"), 'checked'=>1),
|
'c.ref_supplier'=>array('label'=>$langs->trans("RefSupplier"), 'checked'=>1),
|
||||||
's.nom'=>array('label'=>$langs->trans("ThirdParty"), 'checked'=>1),
|
's.nom'=>array('label'=>$langs->trans("ThirdParty"), 'checked'=>1),
|
||||||
|
's.email'=>array('label'=>$langs->trans("ThirdPartyEmail"), 'checked'=>0),
|
||||||
's.town'=>array('label'=>$langs->trans("Town"), 'checked'=>0),
|
's.town'=>array('label'=>$langs->trans("Town"), 'checked'=>0),
|
||||||
's.zip'=>array('label'=>$langs->trans("Zip"), 'checked'=>0),
|
's.zip'=>array('label'=>$langs->trans("Zip"), 'checked'=>0),
|
||||||
'state.nom'=>array('label'=>$langs->trans("StateShort"), 'checked'=>0),
|
'state.nom'=>array('label'=>$langs->trans("StateShort"), 'checked'=>0),
|
||||||
@ -156,6 +158,7 @@ if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x',
|
|||||||
$month='';
|
$month='';
|
||||||
$year='';
|
$year='';
|
||||||
$search_name="";
|
$search_name="";
|
||||||
|
$search_email="";
|
||||||
$search_town='';
|
$search_town='';
|
||||||
$search_zip="";
|
$search_zip="";
|
||||||
$search_state="";
|
$search_state="";
|
||||||
@ -199,7 +202,7 @@ llxHeader('', $langs->trans("Contracts"));
|
|||||||
|
|
||||||
$sql = 'SELECT';
|
$sql = 'SELECT';
|
||||||
$sql.= " c.rowid, c.ref, c.datec as date_creation, c.tms as date_update, c.date_contrat, c.statut, c.ref_customer, c.ref_supplier, c.note_private, c.note_public,";
|
$sql.= " c.rowid, c.ref, c.datec as date_creation, c.tms as date_update, c.date_contrat, c.statut, c.ref_customer, c.ref_supplier, c.note_private, c.note_public,";
|
||||||
$sql.= ' s.rowid as socid, s.nom as name, s.town, s.zip, s.fk_pays, s.client, s.code_client,';
|
$sql.= ' s.rowid as socid, s.nom as name, s.email, s.town, s.zip, s.fk_pays, s.client, s.code_client,';
|
||||||
$sql.= " typent.code as typent_code,";
|
$sql.= " typent.code as typent_code,";
|
||||||
$sql.= " state.code_departement as state_code, state.nom as state_name,";
|
$sql.= " state.code_departement as state_code, state.nom as state_name,";
|
||||||
$sql.= ' SUM('.$db->ifsql("cd.statut=0",1,0).') as nb_initial,';
|
$sql.= ' SUM('.$db->ifsql("cd.statut=0",1,0).') as nb_initial,';
|
||||||
@ -246,6 +249,7 @@ else if ($year > 0)
|
|||||||
$sql.= " AND c.date_contrat BETWEEN '".$db->idate(dol_get_first_day($year,1,false))."' AND '".$db->idate(dol_get_last_day($year,12,false))."'";
|
$sql.= " AND c.date_contrat BETWEEN '".$db->idate(dol_get_first_day($year,1,false))."' AND '".$db->idate(dol_get_last_day($year,12,false))."'";
|
||||||
}
|
}
|
||||||
if ($search_name) $sql .= natural_search('s.nom', $search_name);
|
if ($search_name) $sql .= natural_search('s.nom', $search_name);
|
||||||
|
if ($search_email) $sql .= natural_search('s.email', $search_name);
|
||||||
if ($search_contract) $sql .= natural_search(array('c.rowid', 'c.ref'), $search_contract);
|
if ($search_contract) $sql .= natural_search(array('c.rowid', 'c.ref'), $search_contract);
|
||||||
if (!empty($search_ref_customer)) $sql .= natural_search(array('c.ref_customer'), $search_ref_customer);
|
if (!empty($search_ref_customer)) $sql .= natural_search(array('c.ref_customer'), $search_ref_customer);
|
||||||
if (!empty($search_ref_supplier)) $sql .= natural_search(array('c.ref_supplier'), $search_ref_supplier);
|
if (!empty($search_ref_supplier)) $sql .= natural_search(array('c.ref_supplier'), $search_ref_supplier);
|
||||||
@ -275,7 +279,7 @@ $reshook=$hookmanager->executeHooks('printFieldListWhere',$parameters); // No
|
|||||||
$sql.=$hookmanager->resPrint;
|
$sql.=$hookmanager->resPrint;
|
||||||
|
|
||||||
$sql.= " GROUP BY c.rowid, c.ref, c.datec, c.tms, c.date_contrat, c.statut, c.ref_customer, c.ref_supplier, c.note_private, c.note_public,";
|
$sql.= " GROUP BY c.rowid, c.ref, c.datec, c.tms, c.date_contrat, c.statut, c.ref_customer, c.ref_supplier, c.note_private, c.note_public,";
|
||||||
$sql.= ' s.rowid, s.nom, s.town, s.zip, s.fk_pays, s.client, s.code_client,';
|
$sql.= ' s.rowid, s.nom, s.email, s.town, s.zip, s.fk_pays, s.client, s.code_client,';
|
||||||
$sql.= " typent.code,";
|
$sql.= " typent.code,";
|
||||||
$sql.= " state.code_departement, state.nom";
|
$sql.= " state.code_departement, state.nom";
|
||||||
// Add fields from extrafields
|
// Add fields from extrafields
|
||||||
@ -324,6 +328,7 @@ if ($resql)
|
|||||||
if ($sall != '') $param.='&sall='.$sall;
|
if ($sall != '') $param.='&sall='.$sall;
|
||||||
if ($search_contract != '') $param.='&search_contract='.$search_contract;
|
if ($search_contract != '') $param.='&search_contract='.$search_contract;
|
||||||
if ($search_name != '') $param.='&search_name='.$search_name;
|
if ($search_name != '') $param.='&search_name='.$search_name;
|
||||||
|
if ($search_email != '') $param.='&search_email='.$search_email;
|
||||||
if ($search_ref_supplier != '') $param.='&search_ref_supplier='.$search_ref_supplier;
|
if ($search_ref_supplier != '') $param.='&search_ref_supplier='.$search_ref_supplier;
|
||||||
if ($search_sale != '') $param.='&search_sale=' .$search_sale;
|
if ($search_sale != '') $param.='&search_sale=' .$search_sale;
|
||||||
if ($show_files) $param.='&show_files=' .$show_files;
|
if ($show_files) $param.='&show_files=' .$show_files;
|
||||||
@ -446,6 +451,12 @@ if ($resql)
|
|||||||
print '<input type="text" class="flat" size="8" name="search_name" value="'.dol_escape_htmltag($search_name).'">';
|
print '<input type="text" class="flat" size="8" name="search_name" value="'.dol_escape_htmltag($search_name).'">';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
|
if (! empty($arrayfields['s.email']['checked']))
|
||||||
|
{
|
||||||
|
print '<td class="liste_titre">';
|
||||||
|
print '<input type="text" class="flat" size="6" name="search_email" value="'.dol_escape_htmltag($search_email).'">';
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
// Town
|
// Town
|
||||||
if (! empty($arrayfields['s.town']['checked'])) print '<td class="liste_titre"><input class="flat" type="text" size="6" name="search_town" value="'.$search_town.'"></td>';
|
if (! empty($arrayfields['s.town']['checked'])) print '<td class="liste_titre"><input class="flat" type="text" size="6" name="search_town" value="'.$search_town.'"></td>';
|
||||||
// Zip
|
// Zip
|
||||||
@ -542,6 +553,7 @@ if ($resql)
|
|||||||
if (! empty($arrayfields['c.ref_customer']['checked'])) print_liste_field_titre($arrayfields['c.ref_customer']['label'], $_SERVER["PHP_SELF"], "c.ref_customer","","$param",'',$sortfield,$sortorder);
|
if (! empty($arrayfields['c.ref_customer']['checked'])) print_liste_field_titre($arrayfields['c.ref_customer']['label'], $_SERVER["PHP_SELF"], "c.ref_customer","","$param",'',$sortfield,$sortorder);
|
||||||
if (! empty($arrayfields['c.ref_supplier']['checked'])) print_liste_field_titre($arrayfields['c.ref_supplier']['label'], $_SERVER["PHP_SELF"], "c.ref_supplier","","$param",'',$sortfield,$sortorder);
|
if (! empty($arrayfields['c.ref_supplier']['checked'])) print_liste_field_titre($arrayfields['c.ref_supplier']['label'], $_SERVER["PHP_SELF"], "c.ref_supplier","","$param",'',$sortfield,$sortorder);
|
||||||
if (! empty($arrayfields['s.nom']['checked'])) print_liste_field_titre($arrayfields['s.nom']['label'], $_SERVER["PHP_SELF"], "s.nom","","$param",'',$sortfield,$sortorder);
|
if (! empty($arrayfields['s.nom']['checked'])) print_liste_field_titre($arrayfields['s.nom']['label'], $_SERVER["PHP_SELF"], "s.nom","","$param",'',$sortfield,$sortorder);
|
||||||
|
if (! empty($arrayfields['s.email']['checked'])) print_liste_field_titre($arrayfields['s.email']['label'], $_SERVER["PHP_SELF"], "s.email","","$param",'',$sortfield,$sortorder);
|
||||||
if (! empty($arrayfields['s.town']['checked'])) print_liste_field_titre($arrayfields['s.town']['label'],$_SERVER["PHP_SELF"],'s.town','',$param,'',$sortfield,$sortorder);
|
if (! empty($arrayfields['s.town']['checked'])) print_liste_field_titre($arrayfields['s.town']['label'],$_SERVER["PHP_SELF"],'s.town','',$param,'',$sortfield,$sortorder);
|
||||||
if (! empty($arrayfields['s.zip']['checked'])) print_liste_field_titre($arrayfields['s.zip']['label'],$_SERVER["PHP_SELF"],'s.zip','',$param,'',$sortfield,$sortorder);
|
if (! empty($arrayfields['s.zip']['checked'])) print_liste_field_titre($arrayfields['s.zip']['label'],$_SERVER["PHP_SELF"],'s.zip','',$param,'',$sortfield,$sortorder);
|
||||||
if (! empty($arrayfields['state.nom']['checked'])) print_liste_field_titre($arrayfields['state.nom']['label'],$_SERVER["PHP_SELF"],"state.nom","",$param,'',$sortfield,$sortorder);
|
if (! empty($arrayfields['state.nom']['checked'])) print_liste_field_titre($arrayfields['state.nom']['label'],$_SERVER["PHP_SELF"],"state.nom","",$param,'',$sortfield,$sortorder);
|
||||||
@ -621,6 +633,10 @@ if ($resql)
|
|||||||
{
|
{
|
||||||
print '<td><a href="../comm/card.php?socid='.$obj->socid.'">'.img_object($langs->trans("ShowCompany"),"company").' '.$obj->name.'</a></td>';
|
print '<td><a href="../comm/card.php?socid='.$obj->socid.'">'.img_object($langs->trans("ShowCompany"),"company").' '.$obj->name.'</a></td>';
|
||||||
}
|
}
|
||||||
|
if (! empty($arrayfields['s.email']['checked']))
|
||||||
|
{
|
||||||
|
print '<td>'.$obj->email.'</td>';
|
||||||
|
}
|
||||||
// Town
|
// Town
|
||||||
if (! empty($arrayfields['s.town']['checked']))
|
if (! empty($arrayfields['s.town']['checked']))
|
||||||
{
|
{
|
||||||
|
|||||||
@ -104,7 +104,7 @@ if (! $error && $massaction == 'confirm_presend')
|
|||||||
if (empty($receiver) || $receiver == '-1') $receiver=array();
|
if (empty($receiver) || $receiver == '-1') $receiver=array();
|
||||||
else $receiver=array($receiver);
|
else $receiver=array($receiver);
|
||||||
}
|
}
|
||||||
if (count($receiver) == 0 && count($listofobjectthirdparties) == 1) // if only one recipient, receiver is mandatory
|
if (! trim($_POST['sendto']) && count($receiver) == 0 && count($listofobjectthirdparties) == 1) // if only one recipient, receiver is mandatory
|
||||||
{
|
{
|
||||||
$error++;
|
$error++;
|
||||||
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Recipient")), null, 'warnings');
|
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Recipient")), null, 'warnings');
|
||||||
@ -322,15 +322,29 @@ if (! $error && $massaction == 'confirm_presend')
|
|||||||
if ($objectclass == 'CommandeFournisseur') $sendtocc = (empty($conf->global->MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO)?'':$conf->global->MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO);
|
if ($objectclass == 'CommandeFournisseur') $sendtocc = (empty($conf->global->MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO)?'':$conf->global->MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO);
|
||||||
if ($objectclass == 'FactureFournisseur') $sendtocc = (empty($conf->global->MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO)?'':$conf->global->MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO);
|
if ($objectclass == 'FactureFournisseur') $sendtocc = (empty($conf->global->MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO)?'':$conf->global->MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO);
|
||||||
|
|
||||||
$objecttmp=new $objectclass($db);
|
// $listofqualifiedid is array with key = object id of qualified objects for the current thirdparty
|
||||||
$objecttmp->thirdparty = $thirdparty;
|
$oneemailperrecipient=(GETPOST('oneemailperrecipient')=='on'?1:0);
|
||||||
|
$looparray=array();
|
||||||
|
if (! $oneemailperrecipient)
|
||||||
|
{
|
||||||
|
$looparray = $listofqualifiedid;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$objectforloop=new $objectclass($db);
|
||||||
|
$objectforloop->thirdparty = $thirdparty;
|
||||||
|
$looparray[0]=$objectforloop;
|
||||||
|
}
|
||||||
|
//var_dump($looparray);exit;
|
||||||
|
|
||||||
|
foreach ($looparray as $objecttmp) // $objecttmp is a real object or an empty if we choose to send one email per thirdparty instead of per record
|
||||||
|
{
|
||||||
// Make substitution in email content
|
// Make substitution in email content
|
||||||
$substitutionarray=getCommonSubstitutionArray($langs, 0, null, $objecttmp);
|
$substitutionarray=getCommonSubstitutionArray($langs, 0, null, $objecttmp);
|
||||||
$substitutionarray['__ID__'] = join(', ',array_keys($listofqualifiedid));
|
$substitutionarray['__ID__'] = ($oneemailperrecipient ? join(', ',array_keys($listofqualifiedid)) : $objecttmp->id);
|
||||||
|
$substitutionarray['__REF__'] = ($oneemailperrecipient ? join(', ',$listofqualifiedref) : $objecttmp->ref);
|
||||||
$substitutionarray['__EMAIL__'] = $thirdparty->email;
|
$substitutionarray['__EMAIL__'] = $thirdparty->email;
|
||||||
$substitutionarray['__CHECK_READ__'] = '<img src="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-read.php?tag='.$thirdparty->tag.'&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'" width="1" height="1" style="width:1px;height:1px" border="0"/>';
|
$substitutionarray['__CHECK_READ__'] = '<img src="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-read.php?tag='.$thirdparty->tag.'&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'" width="1" height="1" style="width:1px;height:1px" border="0"/>';
|
||||||
$substitutionarray['__REF__'] = join(', ',$listofqualifiedref);
|
|
||||||
|
|
||||||
$parameters=array('mode'=>'formemail');
|
$parameters=array('mode'=>'formemail');
|
||||||
complete_substitutions_array($substitutionarray, $langs, $objecttmp, $parameters);
|
complete_substitutions_array($substitutionarray, $langs, $objecttmp, $parameters);
|
||||||
@ -432,6 +446,7 @@ if (! $error && $massaction == 'confirm_presend')
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$resaction.=($resaction?'<br>':$resaction);
|
$resaction.=($resaction?'<br>':$resaction);
|
||||||
$resaction.='<strong>'.$langs->trans("ResultOfMailSending").':</strong><br>'."\n";
|
$resaction.='<strong>'.$langs->trans("ResultOfMailSending").':</strong><br>'."\n";
|
||||||
|
|||||||
@ -18,8 +18,8 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* \file htdocs/core/actions_sendmails.inc.php
|
* \file htdocs/core/actions_sendmails.inc.php
|
||||||
* \brief Code for actions on sending mails from object page
|
* \brief Code for actions on sending mails from object page
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// $mysoc must be defined
|
// $mysoc must be defined
|
||||||
// $id must be defined
|
// $id must be defined
|
||||||
@ -113,13 +113,18 @@ if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_PO
|
|||||||
$result=$object->fetch($id);
|
$result=$object->fetch($id);
|
||||||
|
|
||||||
$sendtosocid=0; // Thirdparty on object
|
$sendtosocid=0; // Thirdparty on object
|
||||||
if (method_exists($object,"fetch_thirdparty") && $object->element != 'societe')
|
if (method_exists($object,"fetch_thirdparty") && ! in_array($object->element, array('societe','member')))
|
||||||
{
|
{
|
||||||
$result=$object->fetch_thirdparty();
|
$result=$object->fetch_thirdparty();
|
||||||
if ($object->element == 'user' && $result == 0) $result=1; // Even if not found, we consider ok
|
if ($object->element == 'user' && $result == 0) $result=1; // Even if not found, we consider ok
|
||||||
$thirdparty=$object->thirdparty;
|
$thirdparty=$object->thirdparty;
|
||||||
$sendtosocid=$thirdparty->id;
|
$sendtosocid=$thirdparty->id;
|
||||||
}
|
}
|
||||||
|
else if ($object->element == 'member')
|
||||||
|
{
|
||||||
|
$thirdparty=$object;
|
||||||
|
if ($thirdparty->id > 0) $sendtosocid=$thirdparty->id;
|
||||||
|
}
|
||||||
else if ($object->element == 'societe')
|
else if ($object->element == 'societe')
|
||||||
{
|
{
|
||||||
$thirdparty=$object;
|
$thirdparty=$object;
|
||||||
@ -348,18 +353,6 @@ if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_PO
|
|||||||
$substitutionarray=getCommonSubstitutionArray($langs, 0, null, $object);
|
$substitutionarray=getCommonSubstitutionArray($langs, 0, null, $object);
|
||||||
$substitutionarray['__EMAIL__'] = $sendto;
|
$substitutionarray['__EMAIL__'] = $sendto;
|
||||||
$substitutionarray['__CHECK_READ__'] = (is_object($object) && is_object($object->thirdparty))?'<img src="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-read.php?tag='.$object->thirdparty->tag.'&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'" width="1" height="1" style="width:1px;height:1px" border="0"/>':'';
|
$substitutionarray['__CHECK_READ__'] = (is_object($object) && is_object($object->thirdparty))?'<img src="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-read.php?tag='.$object->thirdparty->tag.'&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'" width="1" height="1" style="width:1px;height:1px" border="0"/>':'';
|
||||||
// Add specific substitution for contracts
|
|
||||||
if (is_object($object) && $object->element == 'contrat' && is_array($object->lines))
|
|
||||||
{
|
|
||||||
$datenextexpiration='';
|
|
||||||
foreach($object->lines as $line)
|
|
||||||
{
|
|
||||||
if ($line->statut != 4) continue;
|
|
||||||
if ($line->date_fin_prevue > $datenextexpiration) $datenextexpiration = $line->date_fin_prevue;
|
|
||||||
}
|
|
||||||
$substitutionarray['__CONTRACT_NEXT_EXPIRATION_DATE__'] = dol_print_date($datenextexpiration, 'dayrfc');
|
|
||||||
$substitutionarray['__CONTRACT_NEXT_EXPIRATION_DATETIME__'] = dol_print_date($datenextexpiration, 'standard');
|
|
||||||
}
|
|
||||||
|
|
||||||
$parameters=array('mode'=>'formemail');
|
$parameters=array('mode'=>'formemail');
|
||||||
complete_substitutions_array($substitutionarray, $langs, $object, $parameters);
|
complete_substitutions_array($substitutionarray, $langs, $object, $parameters);
|
||||||
@ -367,6 +360,12 @@ if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_PO
|
|||||||
$subject=make_substitutions($subject, $substitutionarray);
|
$subject=make_substitutions($subject, $substitutionarray);
|
||||||
$message=make_substitutions($message, $substitutionarray);
|
$message=make_substitutions($message, $substitutionarray);
|
||||||
|
|
||||||
|
if (method_exists($object, 'makeSubstitution'))
|
||||||
|
{
|
||||||
|
$subject = $object->makeSubstitution($subject);
|
||||||
|
$message = $object->makeSubstitution($message);
|
||||||
|
}
|
||||||
|
|
||||||
// Send mail (substitutionarray must be done just before this)
|
// Send mail (substitutionarray must be done just before this)
|
||||||
if (empty($sendcontext)) $sendcontext = 'standard';
|
if (empty($sendcontext)) $sendcontext = 'standard';
|
||||||
$mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,$sendtobcc,$deliveryreceipt,-1,'','',$trackid,'', $sendcontext);
|
$mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,$sendtobcc,$deliveryreceipt,-1,'','',$trackid,'', $sendcontext);
|
||||||
@ -482,7 +481,7 @@ if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_PO
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
$langs->load("other");
|
$langs->load("other");
|
||||||
setEventMessages($langs->trans('ErrorFailedToReadEntity',$object->element), null, 'errors');
|
setEventMessages($langs->trans('ErrorFailedToReadObject',$object->element), null, 'errors');
|
||||||
dol_syslog('Failed to read data of object id='.$object->id.' element='.$object->element);
|
dol_syslog('Failed to read data of object id='.$object->id.' element='.$object->element);
|
||||||
$action = 'presend';
|
$action = 'presend';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1708,7 +1708,7 @@ class ExtraFields
|
|||||||
if (! empty($onlykey) && $key != $onlykey) continue;
|
if (! empty($onlykey) && $key != $onlykey) continue;
|
||||||
|
|
||||||
$key_type = $this->attribute_type[$key];
|
$key_type = $this->attribute_type[$key];
|
||||||
if($this->attribute_required[$key] && !GETPOST("options_$key",2))
|
if ($this->attribute_required[$key] && empty($_POST["options_".$key])) // Check if empty without GETPOST, value can be alpha, int, array, etc...
|
||||||
{
|
{
|
||||||
$nofillrequired++;
|
$nofillrequired++;
|
||||||
$error_field_required[] = $value;
|
$error_field_required[] = $value;
|
||||||
@ -1721,7 +1721,7 @@ class ExtraFields
|
|||||||
}
|
}
|
||||||
else if (in_array($key_type,array('checkbox','chkbxlst')))
|
else if (in_array($key_type,array('checkbox','chkbxlst')))
|
||||||
{
|
{
|
||||||
$value_arr=GETPOST("options_".$key);
|
$value_arr=GETPOST("options_".$key, 'array'); // check if an array
|
||||||
if (!empty($value_arr)) {
|
if (!empty($value_arr)) {
|
||||||
$value_key=implode($value_arr,',');
|
$value_key=implode($value_arr,',');
|
||||||
}else {
|
}else {
|
||||||
@ -1740,7 +1740,7 @@ class ExtraFields
|
|||||||
$object->array_options["options_".$key]=$value_key;
|
$object->array_options["options_".$key]=$value_key;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($nofillrequired) {
|
if ($nofillrequired) {
|
||||||
$langs->load('errors');
|
$langs->load('errors');
|
||||||
setEventMessages($langs->trans('ErrorFieldsRequired').' : '.implode(', ',$error_field_required), null, 'errors');
|
setEventMessages($langs->trans('ErrorFieldsRequired').' : '.implode(', ',$error_field_required), null, 'errors');
|
||||||
return -1;
|
return -1;
|
||||||
|
|||||||
@ -2991,9 +2991,11 @@ class Form
|
|||||||
* @param string $htmlname Nom de la zone select
|
* @param string $htmlname Nom de la zone select
|
||||||
* @param int $filtertype Not used
|
* @param int $filtertype Not used
|
||||||
* @param int $addempty Add an empty entry
|
* @param int $addempty Add an empty entry
|
||||||
|
* @param int $noadmininfo 0=Add admin info, 1=Disable admin info
|
||||||
|
* @param string $morecss Add more CSS on select tag
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
function select_conditions_paiements($selected=0, $htmlname='condid', $filtertype=-1, $addempty=0)
|
function select_conditions_paiements($selected=0, $htmlname='condid', $filtertype=-1, $addempty=0, $noinfoadmin=0, $morecss='')
|
||||||
{
|
{
|
||||||
global $langs, $user, $conf;
|
global $langs, $user, $conf;
|
||||||
|
|
||||||
@ -3004,7 +3006,7 @@ class Form
|
|||||||
// Set default value if not already set by caller
|
// Set default value if not already set by caller
|
||||||
if (empty($selected) && ! empty($conf->global->MAIN_DEFAULT_PAYMENT_TERM_ID)) $selected = $conf->global->MAIN_DEFAULT_PAYMENT_TERM_ID;
|
if (empty($selected) && ! empty($conf->global->MAIN_DEFAULT_PAYMENT_TERM_ID)) $selected = $conf->global->MAIN_DEFAULT_PAYMENT_TERM_ID;
|
||||||
|
|
||||||
print '<select class="flat" name="'.$htmlname.'">';
|
print '<select id="'.$htmlname.'" class="flat selectpaymentterms'.($morecss?' '.$morecss:'').'" name="'.$htmlname.'">';
|
||||||
if ($addempty) print '<option value="0"> </option>';
|
if ($addempty) print '<option value="0"> </option>';
|
||||||
foreach($this->cache_conditions_paiements as $id => $arrayconditions)
|
foreach($this->cache_conditions_paiements as $id => $arrayconditions)
|
||||||
{
|
{
|
||||||
@ -3020,7 +3022,7 @@ class Form
|
|||||||
print '</option>';
|
print '</option>';
|
||||||
}
|
}
|
||||||
print '</select>';
|
print '</select>';
|
||||||
if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"),1);
|
if ($user->admin && empty($noinfoadmin)) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"),1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3035,7 +3037,7 @@ class Form
|
|||||||
* @param int $noadmininfo 0=Add admin info, 1=Disable admin info
|
* @param int $noadmininfo 0=Add admin info, 1=Disable admin info
|
||||||
* @param int $maxlength Max length of label
|
* @param int $maxlength Max length of label
|
||||||
* @param int $active Active or not, -1 = all
|
* @param int $active Active or not, -1 = all
|
||||||
* @param string $morecss Add more css
|
* @param string $morecss Add more CSS on select tag
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
function select_types_paiements($selected='', $htmlname='paiementtype', $filtertype='', $format=0, $empty=0, $noadmininfo=0, $maxlength=0, $active=1, $morecss='')
|
function select_types_paiements($selected='', $htmlname='paiementtype', $filtertype='', $format=0, $empty=0, $noadmininfo=0, $maxlength=0, $active=1, $morecss='')
|
||||||
@ -5826,7 +5828,7 @@ class Form
|
|||||||
* @param int $useempty 1=Add empty line
|
* @param int $useempty 1=Add empty line
|
||||||
* @return string See option
|
* @return string See option
|
||||||
*/
|
*/
|
||||||
function selectyesno($htmlname,$value='',$option=0,$disabled=false,$useempty='')
|
function selectyesno($htmlname, $value='', $option=0, $disabled=false, $useempty='')
|
||||||
{
|
{
|
||||||
global $langs;
|
global $langs;
|
||||||
|
|
||||||
|
|||||||
@ -152,7 +152,7 @@ class FormActions
|
|||||||
*
|
*
|
||||||
* @param Object $object Object
|
* @param Object $object Object
|
||||||
* @param string $typeelement 'invoice','propal','order','invoice_supplier','order_supplier','fichinter'
|
* @param string $typeelement 'invoice','propal','order','invoice_supplier','order_supplier','fichinter'
|
||||||
* @param int $socid socid of user
|
* @param int $socid Socid of user
|
||||||
* @param int $forceshowtitle Show title even if there is no actions to show
|
* @param int $forceshowtitle Show title even if there is no actions to show
|
||||||
* @param string $morecss More css on table
|
* @param string $morecss More css on table
|
||||||
* @param int $max Max number of record
|
* @param int $max Max number of record
|
||||||
@ -186,6 +186,7 @@ class FormActions
|
|||||||
elseif ($typeelement == 'fichinter') $title=$langs->trans('ActionsOnFicheInter');
|
elseif ($typeelement == 'fichinter') $title=$langs->trans('ActionsOnFicheInter');
|
||||||
elseif ($typeelement == 'project') $title=$langs->trans('LatestLinkedEvents', $max?$max:'');
|
elseif ($typeelement == 'project') $title=$langs->trans('LatestLinkedEvents', $max?$max:'');
|
||||||
elseif ($typeelement == 'task') $title=$langs->trans('LatestLinkedEvents', $max?$max:'');
|
elseif ($typeelement == 'task') $title=$langs->trans('LatestLinkedEvents', $max?$max:'');
|
||||||
|
elseif ($typeelement == 'member') $title=$langs->trans('LatestLinkedEvents', $max?$max:'');
|
||||||
else $title=$langs->trans("Actions");
|
else $title=$langs->trans("Actions");
|
||||||
|
|
||||||
$urlbacktopage=$_SERVER['PHP_SELF'].'?id='.$object->id.($moreparambacktopage?'&'.$moreparambacktopage:'');
|
$urlbacktopage=$_SERVER['PHP_SELF'].'?id='.$object->id.($moreparambacktopage?'&'.$moreparambacktopage:'');
|
||||||
|
|||||||
@ -293,12 +293,16 @@ class FormMail extends Form
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get message template for $this->param["models"] into c_email_templates
|
// Get message template for $this->param["models"] into c_email_templates
|
||||||
|
$arraydefaultmessage=array();
|
||||||
|
if ($this->param['models'] != 'none')
|
||||||
|
{
|
||||||
$model_id=0;
|
$model_id=0;
|
||||||
if (array_key_exists('models_id',$this->param))
|
if (array_key_exists('models_id',$this->param))
|
||||||
{
|
{
|
||||||
$model_id=$this->param["models_id"];
|
$model_id=$this->param["models_id"];
|
||||||
}
|
}
|
||||||
$arraydefaultmessage=$this->getEMailTemplate($this->db, $this->param["models"], $user, $outputlangs, $model_id);
|
$arraydefaultmessage=$this->getEMailTemplate($this->db, $this->param["models"], $user, $outputlangs, $model_id);
|
||||||
|
}
|
||||||
//var_dump($this->param["models"]);
|
//var_dump($this->param["models"]);
|
||||||
//var_dump($model_id);
|
//var_dump($model_id);
|
||||||
//var_dump($arraydefaultmessage);
|
//var_dump($arraydefaultmessage);
|
||||||
@ -325,6 +329,8 @@ class FormMail extends Form
|
|||||||
$out.= '<input type="hidden" id="'.$key.'" name="'.$key.'" value="'.$value.'" />'."\n";
|
$out.= '<input type="hidden" id="'.$key.'" name="'.$key.'" value="'.$value.'" />'."\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->param['models'] != 'none')
|
||||||
|
{
|
||||||
$result = $this->fetchAllEMailTemplate($this->param["models"], $user, $outputlangs);
|
$result = $this->fetchAllEMailTemplate($this->param["models"], $user, $outputlangs);
|
||||||
if ($result < 0)
|
if ($result < 0)
|
||||||
{
|
{
|
||||||
@ -332,16 +338,26 @@ class FormMail extends Form
|
|||||||
}
|
}
|
||||||
$modelmail_array=array();
|
$modelmail_array=array();
|
||||||
foreach($this->lines_model as $line)
|
foreach($this->lines_model as $line)
|
||||||
|
{
|
||||||
|
$langs->trans("members");
|
||||||
|
if (preg_match('/\((.*)\)/', $line->label, $reg))
|
||||||
|
{
|
||||||
|
$modelmail_array[$line->id]=$langs->trans($reg[1]); // langs->trans when label is __(xxx)__
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
$modelmail_array[$line->id]=$line->label;
|
$modelmail_array[$line->id]=$line->label;
|
||||||
|
}
|
||||||
if ($line->lang) $modelmail_array[$line->id].=' ('.$line->lang.')';
|
if ($line->lang) $modelmail_array[$line->id].=' ('.$line->lang.')';
|
||||||
if ($line->private) $modelmail_array[$line->id].=' - '.$langs->trans("Private");
|
if ($line->private) $modelmail_array[$line->id].=' - '.$langs->trans("Private");
|
||||||
//if ($line->fk_user != $user->id) $modelmail_array[$line->id].=' - '.$langs->trans("By").' ';
|
//if ($line->fk_user != $user->id) $modelmail_array[$line->id].=' - '.$langs->trans("By").' ';
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Zone to select its email template
|
// Zone to select email template
|
||||||
if (count($modelmail_array)>0)
|
if (count($modelmail_array)>0)
|
||||||
{
|
{
|
||||||
|
// If list of template is filled
|
||||||
$out.= '<div class="center" style="padding: 0px 0 12px 0">'."\n";
|
$out.= '<div class="center" style="padding: 0px 0 12px 0">'."\n";
|
||||||
$out.= '<span class="opacitymedium">'.$langs->trans('SelectMailModel').':</span> '.$this->selectarray('modelmailselected', $modelmail_array, 0, 1, 0, 0, '', 0, 0, 0, '', 'minwidth100');
|
$out.= '<span class="opacitymedium">'.$langs->trans('SelectMailModel').':</span> '.$this->selectarray('modelmailselected', $modelmail_array, 0, 1, 0, 0, '', 0, 0, 0, '', 'minwidth100');
|
||||||
if ($user->admin) $out.= info_admin($langs->trans("YouCanChangeValuesForThisListFrom", $langs->transnoentitiesnoconv('Setup').' - '.$langs->transnoentitiesnoconv('EMails')),1);
|
if ($user->admin) $out.= info_admin($langs->trans("YouCanChangeValuesForThisListFrom", $langs->transnoentitiesnoconv('Setup').' - '.$langs->transnoentitiesnoconv('EMails')),1);
|
||||||
@ -356,6 +372,7 @@ class FormMail extends Form
|
|||||||
'invoice_supplier_send','thirdparty','contract','all'
|
'invoice_supplier_send','thirdparty','contract','all'
|
||||||
)))
|
)))
|
||||||
{
|
{
|
||||||
|
// If list of template is empty
|
||||||
$out.= '<div class="center" style="padding: 0px 0 12px 0">'."\n";
|
$out.= '<div class="center" style="padding: 0px 0 12px 0">'."\n";
|
||||||
$out.= $langs->trans('SelectMailModel').': <select name="modelmailselected" disabled="disabled"><option value="none">'.$langs->trans("NoTemplateDefined").'</option></select>'; // Do not put 'disabled' on 'option' tag, it is already on 'select' and it makes chrome crazy.
|
$out.= $langs->trans('SelectMailModel').': <select name="modelmailselected" disabled="disabled"><option value="none">'.$langs->trans("NoTemplateDefined").'</option></select>'; // Do not put 'disabled' on 'option' tag, it is already on 'select' and it makes chrome crazy.
|
||||||
if ($user->admin) $out.= info_admin($langs->trans("YouCanChangeValuesForThisListFrom", $langs->transnoentitiesnoconv('Setup').' - '.$langs->transnoentitiesnoconv('EMails')),1);
|
if ($user->admin) $out.= info_admin($langs->trans("YouCanChangeValuesForThisListFrom", $langs->transnoentitiesnoconv('Setup').' - '.$langs->transnoentitiesnoconv('EMails')),1);
|
||||||
@ -495,6 +512,7 @@ class FormMail extends Form
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Note withto may be a text like 'AllRecipientSelected'
|
||||||
$out.= (! is_array($this->withto) && ! is_numeric($this->withto))?$this->withto:"";
|
$out.= (! is_array($this->withto) && ! is_numeric($this->withto))?$this->withto:"";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -524,10 +542,22 @@ class FormMail extends Form
|
|||||||
$out.= "</td></tr>\n";
|
$out.= "</td></tr>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// withoptiononeemailperrecipient
|
||||||
|
if (! empty($this->withoptiononeemailperrecipient))
|
||||||
|
{
|
||||||
|
$out.= '<tr><td>';
|
||||||
|
$out.= $langs->trans("GroupEmails");
|
||||||
|
$out.= '</td><td>';
|
||||||
|
$out.=' <input type="checkbox" name="oneemailperrecipient"'.($this->withoptiononeemailperrecipient > 0?' checked="checked"':'').'> ';
|
||||||
|
$out.= $langs->trans("OneEmailPerRecipient").' - ';
|
||||||
|
$out.= $langs->trans("WarningIfYouCheckOneRecipientPerEmail");
|
||||||
|
$out.= '</td></tr>';
|
||||||
|
}
|
||||||
|
|
||||||
// CC
|
// CC
|
||||||
if (! empty($this->withtocc) || is_array($this->withtocc))
|
if (! empty($this->withtocc) || is_array($this->withtocc))
|
||||||
{
|
{
|
||||||
$out.= '<tr><td width="180">';
|
$out.= '<tr><td>';
|
||||||
$out.= $form->textwithpicto($langs->trans("MailCC"),$langs->trans("YouCanUseCommaSeparatorForSeveralRecipients"));
|
$out.= $form->textwithpicto($langs->trans("MailCC"),$langs->trans("YouCanUseCommaSeparatorForSeveralRecipients"));
|
||||||
$out.= '</td><td>';
|
$out.= '</td><td>';
|
||||||
if ($this->withtoccreadonly)
|
if ($this->withtoccreadonly)
|
||||||
@ -556,7 +586,7 @@ class FormMail extends Form
|
|||||||
// CCC
|
// CCC
|
||||||
if (! empty($this->withtoccc) || is_array($this->withtoccc))
|
if (! empty($this->withtoccc) || is_array($this->withtoccc))
|
||||||
{
|
{
|
||||||
$out.= '<tr><td width="180">';
|
$out.= '<tr><td>';
|
||||||
$out.= $form->textwithpicto($langs->trans("MailCCC"),$langs->trans("YouCanUseCommaSeparatorForSeveralRecipients"));
|
$out.= $form->textwithpicto($langs->trans("MailCCC"),$langs->trans("YouCanUseCommaSeparatorForSeveralRecipients"));
|
||||||
$out.= '</td><td>';
|
$out.= '</td><td>';
|
||||||
if (! empty($this->withtocccreadonly))
|
if (! empty($this->withtocccreadonly))
|
||||||
@ -624,7 +654,7 @@ class FormMail extends Form
|
|||||||
// Ask delivery receipt
|
// Ask delivery receipt
|
||||||
if (! empty($this->withdeliveryreceipt))
|
if (! empty($this->withdeliveryreceipt))
|
||||||
{
|
{
|
||||||
$out.= '<tr><td width="180">'.$langs->trans("DeliveryReceipt").'</td><td>';
|
$out.= '<tr><td>'.$langs->trans("DeliveryReceipt").'</td><td>';
|
||||||
|
|
||||||
if (! empty($this->withdeliveryreceiptreadonly))
|
if (! empty($this->withdeliveryreceiptreadonly))
|
||||||
{
|
{
|
||||||
@ -656,7 +686,7 @@ class FormMail extends Form
|
|||||||
$defaulttopic=make_substitutions($defaulttopic,$this->substit);
|
$defaulttopic=make_substitutions($defaulttopic,$this->substit);
|
||||||
|
|
||||||
$out.= '<tr>';
|
$out.= '<tr>';
|
||||||
$out.= '<td class="fieldrequired" width="180">'.$langs->trans("MailTopic").'</td>';
|
$out.= '<td class="fieldrequired">'.$langs->trans("MailTopic").'</td>';
|
||||||
$out.= '<td>';
|
$out.= '<td>';
|
||||||
if ($this->withtopicreadonly)
|
if ($this->withtopicreadonly)
|
||||||
{
|
{
|
||||||
@ -674,7 +704,7 @@ class FormMail extends Form
|
|||||||
if (! empty($this->withfile))
|
if (! empty($this->withfile))
|
||||||
{
|
{
|
||||||
$out.= '<tr>';
|
$out.= '<tr>';
|
||||||
$out.= '<td width="180">'.$langs->trans("MailFile").'</td>';
|
$out.= '<td>'.$langs->trans("MailFile").'</td>';
|
||||||
|
|
||||||
$out.= '<td>';
|
$out.= '<td>';
|
||||||
if (! empty($this->withmaindocfile))
|
if (! empty($this->withmaindocfile))
|
||||||
@ -764,13 +794,14 @@ class FormMail extends Form
|
|||||||
$typeforonlinepayment='free';
|
$typeforonlinepayment='free';
|
||||||
if ($this->param["models"]=='order_send') $typeforonlinepayment='order'; // TODO use detection on something else than template
|
if ($this->param["models"]=='order_send') $typeforonlinepayment='order'; // TODO use detection on something else than template
|
||||||
if ($this->param["models"]=='facture_send') $typeforonlinepayment='invoice'; // TODO use detection on something else than template
|
if ($this->param["models"]=='facture_send') $typeforonlinepayment='invoice'; // TODO use detection on something else than template
|
||||||
|
if ($this->param["models"]=='member_send') $typeforonlinepayment='member'; // TODO use detection on something else than template
|
||||||
$url=getOnlinePaymentUrl(0, $typeforonlinepayment, $this->substit['__REF__']);
|
$url=getOnlinePaymentUrl(0, $typeforonlinepayment, $this->substit['__REF__']);
|
||||||
//$paymenturl=str_replace('\n',"\n",$langs->transnoentitiesnoconv("PredefinedMailContentLink",$url));
|
//$paymenturl=str_replace('\n',"\n",$langs->transnoentitiesnoconv("PredefinedMailContentLink",$url));
|
||||||
$paymenturl=$url;
|
$paymenturl=$url;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->substit['__PERSONALIZED__']=$paymenturl;
|
$this->substit['__PERSONALIZED__']=$paymenturl; // deprecated
|
||||||
$this->substit['__ONLINE_PAYMENT_URL__']='YY'.$paymenturl;
|
$this->substit['__ONLINE_PAYMENT_URL__']=$paymenturl;
|
||||||
|
|
||||||
//Add lines substitution key from each line
|
//Add lines substitution key from each line
|
||||||
$lines = '';
|
$lines = '';
|
||||||
@ -804,7 +835,7 @@ class FormMail extends Form
|
|||||||
}
|
}
|
||||||
|
|
||||||
$out.= '<tr>';
|
$out.= '<tr>';
|
||||||
$out.= '<td width="180" valign="top">'.$langs->trans("MailText").'</td>';
|
$out.= '<td valign="top">'.$langs->trans("MailText").'</td>';
|
||||||
$out.= '<td>';
|
$out.= '<td>';
|
||||||
if ($this->withbodyreadonly)
|
if ($this->withbodyreadonly)
|
||||||
{
|
{
|
||||||
@ -999,7 +1030,7 @@ class FormMail extends Form
|
|||||||
$sql = "SELECT rowid, label, topic, content, content_lines, lang, fk_user, private, position";
|
$sql = "SELECT rowid, label, topic, content, content_lines, lang, fk_user, private, position";
|
||||||
$sql.= " FROM ".MAIN_DB_PREFIX.'c_email_templates';
|
$sql.= " FROM ".MAIN_DB_PREFIX.'c_email_templates';
|
||||||
$sql.= " WHERE type_template IN ('".$this->db->escape($type_template)."', 'all')";
|
$sql.= " WHERE type_template IN ('".$this->db->escape($type_template)."', 'all')";
|
||||||
$sql.= " AND entity IN (".getEntity('c_email_templates', 0).")";
|
$sql.= " AND entity IN (".getEntity('c_email_templates', 1).")";
|
||||||
$sql.= " AND (private = 0 OR fk_user = ".$user->id.")"; // See all public templates or templates I own.
|
$sql.= " AND (private = 0 OR fk_user = ".$user->id.")"; // See all public templates or templates I own.
|
||||||
if ($active >= 0) $sql.=" AND active = ".$active;
|
if ($active >= 0) $sql.=" AND active = ".$active;
|
||||||
//if (is_object($outputlangs)) $sql.= " AND (lang = '".$outputlangs->defaultlang."' OR lang IS NULL OR lang = '')"; // Return all languages
|
//if (is_object($outputlangs)) $sql.= " AND (lang = '".$outputlangs->defaultlang."' OR lang IS NULL OR lang = '')"; // Return all languages
|
||||||
@ -1038,8 +1069,7 @@ class FormMail extends Form
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set substit array from object. This is call when suggesting the email template into forms to send email.
|
* Set substit array from object. This is call when suggesting the email template into forms before sending email.
|
||||||
* TODO Replace with getCommonSubstitutionArray with param onlykey = 2
|
|
||||||
*
|
*
|
||||||
* @param CommonObject $object Object to use
|
* @param CommonObject $object Object to use
|
||||||
* @param Translate $outputlangs Object lang
|
* @param Translate $outputlangs Object lang
|
||||||
@ -1049,34 +1079,12 @@ class FormMail extends Form
|
|||||||
function setSubstitFromObject($object, $outputlangs=null)
|
function setSubstitFromObject($object, $outputlangs=null)
|
||||||
{
|
{
|
||||||
global $conf, $user;
|
global $conf, $user;
|
||||||
$this->substit['__REF__'] = $object->ref;
|
|
||||||
$this->substit['__REFCLIENT__'] = isset($object->ref_client) ? $object->ref_client : (isset($object->ref_customer) ? $object->ref_customer : '');
|
|
||||||
$this->substit['__REFSUPPLIER__'] = isset($object->ref_supplier) ? $object->ref_supplier : '';
|
|
||||||
|
|
||||||
$this->substit['__DATE_YMD__'] = isset($object->date) ? dol_print_date($object->date, 'day', 0, $outputlangs) : '';
|
$parameters=array('mode'=>$mode);
|
||||||
$this->substit['__DATE_DUE_YMD__'] = isset($object->date_lim_reglement)? dol_print_date($object->date_lim_reglement, 'day', 0, $outputlangs) : '';
|
$tmparray=getCommonSubstitutionArray($outputlangs, 0, null, $object);
|
||||||
$this->substit['__AMOUNT__'] = price($object->total_ttc);
|
complete_substitutions_array($tmparray, $outputlangs, null, $parameters);
|
||||||
$this->substit['__AMOUNT_WO_TAX__'] = price($object->total_ht);
|
|
||||||
$this->substit['__AMOUNT_VAT__'] = price($object->total_tva);
|
|
||||||
|
|
||||||
$this->substit['__THIRDPARTY_ID__'] = (is_object($object->thirdparty)?$object->thirdparty->id:'');
|
$this->substit=$tmparray;
|
||||||
$this->substit['__THIRDPARTY_NAME__'] = (is_object($object->thirdparty)?$object->thirdparty->name:'');
|
|
||||||
|
|
||||||
$this->substit['__PROJECT_ID__'] = (is_object($object->projet)?$object->projet->id:'');
|
|
||||||
$this->substit['__PROJECT_REF__'] = (is_object($object->projet)?$object->projet->ref:'');
|
|
||||||
$this->substit['__PROJECT_NAME__'] = (is_object($object->projet)?$object->projet->title:'');
|
|
||||||
|
|
||||||
$this->substit['__SIGNATURE__'] = $user->signature;
|
|
||||||
$this->substit['__PERSONALIZED__'] = '';
|
|
||||||
$this->substit['__CONTACTCIVNAME__'] = ''; // Will be replace just before sending
|
|
||||||
|
|
||||||
// Create dynamic tags for __EXTRAFIELD_FIELD__
|
|
||||||
$extrafields = new ExtraFields($this->db);
|
|
||||||
$extralabels = $extrafields->fetch_name_optionals_label($object->table_element, true);
|
|
||||||
$object->fetch_optionals($object->id, $extralabels);
|
|
||||||
foreach ($extrafields->attribute_label as $key => $label) {
|
|
||||||
$this->substit['__EXTRAFIELD_' . strtoupper($key) . '__'] = $object->array_options['options_' . $key];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fill substit_lines with each object lines content
|
// Fill substit_lines with each object lines content
|
||||||
if (is_array($object->lines))
|
if (is_array($object->lines))
|
||||||
@ -1094,7 +1102,7 @@ class FormMail extends Form
|
|||||||
'__QUANTITY__' => $line->qty,
|
'__QUANTITY__' => $line->qty,
|
||||||
'__SUBPRICE__' => price($line->subprice),
|
'__SUBPRICE__' => price($line->subprice),
|
||||||
'__AMOUNT__' => price($line->total_ttc),
|
'__AMOUNT__' => price($line->total_ttc),
|
||||||
'__AMOUNT_WO_TAX__' => price($line->total_ht),
|
'__AMOUNT_EXCL_TAX__' => price($line->total_ht),
|
||||||
//'__PRODUCT_EXTRAFIELD_FIELD__' Done dinamically just after
|
//'__PRODUCT_EXTRAFIELD_FIELD__' Done dinamically just after
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -1127,54 +1135,43 @@ class FormMail extends Form
|
|||||||
{
|
{
|
||||||
global $conf, $langs;
|
global $conf, $langs;
|
||||||
|
|
||||||
$vars=array();
|
|
||||||
|
|
||||||
if ($mode == 'formemail' || $mode == 'formemailwithlines' || $mode == 'formemailforlines')
|
if ($mode == 'formemail' || $mode == 'formemailwithlines' || $mode == 'formemailforlines')
|
||||||
{
|
{
|
||||||
$vars=array(
|
$parameters=array('mode'=>$mode);
|
||||||
'__REF__'=>'__REF__',
|
$tmparray=getCommonSubstitutionArray($langs, 2, null, $object); // Note: On email templated edition, this is null because it is related to all type of objects
|
||||||
'__REFCLIENT__'=>'__REFCLIENT__',
|
complete_substitutions_array($tmparray, $langs, null, $parameters);
|
||||||
'__REFSUPPLIER__'=>'__REFSUPPLIER__',
|
|
||||||
'__THIRDPARTY_ID__'=>'__THIRDPARTY_ID__',
|
|
||||||
'__THIRDPARTY_NAME__'=>'__THIRDPARTY_NAME__',
|
|
||||||
'__PROJECT_ID__'=>'__PROJECT_ID__',
|
|
||||||
'__PROJECT_REF__'=>'__PROJECT_REF__',
|
|
||||||
'__PROJECT_NAME__'=>'__PROJECT_NAME__',
|
|
||||||
'__CONTACTCIVNAME__'=>'__CONTACTCIVNAME__',
|
|
||||||
'__AMOUNT__'=>'__AMOUNT__',
|
|
||||||
'__AMOUNT_WO_TAX__'=>'__AMOUNT_WO_TAX__',
|
|
||||||
'__AMOUNT_VAT__'=>'__AMOUNT_VAT__',
|
|
||||||
'__PERSONALIZED__'=>'__PERSONALIZED__', // Paypal link will be added here in form mode
|
|
||||||
'__SIGNATURE__'=>'__SIGNATURE__',
|
|
||||||
);
|
|
||||||
if ($mode == 'formwithlines')
|
if ($mode == 'formwithlines')
|
||||||
{
|
{
|
||||||
$vars[] = '__LINES__'; // Will be set by the get_form function
|
$tmparray['__LINES__'] = '__LINES__'; // Will be set by the get_form function
|
||||||
}
|
}
|
||||||
if ($mode == 'formforlines')
|
if ($mode == 'formforlines')
|
||||||
{
|
{
|
||||||
$vars[] = '__QUANTITY__'; // Will be set by the get_form function
|
$tmparray['__QUANTITY__'] = '__QUANTITY__'; // Will be set by the get_form function
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($mode == 'emailing')
|
if ($mode == 'emailing')
|
||||||
{
|
{
|
||||||
|
$parameters=array('mode'=>$mode);
|
||||||
|
$tmparray=getCommonSubstitutionArray($langs, 2, array('object','objectamount'), $object); // Note: On email templated edition, this is null because it is related to all type of objects
|
||||||
|
complete_substitutions_array($tmparray, $langs, null, $parameters);
|
||||||
|
|
||||||
// For mass emailing, we have different keys
|
// For mass emailing, we have different keys
|
||||||
$vars=array(
|
$tmparray['__ID__'] = 'IdRecord';
|
||||||
'__ID__' => 'IdRecord',
|
$tmparray['__EMAIL__'] = 'EMailRecipient';
|
||||||
'__EMAIL__' => 'EMailRecipient',
|
$tmparray['__LASTNAME__'] = 'Lastname';
|
||||||
'__LASTNAME__' => 'Lastname',
|
$tmparray['__FIRSTNAME__'] = 'Firstname';
|
||||||
'__FIRSTNAME__' => 'Firstname',
|
$tmparray['__MAILTOEMAIL__'] = 'TagMailtoEmail';
|
||||||
'__MAILTOEMAIL__' => 'TagMailtoEmail',
|
$tmparray['__OTHER1__'] = 'Other1';
|
||||||
'__OTHER1__' => 'Other1',
|
$tmparray['__OTHER2__'] = 'Other2';
|
||||||
'__OTHER2__' => 'Other2',
|
$tmparray['__OTHER3__'] = 'Other3';
|
||||||
'__OTHER3__' => 'Other3',
|
$tmparray['__OTHER4__'] = 'Other4';
|
||||||
'__OTHER4__' => 'Other4',
|
$tmparray['__OTHER5__'] = 'Other5';
|
||||||
'__OTHER5__' => 'Other5',
|
$tmparray['__SIGNATURE__'] = 'TagSignature';
|
||||||
'__SIGNATURE__' => 'TagSignature',
|
$tmparray['__CHECK_READ__'] = 'TagCheckMail';
|
||||||
'__CHECK_READ__' => 'TagCheckMail',
|
$tmparray['__UNSUBSCRIBE__'] = 'TagUnsubscribe';
|
||||||
'__UNSUBSCRIBE__' => 'TagUnsubscribe'
|
|
||||||
//,'__PERSONALIZED__' => 'Personalized' // Hidden because not used yet in mass emailing
|
//,'__PERSONALIZED__' => 'Personalized' // Hidden because not used yet in mass emailing
|
||||||
);
|
|
||||||
|
|
||||||
$onlinepaymentenabled = 0;
|
$onlinepaymentenabled = 0;
|
||||||
if (! empty($conf->paypal->enabled)) $onlinepaymentenabled++;
|
if (! empty($conf->paypal->enabled)) $onlinepaymentenabled++;
|
||||||
@ -1182,13 +1179,13 @@ class FormMail extends Form
|
|||||||
if (! empty($conf->stripe->enabled)) $onlinepaymentenabled++;
|
if (! empty($conf->stripe->enabled)) $onlinepaymentenabled++;
|
||||||
if ($onlinepaymentenabled && ! empty($conf->global->PAYMENT_SECURITY_TOKEN))
|
if ($onlinepaymentenabled && ! empty($conf->global->PAYMENT_SECURITY_TOKEN))
|
||||||
{
|
{
|
||||||
$vars['__SECUREKEYPAYMENT__']=$conf->global->PAYMENT_SECURITY_TOKEN;
|
$tmparray['__SECUREKEYPAYMENT__']=$conf->global->PAYMENT_SECURITY_TOKEN;
|
||||||
if (! empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE))
|
if (! empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE))
|
||||||
{
|
{
|
||||||
if ($conf->adherent->enabled) $vars['__SECUREKEYPAYMENT_MEMBER__']='SecureKeyPAYMENTUniquePerMember';
|
if ($conf->adherent->enabled) $tmparray['__SECUREKEYPAYMENT_MEMBER__']='SecureKeyPAYMENTUniquePerMember';
|
||||||
if ($conf->facture->enabled) $vars['__SECUREKEYPAYMENT_INVOICE__']='SecureKeyPAYMENTUniquePerInvoice';
|
if ($conf->facture->enabled) $tmparray['__SECUREKEYPAYMENT_INVOICE__']='SecureKeyPAYMENTUniquePerInvoice';
|
||||||
if ($conf->commande->enabled) $vars['__SECUREKEYPAYMENT_ORDER__']='SecureKeyPAYMENTUniquePerOrder';
|
if ($conf->commande->enabled) $tmparray['__SECUREKEYPAYMENT_ORDER__']='SecureKeyPAYMENTUniquePerOrder';
|
||||||
if ($conf->contrat->enabled) $vars['__SECUREKEYPAYMENT_CONTRACTLINE__']='SecureKeyPAYMENTUniquePerContractLine';
|
if ($conf->contrat->enabled) $tmparray['__SECUREKEYPAYMENT_CONTRACTLINE__']='SecureKeyPAYMENTUniquePerContractLine';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1201,36 +1198,16 @@ class FormMail extends Form
|
|||||||
$vars['__SECUREKEYPAYMENT_CONTRACTLINE__']='';
|
$vars['__SECUREKEYPAYMENT_CONTRACTLINE__']='';
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
// Old vars removed from doc
|
|
||||||
/*
|
|
||||||
if (! empty($conf->paypal->enabled) && ! empty($conf->global->PAYPAL_SECURITY_TOKEN))
|
|
||||||
{
|
|
||||||
$vars['__SECUREKEYPAYPAL__']='SecureKeyPaypal';
|
|
||||||
if (! empty($conf->global->PAYPAL_SECURITY_TOKEN_UNIQUE))
|
|
||||||
{
|
|
||||||
if ($conf->adherent->enabled) $vars['__SECUREKEYPAYPAL_MEMBER__']='SecureKeyPaypalUniquePerMember';
|
|
||||||
if ($conf->facture->enabled) $vars['__SECUREKEYPAYPAL_INVOICE__']='SecureKeyPaypalUniquePerInvoice';
|
|
||||||
if ($conf->commande->enabled) $vars['__SECUREKEYPAYPAL_ORDER__']='SecureKeyPaypalUniquePerOrder';
|
|
||||||
if ($conf->contrat->enabled) $vars['__SECUREKEYPAYPAL_CONTRACTLINE__']='SecureKeyPaypalUniquePerContractLine';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$vars['__SECUREKEYPAYPAL__']='';
|
|
||||||
$vars['__SECUREKEYPAYPAL_MEMBER__']='';
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$parameters=array('mode'=>$mode);
|
$tmparray['__(AnyTranslationKey)__']="Translation";
|
||||||
$tmparray=getCommonSubstitutionArray($langs, 2, null, $object);
|
|
||||||
complete_substitutions_array($tmparray, $langs, null, $parameters);
|
|
||||||
foreach($tmparray as $key => $val)
|
foreach($tmparray as $key => $val)
|
||||||
{
|
{
|
||||||
$vars[$key]=$key;
|
if (empty($val)) $tmparray[$key]=$key;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $vars;
|
return $tmparray;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1369,8 +1369,8 @@ function dol_meta_create($object)
|
|||||||
DATE=\"" . dol_print_date($object->date,'') . "\"
|
DATE=\"" . dol_print_date($object->date,'') . "\"
|
||||||
NB_ITEMS=\"" . $nblignes . "\"
|
NB_ITEMS=\"" . $nblignes . "\"
|
||||||
CLIENT=\"" . $client . "\"
|
CLIENT=\"" . $client . "\"
|
||||||
AMOUNT_WO_TAX=\"" . $object->total_ht . "\"
|
AMOUNT_EXCL_TAX=\"" . $object->total_ht . "\"
|
||||||
AMOUNT_INC_TAX=\"" . $object->total_ttc . "\"\n";
|
AMOUNT=\"" . $object->total_ttc . "\"\n";
|
||||||
|
|
||||||
for ($i = 0 ; $i < $nblignes ; $i++)
|
for ($i = 0 ; $i < $nblignes ; $i++)
|
||||||
{
|
{
|
||||||
@ -1537,7 +1537,7 @@ function dol_add_file_process($upload_dir, $allowoverwrite=0, $donotupdatesessio
|
|||||||
$ecmfile=new EcmFiles($db);
|
$ecmfile=new EcmFiles($db);
|
||||||
$ecmfile->filepath = $rel_dir;
|
$ecmfile->filepath = $rel_dir;
|
||||||
$ecmfile->filename = $filename;
|
$ecmfile->filename = $filename;
|
||||||
$ecmfile->label = md5_file(dol_osencode($destfull));
|
$ecmfile->label = md5_file(dol_osencode($destfull)); // MD5 of file content
|
||||||
$ecmfile->fullpath_orig = $TFile['name'][$i];
|
$ecmfile->fullpath_orig = $TFile['name'][$i];
|
||||||
$ecmfile->gen_or_uploaded = 'uploaded';
|
$ecmfile->gen_or_uploaded = 'uploaded';
|
||||||
$ecmfile->description = ''; // indexed content
|
$ecmfile->description = ''; // indexed content
|
||||||
|
|||||||
@ -129,7 +129,7 @@ function getEntity($element, $shared=1)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
$out='';
|
$out='';
|
||||||
$addzero = array('user', 'usergroup', 'email_template', 'default_values');
|
$addzero = array('user', 'usergroup', 'c_email_templates', 'email_template', 'default_values');
|
||||||
if (in_array($element, $addzero)) $out.= '0,';
|
if (in_array($element, $addzero)) $out.= '0,';
|
||||||
$out.= $conf->entity;
|
$out.= $conf->entity;
|
||||||
return $out;
|
return $out;
|
||||||
@ -5227,13 +5227,67 @@ function getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $ob
|
|||||||
'__MYCOMPANY_COUNTRY_ID__' => $mysoc->country_id
|
'__MYCOMPANY_COUNTRY_ID__' => $mysoc->country_id
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
if (is_object($object) && (empty($exclude) || ! in_array('object', $exclude)))
|
if (($onlykey || is_object($object)) && (empty($exclude) || ! in_array('object', $exclude)))
|
||||||
|
{
|
||||||
|
if ($onlykey)
|
||||||
|
{
|
||||||
|
$substitutionarray['__ID__'] = '__ID__';
|
||||||
|
$substitutionarray['__REF__'] = '__REF__';
|
||||||
|
$substitutionarray['__REFCLIENT__'] = '__REFCLIENT__';
|
||||||
|
$substitutionarray['__REFSUPPLIER__'] = '__REFSUPPLIER__';
|
||||||
|
$substitutionarray['__EXTRAFIELD_XXX__'] = '__EXTRAFIELD_XXX__';
|
||||||
|
|
||||||
|
$substitutionarray['__THIRDPARTY_ID__'] = '__THIRDPARTY_ID__';
|
||||||
|
$substitutionarray['__THIRDPARTY_NAME__'] = '__THIRDPARTY_NAME__';
|
||||||
|
|
||||||
|
$substitutionarray['__MEMBER_CIVILITY__'] = '__MEMBER_CIVILITY__';
|
||||||
|
$substitutionarray['__MEMBER_FIRSTNAME__'] = '__MEMBER_FIRSTNAME__';
|
||||||
|
$substitutionarray['__MEMBER_LASTNAME__'] = '__MEMBER_LASTNAME__';
|
||||||
|
|
||||||
|
$substitutionarray['__PROJECT_ID__'] = '__PROJECT_ID__';
|
||||||
|
$substitutionarray['__PROJECT_REF__'] = '__PROJECT_REF__';
|
||||||
|
$substitutionarray['__PROJECT_NAME__'] = '__PROJECT_REF__';
|
||||||
|
|
||||||
|
$substitutionarray['__CONTRACT_HIGHEST_PLANNED_START_DATE__'] = 'Highest date planned for a service start';
|
||||||
|
$substitutionarray['__CONTRACT_HIGHEST_PLANNED_START_DATETIME__'] = 'Highest date and hour planned for service start';
|
||||||
|
$substitutionarray['__CONTRACT_LOWEST_EXPIRATION_DATE__'] = 'Lowest data for planned expiration of service';
|
||||||
|
$substitutionarray['__CONTRACT_LOWEST_EXPIRATION_DATETIME__'] = 'Lowest date and hour for planned expiration of service';
|
||||||
|
|
||||||
|
$substitutionarray['__ONLINE_PAYMENT_URL__'] = 'LinkToPayOnlineIfApplicable';
|
||||||
|
$substitutionarray['__SECUREKEYPAYMENT__'] = 'Security key (if key is not unique per record)';
|
||||||
|
$substitutionarray['__SECUREKEYPAYMENT_MEMBER__'] = 'Security key for payment on a member subscription (one key per member)';
|
||||||
|
$substitutionarray['__SECUREKEYPAYMENT_ORDER__'] = 'Security key for payment on an order';
|
||||||
|
$substitutionarray['__SECUREKEYPAYMENT_INVOICE__'] = 'Security key for payment on an invoice';
|
||||||
|
$substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__'] = 'Security key for payment on a a service';
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
$substitutionarray['__ID__'] = $object->id;
|
$substitutionarray['__ID__'] = $object->id;
|
||||||
$substitutionarray['__REF__'] = $object->ref;
|
$substitutionarray['__REF__'] = $object->ref;
|
||||||
$substitutionarray['__REFCLIENT__'] = (isset($object->ref_client) ? $object->ref_client : (isset($object->ref_customer) ? $object->ref_customer : ''));
|
$substitutionarray['__REFCLIENT__'] = (isset($object->ref_client) ? $object->ref_client : (isset($object->ref_customer) ? $object->ref_customer : ''));
|
||||||
$substitutionarray['__REFSUPPLIER__'] = (isset($object->ref_supplier) ? $object->ref_supplier : '');
|
$substitutionarray['__REFSUPPLIER__'] = (isset($object->ref_supplier) ? $object->ref_supplier : '');
|
||||||
|
|
||||||
|
// TODO USe this ?
|
||||||
|
$msgishtml = 0;
|
||||||
|
|
||||||
|
if (method_exists($object, 'getCivilityLabel')) $substitutionarray['__MEMBER_CIVILITY__'] = $object->getCivilityLabel();
|
||||||
|
$substitutionarray['__MEMBER_FIRSTNAME__']=$msgishtml?dol_htmlentitiesbr($object->firstname):$object->firstname;
|
||||||
|
$substitutionarray['__MEMBER_LASTNAME__']=$msgishtml?dol_htmlentitiesbr($object->lastname):$object->lastname;
|
||||||
|
if (method_exists($object, 'getFullName')) $substitutionarray['__MEMBER_FULLNAME__']=$msgishtml?dol_htmlentitiesbr($object->getFullName($langs)):$object->getFullName($langs);
|
||||||
|
$substitutionarray['__MEMBER_COMPANY__']=$msgishtml?dol_htmlentitiesbr($object->societe):$object->societe;
|
||||||
|
$substitutionarray['__MEMBER_ADDRESS__']=$msgishtml?dol_htmlentitiesbr($object->address):$object->address;
|
||||||
|
$substitutionarray['__MEMBER_ZIP__']=$msgishtml?dol_htmlentitiesbr($object->zip):$object->zip;
|
||||||
|
$substitutionarray['__MEMBER_TOWN__']=$msgishtml?dol_htmlentitiesbr($object->town):$object->town;
|
||||||
|
$substitutionarray['__MEMBER_COUNTRY__']=$msgishtml?dol_htmlentitiesbr($object->country):$object->country;
|
||||||
|
$substitutionarray['__MEMBER_EMAIL__']=$msgishtml?dol_htmlentitiesbr($object->email):$object->email;
|
||||||
|
$substitutionarray['__MEMBER_BIRTH__']=$msgishtml?dol_htmlentitiesbr($birthday):$birthday;
|
||||||
|
$substitutionarray['__MEMBER_PHOTO__']=$msgishtml?dol_htmlentitiesbr($object->photo):$object->photo;
|
||||||
|
$substitutionarray['__MEMBER_LOGIN__']=$msgishtml?dol_htmlentitiesbr($object->login):$object->login;
|
||||||
|
$substitutionarray['__MEMBER_PASSWORD__']=$msgishtml?dol_htmlentitiesbr($object->pass):$object->pass;
|
||||||
|
$substitutionarray['__MEMBER_PHONE__']=$msgishtml?dol_htmlentitiesbr($object->phone):$object->phone;
|
||||||
|
$substitutionarray['__MEMBER_PHONEPRO__']=$msgishtml?dol_htmlentitiesbr($object->phone_perso):$object->phone_perso;
|
||||||
|
$substitutionarray['__MEMBER_PHONEMOBILE__']=$msgishtml?dol_htmlentitiesbr($object->phone_mobile):$object->phone_mobile;
|
||||||
|
|
||||||
if (is_object($object->thirdparty) && $object->thirdparty->id > 0)
|
if (is_object($object->thirdparty) && $object->thirdparty->id > 0)
|
||||||
{
|
{
|
||||||
$substitutionarray['__THIRDPARTY_ID__'] = (is_object($object->thirdparty)?$object->thirdparty->id:'');
|
$substitutionarray['__THIRDPARTY_ID__'] = (is_object($object->thirdparty)?$object->thirdparty->id:'');
|
||||||
@ -5258,14 +5312,30 @@ function getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $ob
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$substitutionarray['__ONLINE_PAYMENT_URL__'] = 'LinkToPayOnlineIfApplicable';
|
if (is_object($object) && $object->element == 'contrat' && is_array($object->lines))
|
||||||
|
{
|
||||||
|
$dateplannedstart='';
|
||||||
|
$datenextexpiration='';
|
||||||
|
foreach($object->lines as $line)
|
||||||
|
{
|
||||||
|
if ($line->date_ouverture_prevue > $dateplannedstart) $dateplannedstart = $line->date_ouverture_prevue;
|
||||||
|
if ($line->statut == 4 && $line->date_fin_prevue && (! $datenextexpiration || $line->date_fin_prevue < $datenextexpiration)) $datenextexpiration = $line->date_fin_prevue;
|
||||||
|
}
|
||||||
|
$substitutionarray['__CONTRACT_HIGHEST_PLANNED_START_DATE__'] = dol_print_date($dateplannedstart, 'dayrfc');
|
||||||
|
$substitutionarray['__CONTRACT_HIGHEST_PLANNED_START_DATETIME__'] = dol_print_date($dateplannedstart, 'standard');
|
||||||
|
$substitutionarray['__CONTRACT_LOWEST_EXPIRATION_DATE__'] = dol_print_date($datenextexpiration, 'dayrfc');
|
||||||
|
$substitutionarray['__CONTRACT_LOWEST_EXPIRATION_DATETIME__'] = dol_print_date($datenextexpiration, 'standard');
|
||||||
|
}
|
||||||
|
|
||||||
|
$substitutionarray['__ONLINE_PAYMENT_URL__'] = 'TODO';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (empty($exclude) || ! in_array('objectamount', $exclude))
|
if (empty($exclude) || ! in_array('objectamount', $exclude))
|
||||||
{
|
{
|
||||||
$substitutionarray['__DATE_YMD__'] = is_object($object)?(isset($object->date) ? dol_print_date($object->date, 'day', 0, $outputlangs) : '') : '';
|
$substitutionarray['__DATE_YMD__'] = is_object($object)?(isset($object->date) ? dol_print_date($object->date, 'day', 0, $outputlangs) : '') : '';
|
||||||
$substitutionarray['__DATE_DUE_YMD__'] = is_object($object)?(isset($object->date_lim_reglement)? dol_print_date($object->date_lim_reglement, 'day', 0, $outputlangs) : '') : '';
|
$substitutionarray['__DATE_DUE_YMD__'] = is_object($object)?(isset($object->date_lim_reglement)? dol_print_date($object->date_lim_reglement, 'day', 0, $outputlangs) : '') : '';
|
||||||
$substitutionarray['__AMOUNT__'] = is_object($object)?$object->total_ttc:'';
|
$substitutionarray['__AMOUNT__'] = is_object($object)?$object->total_ttc:'';
|
||||||
$substitutionarray['__AMOUNT_WO_TAX__']= is_object($object)?$object->total_ht:'';
|
$substitutionarray['__AMOUNT_EXCL_TAX__'] = is_object($object)?$object->total_ht:'';
|
||||||
$substitutionarray['__AMOUNT_VAT__'] = is_object($object)?($object->total_vat?$object->total_vat:$object->total_tva):'';
|
$substitutionarray['__AMOUNT_VAT__'] = is_object($object)?($object->total_vat?$object->total_vat:$object->total_tva):'';
|
||||||
// For backward compatibility
|
// For backward compatibility
|
||||||
if ($onlykey != 2)
|
if ($onlykey != 2)
|
||||||
@ -5280,41 +5350,35 @@ function getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $ob
|
|||||||
{
|
{
|
||||||
include_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
include_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||||
|
|
||||||
if (! empty($onlykey))
|
|
||||||
{
|
|
||||||
$tmp=$tmp2=$tmp3=$tmp4=$tmp5=array();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$tmp=dol_getdate(dol_now(), true);
|
$tmp=dol_getdate(dol_now(), true);
|
||||||
$tmp2=dol_get_prev_day($tmp['mday'], $tmp['mon'], $tmp['year']);
|
$tmp2=dol_get_prev_day($tmp['mday'], $tmp['mon'], $tmp['year']);
|
||||||
$tmp3=dol_get_prev_month($tmp['mday'], $tmp['mon'], $tmp['year']);
|
$tmp3=dol_get_prev_month($tmp['mday'], $tmp['mon'], $tmp['year']);
|
||||||
$tmp4=dol_get_next_day($tmp['mday'], $tmp['mon'], $tmp['year']);
|
$tmp4=dol_get_next_day($tmp['mday'], $tmp['mon'], $tmp['year']);
|
||||||
$tmp5=dol_get_next_month($tmp['mday'], $tmp['mon'], $tmp['year']);
|
$tmp5=dol_get_next_month($tmp['mday'], $tmp['mon'], $tmp['year']);
|
||||||
}
|
|
||||||
$substitutionarray=array_merge($substitutionarray, array(
|
$substitutionarray=array_merge($substitutionarray, array(
|
||||||
'__DAY__' => $tmp['mday'],
|
'__DAY__' => (string) $tmp['mday'],
|
||||||
'__MONTH__' => $tmp['mon'],
|
'__MONTH__' => (string) $tmp['mon'],
|
||||||
'__YEAR__' => $tmp['year'],
|
'__YEAR__' => (string) $tmp['year'],
|
||||||
'__PREVIOUS_DAY__' => $tmp2['day'],
|
'__PREVIOUS_DAY__' => (string) $tmp2['day'],
|
||||||
'__PREVIOUS_MONTH__' => $tmp3['month'],
|
'__PREVIOUS_MONTH__' => (string) $tmp3['month'],
|
||||||
'__PREVIOUS_YEAR__' => ($tmp['year'] - 1),
|
'__PREVIOUS_YEAR__' => (string) ($tmp['year'] - 1),
|
||||||
'__NEXT_DAY__' => $tmp4['day'],
|
'__NEXT_DAY__' => (string) $tmp4['day'],
|
||||||
'__NEXT_MONTH__' => $tmp5['month'],
|
'__NEXT_MONTH__' => (string) $tmp5['month'],
|
||||||
'__NEXT_YEAR__' => ($tmp['year'] + 1),
|
'__NEXT_YEAR__' => (string) ($tmp['year'] + 1),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($exclude) || ! in_array('user', $exclude))
|
if (empty($exclude) || ! in_array('user', $exclude))
|
||||||
{
|
{
|
||||||
$substitutionarray=array_merge($substitutionarray, array(
|
$substitutionarray=array_merge($substitutionarray, array(
|
||||||
'__USER_ID__' => $user->id,
|
'__USER_ID__' => (string) $user->id,
|
||||||
'__USER_LOGIN__' => $user->login,
|
'__USER_LOGIN__' => (string) $user->login,
|
||||||
'__USER_LASTNAME__' => $user->lastname,
|
'__USER_LASTNAME__' => (string) $user->lastname,
|
||||||
'__USER_FIRSTNAME__' => $user->firstname,
|
'__USER_FIRSTNAME__' => (string) $user->firstname,
|
||||||
'__USER_FULLNAME__' => $user->getFullName($outputlangs),
|
'__USER_FULLNAME__' => (string) $user->getFullName($outputlangs),
|
||||||
'__USER_SUPERVISOR_ID__' => $user->fk_user,
|
'__USER_SUPERVISOR_ID__' => (string) $user->fk_user,
|
||||||
'__SIGNATURE__' => (($user->signature && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN)) ? ($onlykey == 2 ? dol_trunc(dol_string_nohtmltag($user->signature), 30) : $user->signature) : '')
|
'__SIGNATURE__' => (string) (($user->signature && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN)) ? ($onlykey == 2 ? dol_trunc(dol_string_nohtmltag($user->signature), 30) : $user->signature) : '')
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
if (! empty($conf->multicompany->enabled))
|
if (! empty($conf->multicompany->enabled))
|
||||||
@ -5369,8 +5433,8 @@ function make_substitutions($text, $substitutionarray, $outputlangs=null)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Complete the $substitutionarray with more entries.
|
* Complete the $substitutionarray with more entries coming from external module that had set the "substitutions=1" into module_part array.
|
||||||
* Can also add substitution keys coming from external module that had set the "substitutions=1" into module_part array. In this case, method completesubstitutionarray provided by module is called.
|
* In this case, method completesubstitutionarray provided by module is called.
|
||||||
*
|
*
|
||||||
* @param array $substitutionarray Array substitution old value => new value value
|
* @param array $substitutionarray Array substitution old value => new value value
|
||||||
* @param Translate $outputlangs Output language
|
* @param Translate $outputlangs Output language
|
||||||
@ -5386,13 +5450,8 @@ function complete_substitutions_array(&$substitutionarray, $outputlangs, $object
|
|||||||
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||||
|
|
||||||
// Add a substitution key for each object property
|
|
||||||
if (is_object($object))
|
|
||||||
{
|
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add a substitution key for each extrafields, using key __EXTRA_XXX__
|
// Add a substitution key for each extrafields, using key __EXTRA_XXX__
|
||||||
|
// TODO Remove this. Already available into the getCommonSubstitutionArray used to build the substitution array.
|
||||||
if (is_object($object) && is_array($object->array_options))
|
if (is_object($object) && is_array($object->array_options))
|
||||||
{
|
{
|
||||||
foreach($object->array_options as $key => $val)
|
foreach($object->array_options as $key => $val)
|
||||||
|
|||||||
@ -175,7 +175,7 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left
|
|||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->facture->enabled', __HANDLER__, 'left', 1700__+MAX_llx_menu__, 'billing', 'customer_bills', 6__+MAX_llx_menu__, '/compta/facture/list.php?leftmenu=customers_bills', 'BillsCustomers', 0, 'bills', '$user->rights->facture->lire', '', 2, 3, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->facture->enabled', __HANDLER__, 'left', 1700__+MAX_llx_menu__, 'billing', 'customer_bills', 6__+MAX_llx_menu__, '/compta/facture/list.php?leftmenu=customers_bills', 'BillsCustomers', 0, 'bills', '$user->rights->facture->lire', '', 2, 3, __ENTITY__);
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->facture->enabled', __HANDLER__, 'left', 1701__+MAX_llx_menu__, 'billing', '', 1700__+MAX_llx_menu__, '/compta/facture/card.php?action=create&leftmenu=customers_bills', 'NewBill', 1, 'bills', '$user->rights->facture->creer', '', 2, 3, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->facture->enabled', __HANDLER__, 'left', 1701__+MAX_llx_menu__, 'billing', '', 1700__+MAX_llx_menu__, '/compta/facture/card.php?action=create&leftmenu=customers_bills', 'NewBill', 1, 'bills', '$user->rights->facture->creer', '', 2, 3, __ENTITY__);
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->facture->enabled', __HANDLER__, 'left', 1705__+MAX_llx_menu__, 'billing', '', 1700__+MAX_llx_menu__, '/compta/facture/list.php?leftmenu=customers_bills', 'List', 1, 'bills', '$user->rights->facture->lire', '', 2, 4, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->facture->enabled', __HANDLER__, 'left', 1705__+MAX_llx_menu__, 'billing', '', 1700__+MAX_llx_menu__, '/compta/facture/list.php?leftmenu=customers_bills', 'List', 1, 'bills', '$user->rights->facture->lire', '', 2, 4, __ENTITY__);
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->facture->enabled', __HANDLER__, 'left', 1702__+MAX_llx_menu__, 'billing', '', 1700__+MAX_llx_menu__, '/compta/facture/fiche-rec.php?leftmenu=customers_bills', 'ListOfTemplates', 1, 'bills', '$user->rights->facture->lire', '', 2, 5, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->facture->enabled', __HANDLER__, 'left', 1702__+MAX_llx_menu__, 'billing', '', 1700__+MAX_llx_menu__, '/compta/facture/invoicetemplate_list.php?leftmenu=customers_bills', 'ListOfTemplates', 1, 'bills', '$user->rights->facture->lire', '', 2, 5, __ENTITY__);
|
||||||
|
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->facture->enabled', __HANDLER__, 'left', 1720__+MAX_llx_menu__, 'billing', '', 1705__+MAX_llx_menu__, '/compta/facture/list.php?leftmenu=customers_bills&search_status=0', 'BillShortStatusDraft', 2, 'bills', '$user->rights->facture->lire', '', 2, 1, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->facture->enabled', __HANDLER__, 'left', 1720__+MAX_llx_menu__, 'billing', '', 1705__+MAX_llx_menu__, '/compta/facture/list.php?leftmenu=customers_bills&search_status=0', 'BillShortStatusDraft', 2, 'bills', '$user->rights->facture->lire', '', 2, 1, __ENTITY__);
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->facture->enabled', __HANDLER__, 'left', 1721__+MAX_llx_menu__, 'billing', '', 1705__+MAX_llx_menu__, '/compta/facture/list.php?leftmenu=customers_bills&search_status=1', 'BillShortStatusNotPaid', 2, 'bills', '$user->rights->facture->lire', '', 2, 2, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->facture->enabled', __HANDLER__, 'left', 1721__+MAX_llx_menu__, 'billing', '', 1705__+MAX_llx_menu__, '/compta/facture/list.php?leftmenu=customers_bills&search_status=1', 'BillShortStatusNotPaid', 2, 'bills', '$user->rights->facture->lire', '', 2, 2, __ENTITY__);
|
||||||
|
|||||||
@ -811,7 +811,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
|
|||||||
$newmenu->add("/compta/facture/list.php?leftmenu=customers_bills_paid&search_status=2",$langs->trans("BillShortStatusPaid"),2,$user->rights->facture->lire);
|
$newmenu->add("/compta/facture/list.php?leftmenu=customers_bills_paid&search_status=2",$langs->trans("BillShortStatusPaid"),2,$user->rights->facture->lire);
|
||||||
$newmenu->add("/compta/facture/list.php?leftmenu=customers_bills_canceled&search_status=3",$langs->trans("BillShortStatusCanceled"),2,$user->rights->facture->lire);
|
$newmenu->add("/compta/facture/list.php?leftmenu=customers_bills_canceled&search_status=3",$langs->trans("BillShortStatusCanceled"),2,$user->rights->facture->lire);
|
||||||
}
|
}
|
||||||
$newmenu->add("/compta/facture/fiche-rec.php",$langs->trans("ListOfTemplates"),1,$user->rights->facture->creer); // No need to see recurring invoices, if user has no permission to create invoice.
|
$newmenu->add("/compta/facture/invoicetemplate_list.php",$langs->trans("ListOfTemplates"),1,$user->rights->facture->creer); // No need to see recurring invoices, if user has no permission to create invoice.
|
||||||
|
|
||||||
$newmenu->add("/compta/paiement/list.php",$langs->trans("Payments"),1,$user->rights->facture->lire);
|
$newmenu->add("/compta/paiement/list.php",$langs->trans("Payments"),1,$user->rights->facture->lire);
|
||||||
|
|
||||||
|
|||||||
@ -73,6 +73,8 @@ if ($action == 'presend')
|
|||||||
|
|
||||||
// Build document if it not exists
|
// Build document if it not exists
|
||||||
if (! $file || ! is_readable($file)) {
|
if (! $file || ! is_readable($file)) {
|
||||||
|
if ($object->element != 'member')
|
||||||
|
{
|
||||||
$result = $object->generateDocument(GETPOST('model') ? GETPOST('model') : $object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
$result = $object->generateDocument(GETPOST('model') ? GETPOST('model') : $object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||||
if ($result <= 0) {
|
if ($result <= 0) {
|
||||||
dol_print_error($db, $object->error, $object->errors);
|
dol_print_error($db, $object->error, $object->errors);
|
||||||
@ -81,6 +83,7 @@ if ($action == 'presend')
|
|||||||
$fileparams = dol_most_recent_file($diroutput . '/' . $ref, preg_quote($ref, '/').'[^\-]+');
|
$fileparams = dol_most_recent_file($diroutput . '/' . $ref, preg_quote($ref, '/').'[^\-]+');
|
||||||
$file = $fileparams['fullname'];
|
$file = $fileparams['fullname'];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
print '<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
|
print '<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
|
||||||
print '<div class="clearboth"></div>';
|
print '<div class="clearboth"></div>';
|
||||||
@ -120,6 +123,10 @@ if ($action == 'presend')
|
|||||||
$liste[$key] = $value;
|
$liste[$key] = $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
elseif ($object->element == 'member')
|
||||||
|
{
|
||||||
|
$liste['thirdparty'] = $object->getFullName($langs)." <".$object->email.">";
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
foreach ($object->thirdparty->thirdparty_and_contact_email_array(1) as $key => $value) {
|
foreach ($object->thirdparty->thirdparty_and_contact_email_array(1) as $key => $value) {
|
||||||
@ -139,43 +146,8 @@ if ($action == 'presend')
|
|||||||
// Make substitution in email content
|
// Make substitution in email content
|
||||||
$substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object);
|
$substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object);
|
||||||
$substitutionarray['__CHECK_READ__'] = (is_object($object) && is_object($object->thirdparty)) ? '<img src="' . DOL_MAIN_URL_ROOT . '/public/emailing/mailing-read.php?tag=' . $object->thirdparty->tag . '&securitykey=' . urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY) . '" width="1" height="1" style="width:1px;height:1px" border="0"/>' : '';
|
$substitutionarray['__CHECK_READ__'] = (is_object($object) && is_object($object->thirdparty)) ? '<img src="' . DOL_MAIN_URL_ROOT . '/public/emailing/mailing-read.php?tag=' . $object->thirdparty->tag . '&securitykey=' . urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY) . '" width="1" height="1" style="width:1px;height:1px" border="0"/>' : '';
|
||||||
$substitutionarray['__PERSONALIZED__'] = '';
|
$substitutionarray['__PERSONALIZED__'] = ''; // deprecated
|
||||||
$substitutionarray['__CONTACTCIVNAME__'] = '';
|
$substitutionarray['__CONTACTCIVNAME__'] = '';
|
||||||
// Add specific substitution for contracts
|
|
||||||
if (is_object($object) && $object->element == 'contrat' && is_array($object->lines))
|
|
||||||
{
|
|
||||||
$datenextexpiration = '';
|
|
||||||
foreach ($object->lines as $line)
|
|
||||||
{
|
|
||||||
if ($line->statut != 4)
|
|
||||||
continue;
|
|
||||||
if ($line->date_fin_prevue > $datenextexpiration)
|
|
||||||
$datenextexpiration = $line->date_fin_prevue;
|
|
||||||
}
|
|
||||||
$substitutionarray['__CONTRACT_NEXT_EXPIRATION_DATE__'] = dol_print_date($datenextexpiration, 'dayrfc');
|
|
||||||
$substitutionarray['__CONTRACT_NEXT_EXPIRATION_DATETIME__'] = dol_print_date($datenextexpiration, 'standard');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Choose one contact for the __CONTACTCIVNAME__ TODO Really not reliable.
|
|
||||||
/*
|
|
||||||
$custcontact = '';
|
|
||||||
$contactarr = array();
|
|
||||||
$contactarr = $object->liste_contact(-1, 'external');
|
|
||||||
if (is_array($contactarr) && count($contactarr) > 0)
|
|
||||||
{
|
|
||||||
foreach ($contactarr as $contact)
|
|
||||||
{
|
|
||||||
if ($contact['libelle'] == $langs->trans('TypeContact_commande_external_CUSTOMER')) { // TODO Use code and not label
|
|
||||||
$contactstatic = new Contact($db);
|
|
||||||
$contactstatic->fetch($contact ['id']);
|
|
||||||
$custcontact = $contactstatic->getFullName($langs, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! empty($custcontact)) {
|
|
||||||
$formmail->substit['__CONTACTCIVNAME__'] = $custcontact;
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
$parameters = array(
|
$parameters = array(
|
||||||
'mode' => 'formemail'
|
'mode' => 'formemail'
|
||||||
|
|||||||
@ -74,7 +74,7 @@ if (! empty($conf->global->MAIN_EMAIL_ADD_TRACK_ID) && ($conf->global->MAIN_EMAI
|
|||||||
$formmail->frommail = dolAddEmailTrackId($formmail->frommail, $trackid);
|
$formmail->frommail = dolAddEmailTrackId($formmail->frommail, $trackid);
|
||||||
}
|
}
|
||||||
$formmail->withfrom = 1;
|
$formmail->withfrom = 1;
|
||||||
$liste = $langs->trans("AllRecipientSelected", count($listofselectedthirdparties));
|
$liste = $langs->trans("AllRecipientSelected", count($arrayofselected));
|
||||||
if (count($listofselectedthirdparties) == 1) // Only 1 different recipient selected, we can suggest contacts
|
if (count($listofselectedthirdparties) == 1) // Only 1 different recipient selected, we can suggest contacts
|
||||||
{
|
{
|
||||||
$liste = array();
|
$liste = array();
|
||||||
@ -97,8 +97,10 @@ if (count($listofselectedthirdparties) == 1) // Only 1 different recipient selec
|
|||||||
} else {
|
} else {
|
||||||
$formmail->withtoreadonly = 1;
|
$formmail->withtoreadonly = 1;
|
||||||
}
|
}
|
||||||
$formmail->withto = $liste;
|
|
||||||
$formmail->withtofree = 0;
|
$formmail->withoptiononeemailperrecipient = empty($liste)?0:((GETPOST('oneemailperrecipient')=='on')?1:-1);
|
||||||
|
$formmail->withto = empty($liste)?(GETPOST('sendto','alpha')?GETPOST('sendto','alpha'):array()):$liste;
|
||||||
|
$formmail->withtofree = empty($liste)?1:0;
|
||||||
$formmail->withtocc = 1;
|
$formmail->withtocc = 1;
|
||||||
$formmail->withtoccc = $conf->global->MAIN_EMAIL_USECCC;
|
$formmail->withtoccc = $conf->global->MAIN_EMAIL_USECCC;
|
||||||
$formmail->withtopic = $langs->transnoentities($topicmail, '__REF__', '__REFCLIENT__');
|
$formmail->withtopic = $langs->transnoentities($topicmail, '__REF__', '__REFCLIENT__');
|
||||||
@ -117,22 +119,8 @@ $formmail->withcancel = 1;
|
|||||||
$substitutionarray = getCommonSubstitutionArray($langs, 0, null, $object);
|
$substitutionarray = getCommonSubstitutionArray($langs, 0, null, $object);
|
||||||
$substitutionarray['__EMAIL__'] = $sendto;
|
$substitutionarray['__EMAIL__'] = $sendto;
|
||||||
$substitutionarray['__CHECK_READ__'] = (is_object($object) && is_object($object->thirdparty)) ? '<img src="' . DOL_MAIN_URL_ROOT . '/public/emailing/mailing-read.php?tag=' . $object->thirdparty->tag . '&securitykey=' . urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY) . '" width="1" height="1" style="width:1px;height:1px" border="0"/>' : '';
|
$substitutionarray['__CHECK_READ__'] = (is_object($object) && is_object($object->thirdparty)) ? '<img src="' . DOL_MAIN_URL_ROOT . '/public/emailing/mailing-read.php?tag=' . $object->thirdparty->tag . '&securitykey=' . urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY) . '" width="1" height="1" style="width:1px;height:1px" border="0"/>' : '';
|
||||||
$substitutionarray['__PERSONALIZED__'] = '';
|
$substitutionarray['__PERSONALIZED__'] = ''; // deprecated
|
||||||
$substitutionarray['__CONTACTCIVNAME__'] = '';
|
$substitutionarray['__CONTACTCIVNAME__'] = '';
|
||||||
// Add specific substitution for contracts
|
|
||||||
if (is_object($object) && $object->element == 'contrat' && is_array($object->lines))
|
|
||||||
{
|
|
||||||
$datenextexpiration = '';
|
|
||||||
foreach ($object->lines as $line)
|
|
||||||
{
|
|
||||||
if ($line->statut != 4)
|
|
||||||
continue;
|
|
||||||
if ($line->date_fin_prevue > $datenextexpiration)
|
|
||||||
$datenextexpiration = $line->date_fin_prevue;
|
|
||||||
}
|
|
||||||
$substitutionarray['__CONTRACT_NEXT_EXPIRATION_DATE__'] = dol_print_date($datenextexpiration, 'dayrfc');
|
|
||||||
$substitutionarray['__CONTRACT_NEXT_EXPIRATION_DATETIME__'] = dol_print_date($datenextexpiration, 'standard');
|
|
||||||
}
|
|
||||||
|
|
||||||
$parameters = array(
|
$parameters = array(
|
||||||
'mode' => 'formemail'
|
'mode' => 'formemail'
|
||||||
|
|||||||
@ -60,23 +60,26 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
|||||||
$encoding = '';
|
$encoding = '';
|
||||||
$action=GETPOST('action','alpha');
|
$action=GETPOST('action','alpha');
|
||||||
$original_file=GETPOST('file','alpha'); // Do not use urldecode here ($_GET are already decoded by PHP).
|
$original_file=GETPOST('file','alpha'); // Do not use urldecode here ($_GET are already decoded by PHP).
|
||||||
|
$hashp=GETPOST('hashp','aZ09');
|
||||||
$modulepart=GETPOST('modulepart','alpha');
|
$modulepart=GETPOST('modulepart','alpha');
|
||||||
$urlsource=GETPOST('urlsource','alpha');
|
$urlsource=GETPOST('urlsource','alpha');
|
||||||
$entity=GETPOST('entity','int')?GETPOST('entity','int'):$conf->entity;
|
$entity=GETPOST('entity','int')?GETPOST('entity','int'):$conf->entity;
|
||||||
|
|
||||||
// Security check
|
// Security check
|
||||||
if (empty($modulepart)) accessforbidden('Bad value for parameter modulepart');
|
if (empty($modulepart)) accessforbidden('Bad link. Bad value for parameter modulepart',0,0,1);
|
||||||
|
if (empty($original_file) && empty($hashp)) accessforbidden('Bad link. Missing identification to find file (original_file or hashp)',0,0,1);
|
||||||
if ($modulepart == 'fckeditor') $modulepart='medias'; // For backward compatibility
|
if ($modulepart == 'fckeditor') $modulepart='medias'; // For backward compatibility
|
||||||
|
|
||||||
$socid=0;
|
$socid=0;
|
||||||
if ($user->societe_id > 0) $socid = $user->societe_id;
|
if ($user->societe_id > 0) $socid = $user->societe_id;
|
||||||
|
|
||||||
// For some module part, dir may be privates
|
// For some module part, dir may be privates
|
||||||
if (in_array($modulepart,array('facture_paiement','unpaid')))
|
if (in_array($modulepart, array('facture_paiement','unpaid')))
|
||||||
{
|
{
|
||||||
if (! $user->rights->societe->client->voir || $socid) $original_file='private/'.$user->id.'/'.$original_file; // If user has no permission to see all, output dir is specific to user
|
if (! $user->rights->societe->client->voir || $socid) $original_file='private/'.$user->id.'/'.$original_file; // If user has no permission to see all, output dir is specific to user
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Action
|
* Action
|
||||||
*/
|
*/
|
||||||
@ -99,6 +102,33 @@ if (preg_match('/\.(html|htm)$/i',$original_file)) $attachment = false;
|
|||||||
if (isset($_GET["attachment"])) $attachment = GETPOST("attachment",'alpha')?true:false;
|
if (isset($_GET["attachment"])) $attachment = GETPOST("attachment",'alpha')?true:false;
|
||||||
if (! empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS)) $attachment=false;
|
if (! empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS)) $attachment=false;
|
||||||
|
|
||||||
|
// If we have a hash public (hashp), we guess the original_file.
|
||||||
|
if (! empty($hashp))
|
||||||
|
{
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php';
|
||||||
|
$ecmfile=new EcmFiles($db);
|
||||||
|
$result = $ecmfile->fetch(0, '', '', '', $hashp);
|
||||||
|
if ($result > 0)
|
||||||
|
{
|
||||||
|
$tmp = explode('/', $ecmfile->filepath, 2); // $ecmfile->filepatch is relative to document directory
|
||||||
|
$moduleparttocheck = $tmp[0];
|
||||||
|
if ($moduleparttocheck == $modulepart)
|
||||||
|
{
|
||||||
|
$original_file = (($tmp[1]?$tmp[1].'/':'').$ecmfile->filename); // this is relative to module dir
|
||||||
|
//var_dump($original_file); exit;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
accessforbidden('Bad link. File owns to another module part.',0,0,1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
accessforbidden('Bad link. File was not found or sharing attribute removed recently.',0,0,1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Security: Delete string ../ into $original_file
|
// Security: Delete string ../ into $original_file
|
||||||
$original_file = str_replace("../","/", $original_file);
|
$original_file = str_replace("../","/", $original_file);
|
||||||
|
|
||||||
|
|||||||
@ -46,7 +46,9 @@ class EcmFiles //extends CommonObject
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
public $label;
|
public $ref; // hash of file path
|
||||||
|
public $label; // hash of file content (md5_file(dol_osencode($destfull))
|
||||||
|
public $share; // hash for file sharing. empty by default
|
||||||
public $entity;
|
public $entity;
|
||||||
public $filename;
|
public $filename;
|
||||||
public $filepath;
|
public $filepath;
|
||||||
@ -94,10 +96,15 @@ class EcmFiles //extends CommonObject
|
|||||||
$error = 0;
|
$error = 0;
|
||||||
|
|
||||||
// Clean parameters
|
// Clean parameters
|
||||||
|
if (isset($this->ref)) {
|
||||||
|
$this->ref = trim($this->ref);
|
||||||
|
}
|
||||||
if (isset($this->label)) {
|
if (isset($this->label)) {
|
||||||
$this->label = trim($this->label);
|
$this->label = trim($this->label);
|
||||||
}
|
}
|
||||||
|
if (isset($this->share)) {
|
||||||
|
$this->share = trim($this->share);
|
||||||
|
}
|
||||||
if (isset($this->entity)) {
|
if (isset($this->entity)) {
|
||||||
$this->entity = trim($this->entity);
|
$this->entity = trim($this->entity);
|
||||||
}
|
}
|
||||||
@ -136,6 +143,10 @@ class EcmFiles //extends CommonObject
|
|||||||
}
|
}
|
||||||
if (empty($this->date_c)) $this->date_c = dol_now();
|
if (empty($this->date_c)) $this->date_c = dol_now();
|
||||||
|
|
||||||
|
// If ref not defined
|
||||||
|
if (empty($ref)) $ref = dol_hash($this->filepath.'/'.$this->filename, 3);
|
||||||
|
|
||||||
|
|
||||||
$maxposition=0;
|
$maxposition=0;
|
||||||
if (empty($this->position)) // Get max used
|
if (empty($this->position)) // Get max used
|
||||||
{
|
{
|
||||||
@ -157,7 +168,9 @@ class EcmFiles //extends CommonObject
|
|||||||
|
|
||||||
// Insert request
|
// Insert request
|
||||||
$sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . '(';
|
$sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . '(';
|
||||||
|
$sql.= 'ref,';
|
||||||
$sql.= 'label,';
|
$sql.= 'label,';
|
||||||
|
$sql.= 'share,';
|
||||||
$sql.= 'entity,';
|
$sql.= 'entity,';
|
||||||
$sql.= 'filename,';
|
$sql.= 'filename,';
|
||||||
$sql.= 'filepath,';
|
$sql.= 'filepath,';
|
||||||
@ -174,7 +187,9 @@ class EcmFiles //extends CommonObject
|
|||||||
$sql.= 'fk_user_m,';
|
$sql.= 'fk_user_m,';
|
||||||
$sql.= 'acl';
|
$sql.= 'acl';
|
||||||
$sql .= ') VALUES (';
|
$sql .= ') VALUES (';
|
||||||
|
$sql .= " '".$ref."', ";
|
||||||
$sql .= ' '.(! isset($this->label)?'NULL':"'".$this->db->escape($this->label)."'").',';
|
$sql .= ' '.(! isset($this->label)?'NULL':"'".$this->db->escape($this->label)."'").',';
|
||||||
|
$sql .= ' '.(! isset($this->share)?'NULL':"'".$this->db->escape($this->share)."'").',';
|
||||||
$sql .= ' '.(! isset($this->entity)?$conf->entity:$this->entity).',';
|
$sql .= ' '.(! isset($this->entity)?$conf->entity:$this->entity).',';
|
||||||
$sql .= ' '.(! isset($this->filename)?'NULL':"'".$this->db->escape($this->filename)."'").',';
|
$sql .= ' '.(! isset($this->filename)?'NULL':"'".$this->db->escape($this->filename)."'").',';
|
||||||
$sql .= ' '.(! isset($this->filepath)?'NULL':"'".$this->db->escape($this->filepath)."'").',';
|
$sql .= ' '.(! isset($this->filepath)?'NULL':"'".$this->db->escape($this->filepath)."'").',';
|
||||||
@ -232,11 +247,13 @@ class EcmFiles //extends CommonObject
|
|||||||
* Load object in memory from the database
|
* Load object in memory from the database
|
||||||
*
|
*
|
||||||
* @param int $id Id object
|
* @param int $id Id object
|
||||||
* @param string $ref Not used yet. Will contains a hash id from filename+filepath
|
* @param string $ref Hash of file name (filename+filepath). Not always defined on some version.
|
||||||
* @param string $relativepath Relative path of file from document directory. Example: path/path2/file
|
* @param string $relativepath Relative path of file from document directory. Example: path/path2/file
|
||||||
|
* @param string $hashoffile Hash of file content. Take the first one found if same file is at different places. This hash will also change if file content is changed.
|
||||||
|
* @param string $hashforshare Hash of file sharing.
|
||||||
* @return int <0 if KO, 0 if not found, >0 if OK
|
* @return int <0 if KO, 0 if not found, >0 if OK
|
||||||
*/
|
*/
|
||||||
public function fetch($id, $ref = null, $relativepath = '')
|
public function fetch($id, $ref = '', $relativepath = '', $hashoffile='', $hashforshare='')
|
||||||
{
|
{
|
||||||
dol_syslog(__METHOD__, LOG_DEBUG);
|
dol_syslog(__METHOD__, LOG_DEBUG);
|
||||||
|
|
||||||
@ -244,6 +261,7 @@ class EcmFiles //extends CommonObject
|
|||||||
$sql .= ' t.rowid,';
|
$sql .= ' t.rowid,';
|
||||||
$sql .= " t.ref,";
|
$sql .= " t.ref,";
|
||||||
$sql .= " t.label,";
|
$sql .= " t.label,";
|
||||||
|
$sql .= " t.share,";
|
||||||
$sql .= " t.entity,";
|
$sql .= " t.entity,";
|
||||||
$sql .= " t.filename,";
|
$sql .= " t.filename,";
|
||||||
$sql .= " t.filepath,";
|
$sql .= " t.filepath,";
|
||||||
@ -268,11 +286,20 @@ class EcmFiles //extends CommonObject
|
|||||||
if ($relativepath) {
|
if ($relativepath) {
|
||||||
$sql .= " AND t.filepath = '" . $this->db->escape(dirname($relativepath)) . "' AND t.filename = '".$this->db->escape(basename($relativepath))."'";
|
$sql .= " AND t.filepath = '" . $this->db->escape(dirname($relativepath)) . "' AND t.filename = '".$this->db->escape(basename($relativepath))."'";
|
||||||
}
|
}
|
||||||
elseif (null !== $ref) {
|
elseif (! empty($ref)) {
|
||||||
$sql .= " AND t.ref = '".$this->db->escape($ref)."'";
|
$sql .= " AND t.ref = '".$this->db->escape($ref)."'";
|
||||||
|
}
|
||||||
|
elseif (! empty($hashoffile)) {
|
||||||
|
$sql .= " AND t.label = '".$this->db->escape($hashoffile)."'";
|
||||||
|
}
|
||||||
|
elseif (! empty($hashforshare)) {
|
||||||
|
$sql .= " AND t.share = '".$this->db->escape($hashforshare)."'";
|
||||||
} else {
|
} else {
|
||||||
$sql .= ' AND t.rowid = ' . $id;
|
$sql .= ' AND t.rowid = ' . $id;
|
||||||
}
|
}
|
||||||
|
// When we search on hash of content, we take the first one. Solve also hash conflict.
|
||||||
|
$this->db->plimit(1);
|
||||||
|
$this->db->order('t.rowid', 'ASC');
|
||||||
|
|
||||||
$resql = $this->db->query($sql);
|
$resql = $this->db->query($sql);
|
||||||
if ($resql) {
|
if ($resql) {
|
||||||
@ -283,6 +310,7 @@ class EcmFiles //extends CommonObject
|
|||||||
$this->id = $obj->rowid;
|
$this->id = $obj->rowid;
|
||||||
$this->ref = $obj->ref;
|
$this->ref = $obj->ref;
|
||||||
$this->label = $obj->label;
|
$this->label = $obj->label;
|
||||||
|
$this->share = $obj->share;
|
||||||
$this->entity = $obj->entity;
|
$this->entity = $obj->entity;
|
||||||
$this->filename = $obj->filename;
|
$this->filename = $obj->filename;
|
||||||
$this->filepath = $obj->filepath;
|
$this->filepath = $obj->filepath;
|
||||||
@ -344,6 +372,7 @@ class EcmFiles //extends CommonObject
|
|||||||
$sql = 'SELECT';
|
$sql = 'SELECT';
|
||||||
$sql .= ' t.rowid,';
|
$sql .= ' t.rowid,';
|
||||||
$sql .= " t.label,";
|
$sql .= " t.label,";
|
||||||
|
$sql .= " t.share,";
|
||||||
$sql .= " t.entity,";
|
$sql .= " t.entity,";
|
||||||
$sql .= " t.filename,";
|
$sql .= " t.filename,";
|
||||||
$sql .= " t.filepath,";
|
$sql .= " t.filepath,";
|
||||||
@ -393,8 +422,9 @@ class EcmFiles //extends CommonObject
|
|||||||
$line = new EcmfilesLine();
|
$line = new EcmfilesLine();
|
||||||
|
|
||||||
$line->id = $obj->rowid;
|
$line->id = $obj->rowid;
|
||||||
|
$line->ref = $obj->ref;
|
||||||
$line->label = $obj->label;
|
$line->label = $obj->label;
|
||||||
|
$line->share = $obj->share;
|
||||||
$line->entity = $obj->entity;
|
$line->entity = $obj->entity;
|
||||||
$line->filename = $obj->filename;
|
$line->filename = $obj->filename;
|
||||||
$line->filepath = $obj->filepath;
|
$line->filepath = $obj->filepath;
|
||||||
@ -438,9 +468,15 @@ class EcmFiles //extends CommonObject
|
|||||||
|
|
||||||
// Clean parameters
|
// Clean parameters
|
||||||
|
|
||||||
|
if (isset($this->ref)) {
|
||||||
|
$this->ref = trim($this->ref);
|
||||||
|
}
|
||||||
if (isset($this->label)) {
|
if (isset($this->label)) {
|
||||||
$this->label = trim($this->label);
|
$this->label = trim($this->label);
|
||||||
}
|
}
|
||||||
|
if (isset($this->share)) {
|
||||||
|
$this->share = trim($this->share);
|
||||||
|
}
|
||||||
if (isset($this->entity)) {
|
if (isset($this->entity)) {
|
||||||
$this->entity = trim($this->entity);
|
$this->entity = trim($this->entity);
|
||||||
}
|
}
|
||||||
@ -484,7 +520,9 @@ class EcmFiles //extends CommonObject
|
|||||||
|
|
||||||
// Update request
|
// Update request
|
||||||
$sql = 'UPDATE ' . MAIN_DB_PREFIX . $this->table_element . ' SET';
|
$sql = 'UPDATE ' . MAIN_DB_PREFIX . $this->table_element . ' SET';
|
||||||
|
$sql .= " ref = '".dol_hash($this->filepath.'/'.$this->filename, 3)."',";
|
||||||
$sql .= ' label = '.(isset($this->label)?"'".$this->db->escape($this->label)."'":"null").',';
|
$sql .= ' label = '.(isset($this->label)?"'".$this->db->escape($this->label)."'":"null").',';
|
||||||
|
$sql .= ' share = '.(! empty($this->share)?"'".$this->db->escape($this->share)."'":"null").',';
|
||||||
$sql .= ' entity = '.(isset($this->entity)?$this->entity:$conf->entity).',';
|
$sql .= ' entity = '.(isset($this->entity)?$this->entity:$conf->entity).',';
|
||||||
$sql .= ' filename = '.(isset($this->filename)?"'".$this->db->escape($this->filename)."'":"null").',';
|
$sql .= ' filename = '.(isset($this->filename)?"'".$this->db->escape($this->filename)."'":"null").',';
|
||||||
$sql .= ' filepath = '.(isset($this->filepath)?"'".$this->db->escape($this->filepath)."'":"null").',';
|
$sql .= ' filepath = '.(isset($this->filepath)?"'".$this->db->escape($this->filepath)."'":"null").',';
|
||||||
|
|||||||
@ -19,12 +19,12 @@
|
|||||||
* \file htdocs/ecm/docfile.php
|
* \file htdocs/ecm/docfile.php
|
||||||
* \ingroup ecm
|
* \ingroup ecm
|
||||||
* \brief Card of a file for ECM module
|
* \brief Card of a file for ECM module
|
||||||
* \author Laurent Destailleur
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require '../main.inc.php';
|
require '../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmdirectory.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmdirectory.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/ecm.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/ecm.lib.php';
|
||||||
|
|
||||||
@ -39,6 +39,9 @@ $langs->load("bills");
|
|||||||
$langs->load("contracts");
|
$langs->load("contracts");
|
||||||
$langs->load("categories");
|
$langs->load("categories");
|
||||||
|
|
||||||
|
$action = GETPOST('action', 'aZ09');
|
||||||
|
$cancel = GETPOST('cancel', 'alpha');
|
||||||
|
|
||||||
if (!$user->rights->ecm->setup) accessforbidden();
|
if (!$user->rights->ecm->setup) accessforbidden();
|
||||||
|
|
||||||
// Get parameters
|
// Get parameters
|
||||||
@ -61,8 +64,6 @@ $pagenext = $page + 1;
|
|||||||
if (! $sortorder) $sortorder="ASC";
|
if (! $sortorder) $sortorder="ASC";
|
||||||
if (! $sortfield) $sortfield="label";
|
if (! $sortfield) $sortfield="label";
|
||||||
|
|
||||||
$cancel=GETPOST('cancel','alpha');
|
|
||||||
$action=GETPOST('action','aZ09');
|
|
||||||
$section=GETPOST("section");
|
$section=GETPOST("section");
|
||||||
if (! $section)
|
if (! $section)
|
||||||
{
|
{
|
||||||
@ -87,29 +88,33 @@ if (! $result > 0)
|
|||||||
$relativepath=$ecmdir->getRelativePath();
|
$relativepath=$ecmdir->getRelativePath();
|
||||||
$upload_dir = $conf->ecm->dir_output.'/'.$relativepath;
|
$upload_dir = $conf->ecm->dir_output.'/'.$relativepath;
|
||||||
|
|
||||||
|
$fullpath=$conf->ecm->dir_output.'/'.$relativepath.$urlfile;
|
||||||
|
|
||||||
|
$file = new stdClass();
|
||||||
|
$file->section_id=$ecmdir->id;
|
||||||
|
$file->label=$urlfile;
|
||||||
|
|
||||||
|
$relativetodocument = 'ecm/'.$relativepath; // $relativepath is relative to ECM dir, we need relative to document
|
||||||
|
$filepath=$relativepath.$file->label;
|
||||||
|
$filepathtodocument=$relativetodocument.$file->label;
|
||||||
|
|
||||||
|
// Try to load object from index
|
||||||
|
$object = new ECMFiles($db);
|
||||||
|
$result=$object->fetch(0, '', $filepathtodocument);
|
||||||
|
if (! ($result >= 0))
|
||||||
|
{
|
||||||
|
dol_print_error($db, $object->error, $object->errors);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
$ecmfile = new ECMFile($db);
|
* Actions
|
||||||
if (! empty($_GET["fileid"]))
|
*/
|
||||||
{
|
|
||||||
$result=$ecmfile->fetch($_GET["fileid"]);
|
|
||||||
if (! $result > 0)
|
|
||||||
{
|
|
||||||
dol_print_error($db,$ecmfile->error);
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
if ($cancel)
|
||||||
|
|
||||||
/*******************************************************************
|
|
||||||
* ACTIONS
|
|
||||||
*
|
|
||||||
* Put here all code to do according to value of "action" parameter
|
|
||||||
********************************************************************/
|
|
||||||
|
|
||||||
if ($action == 'cancel')
|
|
||||||
{
|
{
|
||||||
$action ='';
|
$action ='';
|
||||||
if ($backtourl)
|
if ($backtourl)
|
||||||
@ -119,7 +124,7 @@ if ($action == 'cancel')
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
header("Location: ".DOL_URL_ROOT.'/ecm/index.php?action=file_manager§ion='.$section);
|
header("Location: ".DOL_URL_ROOT.'/ecm/docfile.php?urlfile='.$urlfile.'§ion='.$section);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -129,8 +134,9 @@ if ($action == 'update')
|
|||||||
{
|
{
|
||||||
$error=0;
|
$error=0;
|
||||||
|
|
||||||
$oldlabel=GETPOST('urlfile');
|
$oldlabel=GETPOST('urlfile', 'alpha');
|
||||||
$newlabel=GETPOST('label');
|
$newlabel=GETPOST('label', 'alpha');
|
||||||
|
$shareenabled = GETPOST('shareenabled', 'alpha');
|
||||||
|
|
||||||
//$db->begin();
|
//$db->begin();
|
||||||
|
|
||||||
@ -144,7 +150,7 @@ if ($action == 'update')
|
|||||||
//print $oldfile.' - '.$newfile;
|
//print $oldfile.' - '.$newfile;
|
||||||
if ($newlabel != $oldlabel)
|
if ($newlabel != $oldlabel)
|
||||||
{
|
{
|
||||||
$result=dol_move($oldfile, $newfile);
|
$result=dol_move($oldfile, $newfile); // This include update of database
|
||||||
if (! $result)
|
if (! $result)
|
||||||
{
|
{
|
||||||
$langs->load('errors');
|
$langs->load('errors');
|
||||||
@ -153,44 +159,62 @@ if ($action == 'update')
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Now we update index of file
|
||||||
|
$db->begin();
|
||||||
|
|
||||||
if (! $error)
|
if (! $error)
|
||||||
{
|
{
|
||||||
//$db->commit();
|
if (is_object($object))
|
||||||
|
{
|
||||||
|
if ($shareenabled)
|
||||||
|
{
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
|
||||||
|
$object->share = getRandomPassword(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$object->share = '';
|
||||||
|
}
|
||||||
|
$result = $object->update($user);
|
||||||
|
if ($result < 0)
|
||||||
|
{
|
||||||
|
$error++;
|
||||||
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$error)
|
||||||
|
{
|
||||||
|
$db->commit();
|
||||||
$urlfile=$newlabel;
|
$urlfile=$newlabel;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//$db->rollback();
|
$db->rollback();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************
|
/*
|
||||||
* PAGE
|
* View
|
||||||
*
|
*/
|
||||||
* Put here all code to do according to value of "action" parameter
|
|
||||||
********************************************************************/
|
|
||||||
|
|
||||||
llxHeader();
|
|
||||||
|
|
||||||
$form=new Form($db);
|
$form=new Form($db);
|
||||||
|
|
||||||
$fullpath=$conf->ecm->dir_output.'/'.$relativepath.$urlfile;
|
llxHeader();
|
||||||
|
|
||||||
$file = new stdClass();
|
|
||||||
$file->section_id=$ecmdir->id;
|
|
||||||
$file->label=$urlfile;
|
|
||||||
|
|
||||||
$head = ecm_file_prepare_head($file);
|
$head = ecm_file_prepare_head($file);
|
||||||
|
|
||||||
if ($_GET["action"] == 'edit')
|
if ($action == 'edit')
|
||||||
{
|
{
|
||||||
print '<form name="update" action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
print '<form name="update" action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||||
print '<input type="hidden" name="section" value="'.$section.'">';
|
print '<input type="hidden" name="section" value="'.$section.'">';
|
||||||
print '<input type="hidden" name="urlfile" value="'.$urlfile.'">';
|
print '<input type="hidden" name="urlfile" value="'.$urlfile.'">';
|
||||||
print '<input type="hidden" name="action" value="update">';
|
print '<input type="hidden" name="action" value="update">';
|
||||||
|
print '<input type="hidden" name="id" value="'.$object->id.'">';
|
||||||
}
|
}
|
||||||
|
|
||||||
dol_fiche_head($head, 'card', $langs->trans("File"), 0, 'generic');
|
dol_fiche_head($head, 'card', $langs->trans("File"), 0, 'generic');
|
||||||
@ -221,11 +245,11 @@ while ($tmpecmdir && $result > 0)
|
|||||||
print img_picto('','object_dir').' <a href="'.DOL_URL_ROOT.'/ecm/index.php">'.$langs->trans("ECMRoot").'</a> -> ';
|
print img_picto('','object_dir').' <a href="'.DOL_URL_ROOT.'/ecm/index.php">'.$langs->trans("ECMRoot").'</a> -> ';
|
||||||
print $s;
|
print $s;
|
||||||
print ' -> ';
|
print ' -> ';
|
||||||
if (GETPOST('action','aZ09') == 'edit') print '<input type="text" name="label" class="quatrevingtpercent" value="'.$urlfile.'">';
|
if ($action == 'edit') print '<input type="text" name="label" class="quatrevingtpercent" value="'.$urlfile.'">';
|
||||||
else print $urlfile;
|
else print $urlfile;
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
/*print '<tr><td class="tdtop">'.$langs->trans("Description").'</td><td>';
|
/*print '<tr><td class="tdtop">'.$langs->trans("Description").'</td><td>';
|
||||||
if ($_GET["action"] == 'edit')
|
if ($action == 'edit')
|
||||||
{
|
{
|
||||||
print '<textarea class="flat" name="description" cols="80">';
|
print '<textarea class="flat" name="description" cols="80">';
|
||||||
print $ecmdir->description;
|
print $ecmdir->description;
|
||||||
@ -253,31 +277,89 @@ print dol_print_size($totalsize);
|
|||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
print '<tr><td>'.$langs->trans("HashOfFileContent").'</td><td>';
|
||||||
|
$object = new EcmFiles($db);
|
||||||
|
//$filenametosearch=basename($filepath);
|
||||||
|
//$filedirtosearch=basedir($filepath);
|
||||||
|
$object->fetch(0, '', $filepathtodocument);
|
||||||
|
if (! empty($object->label))
|
||||||
|
{
|
||||||
|
print $object->label;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print img_warning().' '.$langs->trans("FileNotYetIndexedInDatabase");
|
||||||
|
}
|
||||||
|
print '</td></tr>';
|
||||||
|
|
||||||
// Define $urlwithroot
|
// Define $urlwithroot
|
||||||
$urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root));
|
$urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root));
|
||||||
$urlwithroot=$urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file
|
$urlwithroot=$urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file
|
||||||
//$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current
|
//$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current
|
||||||
|
|
||||||
print '<tr><td>'.$langs->trans("DirectDownloadLink").'</td><td>';
|
print '<tr><td>'.$langs->trans("DirectDownloadInternalLink").'</td><td>';
|
||||||
$modulepart='ecm';
|
$modulepart='ecm';
|
||||||
$forcedownload=1;
|
$forcedownload=1;
|
||||||
$rellink='/document.php?modulepart='.$modulepart;
|
$rellink='/document.php?modulepart='.$modulepart;
|
||||||
if ($forcedownload) $rellink.='&attachment=1';
|
if ($forcedownload) $rellink.='&attachment=1';
|
||||||
if (! empty($object->entity)) $rellink.='&entity='.$object->entity;
|
if (! empty($object->entity)) $rellink.='&entity='.$object->entity;
|
||||||
$filepath=$relativepath.$file->label;
|
|
||||||
$rellink.='&file='.urlencode($filepath);
|
$rellink.='&file='.urlencode($filepath);
|
||||||
$fulllink=$urlwithroot.$rellink;
|
$fulllink=$urlwithroot.$rellink;
|
||||||
print img_picto('','object_globe.png').' ';
|
print img_picto('','object_globe.png').' ';
|
||||||
print '<input type="text" class="quatrevingtpercent" id="downloadlink" name="downloadlink" value="'.dol_escape_htmltag($fulllink).'">';
|
if ($action != 'edit') print '<input type="text" class="quatrevingtpercent" id="downloadinternallink" name="downloadinternellink" value="'.dol_escape_htmltag($fulllink).'">';
|
||||||
print ' <a href="'.$fulllink.'">'.$langs->trans("Download").'</a>';
|
else print $fulllink;
|
||||||
|
if ($action != 'edit') print ' <a href="'.$fulllink.'">'.$langs->trans("Download").'</a>';
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
|
print '<tr><td>';
|
||||||
|
if ($action != 'edit') print $langs->trans("DirectDownloadLink");
|
||||||
|
else print $langs->trans("FileSharedViaALink");
|
||||||
|
print '</td><td>';
|
||||||
|
if (! empty($object->share))
|
||||||
|
{
|
||||||
|
if ($action != 'edit')
|
||||||
|
{
|
||||||
|
$modulepart='ecm';
|
||||||
|
$forcedownload=1;
|
||||||
|
$rellink='/document.php?modulepart='.$modulepart;
|
||||||
|
if ($forcedownload) $rellink.='&attachment=1';
|
||||||
|
if (! empty($object->entity)) $rellink.='&entity='.$object->entity;
|
||||||
|
//$rellink.='&file='.urlencode($filepath); // No need of name of file for public link, we will use the hash
|
||||||
|
$fulllink=$urlwithroot.$rellink;
|
||||||
|
//if (! empty($object->ref)) $fulllink.='&hashn='.$object->ref; // Hash of file path
|
||||||
|
//elseif (! empty($object->label)) $fulllink.='&hashc='.$object->label; // Hash of file content
|
||||||
|
if (! empty($object->share)) $fulllink.='&hashp='.$object->share; // Hash for public share
|
||||||
|
print img_picto('','object_globe.png').' ';
|
||||||
|
if ($action != 'edit') print '<input type="text" class="quatrevingtpercent" id="downloadlink" name="downloadexternallink" value="'.dol_escape_htmltag($fulllink).'">';
|
||||||
|
else print $fulllink;
|
||||||
|
if ($action != 'edit') print ' <a href="'.$fulllink.'">'.$langs->trans("Download").'</a>';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print '<input type="checkbox" name="shareenabled"'.($object->share?' checked="checked"':'').' /> ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ($action != 'edit')
|
||||||
|
{
|
||||||
|
print '<span class="opacitymedium">'.$langs->trans("FileNotShared").'</span>';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print '<input type="checkbox" name="shareenabled"'.($object->share?' checked="checked"':'').' /> ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print '</td></tr>';
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
|
|
||||||
|
print ajax_autoselect('downloadinternallink');
|
||||||
print ajax_autoselect('downloadlink');
|
print ajax_autoselect('downloadlink');
|
||||||
|
|
||||||
dol_fiche_end();
|
dol_fiche_end();
|
||||||
|
|
||||||
if ($_GET["action"] == 'edit')
|
if ($action == 'edit')
|
||||||
{
|
{
|
||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input type="submit" class="button" name="submit" value="'.$langs->trans("Save").'">';
|
print '<input type="submit" class="button" name="submit" value="'.$langs->trans("Save").'">';
|
||||||
@ -290,13 +372,13 @@ if ($_GET["action"] == 'edit')
|
|||||||
|
|
||||||
|
|
||||||
// Confirmation de la suppression d'une ligne categorie
|
// Confirmation de la suppression d'une ligne categorie
|
||||||
if ($_GET['action'] == 'delete_file')
|
if ($action == 'delete_file')
|
||||||
{
|
{
|
||||||
print $form->formconfirm($_SERVER["PHP_SELF"].'?section='.urlencode($_GET["section"]), $langs->trans('DeleteFile'), $langs->trans('ConfirmDeleteFile',$urlfile), 'confirm_deletefile', '', 1, 1);
|
print $form->formconfirm($_SERVER["PHP_SELF"].'?section='.urlencode($_GET["section"]), $langs->trans('DeleteFile'), $langs->trans('ConfirmDeleteFile',$urlfile), 'confirm_deletefile', '', 1, 1);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($_GET["action"] != 'edit')
|
if ($action != 'edit')
|
||||||
{
|
{
|
||||||
// Actions buttons
|
// Actions buttons
|
||||||
print '<div class="tabsAction">';
|
print '<div class="tabsAction">';
|
||||||
@ -305,7 +387,7 @@ if ($_GET["action"] != 'edit')
|
|||||||
{
|
{
|
||||||
print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=edit§ion='.$section.'&urlfile='.urlencode($urlfile).'">'.$langs->trans('Edit').'</a>';
|
print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=edit§ion='.$section.'&urlfile='.urlencode($urlfile).'">'.$langs->trans('Edit').'</a>';
|
||||||
|
|
||||||
print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=cancel§ion='.$section.'&urlfile='.urlencode($urlfile).'&backtourl='.urlencode($backtourl).'">'.$langs->trans('Cancel').'</a>';
|
//print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=cancel§ion='.$section.'&urlfile='.urlencode($urlfile).'&backtourl='.urlencode($backtourl).'">'.$langs->trans('Cancel').'</a>';
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
if ($user->rights->ecm->setup)
|
if ($user->rights->ecm->setup)
|
||||||
|
|||||||
@ -143,26 +143,24 @@ if ($action == 'confirm_deletefile')
|
|||||||
{
|
{
|
||||||
if (GETPOST('confirm') == 'yes')
|
if (GETPOST('confirm') == 'yes')
|
||||||
{
|
{
|
||||||
|
// GETPOST('urlfile','alpha') is full relative URL from ecm root dir. Contains path of all sections.
|
||||||
|
//var_dump(GETPOST('urlfile'));exit;
|
||||||
$langs->load("other");
|
$langs->load("other");
|
||||||
if ($section)
|
|
||||||
{
|
|
||||||
$result=$ecmdir->fetch($section);
|
|
||||||
if (! ($result > 0))
|
|
||||||
{
|
|
||||||
dol_print_error($db,$ecmdir->error);
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
$relativepath=$ecmdir->getRelativePath();
|
|
||||||
}
|
|
||||||
else $relativepath='';
|
|
||||||
$upload_dir = $conf->ecm->dir_output.($relativepath?'/'.$relativepath:'');
|
$upload_dir = $conf->ecm->dir_output.($relativepath?'/'.$relativepath:'');
|
||||||
$file = $upload_dir . "/" . GETPOST('urlfile'); // Do not use urldecode here ($_GET and $_POST are already decoded by PHP).
|
$file = $upload_dir . "/" . GETPOST('urlfile','alpha'); // Do not use urldecode here ($_GET and $_POST are already decoded by PHP).
|
||||||
|
//var_dump($file);exit;
|
||||||
$ret=dol_delete_file($file);
|
|
||||||
if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs');
|
|
||||||
else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors');
|
|
||||||
|
|
||||||
|
$ret=dol_delete_file($file); // This include also the delete from file index in database.
|
||||||
|
if ($ret)
|
||||||
|
{
|
||||||
|
setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile','alpha')), null, 'mesgs');
|
||||||
$result=$ecmdir->changeNbOfFiles('-');
|
$result=$ecmdir->changeNbOfFiles('-');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile','alpha')), null, 'errors');
|
||||||
|
}
|
||||||
|
|
||||||
clearstatcache();
|
clearstatcache();
|
||||||
}
|
}
|
||||||
@ -375,7 +373,7 @@ else
|
|||||||
print '</a>';
|
print '</a>';
|
||||||
}
|
}
|
||||||
$url=((! empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_ECM_DISABLE_JS))?'#':($_SERVER["PHP_SELF"].'?action=refreshmanual'.($module?'&module='.$module:'').($section?'&section='.$section:'')));
|
$url=((! empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_ECM_DISABLE_JS))?'#':($_SERVER["PHP_SELF"].'?action=refreshmanual'.($module?'&module='.$module:'').($section?'&section='.$section:'')));
|
||||||
print '<a href="'.$url.'" class="inline-block valignmiddle toolbarbutton" title="'.dol_escape_htmltag($langs->trans('Refresh')).'">';
|
print '<a href="'.$url.'" class="inline-block valignmiddle toolbarbutton" title="'.dol_escape_htmltag($langs->trans('ReSyncListOfDir')).'">';
|
||||||
print '<img id="refreshbutton" class="toolbarbutton" border="0" src="'.DOL_URL_ROOT.'/theme/common/view-refresh.png">';
|
print '<img id="refreshbutton" class="toolbarbutton" border="0" src="'.DOL_URL_ROOT.'/theme/common/view-refresh.png">';
|
||||||
print '</a>';
|
print '</a>';
|
||||||
|
|
||||||
|
|||||||
@ -175,8 +175,18 @@ class Segment implements IteratorAggregate, Countable
|
|||||||
{
|
{
|
||||||
global $langs;
|
global $langs;
|
||||||
|
|
||||||
$patterns=array('/__CURRENTDAY__/','/__CURRENTDAYTEXT__/','/__CURRENTMONTHSHORT__/','/__CURRENTMONTH__/','/__CURRENTYEAR__/');
|
$hoy = dol_getdate(dol_now('tzuser'));
|
||||||
$values=array(date('j'), $langs->trans(date('l')), $langs->trans(date('M')), $langs->trans(date('F')), date('Y'));
|
$dateinonemontharray = dol_get_next_month($hoy['mon'], $hoy['year']);
|
||||||
|
$nextMonth = $dateinonemontharray['month'];
|
||||||
|
|
||||||
|
$patterns=array( '/__CURRENTDAY__/u','/__CURENTWEEKDAY__/u',
|
||||||
|
'/__CURRENTMONTH__/u','/__CURRENTMONTHLONG__/u',
|
||||||
|
'/__NEXTMONTH__/u','/__NEXTMONTHLONG__/u',
|
||||||
|
'/__CURRENTYEAR__/u','/__NEXTYEAR__/u' );
|
||||||
|
$values=array( $hoy['mday'], $langs->transnoentitiesnoconv($hoy['weekday']),
|
||||||
|
$hoy['mon'], $langs->transnoentitiesnoconv($hoy['month']),
|
||||||
|
$nextMonth, monthArray($langs)[$nextMonth],
|
||||||
|
$hoy['year'], $hoy['year']+1 );
|
||||||
|
|
||||||
$text=preg_replace($patterns, $values, $text);
|
$text=preg_replace($patterns, $values, $text);
|
||||||
|
|
||||||
|
|||||||
@ -73,6 +73,7 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
|
|||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_VALIDATE','Shipping validated','Executed when a shipping is validated','shipping',20);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_VALIDATE','Shipping validated','Executed when a shipping is validated','shipping',20);
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_SENTBYMAIL','Shipping sent by mail','Executed when a shipping is sent by mail','shipping',21);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_SENTBYMAIL','Shipping sent by mail','Executed when a shipping is sent by mail','shipping',21);
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_VALIDATE','Member validated','Executed when a member is validated','member',22);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_VALIDATE','Member validated','Executed when a member is validated','member',22);
|
||||||
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_SENTBYMAIL','Mails sent from member card','Executed when you send email from member card','member',23);
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_SUBSCRIPTION','Member subscribed','Executed when a member is subscribed','member',24);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_SUBSCRIPTION','Member subscribed','Executed when a member is subscribed','member',24);
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_RESILIATE','Member resiliated','Executed when a member is resiliated','member',25);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_RESILIATE','Member resiliated','Executed when a member is resiliated','member',25);
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_DELETE','Member deleted','Executed when a member is deleted','member',26);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_DELETE','Member deleted','Executed when a member is deleted','member',26);
|
||||||
|
|||||||
23
htdocs/install/mysql/data/llx_c_email_templates.sql
Normal file
23
htdocs/install/mysql/data/llx_c_email_templates.sql
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
-- Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
|
--
|
||||||
|
-- This program is free software; you can redistribute it and/or modify
|
||||||
|
-- it under the terms of the GNU General Public License as published by
|
||||||
|
-- the Free Software Foundation; either version 3 of the License, or
|
||||||
|
-- (at your option) any later version.
|
||||||
|
--
|
||||||
|
-- This program is distributed in the hope that it will be useful,
|
||||||
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
-- GNU General Public License for more details.
|
||||||
|
--
|
||||||
|
-- You should have received a copy of the GNU General Public License
|
||||||
|
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
--
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Ne pas placer de commentaire en fin de ligne, ce fichier est parsé lors
|
||||||
|
-- de l'install et tous les sigles '--' sont supprimés.
|
||||||
|
--
|
||||||
|
|
||||||
|
INSERT INTO llx_c_email_templates (entity,module,type_template,lang,private,fk_user,datec,label,position,active,topic,content,content_lines) VALUES (0,null,'member',null,0,null,null,'(SendAnEMailToMember)',1,1,'__(CardContent)__','__(ThisIsContentOfYourCard)__<br />\n__(ID)__ : __ID__<br />\n__(Civiliyty)__ : __MEMBER_CIVILITY__<br />\n__(Firstname)__ : __MEMBER_FIRSTNAME__<br />\n__(Lastname)__ : __MEMBER_LASTNAME__<br />\n__(Fullname)__ : __MEMBER_FULLNAME__<br />\n__(Company)__ : __MEMBER_COMPANY__<br />\n__(Address)__ : __MEMBER_ADDRESS__<br />\n__(Zip)__ : __MEMBER_ZIP__<br />\n__(Town)__ : __MEMBER_TOWN__<br />\n__(Country)__ : __MEMBER_COUNTRY__<br />\n__(Email)__ : __MEMBER_EMAIL__<br />\n__(Birthday)__ : __MEMBER_BIRTH__<br />\n__(Photo)__ : __MEMBER_PHOTO__<br />\n__(Login)__ : __MEMBER_LOGIN__<br />\n__(Password)__ : __MEMBER_PASSWORD__<br />\n__(Phone)__ : __MEMBER_PHONE__<br />\n__(PhonePerso)__ : __MEMBER_PHONEPRO__<br />\n__(PhoneMobile)__ : __MEMBER_PHONEMOBILE__',null);
|
||||||
@ -41,6 +41,13 @@ ALTER TABLE llx_website_page ADD COLUMN fk_user_modif integer;
|
|||||||
|
|
||||||
-- For 7.0
|
-- For 7.0
|
||||||
|
|
||||||
|
|
||||||
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_SENTBYMAIL','Mails sent from member card','Executed when you send email from member card','member',23);
|
||||||
|
|
||||||
|
ALTER TABLE llx_ecm_files MODIFY label varchar(128) NOT NULL;
|
||||||
|
ALTER TABLE llx_ecm_files ADD COLUMN share varchar(128) NULL after label;
|
||||||
|
|
||||||
|
|
||||||
ALTER TABLE llx_c_paiement ADD COLUMN position integer NOT NULL DEFAULT 0;
|
ALTER TABLE llx_c_paiement ADD COLUMN position integer NOT NULL DEFAULT 0;
|
||||||
ALTER TABLE llx_c_payment_term ADD COLUMN position integer NOT NULL DEFAULT 0;
|
ALTER TABLE llx_c_payment_term ADD COLUMN position integer NOT NULL DEFAULT 0;
|
||||||
|
|
||||||
@ -59,6 +66,8 @@ ALTER TABLE llx_contrat MODIFY COLUMN ref_ext varchar(50);
|
|||||||
|
|
||||||
UPDATE llx_c_email_templates SET position = 0 WHERE position IS NULL;
|
UPDATE llx_c_email_templates SET position = 0 WHERE position IS NULL;
|
||||||
|
|
||||||
|
INSERT INTO llx_c_email_templates (entity,module,type_template,lang,private,fk_user,datec,label,position,active,topic,content,content_lines) VALUES (0,null,'member',null,0,null,null,'(SendAnEMailToMember)',1,1,'__(CardContent)__','__(ThisIsContentOfYourCard)__<br />\n__(ID)__ : __ID__<br />\n__(Civiliyty)__ : __MEMBER_CIVILITY__<br />\n__(Firstname)__ : __MEMBER_FIRSTNAME__<br />\n__(Lastname)__ : __MEMBER_LASTNAME__<br />\n__(Fullname)__ : __MEMBER_FULLNAME__<br />\n__(Company)__ : __MEMBER_COMPANY__<br />\n__(Address)__ : __MEMBER_ADDRESS__<br />\n__(Zip)__ : __MEMBER_ZIP__<br />\n__(Town)__ : __MEMBER_TOWN__<br />\n__(Country)__ : __MEMBER_COUNTRY__<br />\n__(Email)__ : __MEMBER_EMAIL__<br />\n__(Birthday)__ : __MEMBER_BIRTH__<br />\n__(Photo)__ : __MEMBER_PHOTO__<br />\n__(Login)__ : __MEMBER_LOGIN__<br />\n__(Password)__ : __MEMBER_PASSWORD__<br />\n__(Phone)__ : __MEMBER_PHONE__<br />\n__(PhonePerso)__ : __MEMBER_PHONEPRO__<br />\n__(PhoneMobile)__ : __MEMBER_PHONEMOBILE__',null);
|
||||||
|
|
||||||
INSERT INTO llx_c_accounting_category (rowid, code, label, range_account, sens, category_type, formula, position, fk_country, active) VALUES ( 1, 'VENTES', 'Income of products/services', 'Exemple: 7xxxxx', 0, 0, '', '10', 1, 1);
|
INSERT INTO llx_c_accounting_category (rowid, code, label, range_account, sens, category_type, formula, position, fk_country, active) VALUES ( 1, 'VENTES', 'Income of products/services', 'Exemple: 7xxxxx', 0, 0, '', '10', 1, 1);
|
||||||
INSERT INTO llx_c_accounting_category (rowid, code, label, range_account, sens, category_type, formula, position, fk_country, active) VALUES ( 2, 'DEPENSES', 'Expenses of products/services', 'Exemple: 6xxxxx', 0, 0, '', '20', 1, 1);
|
INSERT INTO llx_c_accounting_category (rowid, code, label, range_account, sens, category_type, formula, position, fk_country, active) VALUES ( 2, 'DEPENSES', 'Expenses of products/services', 'Exemple: 6xxxxx', 0, 0, '', '20', 1, 1);
|
||||||
INSERT INTO llx_c_accounting_category (rowid, code, label, range_account, sens, category_type, formula, position, fk_country, active) VALUES ( 3, 'PROFIT', 'Balance', '', 0, 1, 'VENTES+DEPENSES', '30', 1, 1);
|
INSERT INTO llx_c_accounting_category (rowid, code, label, range_account, sens, category_type, formula, position, fk_country, active) VALUES ( 3, 'PROFIT', 'Balance', '', 0, 1, 'VENTES+DEPENSES', '30', 1, 1);
|
||||||
|
|||||||
@ -19,8 +19,9 @@
|
|||||||
CREATE TABLE llx_ecm_files
|
CREATE TABLE llx_ecm_files
|
||||||
(
|
(
|
||||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||||
ref varchar(128), -- Not used yet. Will contains a hash id from filename+filepath
|
ref varchar(128), -- contains a hash id from filename+filepath
|
||||||
label varchar(64) NOT NULL, -- label contains a md5
|
label varchar(128) NOT NULL, -- contains hash of file content
|
||||||
|
share varchar(128) NULL, -- contains a hash for file sharing
|
||||||
entity integer DEFAULT 1 NOT NULL, -- multi company id
|
entity integer DEFAULT 1 NOT NULL, -- multi company id
|
||||||
filepath varchar(255) NOT NULL, -- relative to dolibarr document dir. Example module/def
|
filepath varchar(255) NOT NULL, -- relative to dolibarr document dir. Example module/def
|
||||||
filename varchar(255) NOT NULL, -- file name only without any directory
|
filename varchar(255) NOT NULL, -- file name only without any directory
|
||||||
|
|||||||
@ -1704,6 +1704,7 @@ MailToSendSupplierOrder=To send supplier order
|
|||||||
MailToSendSupplierInvoice=To send supplier invoice
|
MailToSendSupplierInvoice=To send supplier invoice
|
||||||
MailToSendContract=To send a contract
|
MailToSendContract=To send a contract
|
||||||
MailToThirdparty=To send email from third party page
|
MailToThirdparty=To send email from third party page
|
||||||
|
MailToMember=To send email from member page
|
||||||
ByDefaultInList=Show by default on list view
|
ByDefaultInList=Show by default on list view
|
||||||
YouUseLastStableVersion=You use the latest stable version
|
YouUseLastStableVersion=You use the latest stable version
|
||||||
TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
|
TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
|
||||||
|
|||||||
@ -149,7 +149,7 @@ ErrorCantCancelIfReplacementInvoiceNotValidated=Error, can't cancel an invoice t
|
|||||||
BillFrom=From
|
BillFrom=From
|
||||||
BillTo=To
|
BillTo=To
|
||||||
ActionsOnBill=Actions on invoice
|
ActionsOnBill=Actions on invoice
|
||||||
RecurringInvoiceTemplate=Template/Recurring invoice
|
RecurringInvoiceTemplate=Template / Recurring invoice
|
||||||
NoQualifiedRecurringInvoiceTemplateFound=No recurring template invoice qualified for generation.
|
NoQualifiedRecurringInvoiceTemplateFound=No recurring template invoice qualified for generation.
|
||||||
FoundXQualifiedRecurringInvoiceTemplate=Found %s recurring template invoice(s) qualified for generation.
|
FoundXQualifiedRecurringInvoiceTemplate=Found %s recurring template invoice(s) qualified for generation.
|
||||||
NotARecurringInvoiceTemplate=Not a recurring template invoice
|
NotARecurringInvoiceTemplate=Not a recurring template invoice
|
||||||
@ -331,6 +331,7 @@ ListOfNextSituationInvoices=List of next situation invoices
|
|||||||
FrequencyPer_d=Every %s days
|
FrequencyPer_d=Every %s days
|
||||||
FrequencyPer_m=Every %s months
|
FrequencyPer_m=Every %s months
|
||||||
FrequencyPer_y=Every %s years
|
FrequencyPer_y=Every %s years
|
||||||
|
FrequencyUnit=Frequency unit
|
||||||
toolTipFrequency=Examples:<br><b>Set 7, Day</b>: give a new invoice every 7 days<br><b>Set 3, Month</b>: give a new invoice every 3 month
|
toolTipFrequency=Examples:<br><b>Set 7, Day</b>: give a new invoice every 7 days<br><b>Set 3, Month</b>: give a new invoice every 3 month
|
||||||
NextDateToExecution=Date for next invoice generation
|
NextDateToExecution=Date for next invoice generation
|
||||||
DateLastGeneration=Date of latest generation
|
DateLastGeneration=Date of latest generation
|
||||||
|
|||||||
@ -41,4 +41,8 @@ ECMDirectoryForFiles=Relative directory for files
|
|||||||
CannotRemoveDirectoryContainsFiles=Removed not possible because it contains some files
|
CannotRemoveDirectoryContainsFiles=Removed not possible because it contains some files
|
||||||
ECMFileManager=File manager
|
ECMFileManager=File manager
|
||||||
ECMSelectASection=Select a directory on left tree...
|
ECMSelectASection=Select a directory on left tree...
|
||||||
DirNotSynchronizedSyncFirst=This directory seems to be created or modified outside ECM module. You must click on "Refresh" button first to synchronize disk and database to get content of this directory.
|
DirNotSynchronizedSyncFirst=This directory seems to be created or modified outside ECM module. You must click on "Resync" button first to synchronize disk and database to get content of this directory.
|
||||||
|
ReSyncListOfDir=Resync list of directories
|
||||||
|
HashOfFileContent=Hash of file content
|
||||||
|
FileNotYetIndexedInDatabase=File not yet indexed into database (try to re-upload it)
|
||||||
|
FileSharedViaALink=File shared via a link
|
||||||
@ -70,7 +70,10 @@ EMailSentToNRecipients=EMail sent to %s recipients.
|
|||||||
EMailSentForNElements=EMail sent for %s elements.
|
EMailSentForNElements=EMail sent for %s elements.
|
||||||
XTargetsAdded=<b>%s</b> recipients added into target list
|
XTargetsAdded=<b>%s</b> recipients added into target list
|
||||||
OnlyPDFattachmentSupported=If the PDF documents were already generated for the objects to send, they will be attached to email. If not, no email will be sent (also, note that only pdf documents are supported as attachment in mass sending in this version).
|
OnlyPDFattachmentSupported=If the PDF documents were already generated for the objects to send, they will be attached to email. If not, no email will be sent (also, note that only pdf documents are supported as attachment in mass sending in this version).
|
||||||
AllRecipientSelected=The %s unique recipients selected (1 email per recipient), and if an email is set.
|
AllRecipientSelected=The recipients of the %s record selected (if their email is known).
|
||||||
|
GroupEmails=Group emails
|
||||||
|
OneEmailPerRecipient=One email per recipient (by default, one email per record selected)
|
||||||
|
WarningIfYouCheckOneRecipientPerEmail=Warning, if you check this box, it means only one email will be sent for several different record selected, so, if your message contains substitution variables that refers to data of a record, it becomes not possible to replace them.
|
||||||
ResultOfMailSending=Result of mass EMail sending
|
ResultOfMailSending=Result of mass EMail sending
|
||||||
NbSelected=Nb selected
|
NbSelected=Nb selected
|
||||||
NbIgnored=Nb ignored
|
NbIgnored=Nb ignored
|
||||||
@ -159,5 +162,5 @@ OutGoingEmailSetup=Outgoing email setup
|
|||||||
InGoingEmailSetup=Incoming email setup
|
InGoingEmailSetup=Incoming email setup
|
||||||
OutGoingEmailSetupForEmailing=Outgoing email setup (for mass emailing)
|
OutGoingEmailSetupForEmailing=Outgoing email setup (for mass emailing)
|
||||||
DefaultOutgoingEmailSetup=Default outgoing email setup
|
DefaultOutgoingEmailSetup=Default outgoing email setup
|
||||||
|
Information=Information
|
||||||
|
|
||||||
|
|||||||
@ -792,7 +792,8 @@ GroupBy=Group by...
|
|||||||
ViewFlatList=View flat list
|
ViewFlatList=View flat list
|
||||||
RemoveString=Remove string '%s'
|
RemoveString=Remove string '%s'
|
||||||
SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
|
SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
|
||||||
DirectDownloadLink=Direct download link
|
DirectDownloadLink=Direct download link (public/external)
|
||||||
|
DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
|
||||||
Download=Download
|
Download=Download
|
||||||
ActualizeCurrency=Update currency rate
|
ActualizeCurrency=Update currency rate
|
||||||
Fiscalyear=Fiscal year
|
Fiscalyear=Fiscal year
|
||||||
@ -809,6 +810,7 @@ ImportId=Import id
|
|||||||
Websites=Web sites
|
Websites=Web sites
|
||||||
Events=Events
|
Events=Events
|
||||||
EMailTemplates=Emails templates
|
EMailTemplates=Emails templates
|
||||||
|
FileNotShared=File not shared to exernal public
|
||||||
# Week day
|
# Week day
|
||||||
Monday=Monday
|
Monday=Monday
|
||||||
Tuesday=Tuesday
|
Tuesday=Tuesday
|
||||||
|
|||||||
@ -37,7 +37,7 @@ VirtualHostUrlNotDefined=URL of the virtual host served by external web server n
|
|||||||
NoPageYet=No pages yet
|
NoPageYet=No pages yet
|
||||||
SyntaxHelp=Help on specific syntax tips
|
SyntaxHelp=Help on specific syntax tips
|
||||||
YouCanEditHtmlSourceckeditor=You can edit HTML source code using the "Source" button in editor.
|
YouCanEditHtmlSourceckeditor=You can edit HTML source code using the "Source" button in editor.
|
||||||
YouCanEditHtmlSource=You can include PHP code into this source using tags <strong><?php ?></strong>. The following global variables are available: $conf, $langs, $db, $mysoc, $user, $website.<br><br>You can also include content of another Page/Container with the following syntax: <strong><?php dolIncludeHtmlContent($websitekey.'/contentaliastoinclude.php'); ?></strong><br><br>To include a link to download a file stored into the <strong>documents</strong> directory, use the <strong>document.php</strong> wrapper:<br>Example, for a file into documents/ecm (need to be logged), syntax is:<br><strong><a href="/document.php?modulepart=ecm&file=reldir/filename.ext"></strong>.<br>for a file into documents/media (open access), syntax is:<br><strong><a href="/document.php?modulepart=medias&file=reldir/filename.ext"></strong>.<br><br>To include an image stored into the <strong>documents</strong> directory, use the <strong>viewimage.php</strong> wrapper:<br>Example, for an image into documents/media (open access), syntax is:<br><strong><a href="/viewimage.php?modulepart=medias&file=filename.ext"></strong>.
|
YouCanEditHtmlSource=You can include PHP code into this source using tags <strong><?php ?></strong>. The following global variables are available: $conf, $langs, $db, $mysoc, $user, $website.<br><br>You can also include content of another Page/Container with the following syntax: <strong><?php dolIncludeHtmlContent($websitekey.'/contentaliastoinclude.php'); ?></strong><br><br>To include a link to download a file stored into the <strong>documents</strong> directory, use the <strong>document.php</strong> wrapper:<br>Example, for a file into documents/ecm (need to be logged), syntax is:<br><strong><a href="/document.php?modulepart=ecm&file=reldir/filename.ext"></strong>.<br>for a file into documents/media (open public access), syntax is:<br><strong><a href="/document.php?modulepart=medias[&hashp=publicsharekey if modulepart != medias]"></strong>.<br><br>To include an image stored into the <strong>documents</strong> directory, use the <strong>viewimage.php</strong> wrapper:<br>Example, for an image into documents/media (open access), syntax is:<br><strong><a href="/viewimage.php?modulepart=medias&file=filename.ext"></strong>.
|
||||||
ClonePage=Clone page/container
|
ClonePage=Clone page/container
|
||||||
CloneSite=Clone site
|
CloneSite=Clone site
|
||||||
ConfirmClonePage=Please enter code/alias of new page and if it is a translation of the cloned page.
|
ConfirmClonePage=Please enter code/alias of new page and if it is a translation of the cloned page.
|
||||||
|
|||||||
@ -491,8 +491,8 @@ $totalarray=array();
|
|||||||
while ($i < min($num, $limit))
|
while ($i < min($num, $limit))
|
||||||
{
|
{
|
||||||
$obj = $db->fetch_object($resql);
|
$obj = $db->fetch_object($resql);
|
||||||
if ($obj)
|
if (empty($obj)) break; // Should not happen
|
||||||
{
|
|
||||||
// Store properties in $object
|
// Store properties in $object
|
||||||
$object->id = $obj->rowid;
|
$object->id = $obj->rowid;
|
||||||
foreach($object->fields as $key => $val)
|
foreach($object->fields as $key => $val)
|
||||||
@ -587,7 +587,7 @@ while ($i < min($num, $limit))
|
|||||||
if (! $i) $totalarray['nbfield']++;
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
}
|
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -607,7 +607,7 @@ if (isset($totalarray['pos']))
|
|||||||
if ($num < $limit) print '<td align="left">'.$langs->trans("Total").'</td>';
|
if ($num < $limit) print '<td align="left">'.$langs->trans("Total").'</td>';
|
||||||
else print '<td align="left">'.$langs->trans("Totalforthispage").'</td>';
|
else print '<td align="left">'.$langs->trans("Totalforthispage").'</td>';
|
||||||
}
|
}
|
||||||
print '<td></td>';
|
else print '<td></td>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|||||||
@ -528,7 +528,7 @@ if ($action == 'create' && $user->rights->projet->creer)
|
|||||||
print '</td><td class="maxwidthonsmartphone">';
|
print '</td><td class="maxwidthonsmartphone">';
|
||||||
$filteronlist='';
|
$filteronlist='';
|
||||||
if (! empty($conf->global->PROJECT_FILTER_FOR_THIRDPARTY_LIST)) $filteronlist=$conf->global->PROJECT_FILTER_FOR_THIRDPARTY_LIST;
|
if (! empty($conf->global->PROJECT_FILTER_FOR_THIRDPARTY_LIST)) $filteronlist=$conf->global->PROJECT_FILTER_FOR_THIRDPARTY_LIST;
|
||||||
$text=$form->select_thirdparty_list(GETPOST('socid','int'), 'socid', $filteronlist, 'SelectThirdParty', 1, 0, array(), '', 0, 0, 'minwidth300');
|
$text=$form->select_company(GETPOST('socid','int'), 'socid', $filteronlist, 'SelectThirdParty', 1, 0, array(), 0, 'minwidth300');
|
||||||
if (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) && empty($conf->dol_use_jmobile))
|
if (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) && empty($conf->dol_use_jmobile))
|
||||||
{
|
{
|
||||||
$texthelp=$langs->trans("IfNeedToUseOhterObjectKeepEmpty");
|
$texthelp=$langs->trans("IfNeedToUseOhterObjectKeepEmpty");
|
||||||
@ -747,7 +747,7 @@ elseif ($object->id > 0)
|
|||||||
print '</td><td>';
|
print '</td><td>';
|
||||||
$filteronlist='';
|
$filteronlist='';
|
||||||
if (! empty($conf->global->PROJECT_FILTER_FOR_THIRDPARTY_LIST)) $filteronlist=$conf->global->PROJECT_FILTER_FOR_THIRDPARTY_LIST;
|
if (! empty($conf->global->PROJECT_FILTER_FOR_THIRDPARTY_LIST)) $filteronlist=$conf->global->PROJECT_FILTER_FOR_THIRDPARTY_LIST;
|
||||||
$text=$form->select_thirdparty_list($object->thirdparty->id, 'socid', $filteronlist, 'None', 1, 0, array(), '', 0, 0, 'minwidth300');
|
$text=$form->select_company($object->thirdparty->id, 'socid', $filteronlist, 'None', 1, 0, array(), 0, 'minwidth300');
|
||||||
if (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) && empty($conf->dol_use_jmobile))
|
if (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) && empty($conf->dol_use_jmobile))
|
||||||
{
|
{
|
||||||
$texthelp=$langs->trans("IfNeedToUseOhterObjectKeepEmpty");
|
$texthelp=$langs->trans("IfNeedToUseOhterObjectKeepEmpty");
|
||||||
|
|||||||
@ -20,7 +20,7 @@
|
|||||||
/**
|
/**
|
||||||
* \file htdocs/projet/document.php
|
* \file htdocs/projet/document.php
|
||||||
* \ingroup project
|
* \ingroup project
|
||||||
* \brief Page de gestion des documents attachees a un projet
|
* \brief Page to managed related documents linked to a project
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require '../main.inc.php';
|
require '../main.inc.php';
|
||||||
|
|||||||
@ -643,33 +643,6 @@ foreach ($listofreferent as $key => $value)
|
|||||||
$total_ttc = -$total_ttc;
|
$total_ttc = -$total_ttc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*switch ($classname) {
|
|
||||||
case 'FactureFournisseur':
|
|
||||||
$newclassname = 'SupplierInvoice';
|
|
||||||
break;
|
|
||||||
case 'Facture':
|
|
||||||
$newclassname = 'Bill';
|
|
||||||
break;
|
|
||||||
case 'Propal':
|
|
||||||
$newclassname = 'CommercialProposal';
|
|
||||||
break;
|
|
||||||
case 'Commande':
|
|
||||||
$newclassname = 'Order';
|
|
||||||
break;
|
|
||||||
case 'Expedition':
|
|
||||||
$newclassname = 'Sending';
|
|
||||||
break;
|
|
||||||
case 'Contrat':
|
|
||||||
$newclassname = 'Contract';
|
|
||||||
break;
|
|
||||||
case 'MouvementStock':
|
|
||||||
$newclassname = 'StockMovement';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
$newclassname = $classname;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
$var = ! $var;
|
|
||||||
print '<tr class="oddeven">';
|
print '<tr class="oddeven">';
|
||||||
// Module
|
// Module
|
||||||
print '<td align="left">'.$name.'</td>';
|
print '<td align="left">'.$name.'</td>';
|
||||||
@ -693,7 +666,6 @@ print '</tr>';
|
|||||||
print "</table>";
|
print "</table>";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
print '<br><br>';
|
print '<br><br>';
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
@ -771,7 +743,7 @@ foreach ($listofreferent as $key => $value)
|
|||||||
print '<table class="noborder" width="100%">';
|
print '<table class="noborder" width="100%">';
|
||||||
|
|
||||||
print '<tr class="liste_titre">';
|
print '<tr class="liste_titre">';
|
||||||
// Remove link
|
// Remove link column
|
||||||
print '<td style="width: 24px"></td>';
|
print '<td style="width: 24px"></td>';
|
||||||
// Ref
|
// Ref
|
||||||
print '<td'.(($tablename != 'actioncomm' && $tablename != 'projet_task') ? ' style="width: 200px"':'').'>'.$langs->trans("Ref").'</td>';
|
print '<td'.(($tablename != 'actioncomm' && $tablename != 'projet_task') ? ' style="width: 200px"':'').'>'.$langs->trans("Ref").'</td>';
|
||||||
@ -862,12 +834,16 @@ foreach ($listofreferent as $key => $value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
print '<tr class="oddeven">';
|
print '<tr class="oddeven">';
|
||||||
|
|
||||||
// Remove link
|
// Remove link
|
||||||
print '<td style="width: 24px">';
|
print '<td style="width: 24px">';
|
||||||
if ($tablename != 'projet_task' && $tablename != 'stock_mouvement')
|
if ($tablename != 'projet_task' && $tablename != 'stock_mouvement')
|
||||||
|
{
|
||||||
|
if (empty($conf->global->PROJECT_DISABLE_UNLINK_FROM_OVERVIEW) || $user->admin) // PROJECT_DISABLE_UNLINK_FROM_OVERVIEW is empty by defaut, so this test true
|
||||||
{
|
{
|
||||||
print '<a href="' . $_SERVER["PHP_SELF"] . '?id=' . $projectid . '&action=unlink&tablename=' . $tablename . '&elementselect=' . $element->id . '">' . img_picto($langs->trans('Unlink'), 'editdelete') . '</a>';
|
print '<a href="' . $_SERVER["PHP_SELF"] . '?id=' . $projectid . '&action=unlink&tablename=' . $tablename . '&elementselect=' . $element->id . '">' . img_picto($langs->trans('Unlink'), 'editdelete') . '</a>';
|
||||||
}
|
}
|
||||||
|
}
|
||||||
print "</td>\n";
|
print "</td>\n";
|
||||||
|
|
||||||
// Ref
|
// Ref
|
||||||
|
|||||||
@ -397,7 +397,7 @@ if ($id > 0 || ! empty($ref))
|
|||||||
|
|
||||||
print '<td colspan="1">';
|
print '<td colspan="1">';
|
||||||
$thirdpartyofproject=$projectstatic->getListContactId('thirdparty');
|
$thirdpartyofproject=$projectstatic->getListContactId('thirdparty');
|
||||||
$selectedCompany = isset($_GET["newcompany"])?$_GET["newcompany"]:$projectstatic->societe->id;
|
$selectedCompany = isset($_GET["newcompany"])?$_GET["newcompany"]:$projectstatic->socid;
|
||||||
$selectedCompany = $formcompany->selectCompaniesForNewContact($object, 'id', $selectedCompany, 'newcompany', $thirdpartyofproject, 0, '&withproject='.$withproject);
|
$selectedCompany = $formcompany->selectCompaniesForNewContact($object, 'id', $selectedCompany, 'newcompany', $thirdpartyofproject, 0, '&withproject='.$withproject);
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
|
|||||||
@ -66,21 +66,22 @@ $suffix=GETPOST("suffix",'aZ09');
|
|||||||
$amount=price2num(GETPOST("amount",'alpha'));
|
$amount=price2num(GETPOST("amount",'alpha'));
|
||||||
if (! GETPOST("currency",'alpha')) $currency=$conf->currency;
|
if (! GETPOST("currency",'alpha')) $currency=$conf->currency;
|
||||||
else $currency=GETPOST("currency",'alpha');
|
else $currency=GETPOST("currency",'alpha');
|
||||||
$source = GETPOST("source",'alpha');
|
$source = GETPOST("s",'alpha')?GETPOST("s",'alpha'):GETPOST("source",'alpha');
|
||||||
|
$download = GETPOST('d','int')?GETPOST('d','int'):GETPOST('download','int');
|
||||||
|
|
||||||
if (! $action)
|
if (! $action)
|
||||||
{
|
{
|
||||||
if (! GETPOST("amount",'alpha') && ! GETPOST("source",'alpha'))
|
if (! GETPOST("amount",'alpha') && ! $source)
|
||||||
{
|
{
|
||||||
print $langs->trans('ErrorBadParameters')." - amount or source";
|
print $langs->trans('ErrorBadParameters')." - amount or source";
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
if (is_numeric($amount) && ! GETPOST("tag",'alpha') && ! GETPOST("source",'alpha'))
|
if (is_numeric($amount) && ! GETPOST("tag",'alpha') && ! $source)
|
||||||
{
|
{
|
||||||
print $langs->trans('ErrorBadParameters')." - tag or source";
|
print $langs->trans('ErrorBadParameters')." - tag or source";
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
if (GETPOST("source",'alpha') && ! GETPOST("ref",'alpha'))
|
if ($source && ! GETPOST("ref",'alpha'))
|
||||||
{
|
{
|
||||||
print $langs->trans('ErrorBadParameters')." - ref";
|
print $langs->trans('ErrorBadParameters')." - ref";
|
||||||
exit;
|
exit;
|
||||||
@ -111,7 +112,6 @@ $urlok=$urlwithroot.'/public/payment/paymentok.php?';
|
|||||||
$urlko=$urlwithroot.'/public/payment/paymentko.php?';
|
$urlko=$urlwithroot.'/public/payment/paymentko.php?';
|
||||||
|
|
||||||
// Complete urls for post treatment
|
// Complete urls for post treatment
|
||||||
$SOURCE=GETPOST("source",'alpha');
|
|
||||||
$ref=$REF=GETPOST('ref','alpha');
|
$ref=$REF=GETPOST('ref','alpha');
|
||||||
$TAG=GETPOST("tag",'alpha');
|
$TAG=GETPOST("tag",'alpha');
|
||||||
$FULLTAG=GETPOST("fulltag",'alpha'); // fulltag is tag with more informations
|
$FULLTAG=GETPOST("fulltag",'alpha'); // fulltag is tag with more informations
|
||||||
@ -123,10 +123,10 @@ if (! empty($suffix))
|
|||||||
$urlok.='suffix='.urlencode($suffix).'&';
|
$urlok.='suffix='.urlencode($suffix).'&';
|
||||||
$urlko.='suffix='.urlencode($suffix).'&';
|
$urlko.='suffix='.urlencode($suffix).'&';
|
||||||
}
|
}
|
||||||
if (! empty($SOURCE))
|
if ($source)
|
||||||
{
|
{
|
||||||
$urlok.='source='.urlencode($SOURCE).'&';
|
$urlok.='s='.urlencode($source).'&';
|
||||||
$urlko.='source='.urlencode($SOURCE).'&';
|
$urlko.='s='.urlencode($source).'&';
|
||||||
}
|
}
|
||||||
if (! empty($REF))
|
if (! empty($REF))
|
||||||
{
|
{
|
||||||
@ -150,8 +150,8 @@ if (! empty($SECUREKEY))
|
|||||||
}
|
}
|
||||||
if (! empty($entity))
|
if (! empty($entity))
|
||||||
{
|
{
|
||||||
$urlok.='entity='.urlencode($entity).'&';
|
$urlok.='e='.urlencode($entity).'&';
|
||||||
$urlko.='entity='.urlencode($entity).'&';
|
$urlko.='e='.urlencode($entity).'&';
|
||||||
}
|
}
|
||||||
$urlok=preg_replace('/&$/','',$urlok); // Remove last &
|
$urlok=preg_replace('/&$/','',$urlok); // Remove last &
|
||||||
$urlko=preg_replace('/&$/','',$urlko); // Remove last &
|
$urlko=preg_replace('/&$/','',$urlko); // Remove last &
|
||||||
@ -223,7 +223,7 @@ if (! empty($conf->global->PAYMENT_SECURITY_TOKEN))
|
|||||||
{
|
{
|
||||||
if (! empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE))
|
if (! empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE))
|
||||||
{
|
{
|
||||||
if ($SOURCE && $REF) $token = dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . $SOURCE . $REF, 2); // Use the source in the hash to avoid duplicates if the references are identical
|
if ($source && $REF) $token = dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . $source . $REF, 2); // Use the source in the hash to avoid duplicates if the references are identical
|
||||||
else $token = dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
else $token = dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -335,18 +335,23 @@ if ($action == 'dopayment')
|
|||||||
|
|
||||||
$origfulltag=GETPOST("fulltag",'alpha');
|
$origfulltag=GETPOST("fulltag",'alpha');
|
||||||
|
|
||||||
|
// Securekey into back url useless for back url and we need an url lower than 150.
|
||||||
|
$urlok = preg_replace('/securekey=[^&]+/', '', $urlok);
|
||||||
|
$urlko = preg_replace('/securekey=[^&]+/', '', $urlko);
|
||||||
|
|
||||||
$mesg='';
|
$mesg='';
|
||||||
if (empty($PRICE) || ! is_numeric($PRICE)) $mesg=$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Amount"));
|
if (empty($PRICE) || ! is_numeric($PRICE)) $mesg=$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Amount"));
|
||||||
elseif (empty($email)) $mesg=$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("YourEMail"));
|
elseif (empty($email)) $mesg=$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("YourEMail"));
|
||||||
elseif (! isValidEMail($email)) $mesg=$langs->trans("ErrorBadEMail",$email);
|
elseif (! isValidEMail($email)) $mesg=$langs->trans("ErrorBadEMail",$email);
|
||||||
elseif (! $origfulltag) $mesg=$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("PaymentCode"));
|
elseif (! $origfulltag) $mesg=$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("PaymentCode"));
|
||||||
elseif (dol_strlen($urlok) > 150) $mesg='Error urlok too long '.$urlok;
|
elseif (dol_strlen($urlok) > 150) $mesg='Error urlok too long '.$urlok.'( Paybox requires 150, found '.strlen($urlok).')';
|
||||||
elseif (dol_strlen($urlko) > 150) $mesg='Error urlko too long '.$urlko;
|
elseif (dol_strlen($urlko) > 150) $mesg='Error urlko too long '.$urlko.'( Paybox requires 150, found '.strlen($urlok).')';
|
||||||
|
|
||||||
if (empty($mesg))
|
if (empty($mesg))
|
||||||
{
|
{
|
||||||
dol_syslog("newpayment.php call paybox api and do redirect", LOG_DEBUG);
|
dol_syslog("newpayment.php call paybox api and do redirect", LOG_DEBUG);
|
||||||
|
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/paybox/lib/paybox.lib.php';
|
||||||
print_paybox_redirect($PRICE, $conf->currency, $email, $urlok, $urlko, $FULLTAG);
|
print_paybox_redirect($PRICE, $conf->currency, $email, $urlok, $urlko, $FULLTAG);
|
||||||
|
|
||||||
session_destroy();
|
session_destroy();
|
||||||
@ -499,10 +504,10 @@ $conf->dol_hide_leftmenu=1;
|
|||||||
llxHeader($head, $langs->trans("PaymentForm"), '', '', 0, 0, '', '', '', 'onlinepaymentbody');
|
llxHeader($head, $langs->trans("PaymentForm"), '', '', 0, 0, '', '', '', 'onlinepaymentbody');
|
||||||
|
|
||||||
// Check link validity
|
// Check link validity
|
||||||
if (! empty($SOURCE) && in_array($ref, array('member_ref', 'contractline_ref', 'invoice_ref', 'order_ref', '')))
|
if ($source && in_array($ref, array('member_ref', 'contractline_ref', 'invoice_ref', 'order_ref', '')))
|
||||||
{
|
{
|
||||||
$langs->load("errors");
|
$langs->load("errors");
|
||||||
dol_print_error_email('BADREFINPAYMENTFORM', $langs->trans("ErrorBadLinkSourceSetButBadValueForRef", $SOURCE, $ref));
|
dol_print_error_email('BADREFINPAYMENTFORM', $langs->trans("ErrorBadLinkSourceSetButBadValueForRef", $source, $ref));
|
||||||
llxFooter();
|
llxFooter();
|
||||||
$db->close();
|
$db->close();
|
||||||
exit;
|
exit;
|
||||||
@ -528,7 +533,7 @@ print '<input type="hidden" name="action" value="dopayment">'."\n";
|
|||||||
print '<input type="hidden" name="tag" value="'.GETPOST("tag",'alpha').'">'."\n";
|
print '<input type="hidden" name="tag" value="'.GETPOST("tag",'alpha').'">'."\n";
|
||||||
print '<input type="hidden" name="suffix" value="'.GETPOST("suffix",'alpha').'">'."\n";
|
print '<input type="hidden" name="suffix" value="'.GETPOST("suffix",'alpha').'">'."\n";
|
||||||
print '<input type="hidden" name="securekey" value="'.$SECUREKEY.'">'."\n";
|
print '<input type="hidden" name="securekey" value="'.$SECUREKEY.'">'."\n";
|
||||||
print '<input type="hidden" name="entity" value="'.$entity.'" />';
|
print '<input type="hidden" name="e" value="'.$entity.'" />';
|
||||||
print "\n";
|
print "\n";
|
||||||
print '<!-- Form to send a payment -->'."\n";
|
print '<!-- Form to send a payment -->'."\n";
|
||||||
print '<!-- creditor = '.$creditor.' -->'."\n";
|
print '<!-- creditor = '.$creditor.' -->'."\n";
|
||||||
@ -602,7 +607,7 @@ print $text;
|
|||||||
// Output payment summary form
|
// Output payment summary form
|
||||||
print '<tr><td align="center">';
|
print '<tr><td align="center">';
|
||||||
print '<table with="100%" id="tablepublicpayment">';
|
print '<table with="100%" id="tablepublicpayment">';
|
||||||
print '<tr class="liste_total"><td align="left" colspan="2">'.$langs->trans("ThisIsInformationOnPayment").' :</td></tr>'."\n";
|
print '<tr><td align="left" colspan="2" class="opacitymedium">'.$langs->trans("ThisIsInformationOnPayment").' :</td></tr>'."\n";
|
||||||
|
|
||||||
$found=false;
|
$found=false;
|
||||||
$error=0;
|
$error=0;
|
||||||
@ -709,8 +714,8 @@ if ($source == 'order')
|
|||||||
$text='<b>'.$langs->trans("PaymentOrderRef",$order->ref).'</b>';
|
$text='<b>'.$langs->trans("PaymentOrderRef",$order->ref).'</b>';
|
||||||
print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Designation");
|
print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Designation");
|
||||||
print '</td><td class="CTableRow'.($var?'1':'2').'">'.$text;
|
print '</td><td class="CTableRow'.($var?'1':'2').'">'.$text;
|
||||||
print '<input type="hidden" name="source" value="'.GETPOST("source",'alpha').'">';
|
print '<input type="hidden" name="s" value="'.dol_escape_htmltag($source).'">';
|
||||||
print '<input type="hidden" name="ref" value="'.$order->ref.'">';
|
print '<input type="hidden" name="ref" value="'.dol_escape_htmltag($order->ref).'">';
|
||||||
print '</td></tr>'."\n";
|
print '</td></tr>'."\n";
|
||||||
|
|
||||||
// Amount
|
// Amount
|
||||||
@ -808,7 +813,7 @@ if ($source == 'invoice')
|
|||||||
|
|
||||||
print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Creditor");
|
print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Creditor");
|
||||||
print '</td><td class="CTableRow'.($var?'1':'2').'"><b>'.$creditor.'</b>';
|
print '</td><td class="CTableRow'.($var?'1':'2').'"><b>'.$creditor.'</b>';
|
||||||
print '<input type="hidden" name="creditor" value="'.$creditor.'">';
|
print '<input type="hidden" name="creditor" value="'.dol_escape_htmltag($creditor).'">';
|
||||||
print '</td></tr>'."\n";
|
print '</td></tr>'."\n";
|
||||||
|
|
||||||
// Debitor
|
// Debitor
|
||||||
@ -821,8 +826,8 @@ if ($source == 'invoice')
|
|||||||
$text='<b>'.$langs->trans("PaymentInvoiceRef",$invoice->ref).'</b>';
|
$text='<b>'.$langs->trans("PaymentInvoiceRef",$invoice->ref).'</b>';
|
||||||
print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Designation");
|
print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Designation");
|
||||||
print '</td><td class="CTableRow'.($var?'1':'2').'">'.$text;
|
print '</td><td class="CTableRow'.($var?'1':'2').'">'.$text;
|
||||||
print '<input type="hidden" name="source" value="'.GETPOST("source",'alpha').'">';
|
print '<input type="hidden" name="s" value="'.dol_escape_htmltag($source).'">';
|
||||||
print '<input type="hidden" name="ref" value="'.$invoice->ref.'">';
|
print '<input type="hidden" name="ref" value="'.dol_escape_htmltag($invoice->ref).'">';
|
||||||
print '</td></tr>'."\n";
|
print '</td></tr>'."\n";
|
||||||
|
|
||||||
// Amount
|
// Amount
|
||||||
@ -846,13 +851,21 @@ if ($source == 'invoice')
|
|||||||
print '</td></tr>'."\n";
|
print '</td></tr>'."\n";
|
||||||
|
|
||||||
// Tag
|
// Tag
|
||||||
|
|
||||||
print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("PaymentCode");
|
print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("PaymentCode");
|
||||||
print '</td><td class="CTableRow'.($var?'1':'2').'"><b>'.$fulltag.'</b>';
|
print '</td><td class="CTableRow'.($var?'1':'2').'"><b>'.$fulltag.'</b>';
|
||||||
print '<input type="hidden" name="tag" value="'.$tag.'">';
|
print '<input type="hidden" name="tag" value="'.$tag.'">';
|
||||||
print '<input type="hidden" name="fulltag" value="'.$fulltag.'">';
|
print '<input type="hidden" name="fulltag" value="'.$fulltag.'">';
|
||||||
print '</td></tr>'."\n";
|
print '</td></tr>'."\n";
|
||||||
|
|
||||||
|
// Add download link
|
||||||
|
if ($download > 0)
|
||||||
|
{
|
||||||
|
print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Document");
|
||||||
|
print '</td><td class="CTableRow'.($var?'1':'2').'">';
|
||||||
|
print $invoice->getDirectExternalLink(1);
|
||||||
|
print '</td></tr>'."\n";
|
||||||
|
}
|
||||||
|
|
||||||
// Shipping address
|
// Shipping address
|
||||||
$shipToName=$invoice->thirdparty->name;
|
$shipToName=$invoice->thirdparty->name;
|
||||||
$shipToStreet=$invoice->thirdparty->address;
|
$shipToStreet=$invoice->thirdparty->address;
|
||||||
@ -996,8 +1009,8 @@ if ($source == 'contractline')
|
|||||||
|
|
||||||
print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Designation");
|
print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Designation");
|
||||||
print '</td><td class="CTableRow'.($var?'1':'2').'">'.$text;
|
print '</td><td class="CTableRow'.($var?'1':'2').'">'.$text;
|
||||||
print '<input type="hidden" name="source" value="'.GETPOST("source",'alpha').'">';
|
print '<input type="hidden" name="source" value="'.dol_escape_htmltag($source).'">';
|
||||||
print '<input type="hidden" name="ref" value="'.$contractline->ref.'">';
|
print '<input type="hidden" name="ref" value="'.dol_escape_htmltag($contractline->ref).'">';
|
||||||
print '</td></tr>'."\n";
|
print '</td></tr>'."\n";
|
||||||
|
|
||||||
// Quantity
|
// Quantity
|
||||||
@ -1138,8 +1151,8 @@ if ($source == 'membersubscription')
|
|||||||
$text='<b>'.$langs->trans("PaymentSubscription").'</b>';
|
$text='<b>'.$langs->trans("PaymentSubscription").'</b>';
|
||||||
print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Designation");
|
print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Designation");
|
||||||
print '</td><td class="CTableRow'.($var?'1':'2').'">'.$text;
|
print '</td><td class="CTableRow'.($var?'1':'2').'">'.$text;
|
||||||
print '<input type="hidden" name="source" value="'.GETPOST("source",'alpha').'">';
|
print '<input type="hidden" name="source" value="'.dol_escape_htmltag($source).'">';
|
||||||
print '<input type="hidden" name="ref" value="'.$member->ref.'">';
|
print '<input type="hidden" name="ref" value="'.dol_escape_htmltag($member->ref).'">';
|
||||||
print '</td></tr>'."\n";
|
print '</td></tr>'."\n";
|
||||||
|
|
||||||
if ($member->last_subscription_date || $member->last_subscription_amount)
|
if ($member->last_subscription_date || $member->last_subscription_amount)
|
||||||
@ -1264,7 +1277,7 @@ if ($action != 'dopayment')
|
|||||||
if (! empty($conf->stripe->enabled))
|
if (! empty($conf->stripe->enabled))
|
||||||
{
|
{
|
||||||
// If STRIPE_PICTO_FOR_PAYMENT is 'cb' we show a picto of a crdit card instead of stripe
|
// If STRIPE_PICTO_FOR_PAYMENT is 'cb' we show a picto of a crdit card instead of stripe
|
||||||
print '<br><input class="button buttonpayment buttonpayment'.(empty($conf->global->STRIPE_PICTO_FOR_PAYMENT)?'stripe':$conf->global->STRIPE_PICTO_FOR_PAYMENT).'" type="submit" name="dopayment__stripe" value="'.$langs->trans("StripeDoPayment").'">';
|
print '<br><input class="button buttonpayment buttonpayment'.(empty($conf->global->STRIPE_PICTO_FOR_PAYMENT)?'stripe':$conf->global->STRIPE_PICTO_FOR_PAYMENT).'" type="submit" name="dopayment_stripe" value="'.$langs->trans("StripeDoPayment").'">';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! empty($conf->paypal->enabled))
|
if (! empty($conf->paypal->enabled))
|
||||||
@ -1357,12 +1370,12 @@ if (preg_match('/^dopayment/',$action))
|
|||||||
print '<input type="hidden" name="dopayment_stripe" value="1">'."\n";
|
print '<input type="hidden" name="dopayment_stripe" value="1">'."\n";
|
||||||
print '<input type="hidden" name="action" value="charge">'."\n";
|
print '<input type="hidden" name="action" value="charge">'."\n";
|
||||||
print '<input type="hidden" name="tag" value="'.$TAG.'">'."\n";
|
print '<input type="hidden" name="tag" value="'.$TAG.'">'."\n";
|
||||||
print '<input type="hidden" name="source" value="'.$SOURCE.'">'."\n";
|
print '<input type="hidden" name="s" value="'.$source.'">'."\n";
|
||||||
print '<input type="hidden" name="ref" value="'.$REF.'">'."\n";
|
print '<input type="hidden" name="ref" value="'.$REF.'">'."\n";
|
||||||
print '<input type="hidden" name="fulltag" value="'.$FULLTAG.'">'."\n";
|
print '<input type="hidden" name="fulltag" value="'.$FULLTAG.'">'."\n";
|
||||||
print '<input type="hidden" name="suffix" value="'.$suffix.'">'."\n";
|
print '<input type="hidden" name="suffix" value="'.$suffix.'">'."\n";
|
||||||
print '<input type="hidden" name="securekey" value="'.$SECUREKEY.'">'."\n";
|
print '<input type="hidden" name="securekey" value="'.$SECUREKEY.'">'."\n";
|
||||||
print '<input type="hidden" name="entity" value="'.$entity.'" />';
|
print '<input type="hidden" name="e" value="'.$entity.'" />';
|
||||||
print '<input type="hidden" name="amount" value="'.$amount.'">'."\n";
|
print '<input type="hidden" name="amount" value="'.$amount.'">'."\n";
|
||||||
print '<input type="hidden" name="currency" value="'.$currency.'">'."\n";
|
print '<input type="hidden" name="currency" value="'.$currency.'">'."\n";
|
||||||
|
|
||||||
|
|||||||
@ -31,7 +31,7 @@ define("NOCSRFCHECK",1); // We accept to go on this page from external web site.
|
|||||||
// For MultiCompany module.
|
// For MultiCompany module.
|
||||||
// Do not use GETPOST here, function is not defined and define must be done before including main.inc.php
|
// Do not use GETPOST here, function is not defined and define must be done before including main.inc.php
|
||||||
// TODO This should be useless. Because entity must be retreive from object ref and not from url.
|
// TODO This should be useless. Because entity must be retreive from object ref and not from url.
|
||||||
$entity=(! empty($_GET['entity']) ? (int) $_GET['entity'] : (! empty($_POST['entity']) ? (int) $_POST['entity'] : 1));
|
$entity=(! empty($_GET['e']) ? (int) $_GET['e'] : (! empty($_POST['e']) ? (int) $_POST['e'] : 1));
|
||||||
if (is_numeric($entity)) define("DOLENTITY", $entity);
|
if (is_numeric($entity)) define("DOLENTITY", $entity);
|
||||||
|
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
|
|||||||
@ -31,7 +31,7 @@ define("NOCSRFCHECK",1); // We accept to go on this page from external web site.
|
|||||||
// For MultiCompany module.
|
// For MultiCompany module.
|
||||||
// Do not use GETPOST here, function is not defined and define must be done before including main.inc.php
|
// Do not use GETPOST here, function is not defined and define must be done before including main.inc.php
|
||||||
// TODO This should be useless. Because entity must be retreive from object ref and not from url.
|
// TODO This should be useless. Because entity must be retreive from object ref and not from url.
|
||||||
$entity=(! empty($_GET['entity']) ? (int) $_GET['entity'] : (! empty($_POST['entity']) ? (int) $_POST['entity'] : 1));
|
$entity=(! empty($_GET['e']) ? (int) $_GET['e'] : (! empty($_POST['e']) ? (int) $_POST['e'] : 1));
|
||||||
if (is_numeric($entity)) define("DOLENTITY", $entity);
|
if (is_numeric($entity)) define("DOLENTITY", $entity);
|
||||||
|
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
@ -76,7 +76,7 @@ if (! empty($conf->paypal->enabled))
|
|||||||
|
|
||||||
$FULLTAG=GETPOST('FULLTAG');
|
$FULLTAG=GETPOST('FULLTAG');
|
||||||
if (empty($FULLTAG)) $FULLTAG=GETPOST('fulltag');
|
if (empty($FULLTAG)) $FULLTAG=GETPOST('fulltag');
|
||||||
$source=GETPOST('source');
|
$source=GETPOST('s','alpha')?GETPOST('s','alpha'):GETPOST('source','alpha');
|
||||||
$ref=GETPOST('ref');
|
$ref=GETPOST('ref');
|
||||||
|
|
||||||
$suffix=GETPOST("suffix",'aZ09');
|
$suffix=GETPOST("suffix",'aZ09');
|
||||||
@ -145,7 +145,6 @@ $conf->dol_hide_leftmenu=1;
|
|||||||
llxHeader($head, $langs->trans("PaymentForm"), '', '', 0, 0, '', '', '', 'onlinepaymentbody');
|
llxHeader($head, $langs->trans("PaymentForm"), '', '', 0, 0, '', '', '', 'onlinepaymentbody');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Show message
|
// Show message
|
||||||
print '<span id="dolpaymentspan"></span>'."\n";
|
print '<span id="dolpaymentspan"></span>'."\n";
|
||||||
print '<div id="dolpaymentdiv" align="center">'."\n";
|
print '<div id="dolpaymentdiv" align="center">'."\n";
|
||||||
|
|||||||
@ -2488,7 +2488,7 @@ else
|
|||||||
$formmail->setSubstitFromObject($object);
|
$formmail->setSubstitFromObject($object);
|
||||||
$formmail->substit['__THIRDPARTY_ID__']=$object->id; // substit in setSubstitFromObject was wrong for this one
|
$formmail->substit['__THIRDPARTY_ID__']=$object->id; // substit in setSubstitFromObject was wrong for this one
|
||||||
$formmail->substit['__THIRDPARTY_NAME__']=$object->name; // substit in setSubstitFromObject was wrong for this one
|
$formmail->substit['__THIRDPARTY_NAME__']=$object->name; // substit in setSubstitFromObject was wrong for this one
|
||||||
$formmail->substit['__PERSONALIZED__']='';
|
$formmail->substit['__PERSONALIZED__']=''; // deprecated
|
||||||
$formmail->substit['__CONTACTCIVNAME__']='';
|
$formmail->substit['__CONTACTCIVNAME__']='';
|
||||||
|
|
||||||
//Find the good contact adress
|
//Find the good contact adress
|
||||||
|
|||||||
@ -608,7 +608,7 @@ foreach(array(1,2,3,4,5,6) as $key)
|
|||||||
|
|
||||||
if ($massaction == 'presend')
|
if ($massaction == 'presend')
|
||||||
{
|
{
|
||||||
$topicmail="SendEmail";
|
$topicmail="Information";
|
||||||
$modelmail="thirdparty";
|
$modelmail="thirdparty";
|
||||||
$objecttmp=new Societe($db);
|
$objecttmp=new Societe($db);
|
||||||
$trackid='thi'.$object->id;
|
$trackid='thi'.$object->id;
|
||||||
|
|||||||
BIN
htdocs/theme/common/cheque.png
Normal file
BIN
htdocs/theme/common/cheque.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.4 KiB |
@ -344,48 +344,40 @@ input.buttongen {
|
|||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
input.buttonpayment {
|
input.buttonpayment {
|
||||||
width: 300px;
|
min-width: 280px;
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
background-image: none;
|
background-image: none;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
|
background: none;
|
||||||
|
border: 2px solid #666666;
|
||||||
}
|
}
|
||||||
input.buttonpaymentcb {
|
input.buttonpaymentcb {
|
||||||
background-image: url(<?php echo dol_buildpath($path.'/theme/common/credit_card.png',1) ?>);
|
background-image: url(<?php echo dol_buildpath($path.'/theme/common/credit_card.png',1) ?>);
|
||||||
background-size: 26px;
|
background-size: 26px;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: 5px 5px;
|
background-position: 2px 11px;
|
||||||
}
|
}
|
||||||
input.buttonpaymentcheque {
|
input.buttonpaymentcheque {
|
||||||
background-image: url(<?php echo dol_buildpath($path.'/theme/common/cheque.png',1) ?>);
|
background-image: url(<?php echo dol_buildpath($path.'/theme/common/cheque.png',1) ?>);
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-position: 8px 7px;
|
|
||||||
}
|
|
||||||
input.buttonpaymentcb {
|
|
||||||
background-image: url(<?php echo dol_buildpath($path.'/theme/common/credit_card.png',1) ?>);
|
|
||||||
background-size: 24px;
|
background-size: 24px;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: 5px 4px;
|
background-position: 2px 8px;
|
||||||
}
|
|
||||||
input.buttonpaymentcheque {
|
|
||||||
background-image: url(<?php echo dol_buildpath($path.'/paypal/img/object_paypal.png',1) ?>);
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-position: 5px 4px;
|
|
||||||
}
|
}
|
||||||
input.buttonpaymentpaypal {
|
input.buttonpaymentpaypal {
|
||||||
background-image: url(<?php echo dol_buildpath($path.'/paypal/img/object_paypal.png',1) ?>);
|
background-image: url(<?php echo dol_buildpath($path.'/paypal/img/object_paypal.png',1) ?>);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: 8px 7px;
|
background-position: 8px 11px;
|
||||||
}
|
}
|
||||||
input.buttonpaymentpaybox {
|
input.buttonpaymentpaybox {
|
||||||
background-image: url(<?php echo dol_buildpath($path.'/paybox/img/object_paybox.png',1) ?>);
|
background-image: url(<?php echo dol_buildpath($path.'/paybox/img/object_paybox.png',1) ?>);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: 8px 7px;
|
background-position: 8px 11px;
|
||||||
}
|
}
|
||||||
input.buttonpaymentstripe {
|
input.buttonpaymentstripe {
|
||||||
background-image: url(<?php echo dol_buildpath($path.'/stripe/img/object_stripe.png',1) ?>);
|
background-image: url(<?php echo dol_buildpath($path.'/stripe/img/object_stripe.png',1) ?>);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: 8px 7px;
|
background-position: 8px 11px;
|
||||||
}
|
}
|
||||||
/* Used by timesheets */
|
/* Used by timesheets */
|
||||||
span.timesheetalreadyrecorded input {
|
span.timesheetalreadyrecorded input {
|
||||||
@ -1092,7 +1084,7 @@ div.fiche {
|
|||||||
<?php if (! empty($conf->dol_hide_leftmenu)) print 'margin-bottom: 12px;'."\n"; ?>
|
<?php if (! empty($conf->dol_hide_leftmenu)) print 'margin-bottom: 12px;'."\n"; ?>
|
||||||
}
|
}
|
||||||
body.onlinepaymentbody div.fiche { /* For online payment page */
|
body.onlinepaymentbody div.fiche { /* For online payment page */
|
||||||
margin: 40px !important;
|
margin: 20px !important;
|
||||||
}
|
}
|
||||||
div.fiche>table:first-child {
|
div.fiche>table:first-child {
|
||||||
margin-bottom: 15px !important;
|
margin-bottom: 15px !important;
|
||||||
@ -3147,7 +3139,7 @@ div.titre {
|
|||||||
/* text-shadow: 1px 1px 2px #FFFFFF; */
|
/* text-shadow: 1px 1px 2px #FFFFFF; */
|
||||||
}
|
}
|
||||||
|
|
||||||
#dolpaymenttable { width: 600px; font-size: 13px; }
|
#dolpaymenttable { min-width: 310px; font-size: 16px; } /* Width must have min to make stripe input area visible */
|
||||||
#tablepublicpayment { border: 1px solid #CCCCCC !important; width: 100%; padding: 20px; }
|
#tablepublicpayment { border: 1px solid #CCCCCC !important; width: 100%; padding: 20px; }
|
||||||
#tablepublicpayment .CTableRow1 { background-color: #F0F0F0 !important; }
|
#tablepublicpayment .CTableRow1 { background-color: #F0F0F0 !important; }
|
||||||
#tablepublicpayment tr.liste_total { border-bottom: 1px solid #CCCCCC !important; }
|
#tablepublicpayment tr.liste_total { border-bottom: 1px solid #CCCCCC !important; }
|
||||||
|
|||||||
@ -341,11 +341,13 @@ input.buttongen {
|
|||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
input.buttonpayment {
|
input.buttonpayment {
|
||||||
width: 300px;
|
min-width: 280px;
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
background-image: none;
|
background-image: none;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
|
background: none;
|
||||||
|
border: 2px solid #666666;
|
||||||
}
|
}
|
||||||
input.buttonpaymentcb {
|
input.buttonpaymentcb {
|
||||||
background-image: url(<?php echo dol_buildpath($path.'/theme/common/credit_card.png',1) ?>);
|
background-image: url(<?php echo dol_buildpath($path.'/theme/common/credit_card.png',1) ?>);
|
||||||
@ -1118,6 +1120,9 @@ div.fiche {
|
|||||||
<?php if (! empty($conf->dol_hide_leftmenu) && ! empty($conf->dol_hide_topmenu)) print 'margin-top: 4px;'; ?>
|
<?php if (! empty($conf->dol_hide_leftmenu) && ! empty($conf->dol_hide_topmenu)) print 'margin-top: 4px;'; ?>
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
}
|
}
|
||||||
|
body.onlinepaymentbody div.fiche { /* For online payment page */
|
||||||
|
margin: 20px !important;
|
||||||
|
}
|
||||||
div.fichecenter {
|
div.fichecenter {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
clear: both; /* This is to have div fichecenter that are true rectangles */
|
clear: both; /* This is to have div fichecenter that are true rectangles */
|
||||||
@ -3237,7 +3242,7 @@ div.titre {
|
|||||||
<?php print (empty($conf->dol_optimize_smallscreen)?'':'margin-top: 4px;'); ?>
|
<?php print (empty($conf->dol_optimize_smallscreen)?'':'margin-top: 4px;'); ?>
|
||||||
}
|
}
|
||||||
|
|
||||||
#dolpaymenttable { width: 600px; font-size: 13px; }
|
#dolpaymenttable { min-width: 320px; font-size: 16px; } /* Width must have min to make stripe input area visible */
|
||||||
#tablepublicpayment { border: 1px solid #CCCCCC !important; width: 100%; padding: 20px; }
|
#tablepublicpayment { border: 1px solid #CCCCCC !important; width: 100%; padding: 20px; }
|
||||||
#tablepublicpayment .CTableRow1 { background-color: #F0F0F0 !important; }
|
#tablepublicpayment .CTableRow1 { background-color: #F0F0F0 !important; }
|
||||||
#tablepublicpayment tr.liste_total { border-bottom: 1px solid #CCCCCC !important; }
|
#tablepublicpayment tr.liste_total { border-bottom: 1px solid #CCCCCC !important; }
|
||||||
|
|||||||
@ -163,22 +163,25 @@ if ($resql)
|
|||||||
$tmpfield=explode('=',$other[4],2); $other5=(isset($tmpfield[1])?$tmpfield[1]:$tmpfield[0]);
|
$tmpfield=explode('=',$other[4],2); $other5=(isset($tmpfield[1])?$tmpfield[1]:$tmpfield[0]);
|
||||||
$signature = ((!empty($user->signature) && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN))?$user->signature:'');
|
$signature = ((!empty($user->signature) && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN))?$user->signature:'');
|
||||||
|
|
||||||
|
$object = null; // Not defined with mass emailing
|
||||||
|
$parameters=array('mode'=>'emailing');
|
||||||
|
$substitutionarray=getCommonSubstitutionArray($langs, 2, array('object','objectamount'), $object); // Note: On mass emailing, this is null because we don't know object
|
||||||
|
|
||||||
// Array of possible substitutions (See also file mailing-send.php that should manage same substitutions)
|
// Array of possible substitutions (See also file mailing-send.php that should manage same substitutions)
|
||||||
$substitutionarray=array(
|
$substitutionarray['__ID__'] = $obj->source_id;
|
||||||
'__ID__' => $obj2->source_id,
|
$substitutionarray['__EMAIL__'] = $obj->email;
|
||||||
'__EMAIL__' => $obj2->email,
|
$substitutionarray['__LASTNAME__'] = $obj->lastname;
|
||||||
'__LASTNAME__' => $obj2->lastname,
|
$substitutionarray['__FIRSTNAME__'] = $obj->firstname;
|
||||||
'__FIRSTNAME__' => $obj2->firstname,
|
$substitutionarray['__MAILTOEMAIL__'] = '<a href="mailto:'.$obj->email.'">'.$obj->email.'</a>';
|
||||||
'__MAILTOEMAIL__' => '<a href="mailto:'.$obj2->email.'">'.$obj2->email.'</a>',
|
$substitutionarray['__OTHER1__'] = $other1;
|
||||||
'__OTHER1__' => $other1,
|
$substitutionarray['__OTHER2__'] = $other2;
|
||||||
'__OTHER2__' => $other2,
|
$substitutionarray['__OTHER3__'] = $other3;
|
||||||
'__OTHER3__' => $other3,
|
$substitutionarray['__OTHER4__'] = $other4;
|
||||||
'__OTHER4__' => $other4,
|
$substitutionarray['__OTHER5__'] = $other5;
|
||||||
'__OTHER5__' => $other5,
|
$substitutionarray['__SIGNATURE__'] = $signature; // Signature is empty when ran from command line or taken from user in parameter)
|
||||||
'__SIGNATURE__' => $signature, // Signature is empty when ran from command line or taken from user in parameter)
|
$substitutionarray['__CHECK_READ__'] = '<img src="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-read.php?tag='.$obj->tag.'&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'" width="1" height="1" style="width:1px;height:1px" border="0"/>';
|
||||||
'__CHECK_READ__' => '<img src="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-read.php?tag='.$obj2->tag.'&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'" width="1" height="1" style="width:1px;height:1px" border="0"/>',
|
$substitutionarray['__UNSUBSCRIBE__'] = '<a href="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-unsubscribe.php?tag='.$obj->tag.'&unsuscrib=1&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'" target="_blank">'.$langs->trans("MailUnsubcribe").'</a>';
|
||||||
'__UNSUBSCRIBE__' => '<a href="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-unsubscribe.php?tag='.$obj2->tag.'&unsuscrib=1&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'" target="_blank">'.$langs->trans("MailUnsubcribe").'</a>'
|
|
||||||
);
|
|
||||||
$onlinepaymentenabled = 0;
|
$onlinepaymentenabled = 0;
|
||||||
if (! empty($conf->paypal->enabled)) $onlinepaymentenabled++;
|
if (! empty($conf->paypal->enabled)) $onlinepaymentenabled++;
|
||||||
if (! empty($conf->paybox->enabled)) $onlinepaymentenabled++;
|
if (! empty($conf->paybox->enabled)) $onlinepaymentenabled++;
|
||||||
@ -186,18 +189,20 @@ if ($resql)
|
|||||||
if ($onlinepaymentenabled && ! empty($conf->global->PAYMENT_SECURITY_TOKEN))
|
if ($onlinepaymentenabled && ! empty($conf->global->PAYMENT_SECURITY_TOKEN))
|
||||||
{
|
{
|
||||||
$substitutionarray['__SECUREKEYPAYMENT__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
$substitutionarray['__SECUREKEYPAYMENT__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
||||||
|
if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE))
|
||||||
if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYMENT_MEMBER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
{
|
||||||
else $substitutionarray['__SECUREKEYPAYMENT_MEMBER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'membersubscription' . $obj->source_id, 2);
|
$substitutionarray['__SECUREKEYPAYMENT_MEMBER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
||||||
|
$substitutionarray['__SECUREKEYPAYMENT_ORDER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
||||||
if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYMENT_ORDER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
$substitutionarray['__SECUREKEYPAYMENT_INVOICE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
||||||
else $substitutionarray['__SECUREKEYPAYMENT_ORDER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'order' . $obj->source_id, 2);
|
$substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
||||||
|
}
|
||||||
if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYMENT_INVOICE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
else
|
||||||
else $substitutionarray['__SECUREKEYPAYMENT_INVOICE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'invoice' . $obj->source_id, 2);
|
{
|
||||||
|
$substitutionarray['__SECUREKEYPAYMENT_MEMBER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'membersubscription' . $obj->source_id, 2);
|
||||||
if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
|
$substitutionarray['__SECUREKEYPAYMENT_ORDER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'order' . $obj->source_id, 2);
|
||||||
else $substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'contractline' . $obj->source_id, 2);
|
$substitutionarray['__SECUREKEYPAYMENT_INVOICE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'invoice' . $obj->source_id, 2);
|
||||||
|
$substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'contractline' . $obj->source_id, 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* For backward compatibility */
|
/* For backward compatibility */
|
||||||
if (! empty($conf->paypal->enabled) && ! empty($conf->global->PAYPAL_SECURITY_TOKEN))
|
if (! empty($conf->paypal->enabled) && ! empty($conf->global->PAYPAL_SECURITY_TOKEN))
|
||||||
@ -216,6 +221,7 @@ if ($resql)
|
|||||||
if (empty($conf->global->PAYPAL_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYPAL_CONTRACTLINE__']=dol_hash($conf->global->PAYPAL_SECURITY_TOKEN, 2);
|
if (empty($conf->global->PAYPAL_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYPAL_CONTRACTLINE__']=dol_hash($conf->global->PAYPAL_SECURITY_TOKEN, 2);
|
||||||
else $substitutionarray['__SECUREKEYPAYPAL_CONTRACTLINE__']=dol_hash($conf->global->PAYPAL_SECURITY_TOKEN . 'contractline' . $obj->source_id, 2);
|
else $substitutionarray['__SECUREKEYPAYPAL_CONTRACTLINE__']=dol_hash($conf->global->PAYPAL_SECURITY_TOKEN . 'contractline' . $obj->source_id, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
complete_substitutions_array($substitutionarray,$langs);
|
complete_substitutions_array($substitutionarray,$langs);
|
||||||
$newsubject=make_substitutions($subject,$substitutionarray);
|
$newsubject=make_substitutions($subject,$substitutionarray);
|
||||||
$newmessage=make_substitutions($message,$substitutionarray);
|
$newmessage=make_substitutions($message,$substitutionarray);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user