From 6d0a3441949e5267fe379b087b6cd3d37bb286ef Mon Sep 17 00:00:00 2001 From: e107steved <steved@e107.org> Date: Thu, 18 Dec 2008 21:10:10 +0000 Subject: [PATCH] Bugtracker #4622 - newsletter admin bug fix plus some tidying up --- e107_plugins/newsletter/admin_config.php | 158 ++++++++++++----------- 1 file changed, 85 insertions(+), 73 deletions(-) diff --git a/e107_plugins/newsletter/admin_config.php b/e107_plugins/newsletter/admin_config.php index 38569ae43..cbcd10026 100644 --- a/e107_plugins/newsletter/admin_config.php +++ b/e107_plugins/newsletter/admin_config.php @@ -11,15 +11,15 @@ | GNU General Public License (http://gnu.org). | | $Source: /cvs_backup/e107_0.8/e107_plugins/newsletter/admin_config.php,v $ -| $Revision: 1.6 $ -| $Date: 2008-09-22 20:38:26 $ +| $Revision: 1.7 $ +| $Date: 2008-12-18 21:10:10 $ | $Author: e107steved $ +----------------------------------------------------------------------------+ */ -require_once("../../class2.php"); +require_once('../../class2.php'); if (!getperms("P")) { - header("location:".e_BASE."index.php"); + header('location:'.e_BASE.'index.php'); exit; } $e_sub_cat = 'newsletter'; @@ -46,22 +46,30 @@ if(!e_QUERY) } else { - if ($action == "vs") - { // View subscribers of a newsletter - $nl -> view_subscribers($id); - } - elseif ($action == "remove") - { // Remove subscriber - $nl -> remove_subscribers($id,$key); - } - else + switch ($action) { - $function = $action."Newsletter"; - $nl -> $function(); + 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(); + } + else + { + exit; + } } } + class newsletter { var $message; @@ -69,30 +77,31 @@ class newsletter function newsletter() { - global $ns; + global $ns, $tp; foreach($_POST as $key => $value) { + $key = $tp->toDB($key); if(strstr($key, "nlmailnow")) { - $this -> releaseIssue($key); + $this->releaseIssue($key); break; } } if(isset($_POST['delete'])) { - $this -> deleteNewsletter(); + $this->deleteNewsletter(); } if(isset($_POST['createNewsletter'])) { - $this -> createNewsletter(); + $this->createNewsletter(); } if(isset($_POST['createIssue'])) { - $this -> createIssue(); + $this->createIssue(); } if($this -> message) @@ -195,13 +204,14 @@ class newsletter function defineNewsletter($edit=FALSE) { global $ns, $tp; + // We've been passed a value from DB, so should be reasonably sanitised. if($edit) { - extract($edit); - $newsletter_title = $tp -> toFORM($newsletter_title); - $newsletter_text = $tp -> toFORM($newsletter_text); - $newsletter_footer = $tp -> toFORM($newsletter_footer); + $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']); // Looks as if this was missed } $text .= "<div style='text-align:center; margin-left:auto; margin-right: auto;'> @@ -209,24 +219,24 @@ class newsletter <table style='".ADMIN_WIDTH."' class='fborder'> <tr> <td style='width:30%;' class='forumheader3'>".NLLAN_21."</td> - <td style='width:70%' class='forumheader3'><input class='tbox' type='text' name='newsletter_title' size='60' value='$newsletter_title' maxlength='200' /></td> + <td style='width:70%' class='forumheader3'><input class='tbox' type='text' name='newsletter_title' size='60' value='{$newsletter_title}' maxlength='200' /></td> </tr> <tr> <td style='width:30%;' class='forumheader3'>".NLLAN_22."</td> - <td style='width:70%' class='forumheader3'><textarea class='tbox' id='data' name='newsletter_text' cols='80' rows='10' style='width:95%'>$newsletter_text</textarea></td> + <td style='width:70%' class='forumheader3'><textarea class='tbox' id='data' name='newsletter_text' cols='80' rows='10' style='width:95%'>{$newsletter_text}</textarea></td> </tr> <tr> <td style='width:30%;' class='forumheader3'>".NLLAN_23."</td> - <td style='width:70%' class='forumheader3'><textarea class='tbox' id='data' name='newsletter_header' cols='80' rows='5' style='width:95%'>$newsletter_header</textarea></td> + <td style='width:70%' class='forumheader3'><textarea class='tbox' id='data' name='newsletter_header' cols='80' rows='5' style='width:95%'>{$newsletter_header}</textarea></td> </tr> <tr> <td style='width:30%;' class='forumheader3'>".NLLAN_24."</td> - <td style='width:70%' class='forumheader3'><textarea class='tbox' id='data' name='newsletter_footer' cols='80' rows='5' style='width:95%'>$newsletter_footer</textarea></td> + <td style='width:70%' class='forumheader3'><textarea class='tbox' id='data' name='newsletter_footer' cols='80' rows='5' style='width:95%'>{$newsletter_footer}</textarea></td> </tr> <tr> <td colspan='2' style='text-align:center' class='forumheader'> ". - ($edit ? "<input class='button' type='submit' name='createNewsletter' value='".NLLAN_25."' />\n<input type='hidden' name='editid' value='$newsletter_id' />" : "<input class='button' type='submit' name='createNewsletter' value='".NLLAN_26."' />")." + ($edit ? "<input class='button' type='submit' name='createNewsletter' value='".NLLAN_25."' />\n<input type='hidden' name='editid' value='{$edit['newsletter_id']}' />" : "<input class='button' type='submit' name='createNewsletter' value='".NLLAN_26."' />")." </td> </tr> @@ -246,19 +256,20 @@ class newsletter { global $sql, $tp; - $newsletter_title = $tp -> toDB($_POST['newsletter_title']); - $newsletter_text = $tp -> toDB($_POST['newsletter_text']); - $newsletter_header = $tp -> toDB($_POST['newsletter_header']); - $newsletter_footer = $tp -> toDB($_POST['newsletter_footer']); + $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 -> db_Update("newsletter", "newsletter_title='$newsletter_title', newsletter_text='$newsletter_text', newsletter_header='$newsletter_header', newsletter_footer='$newsletter_footer' WHERE newsletter_id='".$_POST['editid']."' "); + $sql -> db_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'])); $this -> message = NLLAN_27; } else { - $sql -> db_Insert("newsletter", "0, '".time()."', '$newsletter_title', '$newsletter_text', '$newsletter_header', '$newsletter_footer', '', '0', '0', '0' "); + $letter['newsletter_datestamp'] = time(); + $sql -> db_Insert('newsletter', $letter); $this -> message = NLLAN_28; } } @@ -269,11 +280,11 @@ class newsletter { global $sql, $ns, $tp; + // Passed data is from DB if($edit) { - extract($edit); - $newsletter_title = $tp -> toFORM($newsletter_title); - $newsletter_text = $tp -> toFORM($newsletter_text); + $newsletter_title = $tp -> toFORM($edit['newsletter_title']); + $newsletter_text = $tp -> toFORM($edit['newsletter_text']); } if(!$sql -> db_Select("newsletter", "*", "newsletter_parent='0' ")) @@ -304,20 +315,20 @@ class newsletter <tr> <td style='width:30%;' class='forumheader3'>".NLLAN_31."</td> - <td style='width:70%' class='forumheader3'><input class='tbox' type='text' name='newsletter_title' size='60' value='$newsletter_title' maxlength='200' /></td> + <td style='width:70%' class='forumheader3'><input class='tbox' type='text' name='newsletter_title' size='60' value='{$newsletter_title}' maxlength='200' /></td> </tr> <tr> <td style='width:30%;' class='forumheader3'>".NLLAN_32."</td> - <td style='width:70%' class='forumheader3'><input class='tbox' type='text' name='newsletter_issue' size='10' value='$newsletter_issue' maxlength='200' /></td> + <td style='width:70%' class='forumheader3'><input class='tbox' type='text' name='newsletter_issue' size='10' value='{$newsletter_issue}' maxlength='200' /></td> </tr> <tr> <td style='width:30%;' class='forumheader3'>".NLLAN_33."</td> - <td style='width:70%' class='forumheader3'><textarea class='tbox' id='data' name='newsletter_text' cols='80' rows='10' style='width:95%'>$newsletter_text</textarea></td> + <td style='width:70%' class='forumheader3'><textarea class='tbox' id='data' name='newsletter_text' cols='80' rows='10' style='width:95%'>{$edit['newsletter_text']}</textarea></td> </tr> <tr> <td colspan='2' style='text-align:center' class='forumheader'> ". - ($edit ? "<input class='button' type='submit' name='createIssue' value='".NLLAN_34."' />\n<input type='hidden' name='editid' value='$newsletter_id' />" : "<input class='button' type='submit' name='createIssue' value='".NLLAN_35."' />")." + ($edit ? "<input class='button' type='submit' name='createIssue' value='".NLLAN_34."' />\n<input type='hidden' name='editid' value='{$edit['newsletter_id']}' />" : "<input class='button' type='submit' name='createIssue' value='".NLLAN_35."' />")." </td> </tr> </table> @@ -335,17 +346,20 @@ class newsletter function createIssue() { global $sql, $tp; - $newsletter_title = $tp -> toDB($_POST['newsletter_title']); - $newsletter_text = $tp -> toDB($_POST['newsletter_text']); + $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'])) + if (isset($_POST['editid'])) { - $sql -> db_Update("newsletter", "newsletter_title='$newsletter_title', newsletter_text='$newsletter_text', newsletter_parent='".$_POST['newsletter_parent']."', newsletter_issue='".$_POST['newsletter_issue']."' WHERE newsletter_id='".$_POST['editid']."' "); + $sql -> db_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'])); $this -> message = NLLAN_38; } else { - $sql -> db_Insert("newsletter", "0, '".time()."', '$newsletter_title', '$newsletter_text', '', '', '', '".$_POST['newsletter_parent']."', '0', '".$_POST['newsletter_issue']."' "); + $letter['newsletter_datestamp'] = time(); + $sql -> db_Insert('newsletter', $letter); $this -> message = NLLAN_39; } } @@ -358,7 +372,7 @@ class newsletter $issue = str_replace("nlmailnow_", "", $issue); - if(!$sql -> db_Select("newsletter", "*", "newsletter_id='$issue' ")) + if(!$sql -> db_Select("newsletter", "*", "newsletter_id='{$issue}' ")) { return FALSE; } @@ -456,7 +470,7 @@ class newsletter { global $id, $sql; - if($sql -> db_Select("newsletter", "*", "newsletter_id='$id' ")) + if($sql -> db_Select("newsletter", "*", "newsletter_id='{$id}' ")) { $foo = $sql -> db_Fetch(); if(!$foo['newsletter_parent']) @@ -479,13 +493,13 @@ class newsletter if(strstr($tmp['key'], "newsletter")) { $id = str_replace("newsletter_", "", $tmp['key']); - $sql -> db_Delete("newsletter", "newsletter_id='$id' "); + $sql -> db_Delete("newsletter", "newsletter_id='{$id}' "); $this -> message = NLLAN_42; } else { $id = str_replace("issue_", "", $tmp['key']); - $sql -> db_Delete("newsletter", "newsletter_id='$id' "); + $sql -> db_Delete("newsletter", "newsletter_id='{$id}' "); $this -> message = NLLAN_43; } } @@ -521,17 +535,18 @@ class newsletter global $ns; $nl_sql = new db; - if(!$nl_sql -> db_Select("newsletter", "*", "newsletter_id=".$p_id)) + if(!$nl_sql -> db_Select('newsletter', '*', 'newsletter_id='.$p_id)) { // Check if newsletter id is available $vs_text .= "<br /><br /><center>".NLLAN_56."<br /><br/> - <input class='button' type=button value='".NLLAN_57."' onClick='history.go(-1)'></center>"; + <input class='button' type=button value='".NLLAN_57."' onClick=\"window.location='".e_SELF."'\"></center>"; $ns -> tablerender(NLLAN_58, $vs_text); return; } else { $vs_text .= " + <form action='".e_SELF."' id='newsletterform' method='post'> <table style='".ADMIN_WIDTH."' class='fborder'> <tr> <td style='width:5%; text-align: center;' class='forumheader'>".NLLAN_55."</td> @@ -540,10 +555,9 @@ class newsletter <td style='width:15%; text-align: center;' class='forumheader'>".NLLAN_61."</td> </tr>"; - $nl_sql -> db_Select("newsletter", "*", "newsletter_id='".$p_id."'"); +// $nl_sql -> db_Select("newsletter", "*", "newsletter_id=".$p_id); Already done if($nl_row = $nl_sql-> db_Fetch()) { -// $subscribers_total_count = substr_count($nl_row['newsletter_subscribers'], chr(1)); $subscribers_list = explode(chr(1), trim($nl_row['newsletter_subscribers'])); $subscribers_total_count = count($subscribers_list) - 1; // Get a null entry as well } @@ -562,13 +576,13 @@ class newsletter if($nl_row = $nl_sql-> db_Fetch()) { $vs_text .= "<tr> - <td text-align: center;' class='forumheader3'>{$val} + <td style='text-align: center;' class='forumheader3'>{$val} </td> <td class='forumheader3'><a href='".e_BASE."user.php?id.{$val}'>".$nl_row['user_name']."</a> </td> <td class='forumheader3'>".$nl_row['user_email']." </td> - <td text-align: center;' class='forumheader3'><a href='".e_SELF."?remove.{$p_id}.{$key}'>".ADMIN_DELETE_ICON."</a> + <td style='text-align: center;' class='forumheader3'><a href='".e_SELF."?remove.{$p_id}.{$val}'>".ADMIN_DELETE_ICON."</a> ".(($nl_row['user_ban'] > 0) ? NLLAN_62 : "")." </td> </tr>"; @@ -579,29 +593,27 @@ class newsletter $vs_text .= " <tr> - <td colspan=4 class='forumheader'>".NLLAN_63.": ".$subscribers_total_count."</td> + <td colspan='4' class='forumheader'>".NLLAN_63.": ".$subscribers_total_count."</td> </tr> - <tr><td colspan=4 style='text-align:center;'><br /><input class='button' type=button value='".NLLAN_64."' onClick='history.go(-1)'></td></tr> - </table> + <tr><td colspan='4' style='text-align:center;'><br /><input class='button' type='submit' value='".NLLAN_64."' /></td></tr> + </table></form> "; $ns -> tablerender(NLLAN_65.' '.$p_id, $vs_text); } - function remove_subscribers($p_id, $p_key) - { - global $sql; - $sql -> db_Select("newsletter", "*", "newsletter_id=".$p_id); - if($nl_row = $sql-> db_Fetch()) + function remove_subscribers($p_id, $p_key) { - $subscribers_list = explode(chr(1), $nl_row['newsletter_subscribers']); - unset($subscribers_list[$p_key]); - $new_subscriber_list = implode(chr(1), $subscribers_list); - $sql -> db_Update("newsletter", "newsletter_subscribers='{$new_subscriber_list}' WHERE newsletter_id=".$p_id); - header("location:".e_SELF."?vs.{$p_id}"); - exit; - } - } + global $sql; + $sql -> db_Select("newsletter", "*", "newsletter_id=".$p_id); + if($nl_row = $sql-> db_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 -> db_Update("newsletter", "newsletter_subscribers='{$new_subscriber_list}' WHERE newsletter_id=".$p_id); + } + } }