PageRenderTime 40ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/e107_plugins/newsletter/admin_config.php

https://github.com/CasperGemini/e107
PHP | 721 lines | 566 code | 98 blank | 57 comment | 42 complexity | fc9ec7675d44cb33cd97d71cdaaf1e41 MD5 | raw file
Possible License(s): GPL-2.0
  1. <?php
  2. /*
  3. * e107 website system
  4. *
  5. * Copyright (C) 2008-2014 e107 Inc (e107.org)
  6. * Released under the terms and conditions of the
  7. * GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
  8. *
  9. * Plugin - Newsletter
  10. *
  11. */
  12. require_once('../../class2.php');
  13. if (!getperms('P'))
  14. {
  15. header('location:'.e_BASE.'index.php');
  16. exit;
  17. }
  18. $e_sub_cat = 'newsletter';
  19. require_once(e_ADMIN.'auth.php');
  20. // Include ren_help for display_help (while showing BBcodes)
  21. require_once(e_HANDLER.'ren_help.php');
  22. $mes = e107::getMessage();
  23. if (e_QUERY)
  24. {
  25. list($action, $id, $key) = explode('.', e_QUERY);
  26. $key = intval($key);
  27. $id = intval($id);
  28. }
  29. else
  30. {
  31. $action = FALSE;
  32. $id = FALSE;
  33. }
  34. $nl = new newsletter;
  35. if(!e_QUERY)
  36. {
  37. $nl -> showExistingNewsletters();
  38. }
  39. else
  40. {
  41. switch ($action)
  42. {
  43. case 'vs' : // View subscribers of a newsletter
  44. $nl -> view_subscribers($id);
  45. break;
  46. case 'remove' : // Remove subscriber
  47. $nl -> remove_subscribers($id,$key);
  48. $nl -> view_subscribers($id);
  49. break;
  50. default:
  51. $function = $action.'Newsletter';
  52. if (method_exists($nl, $function))
  53. {
  54. $nl -> $function($id);
  55. }
  56. else
  57. {
  58. exit;
  59. }
  60. }
  61. }
  62. class newsletter
  63. {
  64. protected $e107;
  65. var $message;
  66. public function __construct()
  67. {
  68. $tp = e107::getParser();
  69. $ns = e107::getRender();
  70. $mes = e107::getMessage();
  71. $this->e107 = e107::getInstance(); // TODO remove?
  72. foreach($_POST as $key => $value)
  73. {
  74. $key = $tp->toDB($key);
  75. if(strpos($key, 'nlmailnow') === 0)
  76. {
  77. $this->releaseIssue($key);
  78. break;
  79. }
  80. }
  81. if(isset($_POST['delete']))
  82. {
  83. $this->deleteNewsletter();
  84. }
  85. if(isset($_POST['createNewsletter']))
  86. {
  87. $this->createNewsletter();
  88. }
  89. if(isset($_POST['createIssue']))
  90. {
  91. $this->createIssue();
  92. }
  93. if($mes)
  94. {
  95. $ns->tablerender($caption, $mes->render() . $text);
  96. }
  97. }
  98. function showExistingNewsletters()
  99. {
  100. $sql = e107::getDb();
  101. $ns = e107::getRender();
  102. $mes = e107::getMessage();
  103. $tp = e107::getParser();
  104. if(!$sql->select('newsletter', '*', "newsletter_parent='0' ORDER BY newsletter_id DESC"))
  105. {
  106. $mes->addInfo(NLLAN_05);
  107. }
  108. else
  109. {
  110. $text = "<form action='".e_SELF."' id='newsletterform' method='post'>
  111. <table class='table adminlist'>
  112. <colgroup>
  113. <col style='width: 5%; text-align: center;' />
  114. <col style='width: 65%;' />
  115. <col style='width: 20%; text-align: center;' />
  116. <col style='width: 10%; text-align: center;' />
  117. </colgroup>
  118. <tr>
  119. <td>".LAN_ID."</td>
  120. <td>".LAN_NAME."</td>
  121. <td>".NLLAN_07."</td>
  122. <td class='center options'>".LAN_OPTIONS."</td>
  123. </tr>
  124. ";
  125. $nlArray = $sql->db_getList();
  126. foreach($nlArray as $data)
  127. {
  128. $text .= "
  129. <tr>
  130. <td>".$data['newsletter_id']."</td>
  131. <td>".$data['newsletter_title']."</td>
  132. <td>".((substr_count($data['newsletter_subscribers'], chr(1))!= 0)?"<a href='".e_SELF."?vs.".$data['newsletter_id']."'>".substr_count($data['newsletter_subscribers'], chr(1))."</a>":substr_count($data['newsletter_subscribers'], chr(1)))."</td>
  133. <td>
  134. <a class='btn btn-large' href='".e_SELF."?edit.".$data['newsletter_id']."'>".ADMIN_EDIT_ICON."</a>
  135. <input type='image' title='".LAN_DELETE."' name='delete[newsletter_".$data['newsletter_id']."]' src='".ADMIN_DELETE_ICON_PATH."' onclick=\"return jsconfirm('".$tp->toJS(LAN_CONFIRMDEL." [ID: ".$data['newsletter_id']." ]")."') \"/>
  136. </td>
  137. </tr>
  138. ";
  139. }
  140. $text .= "</table>
  141. </form>
  142. ";
  143. }
  144. $ns->tablerender(NLLAN_10, $mes->render() . $text);
  145. unset($text);
  146. if(!$sql->select('newsletter', '*', "newsletter_parent!='0' ORDER BY newsletter_id DESC"))
  147. {
  148. $mes->addinfo(NLLAN_11);
  149. }
  150. else
  151. {
  152. $text = "<form action='".e_SELF."' id='newsletterform2' method='post'>
  153. <table class='table adminlist'>
  154. <colgroup>
  155. <col style='width: 5%; text-align: center;' />
  156. <col style='width: 10%; text-align: center;' />
  157. <col style='width: 65%;' />
  158. <col style='width: 10%; text-align: center;' />
  159. <col style='width: 10%; text-align: center;' />
  160. </colgroup>
  161. <tr>
  162. <td>".LAN_ID."</td>
  163. <td>".NLLAN_12."</td>
  164. <td>".NLLAN_13."</td>
  165. <td>".NLLAN_14."</td>
  166. <td class='center options'>".LAN_OPTIONS."</td>
  167. </tr>
  168. ";
  169. $nlArray = $sql->db_getList();
  170. foreach($nlArray as $data)
  171. {
  172. $text .= "
  173. <tr>
  174. <td>".$data['newsletter_id']."</td>
  175. <td>".$data['newsletter_issue']."</td>
  176. <td>[ ".$data['newsletter_parent']." ] ".$data['newsletter_title']."</td>
  177. <td>".($data['newsletter_flag'] ? LAN_YES : "<input class='btn button' type='submit' name='nlmailnow_".$data['newsletter_id']."' value='".NLLAN_17."' onclick=\"return jsconfirm('".$tp->toJS(NLLAN_18)."') \" />")."</td>
  178. <td><a class='btn btn-large' href='".e_SELF."?edit.".$data['newsletter_id']."'>".ADMIN_EDIT_ICON."</a><input type='image' title='".LAN_DELETE."' name='delete[issue_".$data['newsletter_id']."]' src='".ADMIN_DELETE_ICON_PATH."' onclick=\"return jsconfirm('".$tp->toJS(NLLAN_19." [ID: ".$data['newsletter_id']." ]")."') \"/>
  179. </td>
  180. </tr>
  181. ";
  182. }
  183. $text .= "</table>
  184. </form>
  185. ";
  186. }
  187. $ns->tablerender(NLLAN_20, $mes->render() . $text);
  188. }
  189. function defineNewsletter($edit=FALSE)
  190. {
  191. $tp = e107::getParser();
  192. $ns = e107::getRender();
  193. $frm = e107::getForm();
  194. // We've been passed a value from DB, so should be reasonably sanitised.
  195. if($edit)
  196. {
  197. $newsletter_title = $tp->toFORM($edit['newsletter_title']);
  198. $newsletter_text = $tp->toFORM($edit['newsletter_text']);
  199. $newsletter_footer = $tp->toFORM($edit['newsletter_footer']);
  200. $newsletter_header = $tp->toFORM($edit['newsletter_header']);
  201. }
  202. $text .= "
  203. <form action='".e_SELF."' id='newsletterform' method='post'>
  204. <table class='table adminform'>
  205. <colgroup span='2'>
  206. <col class='col-label' />
  207. <col class='col-control' />
  208. </colgroup>
  209. <tr>
  210. <td>".LAN_TITLE."</td>
  211. <td>".$frm->text('newsletter_title', $newsletter_title, '200')."</td>
  212. </tr>
  213. <tr>
  214. <td>".LAN_DESCRIPTION."</td>
  215. <td><textarea class='tbox' id='data' name='newsletter_text' cols='80' rows='10'>{$newsletter_text}</textarea></td>
  216. </tr>
  217. <tr>
  218. <td>".NLLAN_23."</td>
  219. <td><textarea class='tbox' id='data' name='newsletter_header' cols='80' rows='5'>{$newsletter_header}</textarea></td>
  220. </tr>
  221. <tr>
  222. <td>".NLLAN_24."</td>
  223. <td><textarea class='tbox' id='data' name='newsletter_footer' cols='80' rows='5'>{$newsletter_footer}</textarea></td>
  224. </tr>
  225. </table>
  226. <div class='buttons-bar center'>
  227. ".($edit ? $frm->admin_button('createNewsletter', LAN_UPDATE, 'update')."\n<input type='hidden' name='editid' value='{$edit['newsletter_id']}' />" : $frm->admin_button('createNewsletter', LAN_CREATE, 'create'))."
  228. </div>
  229. </form>
  230. ";
  231. $caption = ($edit ? LAN_PLUGIN_NEWSLETTER_NAME.' - '.LAN_UPDATE : LAN_PLUGIN_NEWSLETTER_NAME.' - '.LAN_CREATE);
  232. $ns->tablerender($caption, $text);
  233. }
  234. /**
  235. * Save entry for new newsletter in DB, using $_POST values
  236. *
  237. * @param int $_POST['editid'] - ID of newsletter if existing - indicates edit to be saved
  238. *
  239. * @return none
  240. */
  241. function createNewsletter()
  242. {
  243. $tp = e107::getParser();
  244. $sql = e107::getDb();
  245. $mes = e107::getMessage();
  246. $letter['newsletter_title'] = $tp->toDB($_POST['newsletter_title']);
  247. $letter['newsletter_text'] = $tp->toDB($_POST['newsletter_text']);
  248. $letter['newsletter_header'] = $tp->toDB($_POST['newsletter_header']);
  249. $letter['newsletter_footer'] = $tp->toDB($_POST['newsletter_footer']);
  250. if(isset($_POST['editid']))
  251. {
  252. $sql ->update('newsletter', "newsletter_title='{$letter['newsletter_title']}', newsletter_text='{$letter['newsletter_text']}', newsletter_header='{$letter['newsletter_header']}', newsletter_footer='{$letter['newsletter_footer']}' WHERE newsletter_id=".intval($_POST['editid']));
  253. $mes->addSuccess(LAN_UPDATED);
  254. }
  255. else
  256. {
  257. $letter['newsletter_datestamp'] = time();
  258. $sql->insert('newsletter', $letter);
  259. $mes->addSuccess(LAN_CREATED);
  260. }
  261. }
  262. function makeNewsletter($edit=FALSE)
  263. {
  264. $tp = e107::getParser();
  265. $ns = e107::getRender();
  266. $sql = e107::getDb();
  267. $mes = e107::getMessage();
  268. $frm = e107::getForm();
  269. // Passed data is from DB
  270. if($edit)
  271. {
  272. $newsletter_title = $tp->toFORM($edit['newsletter_title']);
  273. $newsletter_text = $tp->toFORM($edit['newsletter_text']);
  274. $newsletter_issue = $tp->toFORM($edit['newsletter_issue']);
  275. }
  276. if(!$sql->select('newsletter', '*', "newsletter_parent='0' "))
  277. {
  278. //$this -> message = NLLAN_05;
  279. $mes->addInfo(NLLAN_05);
  280. }
  281. else
  282. {
  283. $nlArray = $sql -> db_getList();
  284. $text .= "
  285. <form action='".e_SELF."' id='newsletterform' method='post'>
  286. <table class='table adminform'>
  287. <colgroup span='2'>
  288. <col class='col-label' />
  289. <col class='col-control' />
  290. </colgroup>
  291. <tr>
  292. <td>".NLLAN_30."</td>
  293. <td>
  294. <select name='newsletter_parent' class='tbox'>
  295. ";
  296. foreach($nlArray as $nl)
  297. {
  298. $text .= "<option value='".$nl['newsletter_id']."'>".$nl['newsletter_title']."</option>\n";
  299. }
  300. $text .= "</select></td>
  301. <tr>
  302. <td>".NLLAN_31."</td>
  303. <td>".$frm->text('newsletter_title', $newsletter_title, '200')."</td>
  304. </tr>
  305. <tr>
  306. <td>".NLLAN_32."</td>
  307. <td>".$frm->number('newsletter_', $newsletter_issue, '200')."</td>
  308. </tr>
  309. <tr>
  310. <td>".NLLAN_33."</td>
  311. <td>
  312. <textarea class='tbox' id='data' name='newsletter_text' cols='80' rows='10' onselect='storeCaret(this);' onclick='storeCaret(this);' onkeyup='storeCaret(this);'>{$edit['newsletter_text']}</textarea></td>
  313. </tr>
  314. </table>
  315. <div class='buttons-bar center'>
  316. ".($edit ? $frm->admin_button('createIssue', LAN_UPDATE, 'update')."<input type='hidden' name='editid' value='{$edit['newsletter_id']}' />" : $frm->admin_button('createIssue', LAN_CREATE, 'submit'))."
  317. </div>
  318. </form>
  319. </div>
  320. ";
  321. }
  322. $caption = ($edit ? NLLAN_36 : NLLAN_37);
  323. $ns->tablerender($caption, $mes->render() . $text);
  324. }
  325. function createIssue()
  326. {
  327. $tp = e107::getParser();
  328. $sql = e107::getDb();
  329. $mes = e107::getMessage();
  330. $ns = e107::getRender();
  331. $letter['newsletter_title'] = $tp->toDB($_POST['newsletter_title']);
  332. $letter['newsletter_text'] = $tp->toDB($_POST['newsletter_text']);
  333. $letter['newsletter_parent'] = intval($_POST['newsletter_parent']);
  334. $letter['newsletter_issue'] = $tp->toDB($_POST['newsletter_issue']);
  335. if (isset($_POST['editid']))
  336. {
  337. $sql->update('newsletter', "newsletter_title='{$letter['newsletter_title']}', newsletter_text='{$letter['newsletter_text']}', newsletter_parent='".$letter['newsletter_parent']."', newsletter_issue='".$letter['newsletter_issue']."' WHERE newsletter_id=".intval($_POST['editid']));
  338. $mes->addSuccess(LAN_UPDATED);
  339. }
  340. else
  341. {
  342. $letter['newsletter_datestamp'] = time();
  343. $sql->insert('newsletter', $letter);
  344. $mes->addSuccess(NLLAN_39);
  345. }
  346. $ns->tablerender($caption, $mes->render() . $text);
  347. }
  348. /**
  349. * Actually release an issue of a newsletter
  350. * Add the mailing to the mail queue
  351. *
  352. * @param int id of issue
  353. *
  354. * @return boolean FALSE on error
  355. */
  356. function releaseIssue($issue)
  357. {
  358. $pref = e107::getPref();
  359. $sql = e107::getDb();
  360. $mes = e107::getMessage();
  361. $ns = e107::getRender();
  362. $issue = intval(str_replace('nlmailnow_', '', $issue));
  363. // Get details of current newsletter issue
  364. if(!$sql->select('newsletter', '*', 'newsletter_id='.$issue))
  365. {
  366. return FALSE;
  367. }
  368. $newsletterInfo = $sql->fetch(MYSQL_ASSOC);
  369. // Get parent details - has header/footer and subscriber list
  370. if(!$sql->select('newsletter', '*', "newsletter_id='".$newsletterInfo['newsletter_parent']."' "))
  371. {
  372. return FALSE;
  373. }
  374. $newsletterParentInfo = $sql->fetch(MYSQL_ASSOC);
  375. $memberArray = explode(chr(1), $newsletterParentInfo['newsletter_subscribers']);
  376. require(e_HANDLER.'mail_manager_class.php');
  377. $mailer = new e107MailManager;
  378. // Start by creating the mail body
  379. $mailData = array(
  380. 'mail_content_status' => MAIL_STATUS_TEMP,
  381. 'mail_create_app' => 'newsletter',
  382. 'mail_title' => NLLAN_01.' '.$issue,
  383. 'mail_subject' => $newsletterParentInfo['newsletter_title'] .': '.$newsletterInfo['newsletter_title'],
  384. 'mail_sender_email' => $pref['siteadminemail'],
  385. 'mail_sender_name' => $pref['siteadmin'],
  386. 'mail_send_style' => 'themehtml',
  387. 'mail_include_images' => TRUE
  388. );
  389. // Assemble body - we can leave a lot to to core mail sending routines
  390. $mail_style = "<div style='width:90%; padding-top:10px'>";
  391. $mail_style .= "<div><b>{$mailout['mail_subject']}<br />[ ".NLLAN_12." ".$newsletterInfo['newsletter_issue']." ]</b></div><br /><br />";
  392. $mail_style .= "<div>";
  393. $mailData['mail_body'] = $mail_style.$newsletterParentInfo['newsletter_header']."<hr />".$newsletterInfo['newsletter_text']."<br /><br /><hr />".$newsletterParentInfo['newsletter_footer']."<br /></div></div>";
  394. $result = $mailer->saveEmail($mailData, TRUE);
  395. if (is_numeric($result))
  396. {
  397. $mailMainID = $mailData['mail_source_id'] = $result;
  398. }
  399. else
  400. {
  401. // TODO: Handle error
  402. }
  403. $mailer->mailInitCounters($mailMainID); // Initialise counters for emails added
  404. // Now add email addresses to the list
  405. foreach($memberArray as $memberID)
  406. {
  407. if ($memberID = intval($memberID))
  408. {
  409. if($sql->select('user', 'user_name,user_email,user_loginname,user_lastvisit', 'user_id='.$memberID))
  410. {
  411. $row = $sql->db_Fetch(MYSQL_ASSOC);
  412. $uTarget = array('mail_recipient_id' => $memberID,
  413. 'mail_recipient_name' => $row['user_name'], // Should this use realname?
  414. 'mail_recipient_email' => $row['user_email'],
  415. 'mail_target_info' => array(
  416. 'USERID' => $memberID,
  417. 'DISPLAYNAME' => $row['user_name'],
  418. 'USERNAME' => $row['user_loginname'],
  419. 'USERLASTVISIT' => $row['user_lastvisit']
  420. )
  421. ); // Probably overkill, but some user data in case we want to substitute
  422. }
  423. $result = $mailer->mailAddNoDup($mailMainID, $uTarget, MAIL_STATUS_TEMP);
  424. //echo '<b>'.NLLAN_54.'</b> '.$uTarget['mail_recipient_name'].' ( '.$uTarget['mail_recipient_email'].' ) <br />';
  425. }
  426. }
  427. $mailer->mailUpdateCounters($mailMainID); // Update the counters
  428. $counters = $mailer->mailRetrieveCounters($mailMainID); // Retrieve the counters
  429. if ($counters['add'] == 0)
  430. {
  431. $mailer->deleteEmail($mailMainID); // No subscribers - delete email
  432. //$this->message = NLLAN_41;
  433. $mes->addError(NLLAN_41);
  434. }
  435. else
  436. {
  437. $mailer->activateEmail($mailMainID, FALSE); // Actually mark the email for sending
  438. //$this->message = str_replace('--COUNT--', $counters['add'],NLLAN_40);
  439. $mes->addSuccess(str_replace('--COUNT--', $counters['add'], NLLAN_40));
  440. }
  441. $sql->update('newsletter', "newsletter_flag='1' WHERE newsletter_id=".$issue);
  442. $ns->tablerender($caption, $mes->render() . $text);
  443. }
  444. /**
  445. * Edit a newsletter
  446. *
  447. * @param $id int ID of newsletter to edit
  448. * @return none
  449. */
  450. function editNewsletter($id)
  451. {
  452. $sql = e107::getDb();
  453. if($sql->select("newsletter", "*", "newsletter_id='{$id}'"))
  454. {
  455. $foo = $sql->fetch();
  456. if(!$foo['newsletter_parent'])
  457. {
  458. $this -> defineNewsletter($foo);
  459. }
  460. else
  461. {
  462. $this -> makeNewsletter($foo);
  463. }
  464. }
  465. }
  466. /**
  467. * Delete a newsletter
  468. *
  469. * @return none
  470. */
  471. function deleteNewsletter()
  472. {
  473. $sql = e107::getDb();
  474. $mes = e107::getMessage();
  475. $tmp = each($_POST['delete']);
  476. if(strpos($tmp['key'], 'newsletter') === 0)
  477. {
  478. $id = intval(str_replace('newsletter_', '', $tmp['key']));
  479. $sql->delete('newsletter', "newsletter_id='{$id}'");
  480. //$this -> message = NLLAN_42;
  481. $mes->addSuccess(LAN_DELETED);
  482. }
  483. else
  484. {
  485. $id = intval(str_replace('issue_', '', $tmp['key']));
  486. $sql->delete('newsletter', "newsletter_id='{$id}' ");
  487. //$this -> message = NLLAN_43;
  488. $mes->addSuccess(LAN_DELETED);
  489. }
  490. }
  491. /**
  492. * Generate and display admin menu
  493. *
  494. * @return none
  495. */
  496. function show_options($action)
  497. {
  498. if ($action == "")
  499. {
  500. $action = "main";
  501. }
  502. $var['main']['text'] = NLLAN_44;
  503. $var['main']['link'] = e_SELF;
  504. $var['define']['text'] = NLLAN_45;
  505. $var['define']['link'] = e_SELF."?define";
  506. $var['make']['text'] = NLLAN_46;
  507. $var['make']['link'] = e_SELF."?make";
  508. show_admin_menu(NLLAN_47, $action, $var);
  509. }
  510. function view_subscribers($p_id)
  511. {
  512. $ns = e107::getRender();
  513. $mes = e107::getMessage();
  514. $frm = e107::getForm();
  515. $nl_sql = new db;
  516. $_nl_sanatized = '';
  517. if(!$nl_sql->db_Select('newsletter', '*', 'newsletter_id='.$p_id))// Check if newsletter id is available
  518. {
  519. $mes->addError(NLLAN_56);
  520. $vs_text .= "<div class='buttons-bar center'>
  521. <input class='btn button' type=button value='".LAN_BACK."' onClick=\"window.location='".e_SELF."'\">
  522. </div>";
  523. $ns -> tablerender(NLLAN_65.' '.$p_id, $mes->render() . $vs_text);
  524. return;
  525. }
  526. else
  527. {
  528. $vs_text .= "
  529. <form action='".e_SELF."' id='newsletterform' method='post'>
  530. <table class='table adminlist'>
  531. <colgroup>
  532. <col style='width: 5%; text-align: center;' />
  533. <col style='width: 35%;' />
  534. <col style='width: 45%;' />
  535. <col style='width: 15%; text-align: center;' />
  536. </colgroup>
  537. <tr>
  538. <td>".LAN_ID."</td>
  539. <td>".LAN_NAME."</td>
  540. <td>".LAN_EMAIL."</td>
  541. <td>".LAN_OPTIONS."</td>
  542. </tr>";
  543. if($nl_row = $nl_sql-> db_Fetch())
  544. {
  545. $subscribers_list = explode(chr(1), trim($nl_row['newsletter_subscribers']));
  546. sort($subscriber_list);
  547. $subscribers_total_count = count($subscribers_list) - 1; // Get a null entry as well
  548. }
  549. if ($subscribers_total_count<1)
  550. {
  551. header("location:".e_SELF);
  552. exit;
  553. }
  554. // Loop through each user in the array subscribers_list & sanatize
  555. $_last_subscriber = '';
  556. foreach ($subscribers_list as $val)
  557. {
  558. $val=trim($val);
  559. if ($val)
  560. {
  561. if ($val != $_last_subscriber)
  562. {
  563. $nl_sql -> db_Select("user", "*", "user_id=".$val);
  564. if($nl_row = $nl_sql-> db_Fetch())
  565. {
  566. $vs_text .= "
  567. <tr>
  568. <td>".$val."</td>
  569. <td><a href='".e_BASE."user.php?id.{$val}'>".$nl_row['user_name']."</a></td>
  570. <td>".$nl_row['user_email']."</td>
  571. <td><a href='".e_SELF."?remove.{$p_id}.{$val}'>".ADMIN_DELETE_ICON."</a>".(($nl_row['user_ban'] > 0) ? NLLAN_62 : "")."</td>
  572. </tr>";
  573. $_last_subscriber = $val;
  574. }
  575. }
  576. else
  577. { // Duplicate user id found in the subscribers_list array!
  578. newsletter::remove_subscribers($p_id, $val); // removes all entries for this user id
  579. $newsletterArray[$p_id]['newsletter_subscribers'] = chr(1).$val; // keep this single value in the list
  580. $nl_sql -> db_Update("newsletter", "newsletter_subscribers='".$newsletterArray[$p_id]['newsletter_subscribers']."' WHERE newsletter_id='".intval($p_id)."'");
  581. $subscribers_total_count --;
  582. $_nl_sanatized = 1;
  583. }
  584. }
  585. }
  586. }
  587. $vs_text .= "
  588. <tr>
  589. <td colspan='4'>".NLLAN_63.": ".$subscribers_total_count."</td>
  590. </tr>
  591. </table>
  592. <div class='buttons-bar center'>
  593. ".$frm->admin_button('submit', LAN_BACK, 'submit')."
  594. </div>
  595. </form>
  596. ";
  597. if ($_nl_sanatized == 1)
  598. {
  599. $mes->addInfo(NLLAN_66);
  600. }
  601. $ns->tablerender(NLLAN_65.' '.$p_id, $mes->render() . $vs_text);
  602. }
  603. function remove_subscribers($p_id, $p_key)
  604. {
  605. $sql = e107::getDb();
  606. $sql ->select('newsletter', '*', 'newsletter_id='.intval($p_id));
  607. if($nl_row = $sql->fetch(MYSQL_ASSOC))
  608. {
  609. $subscribers_list = array_flip(explode(chr(1), $nl_row['newsletter_subscribers']));
  610. unset($subscribers_list[$p_key]);
  611. $new_subscriber_list = implode(chr(1), array_keys($subscribers_list));
  612. $sql->update('newsletter', "newsletter_subscribers='{$new_subscriber_list}' WHERE newsletter_id='".$p_id."'");
  613. }
  614. }
  615. }
  616. require_once(e_ADMIN.'footer.php');
  617. function admin_config_adminmenu()
  618. {
  619. global $nl;
  620. global $action;
  621. $nl->show_options($action);
  622. }
  623. ?>