Location: PHPKode > projects > Site-Assistant > sas/sas/plugs/newsletter.php
<?php
include_once($paths['version'] . "plug.class.php");

class newsletter extends plug {
	// Bezeichnung des Plugs
	var $cache_output = FALSE;
	var $label = "Info-Mail";
	// var $min_width = WIDE_LIST;
	var $form_notice = "";

	var $form = array (
		"main" => array (
			"property" => array("email", "headline", "info")
		)
	);

  // Parameter die in Datenbank gespeichert werden
	var $property =	array (
		"id" => array("type" => "INT NOT NULL AUTO_INCREMENT PRIMARY KEY", "save_as" => "none", "label" => ""),
  	"email" => array("type" => "VARCHAR(96)", "save_as" => "string", "label" => "Ihre email-Adresse"),
  	"headline" => array("type" => "VARCHAR(96)", "save_as" => "string", "label" => "Überschrift", "editable" => TRUE),
  	"info" => array("type" => "TEXT", "save_as" => "string", "label" => "Informationstext", "editable" => TRUE)
  );

function admin_options($content_id){
	global $paths,$core;

	$options[] = "<a class=\"option\" href=\"index.php?query=newsletter_send&amp;step=1&content_id=$content_id\">Info-Nachricht senden</a>";
	$options[] = "<a class=\"option\" href=\"index.php?query=newsletter_print&amp;content_id=$content_id\">Adressen drucken</a>";
	return $options;
}

function output($content_id, $content_list, $mode) {
global $core;
	if (isset($_POST['news'])) return $this->register_email($content_id)."<p></p>";
	extract($this->get_content_editable($content_id));


$str = "<div class=\"newsletter\">
<h1>$headline</h1>
<span class=\"newsInfo\">$info</span>
<p>_NAME _OPTIONAL</p>
<form name=\"news_$content_id\" method=\"post\" action=\"index.php?page_id=".$page_id."\">
<p><input type=\"text\" name=\"subscriber\" size=\"36\" /></p>
<p><span class=\"newsAdress\">_EMAIL</span></p>
<p><input type=\"text\" name=\"email\" size=\"36\" /></p>
<p>
<input type=\"hidden\" name=\"news\" value=\"$content_id\" />
<input type=\"submit\" name=\"newsadd\" value=\"_NEWSON\" />
<input type=\"submit\" name=\"newsremove\" value=\"_NEWSOFF\" />
</p></div>";

return $core->get_i18n($str);
}

function register_email($content_id) {
	global $tbl_newsletter_emails, $tbl_contents, $email, $subscriber, $action, $database, $paths, $core;
	// is_cacheable darf NIEMALS auf TRUE gesetzt werden
	$GLOBALS['is_cacheable'] = FALSE;
	extract($_POST);
	$newsletter_id = $core->sv_query("SELECT instance_id FROM $tbl_contents WHERE id=$content_id");
	$news_params = $core->sv_query("SELECT headline, info FROM $database[prefix]" . "_newsletter WHERE id=$newsletter_id");

	if ($_POST['newsadd']) $action = "add";
	else $action = "remove";

	// email-Adresse testen
	$email = trim($email);
	$subscriber = trim($subscriber);
	if ($subscriber)
		$subscriber_msg = "für $subscriber";
	else
		$subscriber_msg = "";

	$pattern = "^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,5})$";
	$legal_email = ereg($pattern, $email);

	// Existiert die email-Adresse?
	$result = $core->query("SELECT id, subscriber FROM $tbl_newsletter_emails " .
		"WHERE email='$email' AND newsletter_id=$newsletter_id");
	$email_exist = mysql_num_rows($result);

	// Email-Adresse hinzufügen
	if ($action == "add") {
		$head = "<h2>Anmeldung</h2>";
		if (empty($email)) {
			$msg = "Fehler: Es wurde keine email-Adresse angegeben!";
		}
		elseif (!$legal_email)
			$msg = "Fehler: '$email' ist keine gültige email-Adresse!";
		else {
			if ($email_exist)
				$msg = "Die Adresse '$email' war bereits angemeldet. Eine weitere Anmeldung $subscriber_msg ist nicht möglich. Nachrichten werden weiter an diese Adresse gesendet.";
			else {
				$sql = "INSERT INTO $tbl_newsletter_emails (email, subscriber, newsletter_id) VALUES ('$email', '$subscriber', $newsletter_id)";
				$core->query($sql);
				$msg =  "Die Adresse '$email' wurde angemeldet. Nachrichten $subscriber_msg werden an diese Adresse gesendet.";
			}
		}
	}
	// Email-Adresse abmelden
	elseif ($action == "remove") {
		$head = "<h2>Abmeldung</h2>";
		if (!$email) {
			$msg = "Fehler: Es wurde keine email-Adresse angegeben!";
		}
		elseif (!$legal_email)
			$msg = "Fehler: '$email' ist keine gültige email-Adresse!";
		else {
			if ($email_exist) {
				$sql = "DELETE FROM $tbl_newsletter_emails WHERE email='$email' AND newsletter_id=$newsletter_id";
				$core->query($sql);
				$msg = "Die Adresse '$email' wurde abgemeldet.";
			}
			else
				$msg = "Fehler: Die Adresse '$email' steht derzeit nicht in der Liste und konnte deshalb nicht abgemeldet werden.";
		}
	}

	//***** Ausgabe der Registrierung *****
$str .= "<div id=\"news\">
	<h1>".$news_params['headline']."</h1>
	<div class=\"newsimg\">
	<img alt=\"Newsletter Anmeldung\" src=\"img_si/newsletter_logo.gif\" />
	</div>

	<div class=\"newsRegister\">$head</div>

	<div class=\"newsMsg\">$msg</div></div>";

	return $core->get_i18n($str);
}

function output_javascript() {
	global $page_id;
	return
"function procAddress(formid, action) {
	formname = 'news_' + formid;
	email = document.forms[formname].email.value;
	subscriber = document.forms[formname].subscriber.value;
	uri = 'index.php?page_id=$page_id&amp;x_content=' + formid + '," . SINGLE_CENTER . "&amp;email=' + email + '&amp;subscriber=' + subscriber + '&amp;action=' + action;
	location.href = uri;
}";
}


