<?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&step=1&content_id=$content_id\">Info-Nachricht senden</a>";
$options[] = "<a class=\"option\" href=\"index.php?query=newsletter_print&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&x_content=' + formid + '," . SINGLE_CENTER . "&email=' + email + '&subscriber=' + subscriber + '&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);
}
}
?>