cibles.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618
  1. <?php
  2. /* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
  3. * Copyright (C) 2005-2016 Laurent Destailleur <eldy@uers.sourceforge.net>
  4. * Copyright (C) 2005-2010 Regis Houssin <regis.houssin@capnetworks.com>
  5. * Copyright (C) 2014 Florian Henry <florian.henry@open-concept.pro>
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 3 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  19. */
  20. /**
  21. * \file htdocs/comm/mailing/cibles.php
  22. * \ingroup mailing
  23. * \brief Page to define emailing targets
  24. */
  25. require '../../main.inc.php';
  26. require_once DOL_DOCUMENT_ROOT.'/core/modules/mailings/modules_mailings.php';
  27. require_once DOL_DOCUMENT_ROOT.'/comm/mailing/class/mailing.class.php';
  28. require_once DOL_DOCUMENT_ROOT.'/core/class/html.formmailing.class.php';
  29. require_once DOL_DOCUMENT_ROOT.'/core/lib/emailing.lib.php';
  30. require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
  31. require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
  32. $langs->load("mails");
  33. // Security check
  34. if (! $user->rights->mailing->lire || $user->societe_id > 0) accessforbidden();
  35. // Load variable for pagination
  36. $limit = GETPOST("limit")?GETPOST("limit","int"):$conf->liste_limit;
  37. $sortfield = GETPOST('sortfield','alpha');
  38. $sortorder = GETPOST('sortorder','alpha');
  39. $page = GETPOST('page','int');
  40. if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1
  41. $offset = $limit * $page;
  42. $pageprev = $page - 1;
  43. $pagenext = $page + 1;
  44. if (! $sortfield) $sortfield="email";
  45. if (! $sortorder) $sortorder="ASC";
  46. $id=GETPOST('id','int');
  47. $rowid=GETPOST('rowid','int');
  48. $action=GETPOST('action','aZ09');
  49. $search_lastname=GETPOST("search_lastname");
  50. $search_firstname=GETPOST("search_firstname");
  51. $search_email=GETPOST("search_email");
  52. $search_dest_status=GETPOST('search_dest_status');
  53. // Search modules dirs
  54. $modulesdir = dolGetModulesDirs('/mailings');
  55. $object = new Mailing($db);
  56. /*
  57. * Actions
  58. */
  59. if ($action == 'add')
  60. {
  61. $module=GETPOST("module");
  62. $result=-1;
  63. $var=true;
  64. foreach ($modulesdir as $dir)
  65. {
  66. // Load modules attributes in arrays (name, numero, orders) from dir directory
  67. //print $dir."\n<br>";
  68. dol_syslog("Scan directory ".$dir." for modules");
  69. // Loading Class
  70. $file = $dir."/".$module.".modules.php";
  71. $classname = "mailing_".$module;
  72. if (file_exists($file))
  73. {
  74. require_once $file;
  75. // We fill $filtersarray. Using this variable is now deprecated.
  76. // Kept for backward compatibility.
  77. $filtersarray=array();
  78. if (isset($_POST["filter"])) $filtersarray[0]=$_POST["filter"];
  79. // Add targets into database
  80. $obj = new $classname($db);
  81. dol_syslog("Call add_to_target on class ".$classname);
  82. $result=$obj->add_to_target($id,$filtersarray);
  83. }
  84. }
  85. if ($result > 0)
  86. {
  87. setEventMessages($langs->trans("XTargetsAdded",$result), null, 'mesgs');
  88. header("Location: ".$_SERVER['PHP_SELF']."?id=".$id);
  89. exit;
  90. }
  91. if ($result == 0)
  92. {
  93. setEventMessages($langs->trans("WarningNoEMailsAdded"), null, 'warnings');
  94. }
  95. if ($result < 0)
  96. {
  97. setEventMessages($langs->trans("Error").($obj->error?' '.$obj->error:''), null, 'errors');
  98. }
  99. }
  100. if (GETPOST('clearlist'))
  101. {
  102. // Loading Class
  103. $obj = new MailingTargets($db);
  104. $obj->clear_target($id);
  105. /* Avoid this to allow reposition
  106. header("Location: ".$_SERVER['PHP_SELF']."?id=".$id);
  107. exit;
  108. */
  109. }
  110. if ($action == 'delete')
  111. {
  112. // Ici, rowid indique le destinataire et id le mailing
  113. $sql="DELETE FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE rowid=".$rowid;
  114. $resql=$db->query($sql);
  115. if ($resql)
  116. {
  117. if (!empty($id))
  118. {
  119. $obj = new MailingTargets($db);
  120. $obj->update_nb($id);
  121. header("Location: ".$_SERVER['PHP_SELF']."?id=".$id);
  122. exit;
  123. }
  124. else
  125. {
  126. header("Location: list.php");
  127. exit;
  128. }
  129. }
  130. else
  131. {
  132. dol_print_error($db);
  133. }
  134. }
  135. if ($_POST["button_removefilter"])
  136. {
  137. $search_lastname='';
  138. $search_firstname='';
  139. $search_email='';
  140. $search_dest_status='';
  141. }
  142. /*
  143. * View
  144. */
  145. llxHeader('',$langs->trans("Mailing"),'EN:Module_EMailing|FR:Module_Mailing|ES:M&oacute;dulo_Mailing');
  146. $form = new Form($db);
  147. $formmailing = new FormMailing($db);
  148. if ($object->fetch($id) >= 0)
  149. {
  150. $head = emailing_prepare_head($object);
  151. dol_fiche_head($head, 'targets', $langs->trans("Mailing"), -1, 'email');
  152. $linkback = '<a href="'.DOL_URL_ROOT.'/comm/mailing/list.php">'.$langs->trans("BackToList").'</a>';
  153. $morehtmlright='';
  154. if ($object->statut == 2) $morehtmlright.=' ('.$object->countNbOfTargets('alreadysent').'/'.$object->nbemail.') ';
  155. dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', '', '', 0, '', $morehtmlright);
  156. print '<div class="fichecenter">';
  157. print '<div class="underbanner clearboth"></div>';
  158. print '<table class="border" width="100%">';
  159. print '<tr><td class="titlefield">'.$langs->trans("MailTitle").'</td><td colspan="3">'.$object->titre.'</td></tr>';
  160. print '<tr><td>'.$langs->trans("MailFrom").'</td><td colspan="3">'.dol_print_email($object->email_from,0,0,0,0,1).'</td></tr>';
  161. // Errors to
  162. print '<tr><td>'.$langs->trans("MailErrorsTo").'</td><td colspan="3">'.dol_print_email($object->email_errorsto,0,0,0,0,1);
  163. print '</td></tr>';
  164. // Nb of distinct emails
  165. print '<tr><td>';
  166. print $langs->trans("TotalNbOfDistinctRecipients");
  167. print '</td><td colspan="3">';
  168. $nbemail = ($object->nbemail?$object->nbemail:'0');
  169. if (!empty($conf->global->MAILING_LIMIT_SENDBYWEB) && ($conf->global->MAILING_LIMIT_SENDBYWEB < $nbemail) && ($object->statut == 1 || $object->statut == 2))
  170. {
  171. $text=$langs->trans('LimitSendingEmailing',$conf->global->MAILING_LIMIT_SENDBYWEB);
  172. print $form->textwithpicto($nbemail,$text,1,'warning');
  173. }
  174. else
  175. {
  176. print $nbemail;
  177. }
  178. print '</td></tr>';
  179. print '</table>';
  180. print "</div>";
  181. dol_fiche_end();
  182. $allowaddtarget=($object->statut == 0);
  183. // Show email selectors
  184. if ($allowaddtarget && $user->rights->mailing->creer)
  185. {
  186. print load_fiche_titre($langs->trans("ToAddRecipientsChooseHere"), ($user->admin?info_admin($langs->trans("YouCanAddYourOwnPredefindedListHere"),1):''), 'title_generic');
  187. //print '<table class="noborder" width="100%">';
  188. print '<div class="tagtable centpercent liste_titre_bydiv" id="tablelines">';
  189. //print '<tr class="liste_titre">';
  190. print '<div class="tagtr liste_titre">';
  191. //print '<td class="liste_titre">'.$langs->trans("RecipientSelectionModules").'</td>';
  192. print '<div class="tagtd">'.$langs->trans("RecipientSelectionModules").'</div>';
  193. //print '<td class="liste_titre" align="center">'.$langs->trans("NbOfUniqueEMails").'</td>';
  194. print '<div class="tagtd" align="center">'.$langs->trans("NbOfUniqueEMails").'</div>';
  195. //print '<td class="liste_titre" align="left">'.$langs->trans("Filter").'</td>';
  196. print '<div class="tagtd" align="left">'.$langs->trans("Filter").'</div>';
  197. //print '<td class="liste_titre" align="center">&nbsp;</td>';
  198. print '<div class="tagtd">&nbsp;</div>';
  199. //print "</tr>\n";
  200. print '</div>';
  201. clearstatcache();
  202. $var = true;
  203. foreach ($modulesdir as $dir)
  204. {
  205. $modulenames=array();
  206. // Load modules attributes in arrays (name, numero, orders) from dir directory
  207. //print $dir."\n<br>";
  208. dol_syslog("Scan directory ".$dir." for modules");
  209. $handle=@opendir($dir);
  210. if (is_resource($handle))
  211. {
  212. while (($file = readdir($handle))!==false)
  213. {
  214. if (substr($file, 0, 1) <> '.' && substr($file, 0, 3) <> 'CVS')
  215. {
  216. if (preg_match("/(.*)\.modules\.php$/i",$file,$reg))
  217. {
  218. if ($reg[1] == 'example') continue;
  219. $modulenames[]=$reg[1];
  220. }
  221. }
  222. }
  223. closedir($handle);
  224. }
  225. // Sort $modulenames
  226. sort($modulenames);
  227. // Loop on each submodule
  228. foreach($modulenames as $modulename)
  229. {
  230. // Loading Class
  231. $file = $dir.$modulename.".modules.php";
  232. $classname = "mailing_".$modulename;
  233. require_once $file;
  234. $obj = new $classname($db);
  235. // Check dependencies
  236. $qualified=(isset($obj->enabled)?$obj->enabled:1);
  237. foreach ($obj->require_module as $key)
  238. {
  239. if (! $conf->$key->enabled || (! $user->admin && $obj->require_admin))
  240. {
  241. $qualified=0;
  242. //print "Les prerequis d'activation du module mailing ne sont pas respectes. Il ne sera pas actif";
  243. break;
  244. }
  245. }
  246. // Si le module mailing est qualifie
  247. if ($qualified)
  248. {
  249. $var = !$var;
  250. //print '<tr class="oddeven">';
  251. // print '<div '.$bctag[$var].'>';
  252. if ($allowaddtarget)
  253. {
  254. print '<form aa '.$bctag[$var].' name="'.$modulename.'" action="'.$_SERVER['PHP_SELF'].'?action=add&id='.$object->id.'&module='.$modulename.'" method="POST" enctype="multipart/form-data">';
  255. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  256. }
  257. else
  258. {
  259. print '<div '.$bctag[$var].'>';
  260. }
  261. //print '<td>';
  262. print '<div class="tagtd">';
  263. if (empty($obj->picto)) $obj->picto='generic';
  264. print img_object($langs->trans("Module").': '.get_class($obj),$obj->picto);
  265. print ' ';
  266. print $obj->getDesc();
  267. //print '</td>';
  268. print '</div>';
  269. try {
  270. $nbofrecipient=$obj->getNbOfRecipients('');
  271. }
  272. catch(Exception $e)
  273. {
  274. dol_syslog($e->getMessage(), LOG_ERR);
  275. }
  276. //print '<td align="center">';
  277. print '<div class="tagtd center">';
  278. if ($nbofrecipient >= 0)
  279. {
  280. print $nbofrecipient;
  281. }
  282. else
  283. {
  284. print $langs->trans("Error").' '.img_error($obj->error);
  285. }
  286. //print '</td>';
  287. print '</div>';
  288. //print '<td align="left">';
  289. print '<div class="tagtd" align="left">';
  290. if ($allowaddtarget)
  291. {
  292. try {
  293. $filter=$obj->formFilter();
  294. }
  295. catch(Exception $e)
  296. {
  297. dol_syslog($e->getMessage(), LOG_ERR);
  298. }
  299. if ($filter) print $filter;
  300. else print $langs->trans("None");
  301. }
  302. //print '</td>';
  303. print '</div>';
  304. //print '<td align="right">';
  305. print '<div class="tagtd" align="right">';
  306. if ($allowaddtarget)
  307. {
  308. print '<input type="submit" class="button" name="button_'.$modulename.'" value="'.$langs->trans("Add").'">';
  309. }
  310. else
  311. {
  312. print '<input type="submit" class="button disabled" disabled="disabled" name="button_'.$modulename.'" value="'.$langs->trans("Add").'">';
  313. //print $langs->trans("MailNoChangePossible");
  314. print "&nbsp;";
  315. }
  316. //print '</td>';
  317. print '</div>';
  318. if ($allowaddtarget) print '</form>';
  319. else print '</div>';
  320. //print "</tr>\n";
  321. // print '</div>'."\n";
  322. }
  323. }
  324. } // End foreach dir
  325. //print '</table>';
  326. print '</div>';
  327. print '<br><br>';
  328. }
  329. // List of selected targets
  330. $sql = "SELECT mc.rowid, mc.lastname, mc.firstname, mc.email, mc.other, mc.statut, mc.date_envoi, mc.source_url, mc.source_id, mc.source_type, mc.error_text";
  331. $sql .= " FROM ".MAIN_DB_PREFIX."mailing_cibles as mc";
  332. $sql .= " WHERE mc.fk_mailing=".$object->id;
  333. if ($search_lastname) $sql.= " AND mc.lastname LIKE '%".$db->escape($search_lastname)."%'";
  334. if ($search_firstname) $sql.= " AND mc.firstname LIKE '%".$db->escape($search_firstname)."%'";
  335. if ($search_email) $sql.= " AND mc.email LIKE '%".$db->escape($search_email)."%'";
  336. if ($search_dest_status != '' && $search_dest_status >= -1) $sql.= " AND mc.statut=".$db->escape($search_dest_status)." ";
  337. $sql .= $db->order($sortfield,$sortorder);
  338. // Count total nb of records
  339. $nbtotalofrecords = '';
  340. if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
  341. {
  342. $result = $db->query($sql);
  343. $nbtotalofrecords = $db->num_rows($result);
  344. }
  345. //$nbtotalofrecords=$object->nbemail; // nbemail is a denormalized field storing nb of targets
  346. $sql .= $db->plimit($limit+1, $offset);
  347. $resql=$db->query($sql);
  348. if ($resql)
  349. {
  350. $num = $db->num_rows($resql);
  351. $param = "&amp;id=".$object->id;
  352. if ($search_lastname) $param.= "&amp;search_lastname=".urlencode($search_lastname);
  353. if ($search_firstname) $param.= "&amp;search_firstname=".urlencode($search_firstname);
  354. if ($search_email) $param.= "&amp;search_email=".urlencode($search_email);
  355. print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
  356. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  357. print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
  358. print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
  359. print '<input type="hidden" name="page" value="'.$page.'">';
  360. print '<input type="hidden" name="id" value="'.$object->id.'">';
  361. $cleartext='';
  362. if ($allowaddtarget) {
  363. $cleartext=$langs->trans("ToClearAllRecipientsClickHere").' '.'<a href="'.$_SERVER["PHP_SELF"].'?clearlist=1&id='.$object->id.'" class="button reposition">'.$langs->trans("TargetsReset").'</a>';
  364. }
  365. print_barre_liste($langs->trans("MailSelectedRecipients"),$page,$_SERVER["PHP_SELF"],$param,$sortfield,$sortorder,$cleartext,$num,$nbtotalofrecords,'title_generic',0,'','',$limit);
  366. print '</form>';
  367. print "\n<!-- Liste destinataires selectionnes -->\n";
  368. print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
  369. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  370. print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
  371. print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
  372. print '<input type="hidden" name="page" value="'.$page.'">';
  373. print '<input type="hidden" name="id" value="'.$object->id.'">';
  374. print '<input type="hidden" name="limit" value="'.$limit.'">';
  375. if ($page) $param.= "&amp;page=".$page;
  376. print '<table class="noborder" width="100%">';
  377. // Ligne des champs de filtres
  378. print '<tr class="liste_titre_filter">';
  379. // EMail
  380. print '<td class="liste_titre">';
  381. print '<input class="flat maxwidth100" type="text" name="search_email" value="'.dol_escape_htmltag($search_email).'">';
  382. print '</td>';
  383. // Name
  384. print '<td class="liste_titre">';
  385. print '<input class="flat maxwidth100" type="text" name="search_lastname" value="'.dol_escape_htmltag($search_lastname).'">';
  386. print '</td>';
  387. // Firstname
  388. print '<td class="liste_titre">';
  389. print '<input class="flat maxwidth100" type="text" name="search_firstname" value="'.dol_escape_htmltag($search_firstname).'">';
  390. print '</td>';
  391. // Other
  392. print '<td class="liste_titre">';
  393. print '&nbsp';
  394. print '</td>';
  395. // Source
  396. print '<td class="liste_titre">';
  397. print '&nbsp';
  398. print '</td>';
  399. // Date sending
  400. print '<td class="liste_titre">';
  401. print '&nbsp';
  402. print '</td>';
  403. //Statut
  404. print '<td class="liste_titre" align="right">';
  405. print $formmailing->selectDestinariesStatus($search_dest_status,'search_dest_status',1);
  406. print '</td>';
  407. // Action column
  408. print '<td class="liste_titre" align="right">';
  409. $searchpicto=$form->showFilterAndCheckAddButtons($massactionbutton?1:0, 'checkforselect', 1);
  410. print $searchpicto;
  411. print '</td>';
  412. print '</tr>';
  413. print '<tr class="liste_titre">';
  414. print_liste_field_titre($langs->trans("EMail"),$_SERVER["PHP_SELF"],"mc.email",$param,"","",$sortfield,$sortorder);
  415. print_liste_field_titre($langs->trans("Lastname"),$_SERVER["PHP_SELF"],"mc.lastname",$param,"","",$sortfield,$sortorder);
  416. print_liste_field_titre($langs->trans("Firstname"),$_SERVER["PHP_SELF"],"mc.firstname",$param,"","",$sortfield,$sortorder);
  417. print_liste_field_titre($langs->trans("OtherInformations"),$_SERVER["PHP_SELF"],"",$param,"","",$sortfield,$sortorder);
  418. print_liste_field_titre($langs->trans("Source"),$_SERVER["PHP_SELF"],"",$param,"",'align="center"',$sortfield,$sortorder);
  419. // Date sending
  420. if ($object->statut < 2)
  421. {
  422. print_liste_field_titre('');
  423. }
  424. else
  425. {
  426. print_liste_field_titre($langs->trans("DateSending"),$_SERVER["PHP_SELF"],"mc.date_envoi",$param,'','align="center"',$sortfield,$sortorder);
  427. }
  428. print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"mc.statut",$param,'','align="right"',$sortfield,$sortorder);
  429. print_liste_field_titre('',$_SERVER["PHP_SELF"],"",'','','',$sortfield,$sortorder,'maxwidthsearch ');
  430. print '</tr>';
  431. $i = 0;
  432. if ($num)
  433. {
  434. while ($i < min($num,$limit))
  435. {
  436. $obj = $db->fetch_object($resql);
  437. print '<tr class="oddeven">';
  438. print '<td>'.$obj->email.'</td>';
  439. print '<td>'.$obj->lastname.'</td>';
  440. print '<td>'.$obj->firstname.'</td>';
  441. print '<td>'.$obj->other.'</td>';
  442. print '<td align="center">';
  443. if (empty($obj->source_id) || empty($obj->source_type))
  444. {
  445. print empty($obj->source_url)?'':$obj->source_url; // For backward compatibility
  446. }
  447. else
  448. {
  449. if ($obj->source_type == 'member')
  450. {
  451. include_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
  452. $objectstatic=new Adherent($db);
  453. $objectstatic->fetch($obj->source_id);
  454. print $objectstatic->getNomUrl(2);
  455. }
  456. else if ($obj->source_type == 'user')
  457. {
  458. include_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
  459. $objectstatic=new User($db);
  460. $objectstatic->fetch($obj->source_id);
  461. $objectstatic->id=$obj->source_id;
  462. print $objectstatic->getNomUrl(2);
  463. }
  464. else if ($obj->source_type == 'thirdparty')
  465. {
  466. include_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
  467. $objectstatic=new Societe($db);
  468. $objectstatic->fetch($obj->source_id);
  469. print $objectstatic->getNomUrl(2);
  470. }
  471. else
  472. {
  473. print $obj->source_url;
  474. }
  475. }
  476. print '</td>';
  477. // Statut pour l'email destinataire (Attentioon != statut du mailing)
  478. if ($obj->statut == 0)
  479. {
  480. print '<td align="center">&nbsp;</td>';
  481. print '<td align="right" class="nowrap">'.$langs->trans("MailingStatusNotSent");
  482. print '</td>';
  483. }
  484. else
  485. {
  486. print '<td align="center">'.$obj->date_envoi.'</td>';
  487. print '<td align="right" class="nowrap">';
  488. print $object::libStatutDest($obj->statut,2,$obj->error_text);
  489. print '</td>';
  490. }
  491. // Search Icon
  492. print '<td align="right">';
  493. if ($obj->statut == 0)
  494. {
  495. if ($user->rights->mailing->creer && $allowaddtarget) {
  496. print '<a href="'.$_SERVER['PHP_SELF'].'?action=delete&rowid='.$obj->rowid.$param.'">'.img_delete($langs->trans("RemoveRecipient"));
  497. }
  498. }
  499. print '</td>';
  500. print '</tr>';
  501. $i++;
  502. }
  503. }
  504. else
  505. {
  506. if ($object->statut < 2)
  507. {
  508. print '<tr><td colspan="8" class="opacitymedium">';
  509. print $langs->trans("NoTargetYet");
  510. print '</td></tr>';
  511. }
  512. }
  513. print "</table><br>";
  514. print '</form>';
  515. $db->free($resql);
  516. }
  517. else
  518. {
  519. dol_print_error($db);
  520. }
  521. print "\n<!-- Fin liste destinataires selectionnes -->\n";
  522. }
  523. llxFooter();
  524. $db->close();