function register() {
  global $database;

	// Basisregistrierung durchführen
	plug::register();

	// Zusätzliche Registrierung
	// echo "<h2>Plug $this->label wird zusätzlich registriert. (von Objekt newsletter)</h2>";

	// Anlegen der Tabelle mit email-Adressen
	$core->query("DROP TABLE IF EXISTS " . $database["prefix"] . "_newsletter_emails");
	$sql = "CREATE TABLE " . $database["prefix"] . "_newsletter_emails
		(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
		email VARCHAR(96),
		subscriber VARCHAR(96),
		newsletter_id INT,
		send TINYINT)";
	$core->query($sql);
	// Anlegen der Tabelle mit Nachrichten
	$core->query("DROP TABLE IF EXISTS " . $database["prefix"] . "_newsletter_messages");
	$sql = "CREATE TABLE " . $database["prefix"] . "_newsletter_messages
		(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
		content_id INT,
		subject VARCHAR(96),
		message TEXT,
		add_message TEXT,
		created INT UNSIGNED,
		cnt_emails INT,
		cnt_send INT)";
	$core->query($sql);
}
/*******************************************************************************
Speichern der Nachricht in $tbl_newsletter_messages
*******************************************************************************/
function get_message_params($message_id){
	global $tbl_newsletter_messages,$core;
	return $core->sv_query(
		"SELECT content_id, subject, message, add_message, created, cnt_emails
		FROM $tbl_newsletter_messages WHERE id=$message_id");
}

function save_message($content_id, $subject, $message){
	global $tbl_contents, $tbl_newsletter_emails, $tbl_newsletter_messages,$core;

	// Alle Adressen auf Status 'Nachricht noch nicht versandt' zurücksetzen
	$newsletter_id = $core->sv_query("SELECT instance_id FROM $tbl_contents WHERE id=$content_id");
	$core->query("UPDATE $tbl_newsletter_emails SET send = 0 WHERE newsletter_id = $newsletter_id");

	// Daten vorbereiten
	$subject = addslashes($subject);
	$message = addslashes($message);
	$add_message = $this->get_addition($content_id);
	$created = time();
 	$cnt_emails = $core->sv_query("SELECT COUNT(*) FROM $tbl_newsletter_emails WHERE newsletter_id=$newsletter_id");

	$sql = "INSERT INTO $tbl_newsletter_messages
		(content_id, subject, message, add_message, created, cnt_emails)
		VALUES ($content_id, '$subject', '$message', '$add_message', $created, $cnt_emails)";
	$core->query($sql);

	return mysql_insert_id();
}
/*******************************************************************************
Methode zum Erstellen des Anhangs an den Newsletter
*******************************************************************************/
function get_addition($content_id){
	global $tbl_contents, $project,$core;

	$news_params = $this->get_content_params($content_id);
	$page_id = $core->sv_query("SELECT page_id FROM $tbl_contents WHERE id=$content_id");

	if ($page_id > 0)
		$remove_add = "http://" . $project['guest_domain'] . "/index.php?page_id=$page_id";
	else
		$remove_add = "http://" . $project['guest_domain'];

  $add_message = "\n\nDies ist eine Nachricht von '$news_params[headline]' an die Adresse [email].\n";
	$add_message .= "Falls Sie keine Nachrichten mehr erhalten wollen, können Sie den Newsletter unter Angabe dieser Adresse auf der Website $remove_add abbestellen.";
	return addslashes($add_message);
}

}
?>
Return current item: Site-Assistant