';
diff --git a/htdocs/comm/mailing/fiche.php b/htdocs/comm/mailing/fiche.php
index bcea8ad2a22..b2f875583f4 100644
--- a/htdocs/comm/mailing/fiche.php
+++ b/htdocs/comm/mailing/fiche.php
@@ -64,7 +64,7 @@ if ($conf->global->MAILING_EMAIL_UNSUBSCRIBE)
$substitutionarray,
array(
'__CHECK_READ__' => 'CheckMail',
- '__UNSUSCRIBE__' => 'Unsuscribe'
+ '__UNSUSCRIBE__' => 'Unsubscribe'
)
);
}
@@ -89,7 +89,7 @@ if ($conf->global->MAILING_EMAIL_UNSUBSCRIBE)
$substitutionarrayfortest,
array(
'__CHECK_READ__' => 'TESTCheckMail',
- '__UNSUSCRIBE__' => 'TESTCheckMail'
+ '__UNSUSCRIBE__' => 'TESTUnsubscribe'
)
);
}
diff --git a/htdocs/core/modules/mailings/modules_mailings.php b/htdocs/core/modules/mailings/modules_mailings.php
index 75032bbab9e..53729e812e3 100644
--- a/htdocs/core/modules/mailings/modules_mailings.php
+++ b/htdocs/core/modules/mailings/modules_mailings.php
@@ -143,6 +143,8 @@ class MailingTargets // This can't be abstract as it is used for some method
*/
function add_to_target($mailing_id, $cibles)
{
+ global $conf;
+
$this->db->begin();
// Insert emailing targest from array into database
@@ -162,7 +164,10 @@ class MailingTargets // This can't be abstract as it is used for some method
$sql .= "'".$this->db->escape($cibles[$i]['other'])."',";
$sql .= "'".$this->db->escape($cibles[$i]['source_url'])."',";
$sql .= "'".$this->db->escape($cibles[$i]['source_id'])."',";
- $sql .= "'".$this->db->escape(md5($cibles[$i]['email'].';'.$cibles[$i]['name'].';'.$mailing_id))."',";
+ if ($conf->global->MAILING_EMAIL_UNSUBSCRIBE==1)
+ {
+ $sql .= "'".$this->db->escape(md5($cibles[$i]['email'].';'.$cibles[$i]['name'].';'.$mailing_id.';'.$conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY))."',";
+ }
$sql .= "'".$this->db->escape($cibles[$i]['source_type'])."')";
$result=$this->db->query($sql);
if ($result)
diff --git a/htdocs/langs/en_US/mails.lang b/htdocs/langs/en_US/mails.lang
index d5deed6ec64..a252859f964 100644
--- a/htdocs/langs/en_US/mails.lang
+++ b/htdocs/langs/en_US/mails.lang
@@ -77,6 +77,7 @@ CheckRead=Read Receipt
YourMailUnsubcribeOK=The email %s is correctly unsubcribe from mailing list
MailtoEMail=Hyper link to email
ActivateCheckRead=Activate Read receipt and unsubcribe tag
+ActivateCheckReadKey=Key use to encrypt URL use for Read Receipt and unsubcribe function
# Libelle des modules de liste de destinataires mailing
MailingModuleDescContactCompanies=Contacts of all third parties (customer, prospect, supplier, ...)
diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang
index ead787d3d84..75082f8012c 100644
--- a/htdocs/langs/en_US/projects.lang
+++ b/htdocs/langs/en_US/projects.lang
@@ -85,6 +85,10 @@ TaskIsNotAffectedToYou=Task not allocated to you
ErrorTimeSpentIsEmpty=Time spent is empty
ThisWillAlsoRemoveTasks=This action will also delete all tasks of project (%s tasks at the moment) and all inputs of time spent.
IfNeedToUseOhterObjectKeepEmpty=If some objects (invoice, order, ...), belonging to another third party, must be linked to the project to create, keep this empty to have the project being multi third parties.
+CloneProject=Clone project (associated task will be duplicated too)
+ConfirmCloneProject=Are you sure to clone this project ?
+ProjectReportDate=Change task date according project start date
+ErrorShiftTaskDate=Impossible to shift task date according to new project start date
##### Types de contacts #####
TypeContact_project_internal_PROJECTLEADER=Project leader
TypeContact_project_external_PROJECTLEADER=Project leader
diff --git a/htdocs/langs/fr_FR/mails.lang b/htdocs/langs/fr_FR/mails.lang
index 45b5dd24263..11b0aa4e0e1 100644
--- a/htdocs/langs/fr_FR/mails.lang
+++ b/htdocs/langs/fr_FR/mails.lang
@@ -77,6 +77,7 @@ CheckRead=Accusé de lecture
YourMailUnsubcribeOK=L'adresse e-mail %s est bien désincrite de la liste.
MailtoEMail=Ecrire a e-mail (lien)
ActivateCheckRead=Activer les tags d'accusé de lecture et de désincription
+ActivateCheckReadKey=Clef de sécurité utilisée pour l'encryption des URL utilisées dans les fonctions d'accusé de lecture et de désincription
# Libelle des modules de liste de destinataires mailing
MailingModuleDescContactCompanies=Contacts de tiers (prospects, clients, fournisseurs...)
diff --git a/htdocs/langs/fr_FR/projects.lang b/htdocs/langs/fr_FR/projects.lang
index 6722ac6bb1d..0c3a21e4cdb 100644
--- a/htdocs/langs/fr_FR/projects.lang
+++ b/htdocs/langs/fr_FR/projects.lang
@@ -85,6 +85,10 @@ TaskIsNotAffectedToYou=Tâche qui ne vous est pas affectée
ErrorTimeSpentIsEmpty=Le temps consommé n'est pas renseigné
ThisWillAlsoRemoveTasks=Cette opération détruira également les tâches du projet (%s tâches actuellement) et le suivi des consommés.
IfNeedToUseOhterObjectKeepEmpty=Si des objets (facture, commande, ...), appartenant à un autre tiers que celui choisi, doivent être liés au projet à créer, laisser vide afin de laisser le projet multi-tiers.
+CloneProject=Cloner le projet (les taches associées sont dupliquées également)
+ConfirmCloneProject=Êtes-vous sûr de vouloir cloner ce projet ?
+ProjectReportDate=Reporter les dates des taches en fonction de la date de départ.
+ErrorShiftTaskDate=Une erreur c'est produite dans le report des dates des taches.
##### Types de contacts #####
TypeContact_project_internal_PROJECTLEADER=Chef de projet
TypeContact_project_external_PROJECTLEADER=Chef de projet
diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php
index 435c59d395d..d838f61b869 100644
--- a/htdocs/projet/class/project.class.php
+++ b/htdocs/projet/class/project.class.php
@@ -52,7 +52,7 @@ class Project extends CommonObject
/**
* Constructor
*
- * @param DoliDB $db Database handler
+ * @param DoliDB $DB Database handler
*/
function __construct($db)
{
@@ -707,7 +707,7 @@ class Project extends CommonObject
{
global $user, $langs, $conf;
- $now = dol_now();
+ $now = mktime();
// Charge tableau des produits prodids
$prodids = array();
diff --git a/htdocs/projet/class/task.class.php b/htdocs/projet/class/task.class.php
index 6aefb92ec6c..b93598b600f 100644
--- a/htdocs/projet/class/task.class.php
+++ b/htdocs/projet/class/task.class.php
@@ -64,7 +64,7 @@ class Task extends CommonObject
/**
* Constructor
*
- * @param DoliDB $db Database handler
+ * @param DoliDB $DB Database handler
*/
function __construct($db)
{
@@ -305,6 +305,7 @@ class Task extends CommonObject
*/
function delete($user, $notrigger=0)
{
+
global $conf, $langs;
$error=0;
@@ -391,7 +392,7 @@ class Task extends CommonObject
$this->db->commit();
- return 1;
+ return 1;
}
}
diff --git a/htdocs/projet/fiche.php b/htdocs/projet/fiche.php
index f84dca56cbe..8b0146a08f1 100644
--- a/htdocs/projet/fiche.php
+++ b/htdocs/projet/fiche.php
@@ -246,6 +246,7 @@ if ($action == 'builddoc' && $user->rights->projet->creer)
}
}
+
if ($action == 'confirm_validate' && GETPOST('confirm') == 'yes')
{
$project = new Project($db);
@@ -315,6 +316,24 @@ if ($action == 'confirm_clone' && $user->rights->projet->creer && GETPOST('confi
}
}
+if ($action == 'confirm_clone' && $user->rights->projet->creer && GETPOST('confirm') == 'yes')
+{
+ $idtoclone=$id;
+ $project = new Project($db);
+ $project->fetch($idtoclone);
+ $result=$project->createFromClone($idtoclone,true,true,true,true);
+ if ($result <= 0)
+ {
+ $mesg='