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 = "
";
}
$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 = "
";
}
$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 = "
";
$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 = "
";
}
$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_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);
}
?>