showExistingNewsletters(); } else { switch ($action) { case 'vs' : // View subscribers of a newsletter $nl -> view_subscribers($id); break; case 'remove' : // Remove subscriber $nl -> remove_subscribers($id,$key); $nl -> view_subscribers($id); break; default: $function = $action.'Newsletter'; if (method_exists($nl, $function)) { $nl -> $function($id); } else { exit; } } } class newsletter { protected $e107; var $message; public function __construct() { $tp = e107::getParser(); $ns = e107::getRender(); $mes = e107::getMessage(); $this->e107 = e107::getInstance(); // TODO remove? foreach($_POST as $key => $value) { $key = $tp->toDB($key); if(strpos($key, 'nlmailnow') === 0) { $this->releaseIssue($key); break; } } if(isset($_POST['delete'])) { $this->deleteNewsletter(); } if(isset($_POST['createNewsletter'])) { $this->createNewsletter(); } if(isset($_POST['createIssue'])) { $this->createIssue(); } echo $mes->render(); /*if($mes) { $ns->tablerender($caption, $mes->render() . $text); }*/ } function showExistingNewsletters() { $sql = e107::getDb(); $ns = e107::getRender(); $mes = e107::getMessage(); $tp = e107::getParser(); if(!$sql->select('newsletter', '*', "newsletter_parent='0' ORDER BY newsletter_id DESC")) { $mes->addInfo(NLLAN_05); } else { $text = "
"; $nlArray = $sql->db_getList(); foreach($nlArray as $data) { $text .= " "; } $text .= "
".LAN_ID." ".LAN_NAME." ".NLLAN_07." ".LAN_OPTIONS."
".$data['newsletter_id']." ".$data['newsletter_title']." ".((substr_count($data['newsletter_subscribers'], chr(1))!= 0)?"".substr_count($data['newsletter_subscribers'], chr(1))."":substr_count($data['newsletter_subscribers'], chr(1)))." ".ADMIN_EDIT_ICON." toJS(LAN_CONFIRMDEL." [ID: ".$data['newsletter_id']." ]")."') \"/>
"; } $ns->tablerender(NLLAN_10, $mes->render() . $text); unset($text); if(!$sql->select('newsletter', '*', "newsletter_parent!='0' ORDER BY newsletter_id DESC")) { $mes->addinfo(NLLAN_11); } else { $text = "
"; $nlArray = $sql->db_getList(); foreach($nlArray as $data) { $text .= " "; } $text .= "
".LAN_ID." ".NLLAN_12." ".NLLAN_13." ".NLLAN_14." ".LAN_OPTIONS."
".$data['newsletter_id']." ".$data['newsletter_issue']." [ ".$data['newsletter_parent']." ] ".$data['newsletter_title']." ".($data['newsletter_flag'] ? LAN_YES : "toJS(NLLAN_18)."') \" />")." ".ADMIN_EDIT_ICON."toJS(NLLAN_19." [ID: ".$data['newsletter_id']." ]")."') \"/>
"; } $ns->tablerender(NLLAN_20, $mes->render() . $text); } function defineNewsletter($edit=FALSE) { $tp = e107::getParser(); $ns = e107::getRender(); $frm = e107::getForm(); // We've been passed a value from DB, so should be reasonably sanitised. if($edit) { $newsletter_title = $tp->toFORM($edit['newsletter_title']); $newsletter_text = $tp->toFORM($edit['newsletter_text']); $newsletter_footer = $tp->toFORM($edit['newsletter_footer']); $newsletter_header = $tp->toFORM($edit['newsletter_header']); } $text = "
".LAN_TITLE." ".$frm->text('newsletter_title', $newsletter_title, '200')."
".LAN_DESCRIPTION."
".NLLAN_23."
".NLLAN_24."
".($edit ? $frm->admin_button('createNewsletter', LAN_UPDATE, 'update')."\n" : $frm->admin_button('createNewsletter', LAN_CREATE, 'create'))."
"; $caption = ($edit ? LAN_PLUGIN_NEWSLETTER_NAME.' - '.LAN_UPDATE : LAN_PLUGIN_NEWSLETTER_NAME.' - '.LAN_CREATE); $ns->tablerender($caption, $text); } /** * Save entry for new newsletter in DB, using $_POST values * * @param int $_POST['editid'] - ID of newsletter if existing - indicates edit to be saved * * @return none */ function createNewsletter() { $tp = e107::getParser(); $sql = e107::getDb(); $mes = e107::getMessage(); $letter['newsletter_title'] = $tp->toDB($_POST['newsletter_title']); $letter['newsletter_text'] = $tp->toDB($_POST['newsletter_text']); $letter['newsletter_header'] = $tp->toDB($_POST['newsletter_header']); $letter['newsletter_footer'] = $tp->toDB($_POST['newsletter_footer']); if(isset($_POST['editid'])) { $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'])); $mes->addSuccess(LAN_UPDATED); } else { $letter['newsletter_datestamp'] = time(); $sql->insert('newsletter', $letter); $mes->addSuccess(LAN_CREATED); } } function makeNewsletter($edit=FALSE) { $tp = e107::getParser(); $ns = e107::getRender(); $sql = e107::getDb(); $mes = e107::getMessage(); $frm = e107::getForm(); // Passed data is from DB if($edit) { $newsletter_title = $tp->toFORM($edit['newsletter_title']); $newsletter_text = $tp->toFORM($edit['newsletter_text']); $newsletter_issue = $tp->toFORM($edit['newsletter_issue']); } if(!$sql->select('newsletter', '*', "newsletter_parent='0' ")) { //$this -> message = NLLAN_05; $mes->addInfo(NLLAN_05); } else { $nlArray = $sql -> db_getList(); $text = "
".NLLAN_30."
".NLLAN_31." ".$frm->text('newsletter_title', $newsletter_title, '200')."
".NLLAN_32." ".$frm->number('newsletter_', $newsletter_issue, '200')."
".NLLAN_33."
".($edit ? $frm->admin_button('createIssue', LAN_UPDATE, 'update')."" : $frm->admin_button('createIssue', LAN_CREATE, 'submit'))."
"; } $caption = ($edit ? NLLAN_36 : NLLAN_37); $ns->tablerender($caption, $mes->render() . $text); } function createIssue() { $tp = e107::getParser(); $sql = e107::getDb(); $mes = e107::getMessage(); $ns = e107::getRender(); $letter['newsletter_title'] = $tp->toDB($_POST['newsletter_title']); $letter['newsletter_text'] = $tp->toDB($_POST['newsletter_text']); $letter['newsletter_parent'] = intval($_POST['newsletter_parent']); $letter['newsletter_issue'] = $tp->toDB($_POST['newsletter_issue']); if (isset($_POST['editid'])) { $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'])); $mes->addSuccess(LAN_UPDATED); } else { $letter['newsletter_datestamp'] = time(); $sql->insert('newsletter', $letter); $mes->addSuccess(NLLAN_39); } echo $mes->render(); // $ns->tablerender($caption, $mes->render() . $text); } /** * Actually release an issue of a newsletter * Add the mailing to the mail queue * * @param int id of issue * * @return boolean FALSE on error */ function releaseIssue($issue) { $pref = e107::getPref(); $sql = e107::getDb(); $mes = e107::getMessage(); $ns = e107::getRender(); $issue = intval(str_replace('nlmailnow_', '', $issue)); // Get details of current newsletter issue if(!$sql->select('newsletter', '*', 'newsletter_id='.$issue)) { return FALSE; } $newsletterInfo = $sql->fetch(); // Get parent details - has header/footer and subscriber list if(!$sql->select('newsletter', '*', "newsletter_id='".$newsletterInfo['newsletter_parent']."' ")) { return FALSE; } $newsletterParentInfo = $sql->fetch(); $memberArray = explode(chr(1), $newsletterParentInfo['newsletter_subscribers']); require(e_HANDLER.'mail_manager_class.php'); $mailer = new e107MailManager; // Start by creating the mail body $mailData = array( 'mail_content_status' => MAIL_STATUS_TEMP, 'mail_create_app' => 'newsletter', 'mail_title' => NLLAN_01.' '.$issue, 'mail_subject' => $newsletterParentInfo['newsletter_title'] .': '.$newsletterInfo['newsletter_title'], 'mail_sender_email' => $pref['siteadminemail'], 'mail_sender_name' => $pref['siteadmin'], 'mail_send_style' => 'themehtml', 'mail_include_images' => TRUE ); // Assemble body - we can leave a lot to to core mail sending routines $mail_style = "
"; $mail_style .= "
{$mailout['mail_subject']}
[ ".NLLAN_12." ".$newsletterInfo['newsletter_issue']." ]


"; $mail_style .= "
"; $mailData['mail_body'] = $mail_style.$newsletterParentInfo['newsletter_header']."
".$newsletterInfo['newsletter_text']."


".$newsletterParentInfo['newsletter_footer']."
"; $result = $mailer->saveEmail($mailData, TRUE); if (is_numeric($result)) { $mailMainID = $mailData['mail_source_id'] = $result; } else { // TODO: Handle error } $mailer->mailInitCounters($mailMainID); // Initialise counters for emails added // Now add email addresses to the list foreach($memberArray as $memberID) { if ($memberID = intval($memberID)) { if($sql->select('user', 'user_name,user_email,user_loginname,user_lastvisit', 'user_id='.$memberID)) { $row = $sql->db_Fetch(); $uTarget = array('mail_recipient_id' => $memberID, 'mail_recipient_name' => $row['user_name'], // Should this use realname? 'mail_recipient_email' => $row['user_email'], 'mail_target_info' => array( 'USERID' => $memberID, 'DISPLAYNAME' => $row['user_name'], 'USERNAME' => $row['user_loginname'], 'USERLASTVISIT' => $row['user_lastvisit'] ) ); // Probably overkill, but some user data in case we want to substitute } $result = $mailer->mailAddNoDup($mailMainID, $uTarget, MAIL_STATUS_TEMP); //echo ''.NLLAN_54.' '.$uTarget['mail_recipient_name'].' ( '.$uTarget['mail_recipient_email'].' )
'; } } $mailer->mailUpdateCounters($mailMainID); // Update the counters $counters = $mailer->mailRetrieveCounters($mailMainID); // Retrieve the counters if ($counters['add'] == 0) { $mailer->deleteEmail($mailMainID); // No subscribers - delete email //$this->message = NLLAN_41; $mes->addError(NLLAN_41); } else { $mailer->activateEmail($mailMainID, FALSE); // Actually mark the email for sending //$this->message = str_replace('--COUNT--', $counters['add'],NLLAN_40); $mes->addSuccess(str_replace('--COUNT--', $counters['add'], NLLAN_40)); } $sql->update('newsletter', "newsletter_flag='1' WHERE newsletter_id=".$issue); $ns->tablerender($caption, $mes->render() . $text); } /** * Edit a newsletter * * @param $id int ID of newsletter to edit * @return none */ function editNewsletter($id) { $sql = e107::getDb(); if($sql->select("newsletter", "*", "newsletter_id='{$id}'")) { $foo = $sql->fetch(); if(!$foo['newsletter_parent']) { $this -> defineNewsletter($foo); } else { $this -> makeNewsletter($foo); } } } /** * Delete a newsletter * * @return none */ function deleteNewsletter() { $sql = e107::getDb(); $mes = e107::getMessage(); $tmp = each($_POST['delete']); if(strpos($tmp['key'], 'newsletter') === 0) { $id = intval(str_replace('newsletter_', '', $tmp['key'])); $sql->delete('newsletter', "newsletter_id='{$id}'"); //$this -> message = NLLAN_42; $mes->addSuccess(LAN_DELETED); } else { $id = intval(str_replace('issue_', '', $tmp['key'])); $sql->delete('newsletter', "newsletter_id='{$id}' "); //$this -> message = NLLAN_43; $mes->addSuccess(LAN_DELETED); } } /** * Generate and display admin menu * * @return none */ function show_options($action) { if ($action == "") { $action = "main"; } $var['main']['text'] = NLLAN_44; $var['main']['link'] = e_SELF; $var['define']['text'] = NLLAN_45; $var['define']['link'] = e_SELF."?define"; $var['make']['text'] = NLLAN_46; $var['make']['link'] = e_SELF."?make"; show_admin_menu(NLLAN_47, $action, $var); } function view_subscribers($p_id) { $ns = e107::getRender(); $mes = e107::getMessage(); $frm = e107::getForm(); $nl_sql = new db; $_nl_sanatized = ''; $vs_text = ''; if(!$nl_sql->db_Select('newsletter', '*', 'newsletter_id='.$p_id))// Check if newsletter id is available { $mes->addError(NLLAN_56); $vs_text .= "
"; $ns -> tablerender(NLLAN_65.' '.$p_id, $mes->render() . $vs_text); return; } else { $vs_text .= "
"; if($nl_row = $nl_sql-> db_Fetch()) { $subscribers_list = explode(chr(1), trim($nl_row['newsletter_subscribers'])); sort($subscriber_list); $subscribers_total_count = count($subscribers_list) - 1; // Get a null entry as well } if ($subscribers_total_count<1) { header("location:".e_SELF); exit; } // Loop through each user in the array subscribers_list & sanatize $_last_subscriber = ''; foreach ($subscribers_list as $val) { $val=trim($val); if ($val) { if ($val != $_last_subscriber) { $nl_sql -> select("user", "*", "user_id=".$val); if($nl_row = $nl_sql-> fetch()) { //".$nl_row['user_name']." $uparams = array('id' => $val, 'name' => $nl_row['user_name']); $link = e107::getUrl()->create('user/profile/view', $uparams); $userlink = "".$nl_row['user_name'].""; $vs_text .= " "; $_last_subscriber = $val; } } else { // Duplicate user id found in the subscribers_list array! newsletter::remove_subscribers($p_id, $val); // removes all entries for this user id $newsletterArray[$p_id]['newsletter_subscribers'] = chr(1).$val; // keep this single value in the list $nl_sql -> update("newsletter", "newsletter_subscribers='".$newsletterArray[$p_id]['newsletter_subscribers']."' WHERE newsletter_id='".intval($p_id)."'"); $subscribers_total_count --; $_nl_sanatized = 1; } } } } $vs_text .= "
".LAN_ID." ".LAN_NAME." ".LAN_EMAIL." ".LAN_OPTIONS."
".$val." ".$userlink." ".$nl_row['user_email']." ".ADMIN_DELETE_ICON."".(($nl_row['user_ban'] > 0) ? NLLAN_62 : "")."
".NLLAN_63.": ".$subscribers_total_count."
".$frm->admin_button('submit', LAN_BACK, 'submit')."
"; if ($_nl_sanatized == 1) { $mes->addInfo(NLLAN_66); } $ns->tablerender(NLLAN_65.' '.$p_id, $mes->render() . $vs_text); } function remove_subscribers($p_id, $p_key) { $sql = e107::getDb(); $sql ->select('newsletter', '*', 'newsletter_id='.intval($p_id)); if($nl_row = $sql->fetch()) { $subscribers_list = array_flip(explode(chr(1), $nl_row['newsletter_subscribers'])); unset($subscribers_list[$p_key]); $new_subscriber_list = implode(chr(1), array_keys($subscribers_list)); $sql->update('newsletter', "newsletter_subscribers='{$new_subscriber_list}' WHERE newsletter_id='".$p_id."'"); } } } require_once(e_ADMIN.'footer.php'); function admin_config_adminmenu() { global $nl; global $action; $nl->show_options($action); } ?>