PageRenderTime 71ms CodeModel.GetById 35ms RepoModel.GetById 0ms app.codeStats 1ms

/htdocs/comm/mailing/cibles.php

https://github.com/asterix14/dolibarr
PHP | 517 lines | 372 code | 87 blank | 58 comment | 74 complexity | 099d6440587e2173d53d8a145071ac28 MD5 | raw file
Possible License(s): LGPL-2.0
  1. <?PHP
  2. /* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
  3. * Copyright (C) 2005-2010 Laurent Destailleur <eldy@uers.sourceforge.net>
  4. * Copyright (C) 2005-2010 Regis Houssin <regis@dolibarr.fr>
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation; either version 2 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. /**
  20. * \file htdocs/comm/mailing/cibles.php
  21. * \ingroup mailing
  22. * \brief Page to define emailing targets
  23. */
  24. require("../../main.inc.php");
  25. require_once(DOL_DOCUMENT_ROOT."/comm/mailing/class/mailing.class.php");
  26. require_once(DOL_DOCUMENT_ROOT."/core/lib/emailing.lib.php");
  27. require_once(DOL_DOCUMENT_ROOT."/core/class/CMailFile.class.php");
  28. require_once(DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php");
  29. $langs->load("mails");
  30. // Security check
  31. if (! $user->rights->mailing->lire || $user->societe_id > 0)
  32. accessforbidden();
  33. $dirmod=DOL_DOCUMENT_ROOT."/core/modules/mailings";
  34. $mesg = '';
  35. $sortfield = GETPOST("sortfield",'alpha');
  36. $sortorder = GETPOST("sortorder",'alpha');
  37. $page = GETPOST("page",'int');
  38. if ($page == -1) { $page = 0; }
  39. $offset = $conf->liste_limit * $page;
  40. $pageprev = $page - 1;
  41. $pagenext = $page + 1;
  42. if (! $sortorder) $sortorder="ASC";
  43. if (! $sortfield) $sortfield="email";
  44. $search_nom=isset($_GET["search_nom"])?$_GET["search_nom"]:$_POST["search_nom"];
  45. $search_prenom=isset($_GET["search_prenom"])?$_GET["search_prenom"]:$_POST["search_prenom"];
  46. $search_email=isset($_GET["search_email"])?$_GET["search_email"]:$_POST["search_email"];
  47. /*
  48. * Actions
  49. */
  50. if ($_GET["action"] == 'add')
  51. {
  52. $modulename=$_GET["module"];
  53. $result=0;
  54. $var=true;
  55. foreach ($conf->file->dol_document_root as $dirmod)
  56. {
  57. $dir=$dirmod."/core/modules/mailings/";
  58. if (is_dir($dir))
  59. {
  60. // Chargement de la classe
  61. $file = $dir."/".$modulename.".modules.php";
  62. $classname = "mailing_".$modulename;
  63. if (file_exists($file))
  64. {
  65. require_once($file);
  66. // We fill $filtersarray. Using this variable is now deprecated.
  67. // Kept for backward compatibility.
  68. $filtersarray=array();
  69. if (isset($_POST["filter"])) $filtersarray[0]=$_POST["filter"];
  70. // Add targets into database
  71. $obj = new $classname($db);
  72. $result=$obj->add_to_target($_GET["rowid"],$filtersarray);
  73. }
  74. }
  75. }
  76. if ($result > 0)
  77. {
  78. Header("Location: cibles.php?id=".$_GET["rowid"]);
  79. exit;
  80. }
  81. if ($result == 0)
  82. {
  83. $mesg='<div class="warning">'.$langs->trans("WarningNoEMailsAdded").'</div>';
  84. }
  85. if ($result < 0)
  86. {
  87. $mesg='<div class="error">'.$obj->error.'</div>';
  88. }
  89. $_REQUEST["id"]=$_GET["rowid"];
  90. }
  91. if ($_GET["action"] == 'clear')
  92. {
  93. // Chargement de la classe
  94. $file = $dirmod."/modules_mailings.php";
  95. $classname = "MailingTargets";
  96. require_once($file);
  97. $obj = new $classname($db);
  98. $obj->clear_target($_GET["rowid"]);
  99. Header("Location: cibles.php?id=".$_GET["rowid"]);
  100. exit;
  101. }
  102. if ($_GET["action"] == 'delete')
  103. {
  104. // Ici, rowid indique le destinataire et id le mailing
  105. $sql="DELETE FROM ".MAIN_DB_PREFIX."mailing_cibles where rowid=".$_GET["rowid"];
  106. $resql=$db->query($sql);
  107. if ($resql)
  108. {
  109. $file = $dirmod."/modules_mailings.php";
  110. $classname = "MailingTargets";
  111. require_once($file);
  112. $obj = new $classname($db);
  113. $obj->update_nb($_REQUEST["id"]);
  114. }
  115. else
  116. {
  117. dol_print_error($db);
  118. }
  119. }
  120. if ($_POST["button_removefilter"])
  121. {
  122. $search_nom='';
  123. $search_prenom='';
  124. $search_email='';
  125. }
  126. /*
  127. * View
  128. */
  129. llxHeader('',$langs->trans("Mailing"),'EN:Module_EMailing|FR:Module_Mailing|ES:M&oacute;dulo_Mailing');
  130. $form = new Form($db);
  131. $mil = new Mailing($db);
  132. if ($mil->fetch($_REQUEST["id"]) >= 0)
  133. {
  134. $head = emailing_prepare_head($mil);
  135. dol_fiche_head($head, 'targets', $langs->trans("Mailing"), 0, 'email');
  136. print '<table class="border" width="100%">';
  137. print '<tr><td width="25%">'.$langs->trans("Ref").'</td>';
  138. print '<td colspan="3">';
  139. print $form->showrefnav($mil,'id');
  140. print '</td></tr>';
  141. print '<tr><td width="25%">'.$langs->trans("MailTitle").'</td><td colspan="3">'.$mil->titre.'</td></tr>';
  142. print '<tr><td width="25%">'.$langs->trans("MailFrom").'</td><td colspan="3">'.dol_print_email($mil->email_from,0,0,0,0,1).'</td></tr>';
  143. // Errors to
  144. print '<tr><td width="25%">'.$langs->trans("MailErrorsTo").'</td><td colspan="3">'.dol_print_email($mil->email_errorsto,0,0,0,0,1);
  145. print '</td></tr>';
  146. // Status
  147. print '<tr><td width="25%">'.$langs->trans("Status").'</td><td colspan="3">'.$mil->getLibStatut(4).'</td></tr>';
  148. // Nb of distinct emails
  149. print '<tr><td width="25%">';
  150. print $langs->trans("TotalNbOfDistinctRecipients");
  151. print '</td><td colspan="3">';
  152. $nbemail = ($mil->nbemail?$mil->nbemail:'0');
  153. if (!empty($conf->global->MAILING_LIMIT_SENDBYWEB) && $conf->global->MAILING_LIMIT_SENDBYWEB < $nbemail)
  154. {
  155. $text=$langs->trans('LimitSendingEmailing',$conf->global->MAILING_LIMIT_SENDBYWEB);
  156. print $form->textwithpicto($nbemail,$text,1,'warning');
  157. }
  158. else
  159. {
  160. print $nbemail;
  161. }
  162. print '</td></tr>';
  163. print '</table>';
  164. print "</div>";
  165. if ($mesg) print "$mesg<br>\n";
  166. $var=!$var;
  167. // Show email selectors
  168. if ($mil->statut == 0)
  169. {
  170. print_fiche_titre($langs->trans("ToAddRecipientsChooseHere"),($user->admin?info_admin($langs->trans("YouCanAddYourOwnPredefindedListHere"),1):''),'');
  171. print '<table class="noborder" width="100%">';
  172. print '<tr class="liste_titre">';
  173. print '<td class="liste_titre">'.$langs->trans("RecipientSelectionModules").'</td>';
  174. print '<td class="liste_titre" align="center">'.$langs->trans("NbOfUniqueEMails").'</td>';
  175. print '<td class="liste_titre" align="left">'.$langs->trans("Filter").'</td>';
  176. print '<td class="liste_titre" align="center">&nbsp;</td>';
  177. print "</tr>\n";
  178. clearstatcache();
  179. $var=true;
  180. foreach ($conf->file->dol_document_root as $dirroot)
  181. {
  182. $dir=$dirroot."/core/modules/mailings/";
  183. if (is_dir($dir))
  184. {
  185. $handle=opendir($dir);
  186. if (is_resource($handle))
  187. {
  188. while (($file = readdir($handle))!==false)
  189. {
  190. if (substr($file, 0, 1) <> '.' && substr($file, 0, 3) <> 'CVS')
  191. {
  192. if (preg_match("/(.*)\.modules\.php$/i",$file,$reg))
  193. {
  194. $modulename=$reg[1];
  195. if ($modulename == 'example') continue;
  196. // Chargement de la classe
  197. $file = $dir.$modulename.".modules.php";
  198. $classname = "mailing_".$modulename;
  199. require_once($file);
  200. $obj = new $classname($db);
  201. $qualified=1;
  202. foreach ($obj->require_module as $key)
  203. {
  204. if (! $conf->$key->enabled || (! $user->admin && $obj->require_admin))
  205. {
  206. $qualified=0;
  207. //print "Les prerequis d'activation du module mailing ne sont pas respectes. Il ne sera pas actif";
  208. break;
  209. }
  210. }
  211. // Si le module mailing est qualifie
  212. if ($qualified)
  213. {
  214. $var = !$var;
  215. print '<tr '.$bc[$var].'>';
  216. if ($mil->statut == 0)
  217. {
  218. print '<form name="'.$modulename.'" action="cibles.php?action=add&rowid='.$mil->id.'&module='.$modulename.'" method="POST" enctype="multipart/form-data">';
  219. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  220. }
  221. print '<td>';
  222. if (! $obj->picto) $obj->picto='generic';
  223. print img_object($langs->trans("Module").': '.get_class($obj),$obj->picto).' '.$obj->getDesc();
  224. print '</td>';
  225. /*
  226. print '<td width=\"100\">';
  227. print $modulename;
  228. print "</td>";
  229. */
  230. $nbofrecipient=$obj->getNbOfRecipients();
  231. print '<td align="center">';
  232. if ($nbofrecipient >= 0)
  233. {
  234. print $nbofrecipient;
  235. }
  236. else
  237. {
  238. print $langs->trans("Error").' '.img_error($obj->error);
  239. }
  240. print '</td>';
  241. print '<td align="left">';
  242. $filter=$obj->formFilter();
  243. if ($filter) print $filter;
  244. else print $langs->trans("None");
  245. print '</td>';
  246. print '<td align="right">';
  247. if ($mil->statut == 0)
  248. {
  249. print '<input type="submit" class="button" value="'.$langs->trans("Add").'">';
  250. }
  251. else
  252. {
  253. //print $langs->trans("MailNoChangePossible");
  254. print "&nbsp;";
  255. }
  256. print '</td>';
  257. if ($mil->statut == 0) print '</form>';
  258. print "</tr>\n";
  259. }
  260. }
  261. }
  262. }
  263. closedir($handle);
  264. }
  265. }
  266. } // End foreach dir
  267. print '</table>';
  268. print '<br>';
  269. print '<form action="cibles.php?action=clear&rowid='.$mil->id.'" method="POST">';
  270. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  271. print_titre($langs->trans("ToClearAllRecipientsClickHere"));
  272. print '<table class="noborder" width="100%">';
  273. print '<tr class="liste_titre">';
  274. print '<td class="liste_titre" align="right"><input type="submit" class="button" value="'.$langs->trans("TargetsReset").'"></td>';
  275. print '</tr>';
  276. print '</table>';
  277. print '</form>';
  278. print '<br>';
  279. }
  280. // List of selected targets
  281. print "\n<!-- Liste destinataires selectionnes -->\n";
  282. print '<form method="post" action="'.$_SERVER["PHP_SELF"].'">';
  283. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  284. print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
  285. print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
  286. print '<input type="hidden" name="id" value="'.$mil->id.'">';
  287. $sql = "SELECT mc.rowid, mc.nom, mc.prenom, mc.email, mc.other, mc.statut, mc.date_envoi, mc.source_url, mc.source_id, mc.source_type";
  288. $sql .= " FROM ".MAIN_DB_PREFIX."mailing_cibles as mc";
  289. $sql .= " WHERE mc.fk_mailing=".$mil->id;
  290. if ($search_nom) $sql.= " AND mc.nom like '%".$db->escape($search_nom)."%'";
  291. if ($search_prenom) $sql.= " AND mc.prenom like '%".$db->escape($search_prenom)."%'";
  292. if ($search_email) $sql.= " AND mc.email like '%".$db->escape($search_email)."%'";
  293. $sql .= $db->order($sortfield,$sortorder);
  294. $sql .= $db->plimit($conf->liste_limit+1, $offset);
  295. $resql=$db->query($sql);
  296. if ($resql)
  297. {
  298. $num = $db->num_rows($resql);
  299. $parm = "&amp;id=".$mil->id;
  300. if ($search_nom) $parm.= "&amp;search_nom=".urlencode($search_nom);
  301. if ($search_prenom) $parm.= "&amp;search_prenom=".urlencode($search_prenom);
  302. if ($search_email) $parm.= "&amp;search_email=".urlencode($search_email);
  303. print_barre_liste($langs->trans("MailSelectedRecipients"),$page,$_SERVER["PHP_SELF"],$parm,$sortfield,$sortorder,"",$num,$mil->nbemail,'');
  304. if ($page) $parm.= "&amp;page=".$page;
  305. print '<table class="noborder" width="100%">';
  306. print '<tr class="liste_titre">';
  307. print_liste_field_titre($langs->trans("EMail"),$_SERVER["PHP_SELF"],"mc.email",$parm,"","",$sortfield,$sortorder);
  308. print_liste_field_titre($langs->trans("Lastname"),$_SERVER["PHP_SELF"],"mc.nom",$parm,"","",$sortfield,$sortorder);
  309. print_liste_field_titre($langs->trans("Firstname"),$_SERVER["PHP_SELF"],"mc.prenom",$parm,"","",$sortfield,$sortorder);
  310. print_liste_field_titre($langs->trans("OtherInformations"),$_SERVER["PHP_SELF"],"",$parm,"","",$sortfield,$sortorder);
  311. print_liste_field_titre($langs->trans("Source"),$_SERVER["PHP_SELF"],"",$parm,"",'align="center"',$sortfield,$sortorder);
  312. // Date sendinf
  313. if ($mil->statut < 2)
  314. {
  315. print '<td class="liste_titre">&nbsp;</td>';
  316. }
  317. else
  318. {
  319. print_liste_field_titre($langs->trans("DateSending"),$_SERVER["PHP_SELF"],"mc.date_envoi",$parm,'','align="center"',$sortfield,$sortorder);
  320. }
  321. // Statut
  322. print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"mc.statut",$parm,'','align="right"',$sortfield,$sortorder);
  323. print '</tr>';
  324. // Ligne des champs de filtres
  325. print '<tr class="liste_titre">';
  326. // EMail
  327. print '<td class="liste_titre">';
  328. print '<input class="flat" type="text" name="search_email" size="14" value="'.$search_email.'">';
  329. print '</td>';
  330. // Name
  331. print '<td class="liste_titre">';
  332. print '<input class="flat" type="text" name="search_nom" size="12" value="'.$search_nom.'">';
  333. print '</td>';
  334. // Firstname
  335. print '<td class="liste_titre">';
  336. print '<input class="flat" type="text" name="search_prenom" size="10" value="'.$search_prenom.'">';
  337. print '</td>';
  338. // Other
  339. print '<td class="liste_titre">';
  340. print '&nbsp';
  341. print '</td>';
  342. // Source
  343. print '<td class="liste_titre" align="right" colspan="3">';
  344. print '<input type="image" class="liste_titre" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/search.png" name="button_search" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">';
  345. print '&nbsp; ';
  346. print '<input type="image" class="liste_titre" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/searchclear.png" name="button_removefilter" value="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'" title="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'">';
  347. print '</td>';
  348. print '</tr>';
  349. $var = true;
  350. $i = 0;
  351. if ($num)
  352. {
  353. while ($i < min($num,$conf->liste_limit))
  354. {
  355. $obj = $db->fetch_object($resql);
  356. $var=!$var;
  357. print "<tr $bc[$var]>";
  358. print '<td>'.$obj->email.'</td>';
  359. print '<td>'.$obj->nom.'</td>';
  360. print '<td>'.$obj->prenom.'</td>';
  361. print '<td>'.$obj->other.'</td>';
  362. print '<td align="center">';
  363. if (empty($obj->source_id) || empty($obj->source_type))
  364. {
  365. print $obj->source_url; // For backward compatibility
  366. }
  367. else
  368. {
  369. if ($obj->source_type == 'member')
  370. {
  371. include_once(DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php');
  372. $m=new Adherent($db);
  373. $m->id=$obj->source_id;
  374. print $m->getNomUrl(2);
  375. }
  376. else if ($obj->source_type == 'user')
  377. {
  378. include_once(DOL_DOCUMENT_ROOT.'/user/class/user.class.php');
  379. $m=new User($db);
  380. $m->id=$obj->source_id;
  381. print $m->getNomUrl(2);
  382. }
  383. else if ($obj->source_type == 'thirdparty')
  384. {
  385. include_once(DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php');
  386. $m=new Societe($db);
  387. $m->id=$obj->source_id;
  388. print $m->getNomUrl(2);
  389. }
  390. else
  391. {
  392. print $obj->source_url;
  393. }
  394. }
  395. print '</td>';
  396. // Statut pour l'email destinataire (Attentioon != statut du mailing)
  397. if ($obj->statut == 0)
  398. {
  399. print '<td align="center">&nbsp;</td>';
  400. print '<td align="right" nowrap="nowrap">'.$langs->trans("MailingStatusNotSent").' <a href="cibles.php?action=delete&rowid='.$obj->rowid.$parm.'">'.img_delete($langs->trans("RemoveRecipient")).'</td>';
  401. }
  402. else
  403. {
  404. print '<td align="center">'.$obj->date_envoi.'</td>';
  405. print '<td align="right" nowrap="nowrap">';
  406. if ($obj->statut==-1) print $langs->trans("MailingStatusError").' '.img_error();
  407. if ($obj->statut==1) print $langs->trans("MailingStatusSent").' '.img_picto($langs->trans("MailingStatusSent"),'statut6');
  408. print '</td>';
  409. }
  410. print '</tr>';
  411. $i++;
  412. }
  413. }
  414. else
  415. {
  416. print '<tr '.$bc[false].'><td colspan="7">'.$langs->trans("NoTargetYet").'</td></tr>';
  417. }
  418. print "</table><br>";
  419. $db->free($resql);
  420. }
  421. else
  422. {
  423. dol_print_error($db);
  424. }
  425. print '</form>';
  426. print "\n<!-- Fin liste destinataires selectionnes -->\n";
  427. }
  428. $db->close();
  429. llxFooter();
  430. ?>