Newsletter: Module für V4.6/Korrektur

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Newsletter: Module für V4.6/Korrektur

Beitrag von HerrB » Do 6. Okt 2005, 22:05

Die folgenden Informationen sind für 4fb, kein Support:

Folgende Änderungen sind zur Ergänzung der Module durchzuführen:

Layouts:
Standard:
Unter

Code: Alles auswählen

			<container id="48" name="Login" types="Navigation" default="">Login</container>
die Zeile

Code: Alles auswählen

			<container id="49" name="Newsletter" types="Navigation" default="">Newsletter</container>
einfügen

Styles:
style.css:

Unter

Code: Alles auswählen

#searchbox {
	background-color:#DFE0E5;
	border-top:1px solid #aeaeae;
	border-bottom:1px solid #aeaeae;
	padding-bottom:.6em;
	padding-top:.6em;
	padding-left:.5em;
	padding-right:.5em;
	margin-top:1.5em;
	margin-bottom:1.5em;
}
die Zeilen

Code: Alles auswählen

#newsletterbox {
	background-color:#DFE0E5;
	border-top:1px solid #aeaeae;
	border-bottom:1px solid #aeaeae;
	padding-bottom:.6em;
	padding-top:.6em;
	padding-left:.5em;
	padding-right:.5em;
	margin-top:1.5em;
	margin-bottom:1.5em;
}
einfügen

Dito in style_print.css

HTML Editor:
Neue Datei newsletter_form.html erzeugen:

Code: Alles auswählen

<div id="newsletterbox">
	<form method="post" action="{FORM_ACTION}" style="padding:0;margin:0;" name="newsletterform" id="newsletterform"{FORM_TARGET}>
		<input type="text" name="emailname" id="emailname" value="" class="input_searchbox" style="margin-bottom:.4em;"/>
		<label for="emailname" class="label_searchbox">{EMAILNAME}</label><br/>
		<input type="text" name="email" id="email" value="" class="input_searchbox"/>
		<label for="email" class="label_searchbox">{EMAIL}</label><br/>
		{GROUPS}
		<select name="action" id="action" class="input_searchbox">
			<option value="subscribe" selected>{SUBSCRIBE}</option>
			<option value="delete">{DELETE}</option>
		</select>
		<label for="action" class="label_searchbox">{NEWSLETTER}</label>
		<a href="javascript:document.forms['newsletterform'].submit();" style="position: relative; left: 16px; color: #9d9ea2;" title="{GO}">{GO}&nbsp;<input type="image" src="images/navi_pfeil_rechts.gif" alt="{JOIN}" title="{JOIN}" name="join" style="vertical-align:middle;"/></a>
	</form>
</div>
Module:
Newsletter Form und Newsletter Handler und jew. Übersetzungen aus den XML-Dateien importieren.

Die Dateien gibt es hier: [Link]

Templates/Content->Artikel:
Zunächst ein neues Template erzeugen (Standard-Layout), welches für Container 12 das Modul Newsletter Handler erhält. Ich würde empfehlen, bei diesem Template das Newsletter Form-Modul >>>nicht<<< zu setzen (siehe folgende Zeilen)... Vorkonfiguration durchführen (dabei noch nicht "Aktualisieren" aktivieren, da noch kein entsprechender Artikel besteht).

Nun zunächst an relativ beliebiger Stelle einen Artikel basierend auf dem neuen Template online stellen. Artikel konfigurieren und dabei den Artikel selbst als Newsletter Handler-Artikel auswählen (d.h. "Aktualisieren" aktivieren und Artikel auswählen).

Danach im Standard-Template im Container 49 das Modul Newsletter Form einsetzen. Einmal Vorkonfiguration speichern. Die anderen Artikel, die das Standard-Template einsetzen, müssen nicht konfiguriert werden.

Das wars.

Korrektur:
In include.recipients_edit.php muss die Zeile

Code: Alles auswählen

		$form->add(i18n("Last modified by"), $classuser->getUserName($recipient->get("modifiedby")). " (". $recipient->get("modified").")" );
so lauten:

Code: Alles auswählen

		$form->add(i18n("Last modified by"), $classuser->getUserName($recipient->get("modifiedby")). " (". $recipient->get("lastmodified").")" );
modified -> lastmodified

Diese Übersetzung sollte nochmal nachgezogen werden, da ist was durcheinander gegangen (siehe Newsletter -> Optionen):

Code: Alles auswählen

msgid "Dispatch count:"
msgstr "Blockgr&ouml;sse:"

msgid "Dispatch delay:"
msgstr "Verz&ouml;gerung:"
Es fehlt noch eine Funktion, die alle Empfänger mit urlencode in die DB schreibt (nur bei Upgrade von Vorversionen, wenn nicht die Newsletter-Überarbeitung verwendet wurde [gibts ja gar nicht ... :wink: ]). Ergänze ich bei Gelegenheit in convert_recipient_keys.php, aber das hält nicht auf.

Gruß
HerrB
Zuletzt geändert von HerrB am So 30. Okt 2005, 13:34, insgesamt 1-mal geändert.
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 7. Okt 2005, 21:33

Noch was gefunden:

In include.newsletter_send.php:

Code: Alles auswählen

	echo $sSelGroups;
	$aResult = $oNewsletter->send($iIDCatArt, $sSendOption, $aSelGroups, $iDispatchCount, $_REQUEST["chunk"]);
Die Zeile

Code: Alles auswählen

	echo $sSelGroups;
entfällt.

Außerdem unter

Code: Alles auswählen

	$bLogToFile 	= (bool)$oProperties->getValue("clientsetting", $client, "newsletter", "logtofile");
die Zeilen

Code: Alles auswählen

	if ($sSendOption == "") {
		$sSendOption = "all";
	}
einfügen.

Die zweite Änderung ermöglicht ein Senden, auch wenn die Optionen noch nie gespeichert wurden.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Sa 8. Okt 2005, 21:56

In Pre-V4.5.5 (Harald):
1. Die Übersetzungen der Module fehlen

2. In include.newsletter_menu.php:
Alt:

Code: Alles auswählen

} else if (is_array($aSelGroups)) {
	foreach ($aSelGroups as $sValue) {
		$oSelGroup->_options[$sValue]->setSelected(true);
	}
}
Neu:

Code: Alles auswählen

} else if (is_array($aSelGroups)) {
	foreach ($aSelGroups as $sValue) {
		if (array_key_exists($sValue, $oSelGroup->_options)) { // only select, if item still exists
			$oSelGroup->_options[$sValue]->setSelected(true);
		}
	}
}
Sonst kommt es zu einem Fehler, wenn eine Gruppe, die ausgewählt war, gelöscht wurde.

Alt:

Code: Alles auswählen

$sContent .= '<form onsubmit="append_registered_parameters(this);" id="filter" name="filter" method="get" action="main.php?1">'.chr(10);
Neu:

Code: Alles auswählen

$sContent .= '<form onsubmit="append_registered_parameters(this);" id="filterform" name="filterform" method="get" action="main.php?1">'.chr(10);
Änderung des Namens des Formulars von filter auf filterform (Firefox-Problem). Achtung! Es gibt auch ein Feld filter, das bleibt (also kein Suchen&Ersetzen) ...

Ersetze (alt):

Code: Alles auswählen

            oForm = document.forms("filter");
Durch (neu):

Code: Alles auswählen

            oForm = document.getElementById("filterform");
Zweimal, im Skriptbereich. Änderung des Namens des Formulars von filter auf filterform.

3. In include.recipients_menu.php:
Alt:

Code: Alles auswählen

$sContent .= '<form onsubmit="append_registered_parameters(this);" id="filter" name="filter" method="get" action="main.php?1">'.chr(10);
Neu:

Code: Alles auswählen

$sContent .= '<form onsubmit="append_registered_parameters(this);" id="filterform" name="filterform" method="get" action="main.php?1">'.chr(10);
Änderung des Namens des Formulars von filter auf filterform (Firefox-Problem). Achtung! Es gibt auch ein Feld filter, das bleibt (also kein Suchen&Ersetzen) ...

Ersetze (alt):

Code: Alles auswählen

            oForm = document.forms("filter");
Durch (neu):

Code: Alles auswählen

            oForm = document.getElementById("filterform");
Zweimal, im Skriptbereich. Änderung des Namens des Formulars von filter auf filterform. In der Datei sind die entsprechenden Zeilen im Skriptbereich auskommentiert, das kann man natürlich gleich bereinigen...

4. Die Übersetzung für Sec. sollte Sek. sein, das wird sonst zu lang:

Code: Alles auswählen

msgid "sec."
msgstr "Sek."
Außerdem sollte diese Übersetzung verwendet werden:

Code: Alles auswählen

msgid "Log to file:"
msgstr "Protokollieren:"
"In folgende Datei loggen:" ist zum einen zu lang und zum anderen falsch, da man die Datei nicht angeben kann, sondern nur die Funktion aktivieren kann.

5. Anmerkung zum Setup: Geht etwas schief, wird auf die Einträge in der errorlog-Datei hingewiesen. Wie wäre es gleich mit einem Link auf die Dateien? Pfad ist schließlich bekannt... :wink:

6. Die Dokumente im tinymce2-Verzeichnis könnten bereinigt werden. Würde die Download-Größe um ca. 2MB reduzieren:
- tinymce2\docs und tinymce2\examples können entfallen
- Ob tinymce2\jscripts\tiny_mce\themes\advanced\docs gebraucht wird, weiss ich nicht, aber bei simple ist es nicht drin und die Dateien enthalten keine für Contenido relevanten Informationen (Die Dialogfenster Datei und Bild einfügen wurden ja für C angepasst).

Gruß
HerrB
Zuletzt geändert von HerrB am Sa 8. Okt 2005, 23:22, insgesamt 2-mal geändert.
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Sa 8. Okt 2005, 22:59

Rechteberücksichtigung: include.newsletter_left_top.php:
Statt:

Code: Alles auswählen

$items = array( array(	$cfg["path"]["images"]."newsletter_16.gif", i18n("Newsletter"), $letterlink->getHref()),
		array(	$cfg["path"]["images"]."users.gif", i18n("Recipients"), $userlink->getHref()),
		array(	$cfg["path"]["images"]."groups.gif", i18n("Recipient groups"), $grouplink->getHref())
		);
diesen Code einsetzen:

Code: Alles auswählen

$items = array();
if ($perm->have_perm_area_action_anyitem("news")) {
	$items[] = array($cfg["path"]["images"]."newsletter_16.gif", i18n("Newsletter"), $letterlink->getHref());
}

if ($perm->have_perm_area_action_anyitem("recipients","")) {
	$items[] = array($cfg["path"]["images"]."users.gif", i18n("Recipients"), $userlink->getHref());
}

if ($perm->have_perm_area_action_anyitem("recipientgroups","")) {
	$items[] = array($cfg["path"]["images"]."groups.gif", i18n("Recipient groups"), $grouplink->getHref());
}
Das Ganze ist aber eine Philosophie-Frage. Das neue Contenido zeigt zunächst alles und wenn die Rechte fehlen, geht es halt nicht (z.B. erscheint das Löschen-Icon bei den Frontend Usern auch, wenn ich dazu gar kein Recht habe). Aber es ist sicherlich sinnvoll, es hier einzubauen.

Die erste Prüfung auf "news" ist im Prinzip irrelevant, da diese Datei (include.newsletter_left_top.php) nur aufgerufen wird, wenn man zumindest über das Recht zum Zugriff auf Newsletter verfügt. Aber wo man schon mal dabei ist...

Hey, Rechte sind cool. Da sind noch Fehler aus den Originaldateien drin, cool:

Für die folgenden Dateien wäre übrigens auch was generisches möglich, e.g.

Code: Alles auswählen

	if ($action == "recipients_save" && $perm->have_perm_area_action($area, $action) {
Aber wenn ihr es gerne individuell mögt:
include.recipients_edit.php:
Alt:

Code: Alles auswählen

	if ($action == "recipients_save") {
Neu:

Code: Alles auswählen

	if ($action == "recipients_save" && $perm->have_perm_area_action("recipients", "recipients_save")) {
include.recipients.group_edit.php:
Alt:

Code: Alles auswählen

	if ($action == "recipientgroup_save_group") {
Neu:

Code: Alles auswählen

	if ($action == "recipientgroup_save_group" && $perm->have_perm_area_action("recipients", "recipientgroup_save_group")) {
include.newsletter_edit.php:
Alt:

Code: Alles auswählen

	if ($action == "news_save") {
Neu:

Code: Alles auswählen

	if ($action == "news_save" && $perm->have_perm_area_action("news", "news_save")) {
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Sa 8. Okt 2005, 23:31

So, alles auch nochmal unter Firefox getestet. Funzt (mit den Änderungen).

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » So 9. Okt 2005, 00:42

Doch noch was gefunden:
include.newsletter_send.php:

Die // vor

Code: Alles auswählen

			$oPage->addScript("Refresh", '<meta http-equiv="refresh" content="'.$iDispatchDelay.'; URL='.$sPathNext.'">');
entfernen, sonst funktioniert das autom. Senden in Blöcken nicht.

Und noch ein nettes Feature:

Code: Alles auswählen

	if ($bLogToFile) {
		$oForm->add("", '<a href="'.$cfgClient[$client]["path"]["htmlpath"]."logs/errorlog.txt".'" target="blank">'.i18n("Click here to open the logfile").'</a>');
	}
vor

Code: Alles auswählen

	$oPage->setContent($notis . $oForm->render(true));
ergänzen. Danke.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » So 9. Okt 2005, 22:01

Tja, noch einer:

include.recipients_edit.php:
Alt:

Code: Alles auswählen

    			$recipients->select("email='$email' and idclient='$client' AND idlang='$lang'");
Neu:

Code: Alles auswählen

    			$recipients->select("email='".urlencode($email)."' and idclient='$client' AND idlang='$lang'");
Sonst kann man zwei Empfänger mit gleicher E-Mail-Adresse anlegen.

Übersetzung:

Code: Alles auswählen

msgid "Click here to open the logfile" 
msgstr "Hier klicken, um die Log-Datei zu &ouml;ffnen"
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Mo 24. Okt 2005, 16:39

So ich habe alles eingebaut. Folgendes ist mir aufgefallen:

- Bei der Vorkonfiguration bekomme ich den JS-Fehler: Error: document.forms[0].elements is not a function, wenn ich "Funktion aktivieren" anklicke.

- Bei $bLogToFile = (bool)$oProperties->getValue("clientsetting", $client, "newsletter", "logtofile");

Wie steht der Wert denn in der DB? Wenn in der DB "true" oder "false" als String steht, wird der Cast auf bool nicht funktionieren...ich habs jetzt nicht getestet, aber da bin ich öfters bei meinen eigenen Funktionen drübergestolpert... der String "false" sowie der String "true" sind bei einem Cast auf bool immer true ;)



Und zum Abschluss: UFF!

Hoffentlich gibts bald nen CVS-Lesezugang, denn dann könntest du einfach ein CVS DIFF machen und die Ausgabe hier posten, das machts jedem einfacher - ich bin mir nicht sicher ob ich alles fehlerfrei eingefügt habe ;)

Übrigens: Es gibt die neue Datei contenido/tools/release.php, die ein installiertes Contenido Anhand der definierten Regeln in der release.xml in entsprechende SQL-Chunks aufteilt, die wiederum für das Setup verwendet werden können ;)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mo 24. Okt 2005, 17:12

- Bei der Vorkonfiguration bekomme ich den JS-Fehler: Error: document.forms[0].elements is not a function, wenn ich "Funktion aktivieren" anklicke.
Wie soll ich Dir das jetzt schonend beibringen... ist tatsächlich ein Fehler, der nur im FF auftritt. Lösung ist ganz einfach: In beiden Modulen in der Eingabe bei allen Vorkommen von elements(<irgendwas>) die runden durch eckige Klammern ersetzen: elements[<irgendwas>]. Soll ich das nochmal in die Dateien einarbeiten (es geht auch manuell, braucht nur ca. 5 Minuten, aber wenn Deine Lust - verständlicherweise - begrenzt ist... :wink: )?
$bLogToFile = (bool)$oProperties->getValue("clientsetting", $client, "newsletter", "logtofile");
Funktioniert. Nicht sehr elegant, aber es funzt. Wird die Einstellung gespeichert, wird direkt false der setValue-Funktion übergeben (nicht der String "false" sondern false as is). Raus kommt ein leeres Propery, welches wiederum als False interpretiert wird...
Und zum Abschluss: UFF!
Ja, macht schon Spass, ihn einzubinden, was? Hehehe. :wink:

Gruß
HrrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Mo 24. Okt 2005, 17:21

HerrB hat geschrieben:
- Bei der Vorkonfiguration bekomme ich den JS-Fehler: Error: document.forms[0].elements is not a function, wenn ich "Funktion aktivieren" anklicke.
Wenn noch jemand meckert, machen wir es raus, ansonsten nicht - hoffen wir, daß niemand diesen Thread irgendwann mal findet :D
$bLogToFile = (bool)$oProperties->getValue("clientsetting", $client, "newsletter", "logtofile");
Funktioniert. Nicht sehr elegant, aber es funzt. Wird die Einstellung gespeichert, wird direkt false der setValue-Funktion übergeben (nicht der String "false" sondern false as is). Raus kommt ein leeres Propery, welches wiederum als False interpretiert wird...
Meine Befürchtung hat sich nicht bestätigt, alles wunderbar ;)

Ich erzeuge gerade einen neuen Snapshot, viel Spaß ;)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » So 30. Okt 2005, 13:28

Die letzten Reinlichkeiten für V4.6:

include.newsletter_edit.php:
Nach

Code: Alles auswählen

if ($newsletter->virgin == false && $newsletter->get("idclient") == $client && $newsletter->get("idlang") == $lang) {
	if ($action == "news_save" && $perm->have_perm_area_action($area, $action)) {
		$page->setReload();
		$messages = array();
folgenden Code einfügen:

Code: Alles auswählen

		/* Changing e.g. \' back to ' (magic_quotes) */
		$name     = stripslashes($name);
		$newsfrom = stripslashes($newsfrom);
		$subject  = stripslashes($subject);
		$message  = stripslashes($message);
Die direkt danach folgende Abfrage

Code: Alles auswählen

    			$newsletters->select("name='$name' and idclient='$client' AND idlang='$lang'");
in

Code: Alles auswählen

    			$newsletters->select("name='".urlencode($name)."' and idclient='$client' AND idlang='$lang'");
ändern.

include.newsletter_menu.php:

Code: Alles auswählen

		$delete = '<a title="'.$sDelTitle.'" href="javascript://" onclick="showDelMsg('.$idnewsletter.',\''.$params["name"].'\')"><img src="'.$cfg['path']['images'].'delete.gif" border="0" title="'.$sDelTitle.'" alt="'.$sDelTitle.'"></a>';

    		$mList->setTitle($iMenu, $params["name"]);
	    	$mList->setLink($iMenu, $oLink);
		if ($lIdCatArt) {
			$send = '<a title="'.$sSendTitle.'" href="javascript://" onclick="showSendMsg('.$idnewsletter.',\''.$params["name"].'\')"><img src="'.$cfg['path']['images'].'newsletter.gif" border="0" title="'.$sSendTitle.'" alt="'.$sSendTitle.'"></a>';
			$mList->setActions($iMenu, 'send', $send);
		}
durch

Code: Alles auswählen

		$delete = '<a title="'.$sDelTitle.'" href="javascript://" onclick="showDelMsg('.$idnewsletter.',\''.addslashes($params["name"]).'\')"><img src="'.$cfg['path']['images'].'delete.gif" border="0" title="'.$sDelTitle.'" alt="'.$sDelTitle.'"></a>';

    		$mList->setTitle($iMenu, $params["name"]);
	    	$mList->setLink($iMenu, $oLink);
		if ($lIdCatArt) {
			$send = '<a title="'.$sSendTitle.'" href="javascript://" onclick="showSendMsg('.$idnewsletter.',\''.addslashes($params["name"]).'\')"><img src="'.$cfg['path']['images'].'newsletter.gif" border="0" title="'.$sSendTitle.'" alt="'.$sSendTitle.'"></a>';
			$mList->setActions($iMenu, 'send', $send);
		}
ersetzen.

include.recipients.group_edit.php:

Code: Alles auswählen

    			$rgroups->select("groupname = '$groupname' AND idclient='$client' AND idlang='$lang'");
durch

Code: Alles auswählen

    			$rgroups->select("groupname = '".urlencode($groupname)."' AND idclient='$client' AND idlang='$lang'");
ersetzen.

include.recipients.group_menu.php:

Code: Alles auswählen

	$delete   = '<a title="'.$delTitle.'" href="javascript://" onclick="showMsg('.$idrgroup.',\''.$groupname.'\')"><img src="'.$cfg['path']['images'].'delete.gif" border="0" title="'.$delTitle.'" alt="'.$delTitle.'"></a>';
durch

Code: Alles auswählen

	$delete   = '<a title="'.$delTitle.'" href="javascript://" onclick="showMsg('.$idrgroup.',\''.addslashes($groupname).'\')"><img src="'.$cfg['path']['images'].'delete.gif" border="0" title="'.$delTitle.'" alt="'.$delTitle.'"></a>';
ersetzen.

include.recipients_edit.php:

Code: Alles auswählen

		$name  = stripslashes($name);
		$email = stripslashes($email);
am Anfang entfernen und unter

Code: Alles auswählen

if ($recipient->virgin == false && $recipient->get("idclient") == $client && $recipient->get("idlang") == $lang) {
	if ($action == "recipients_save" && $perm->have_perm_area_action($area, $action)) {
		$page->setReload();
		$messages = array();
wieder einfügen.

Außerdem ist eine Korrektur nicht angekommen, der Bereich sieht endgültig so aus:

Code: Alles auswählen

if ($recipient->virgin == false && $recipient->get("idclient") == $client && $recipient->get("idlang") == $lang) {
	if ($action == "recipients_save" && $perm->have_perm_area_action($area, $action)) {
		$page->setReload();
		$messages = array();
		
		$name  = stripslashes($name);
		$email = stripslashes($email);

		$recipient->set("name", $name);

		$email = strtolower($email); // E-Mail always in lower case
		if ($recipient->get("email") != $email) {
    			$recipients->select("email='".urlencode($email)."' and idclient='$client' AND idlang='$lang'");
(hier fehlte das urlencode in der letzten Zeile)

include.recipients_menu.php:

Code: Alles auswählen

		$delete = '<a title="'.$delTitle.'" href="javascript://" onclick="showDelMsg('.$idnewsrcp.',\''.$params["name"].'\')"><img src="'.$cfg['path']['images'].'delete.gif" border="0" title="'.$delTitle.'" alt="'.$delTitle.'"></a>';
durch

Code: Alles auswählen

		$delete = '<a title="'.$delTitle.'" href="javascript://" onclick="showDelMsg('.$idnewsrcp.',\''.addslashes($params["name"]).'\')"><img src="'.$cfg['path']['images'].'delete.gif" border="0" title="'.$delTitle.'" alt="'.$delTitle.'"></a>';
ersetzen.

Newsletter Form, nur Input:

Code: Alles auswählen

cInclude("classes", "class.newsletter.groups.php");
$db2        = new DB_Contenido;
$properties = new PropertyCollection;

/* Used variables: 
*  JoinSel:         Selection, which group will be joined (Default, Selected, User specified)
*  JoinMultiple:    If $strJoinSel = User specified then: If more then one group may be selected (currently not supported)
*  JoinGroups:       Selected group(s)
*  OptNewWindow:    Open handler window in new browser window?
*/

// Initialisation
$arrSettings = array();

$arrSettings["JoinSel"]         = $properties->getValue("clientsetting", $client, "newsletter", "joinsel");
$arrSettings["JoinMultiple"]    = $properties->getValue("clientsetting", $client, "newsletter", "joinmultiple");
$arrSettings["JoinGroups"]      = $properties->getValue("clientsetting", $client, "newsletter", "joingroups");
$arrSettings["OptNewWindow"]    = "CMS_VALUE[4]";

// Setting default values
/* If nothing is set or if the option UserSelected has been activated, but no groups 
*  has been selected, set option Default. Note, that requiring to select groups when option 
*  Selected has been activated doesn't make so much sense here (even, as it is possible to do).
*  Why? Because the groups to be joined have to be specified on the handler page, not here...
*  To prevent users to select a group (or not to save the selection) when the option Selected is
*  active should make more problems than just to ignore the selection in the Output area */

if ($arrSettings["JoinSel"] == "" || ($arrSettings["JoinSel"] == "UserSelected" && $arrSettings["JoinGroups"] == "")) {
   $arrSettings["JoinSel"] = "Default";
}

/* Saving changes, if any */
if ($_REQUEST["JoinSel"] != "" && $_REQUEST["JoinSel"] != $arrSettings["JoinSel"]) {
   $arrSettings["JoinSel"] = $_REQUEST["JoinSel"];
   $properties->setValue("clientsetting", $client, "newsletter", "joinsel", $arrSettings["JoinSel"]);
}
if ($_REQUEST["JoinMultiple"] != "" && $_REQUEST["JoinMultiple"] != $arrSettings["JoinMultiple"]) {
   $arrSettings["JoinMultiple"] = $_REQUEST["JoinMultiple"];
   $properties->setValue("clientsetting", $client, "newsletter", "joinmultiple", $arrSettings["JoinMultiple"]);
}
if ($_REQUEST["JoinGroups"] != "" && $_REQUEST["JoinGroups"] != $arrSettings["JoinGroups"]) {
   $arrSettings["JoinGroups"] = $_REQUEST["JoinGroups"];
   $properties->setValue("clientsetting", $client, "newsletter", "joingroups", $arrSettings["JoinGroups"]);
}

if ($_REQUEST['UpdateHandlerID'] == 'enabled' && is_numeric($_REQUEST['HandlerID'])) {
   // Trick: If UpdateHandlerID is enabled, save id as client setting
   $strHandlerID = $_REQUEST['HandlerID'];
   $properties->setValue("clientsetting", $client, "Newsletter", "idcatart", $strHandlerID);
} else {
   // Getting current handler article id
   $strHandlerID = $properties->getValue("clientsetting", $client, "Newsletter", "idcatart");
}

// Showing options
echo '        <table cellspacing="0" cellpadding="5" border="0" width="100%">',chr(10);
echo '           <tr valign="top">',chr(10);
echo '              <td>'.mi18n("Handler Article:").'</td>',chr(10);
echo '              <td><select name="HandlerID" size="1" disabled>',chr(10);
echo '                     <option value="">'.i18n("None").'</option>',chr(10);

$sql = "SELECT * FROM ".$cfg["tab"]["cat_tree"]." AS a,".$cfg["tab"]["cat_lang"]." AS b,
       ".$cfg["tab"]["cat"]." AS c WHERE a.idcat = b.idcat AND c.idcat = a.idcat AND
       c.idclient = '".$client."' AND b.idlang = '".$lang."' ORDER BY a.idtree";

$db->query($sql);

while ($db->next_record()) {
   $spaces = "";
   for ($i=0; $i<$db->f("level"); $i++) {
      $spaces .= "&nbsp;&nbsp;";
   }

   echo '                     <option style="font-weight: bold; color: #666666; background-color: #eeeeee;" value="">'.$spaces.' > '.$db->f("name").'</option>',chr(10);

   if ($cfg["is_start_compatible"] == true) {
      $sql2 = "SELECT * FROM ".$cfg["tab"]["cat_art"]." AS a, ".$cfg["tab"]["art"]." AS b,
              ".$cfg["tab"]["art_lang"]." AS c WHERE a.idcat = '".$db->f("idcat")."'
              AND b.idart = a.idart AND c.idart = a.idart AND
              c.idlang = '".$lang."' AND b.idclient = '".$client."' ORDER BY a.is_start DESC, c.title ASC";
   } else {
      $sql2 = "SELECT * FROM ".$cfg["tab"]["cat_art"]." AS a, ".$cfg["tab"]["art"]." AS b,
              ".$cfg["tab"]["art_lang"]." AS c WHERE a.idcat = '".$db->f("idcat")."'
              AND b.idart = a.idart AND c.idart = a.idart AND
              c.idlang = '".$lang."' AND b.idclient = '".$client."' ORDER BY c.title ASC";	
   }
  
   $db2->query($sql2);

   while ($db2->next_record()) {
      $selected = "";
      $tmp_title = $db2->f("title");
      if (strlen($tmp_title) > 32) {
         $tmp_title = substr($tmp_title, 0, 32);
      }

      $style = "";      	

      if ($cfg["is_start_compatible"] == true) {
         $is_start = $db2->f("is_start");
      } else {
         $is_start = isStartArticle($db2->f("idartlang"), $db2->f("idcat"), $lang);
         if ($is_start == true) {
            $is_start  = 1;
         } else {
            $is_start = 0;
         }
      }

      $strValue = $db2->f("idcatart");
      if ($is_start == 1 && $db2->f("online") == 0) {
         $style = "color: #ff0000";
         $strValue = "";
      }
      if ($is_start == 1 && $db2->f("online") == 1) {
         $style = "color: #0000ff";
      }
      if ($is_start == 0 && $db2->f("online") == 0) {
         $style = "color: #666666";
         $strValue = "";
      }
      if ($strHandlerID == $db2->f("idcatart")) {
         $selected = " selected";
      }
      echo '                     <option style="'.$style.'" value="'.$strValue.'"'.$selected.'>&nbsp;&nbsp;'.$spaces.' |&nbsp;&nbsp;'.$tmp_title.'</option>',chr(10);
  }
}

echo '                 </select>',chr(10);
echo '                      &nbsp;<input type="checkbox" name="UpdateHandlerID" value="enabled" onClick="if (this.checked) {document.forms[0].HandlerID.disabled = false;} else {document.forms[0].HandlerID.disabled = true;}">'.mi18n("Update"),chr(10);
echo '              <td>',chr(10);
echo '              </td>',chr(10);
echo '           </tr>',chr(10);
echo '           <tr valign="top">',chr(10);
echo '              <td>'.mi18n("Join:").'</td>',chr(10);

// Getting newsletter groups (if any)
$rgroups = new RecipientGroupCollection;
$rgroups->select("idclient = '$client' AND idlang = '$lang' AND defaultgroup = '0'","", "defaultgroup DESC, groupname ASC");

/* If newsletter groups are available, provide group options, otherwise show only 
*  'Default' option. This is necessary, as there may have been groups specified (and used)
*  but they have been deleted, later on. */
if ($rgroups->Count() == 0) {
   echo '              <td><input type="radio" name="JoinSel" value="Default" checked>'.mi18n("default group").'</td>',chr(10);
   echo '           </tr>',chr(10);
} else {
   echo '              <td>',chr(10);
   echo '                 <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse">',chr(10);
   echo '                    <tr>',chr(10);
   if ($arrSettings["JoinSel"] == "Default") {
      echo '                      <td><input type="radio" name="JoinSel" value="Default" checked onClick="document.forms[0].elements[\'JoinMultiple\'].disabled = true;document.forms[0].GroupSel.disabled = true;"></td>',chr(10);
   } else {
      echo '                      <td><input type="radio" name="JoinSel" value="Default" onClick="document.forms[0].elements[\'JoinMultiple\'].disabled = true;document.forms[0].GroupSel.disabled = true;"></td>',chr(10);
   }
   echo '                      <td>'.mi18n("default group").'</td>',chr(10);
   echo '                    </tr>',chr(10);
   echo '                    <tr>',chr(10);
   if ($arrSettings["JoinSel"] == "Selected") {
      echo '                      <td><input type="radio" name="JoinSel" value="Selected" onClick="document.forms[0].elements[\'JoinMultiple\'].disabled = true;document.forms[0].GroupSel.disabled = false;" checked></td>',chr(10);
   } else {
      echo '                      <td><input type="radio" name="JoinSel" value="Selected" onClick="document.forms[0].elements[\'JoinMultiple\'].disabled = true;document.forms[0].GroupSel.disabled = false;"></td>',chr(10);
   }
   echo '                      <td>'.mi18n("selected group(s)").'</td>',chr(10);
   echo '                    </tr>',chr(10);
   echo '                    <tr>',chr(10);
   if ($arrSettings["JoinSel"] == "UserSelected") {
      echo '                      <td valign="top"><input type="radio" name="JoinSel" value="UserSelected" onClick="document.forms[0].elements[\'JoinMultiple\'].disabled = false;document.forms[0].GroupSel.disabled = false;" checked></td>',chr(10);
      echo '                      <td>'.mi18n("group(s) as selected by user").'<br />',chr(10);
      if ($arrSettings["JoinMultiple"]) {
         echo '                          <input type="checkbox" name="JoinMultiple" value="enabled" checked>'.mi18n("Multiple group selection allowed").'</td>',chr(10);
      } else {
         echo '                          <input type="checkbox" name="JoinMultiple" value="enabled">'.mi18n("Multiple group selection allowed").'</td>',chr(10);
      }
   } else {
      echo '                      <td valign="top"><input type="radio" name="JoinSel" value="UserSelected" onClick="document.forms[0].elements[\'JoinMultiple\'].disabled = false;document.forms[0].GroupSel.disabled = false;"></td>',chr(10);
      echo '                      <td>'.mi18n("group(s) as selected by user").'<br />',chr(10);
      echo '                          <input type="checkbox" name="JoinMultiple" value="enabled" disabled>'.mi18n("Multiple group selection allowed").'</td>',chr(10);
   }
   echo '                    </tr>',chr(10);
   echo '                 </table>',chr(10);
   echo '              </td>',chr(10);
   echo '           </tr>',chr(10);
   echo '           <tr valign="top">',chr(10);
   echo '             <td>'.mi18n("Select group(s):").'</td>',chr(10);
   // Trick: To save multiple selections in <select>-Element, add some JS which saves the
   // selection, comma separated in a hidden input field on change.
   echo '              <td><script type="text/javascript"><!--',chr(10);
   echo '                  function fncUpdateSel() {',chr(10);
   echo '                     var strSel = "";',chr(10);
   echo '                     for(i=0; i<document.forms[0].GroupSel.length; i++) {', chr(10);
   echo '                        if(document.forms[0].GroupSel.options[i].selected == true) {',chr(10);
   echo '                           if (strSel != "")',chr(10);
   echo '                              strSel = strSel + ",";',chr(10);
   echo '                           strSel = strSel + document.forms[0].GroupSel.options[i].value;',chr(10);
   echo '                        }',chr(10);
   echo '                     }',chr(10);
   echo '                     document.forms[0].elements["JoinGroups"].value = strSel;',chr(10);
   echo '                  }',chr(10);
   echo '                  //--></script>',chr(10);
   if ($arrSettings["JoinSel"] == "Default") {
      echo '                  <select size="5" name="GroupSel" onChange="fncUpdateSel()" multiple disabled>',chr(10);
   } else {
      echo '                  <select size="5" name="GroupSel" onChange="fncUpdateSel()" multiple>',chr(10);
   }
   $arrGroups = explode(",",$arrSettings["JoinGroups"]);
   while ($rgroup = $rgroups->next()) {
      if (in_array ($rgroup->get("idnewsgroup"), $arrGroups)) {
         echo '                  <option value="'.$rgroup->get("idnewsgroup").'" selected>'.$rgroup->get("groupname").'</option>',chr(10);
      } else {
         echo '                  <option value="'.$rgroup->get("idnewsgroup").'">'.$rgroup->get("groupname").'</option>',chr(10);
      }
   }

   echo '                  </select><input type="hidden" name="JoinGroups" value="'.$arrSettings["JoinGroups"].'">',chr(10);
   echo '              </td>',chr(10);
   echo '           </tr>',chr(10);
}
echo '           <tr valign="top">',chr(10);
echo '              <td>'.mi18n("Options:").'</td>',chr(10);
if ($arrSettings["OptNewWindow"] != "") {
   echo '              <td><input type="checkbox" name="CMS_VAR[4]" value="enabled" checked>'.mi18n("Open handler form in new window").'</td>',chr(10);
} else {
   echo '              <td><input type="checkbox" name="CMS_VAR[4]" value="enabled">'.mi18n("Open handler form in new window").'</td>',chr(10);
}
echo '           </tr>',chr(10);
echo '        </table>',chr(10);
Newsletter Handler, nur Input:

Code: Alles auswählen

cInclude("classes", "class.newsletter.groups.php");

/* Used variables: 
*  JoinSel:         Selection, which group will be joined (Default, Selected, User specified)
*  JoinMultiple:    If $strJoinSel = User specified then: If more then one group may be selected (currently not supported)
*  JoinGroups:      Selected group(s)
*  FrontendLink:    Link to Frontend Users enabled?
*  FrontendConfirm: Confirmation of newsletter subscription means: Activate frontend account, nothing
*  FrontendDel:     Cancellation of newsletter subscription means: Delete frontend account, Deactivate account, nothing 
*  SenderEMail:     Sender e-mail address
*  HandlerID:       ID of handler article
*  ChangeEMailID:   ID of change e-mail handler article
*/

// Initialisation
$db2         = new DB_Contenido;
$properties  = new PropertyCollection;

$arrSettings = array();

$arrSettings["JoinSel"]         = $properties->getValue("clientsetting", $client, "newsletter", "joinsel");
$arrSettings["JoinMultiple"]    = $properties->getValue("clientsetting", $client, "newsletter", "joinmultiple");
$arrSettings["JoinGroups"]      = $properties->getValue("clientsetting", $client, "newsletter", "joingroups");
$arrSettings["FrontendLink"]    = $properties->getValue("clientsetting", $client, "newsletter", "frontendlink");
$arrSettings["FrontendConfirm"] = "CMS_VALUE[5]";
$arrSettings["FrontendDel"]     = "CMS_VALUE[6]";
$arrSettings["SenderEMail"]     = "CMS_VALUE[7]";

// Setting default values
/* If there is no selection option set or if no groups has been selected, activate option Default */
if ($arrSettings["JoinSel"] == "" || $arrSettings["JoinGroups"] == "") {
   $arrSettings["JoinSel"] = "Default";
}
if ($arrSettings["FrontendConfirm"] == "") {
   $arrSettings["FrontendConfirm"] = "ActivateUser";
}
if ($arrSettings["FrontendDel"] == "") {
   $arrSettings["FrontendDel"] = "DeleteUser";
}

/* Saving changes, if any */
if ($_REQUEST['UpdateHandlerID'] == 'enabled' && is_numeric($_REQUEST['HandlerID'])) {
   // Trick: If UpdateHandlerID is enabled, save id as client setting
   $arrSettings["HandlerID"] = $_REQUEST['HandlerID'];
   $properties->setValue("clientsetting", $client, "newsletter", "idcatart", $arrSettings["HandlerID"]);
} else {
   // Getting current handler article id
   $arrSettings["HandlerID"] = $properties->getValue("clientsetting", $client, "newsletter", "idcatart");
}

if ($_REQUEST["JoinSel"] != "" && $_REQUEST["JoinSel"] != $arrSettings["JoinSel"]) {
   $arrSettings["JoinSel"] = $_REQUEST["JoinSel"];
   $properties->setValue("clientsetting", $client, "newsletter", "joinsel", $arrSettings["JoinSel"]);
}
if ($_REQUEST["JoinMultiple"] != "" && $_REQUEST["JoinMultiple"] != $arrSettings["JoinMultiple"]) {
   $arrSettings["JoinMultiple"] = $_REQUEST["JoinMultiple"];
   $properties->setValue("clientsetting", $client, "newsletter", "joinmultiple", $arrSettings["JoinMultiple"]);
}
if ($_REQUEST["JoinGroups"] != "" && $_REQUEST["JoinGroups"] != $arrSettings["JoinGroups"]) {
   $arrSettings["JoinGroups"] = $_REQUEST["JoinGroups"];
   $properties->setValue("clientsetting", $client, "newsletter", "joingroups", $arrSettings["JoinGroups"]);
}
if ($_REQUEST["FrontendLink"] != "" && $_REQUEST["FrontendLink"] != $arrSettings["FrontendLink"]) {
   $arrSettings["FrontendLink"] = $_REQUEST["FrontendLink"];
   $properties->setValue("clientsetting", $client, "newsletter", "frontendlink", $arrSettings["FrontendLink"]);
}

// Show options
echo '        <table cellspacing="0" cellpadding="5" border="0" width="100%">',chr(10);
echo '           <tr valign="top">',chr(10);
echo '              <td>'.mi18n("Sender e-mail:").'</td>',chr(10);
echo '              <td><input type="text" name="CMS_VAR[7]" value="'.$arrSettings["SenderEMail"].'" size="30"></td>',chr(10);
echo '           </tr>',chr(10);
echo '           <tr valign="top">',chr(10);
echo '              <td>'.mi18n("Handler Article:").'</td>',chr(10);
echo '              <td><select name="HandlerID" size="1" disabled>',chr(10);
echo '                     <option value="">'.i18n("None").'</option>',chr(10);

$sql = "SELECT * FROM ".$cfg["tab"]["cat_tree"]." AS a,".$cfg["tab"]["cat_lang"]." AS b,
       ".$cfg["tab"]["cat"]." AS c WHERE a.idcat = b.idcat AND c.idcat = a.idcat AND
       c.idclient = '".$client."' AND b.idlang = '".$lang."' ORDER BY a.idtree";

$db->query($sql);

while ($db->next_record()) {
   $spaces = "";
   for ($i=0; $i<$db->f("level"); $i++) {
      $spaces .= "&nbsp;&nbsp;";
   }

   // echo '                     <option style="'.$style.'" value="'.$db->f("idcat").'">'.$spaces.' > '.$db->f("name").'</option>',chr(10);
   echo '                     <option style="font-weight: bold; color: #666666; background-color: #eeeeee;" value="">'.$spaces.' > '.$db->f("name").'</option>',chr(10);

   if ($cfg["is_start_compatible"] == true) {
      $sql2 = "SELECT * FROM ".$cfg["tab"]["cat_art"]." AS a, ".$cfg["tab"]["art"]." AS b,
              ".$cfg["tab"]["art_lang"]." AS c WHERE a.idcat = '".$db->f("idcat")."'
              AND b.idart = a.idart AND c.idart = a.idart AND
              c.idlang = '".$lang."' AND b.idclient = '".$client."' ORDER BY a.is_start DESC, c.title ASC";
   } else {
      $sql2 = "SELECT * FROM ".$cfg["tab"]["cat_art"]." AS a, ".$cfg["tab"]["art"]." AS b,
              ".$cfg["tab"]["art_lang"]." AS c WHERE a.idcat = '".$db->f("idcat")."'
              AND b.idart = a.idart AND c.idart = a.idart AND
              c.idlang = '".$lang."' AND b.idclient = '".$client."' ORDER BY c.title ASC";	
   }
  
   $db2->query($sql2);

   while ($db2->next_record()) {
      $selected  = "";
      $style     = "";
      $tmp_title = $db2->f("title");
      if (strlen($tmp_title) > 32) {
         $tmp_title = substr($tmp_title, 0, 32);
      }      	

      if ($cfg["is_start_compatible"] == true) {
         $is_start = $db2->f("is_start");
      } else {
         if (isStartArticle($db2->f("idartlang"), $db2->f("idcat"), $lang) == true) {
            $is_start  = 1;
         } else {
            $is_start = 0;
         }
      }

      $strValue = $db2->f("idcatart");
      if ($is_start == 1 && $db2->f("online") == 0) {
         $style = "color: #ff0000";
         $strValue = "";
      }
      if ($is_start == 1 && $db2->f("online") == 1) {
         $style = "color: #0000ff";
      }
      if ($is_start == 0 && $db2->f("online") == 0) {
         $style = "color: #666666";
         $strValue = "";
      }
      if ($arrSettings["HandlerID"] == $db2->f("idcatart")) {
         $selected = " selected";
      }

      echo '                     <option style="'.$style.'" value="'.$strValue.'"'.$selected.'>&nbsp;&nbsp;'.$spaces.' |&nbsp;&nbsp;'.$tmp_title.'</option>',chr(10);
  }
}

echo '                 </select>',chr(10);
echo '                      &nbsp;<input type="checkbox" name="UpdateHandlerID" value="enabled" onClick="if (this.checked) {document.forms[0].HandlerID.disabled = false;} else {document.forms[0].HandlerID.disabled = true;}">'.mi18n("Update"),chr(10);
echo '              <td>',chr(10);
echo '              </td>',chr(10);
echo '           </tr>',chr(10);
echo '           <tr valign="top">',chr(10);
echo '              <td>'.mi18n("Join:").'</td>',chr(10);

// Getting newsletter groups (if any)
$rgroups = new RecipientGroupCollection;
$rgroups->select("idclient = '$client' AND idlang = '$lang' AND defaultgroup = 0","", "defaultgroup DESC, groupname ASC");

/* If newsletter groups are available, provide group options, otherwise show only 
*  'Default' option. This is necessary, as there may have been groups specified (and used)
*  but they have been deleted, later on. */
if ($rgroups->Count() == 0) {
   echo '              <td><input type="radio" name="JoinSel" value="Default" checked>'.mi18n("default group").'</td>',chr(10);
   echo '           </tr>',chr(10);
} else {
   echo '              <td>',chr(10);
   echo '                 <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse">',chr(10);
   echo '                    <tr>',chr(10);
   if ($arrSettings["JoinSel"] == "Default") {
      echo '                      <td><input type="radio" name="JoinSel" value="Default" checked onClick="document.forms[0].elements[\'JoinMultiple\'].disabled = true;document.forms[0].GroupSel.disabled = true;"></td>',chr(10);
   } else {
      echo '                      <td><input type="radio" name="JoinSel" value="Default" onClick="document.forms[0].elements[\'JoinMultiple\'].disabled = true;document.forms[0].GroupSel.disabled = true;"></td>',chr(10);
   }
   echo '                      <td>'.mi18n("default group").'</td>',chr(10);
   echo '                    </tr>',chr(10);
   echo '                    <tr>',chr(10);
   if ($arrSettings["JoinSel"] == "Selected") {
      echo '                      <td><input type="radio" name="JoinSel" value="Selected" onClick="document.forms[0].elements[\'JoinMultiple\'].disabled = true;document.forms[0].GroupSel.disabled = false;" checked></td>',chr(10);
   } else {
      echo '                      <td><input type="radio" name="JoinSel" value="Selected" onClick="document.forms[0].elements[\'JoinMultiple\'].disabled = true;document.forms[0].GroupSel.disabled = false;"></td>',chr(10);
   }
   echo '                      <td>'.mi18n("selected group(s)").'</td>',chr(10);
   echo '                    </tr>',chr(10);
   echo '                    <tr>',chr(10);
   if ($arrSettings["JoinSel"] == "UserSelected") {
      echo '                      <td valign="top"><input type="radio" name="JoinSel" value="UserSelected" onClick="document.forms[0].elements[\'JoinMultiple\'].disabled = false;document.forms[0].GroupSel.disabled = false;" checked></td>',chr(10);
      echo '                      <td>'.mi18n("group(s) as selected by user").'<br />',chr(10);
      if ($arrSettings["JoinMultiple"]) {
         echo '                          <input type="checkbox" name="JoinMultiple" value="enabled" checked>'.mi18n("Multiple group selection allowed").'</td>',chr(10);
      } else {
         echo '                          <input type="checkbox" name="JoinMultiple" value="enabled">'.mi18n("Multiple group selection allowed").'</td>',chr(10);
      }
   } else {
      echo '                      <td valign="top"><input type="radio" name="JoinSel" value="UserSelected" onClick="document.forms[0].elements[\'JoinMultiple\'].disabled = false;document.forms[0].GroupSel.disabled = false;"></td>',chr(10);
      echo '                      <td>'.mi18n("group(s) as selected by user").'<br />',chr(10);
      echo '                          <input type="checkbox" name="JoinMultiple" value="enabled" disabled>'.mi18n("Multiple group selection allowed").'</td>',chr(10);
   }
   echo '                    </tr>',chr(10);
   echo '                 </table>',chr(10);
   echo '              </td>',chr(10);
   echo '           </tr>',chr(10);
   echo '           <tr valign="top">',chr(10);
   echo '             <td>'.mi18n("Select group(s):").'</td>',chr(10);
   // Trick: To save multiple selections in <select>-Element, add some JS which saves the
   // selection, comma separated in a hidden input field on change.
   echo '              <td><script type="text/javascript"><!--',chr(10);
   echo '                  function fncUpdateSel() {',chr(10);
   echo '                     var strSel = "";',chr(10);
   echo '                     for(i=0; i<document.forms[0].GroupSel.length; i++) {', chr(10);
   echo '                        if(document.forms[0].GroupSel.options[i].selected == true) {',chr(10);
   echo '                           if (strSel != "")',chr(10);
   echo '                              strSel = strSel + ",";',chr(10);
   echo '                           strSel = strSel + document.forms[0].GroupSel.options[i].value;',chr(10);
   echo '                        }',chr(10);
   echo '                     }',chr(10);
   echo '                     document.forms[0].elements["JoinGroups"].value = strSel;',chr(10);
   echo '                  }',chr(10);
   echo '                  //--></script>',chr(10);
   if ($arrSettings["JoinSel"] == "Default") {
      echo '                  <select size="5" name="GroupSel" onChange="fncUpdateSel()" multiple disabled>',chr(10);
   } else {
      echo '                  <select size="5" name="GroupSel" onChange="fncUpdateSel()" multiple>',chr(10);
   }

   $arrGroups = explode(",",$arrSettings["JoinGroups"]);
   while ($rgroup = $rgroups->next()) {
      if (in_array ($rgroup->get("idnewsgroup"),$arrGroups)) {
         echo '                  <option value="'.$rgroup->get("idnewsgroup").'" selected>'.$rgroup->get("groupname").'</option>',chr(10);
      } else {
         echo '                  <option value="'.$rgroup->get("idnewsgroup").'">'.$rgroup->get("groupname").'</option>',chr(10);
      }
   }

   echo '                  </select><input type="hidden" name="JoinGroups" value="' . $arrSettings["JoinGroups"] . '">',chr(10);
   echo '              </td>',chr(10);
   echo '           </tr>',chr(10);
}
echo '           <tr valign="top">',chr(10);
echo '              <td>'.mi18n("Frontend Users:").'</td>',chr(10);
echo '              <td>',chr(10);
echo '                 <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse">',chr(10);
echo '                    <tr>',chr(10);
if ($arrSettings["FrontendLink"] != "") {
   $strDisabled = "";
   echo '                       <td><input type="checkbox" name="FrontendLink" value="enabled" checked 
                                     onClick="if (this.checked) {document.forms[0].elements[\'CMS_VAR[5]\'][0].disabled = false;document.forms[0].elements[\'CMS_VAR[5]\'][1].disabled = false;
                                                                 document.forms[0].elements[\'CMS_VAR[6]\'][0].disabled = false;document.forms[0].elements[\'CMS_VAR[6]\'][1].disabled = false;document.forms[0].elements[\'CMS_VAR[6]\'][2].disabled = false;} 
                                              else {document.forms[0].elements[\'CMS_VAR[5]\'][0].disabled = true;document.forms[0].elements[\'CMS_VAR[5]\'][1].disabled = true;
                                                    document.forms[0].elements[\'CMS_VAR[6]\'][0].disabled = true;document.forms[0].elements[\'CMS_VAR[6]\'][1].disabled = true;document.forms[0].elements[\'CMS_VAR[6]\'][2].disabled = true;}">',chr(10);
} else {
   $strDisabled = " disabled";
   echo '                       <td><input type="checkbox" name="FrontendLink" value="enabled" 
                                     onClick="if (this.checked) {document.forms[0].elements[\'CMS_VAR[5]\'][0].disabled = false;document.forms[0].elements[\'CMS_VAR[5]\'][1].disabled = false;
                                                                 document.forms[0].elements[\'CMS_VAR[6]\'][0].disabled = false;document.forms[0].elements[\'CMS_VAR[6]\'][1].disabled = false;document.forms[0].elements[\'CMS_VAR[6]\'][2].disabled = false;} 
                                              else {document.forms[0].elements[\'CMS_VAR[5]\'][0].disabled = true;document.forms[0].elements[\'CMS_VAR[5]\'][1].disabled = true;
                                                    document.forms[0].elements[\'CMS_VAR[6]\'][0].disabled = true;document.forms[0].elements[\'CMS_VAR[6]\'][1].disabled = true;document.forms[0].elements[\'CMS_VAR[6]\'][2].disabled = true;}">',chr(10);
}
echo '                       <td>'.mi18n("Activate Link").'</td>',chr(10);
echo '                    </tr>',chr(10);
echo '                    <tr>',chr(10);
echo '                       <td>&nbsp;</td>',chr(10);
echo '                       <td>'.mi18n("Confirmation means:").'<br />',chr(10);
if ($arrSettings["FrontendConfirm"] == "ActivateUser") {
   echo '                           <input type="radio" name="CMS_VAR[5]" value="ActivateUser" checked'.$strDisabled.'>'.mi18n("Activate"),chr(10);
} else {
   echo '                           <input type="radio" name="CMS_VAR[5]" value="ActivateUser"'.$strDisabled.'>'.mi18n("Activate"),chr(10);
}
if ($arrSettings["FrontendConfirm"] == "Nothing") {
   echo '                           <input type="radio" name="CMS_VAR[5]" value="Nothing" checked'.$strDisabled.'>'.mi18n("No changes"),chr(10);
} else {
   echo '                           <input type="radio" name="CMS_VAR[5]" value="Nothing"'.$strDisabled.'>'.mi18n("No changes"),chr(10);
}
echo '                       </td>',chr(10);
echo '                    </tr>',chr(10);
echo '                    <tr>',chr(10);
echo '                       <td>&nbsp;</td>',chr(10);
echo '                       <td>'.mi18n("Cancellation means:").'<br />',chr(10);
if ($arrSettings["FrontendDel"] == "DeleteUser") {
   echo '                           <input type="radio" name="CMS_VAR[6]" value="DeleteUser" checked'.$strDisabled.'>'.mi18n("Delete"),chr(10);
} else {
   echo '                           <input type="radio" name="CMS_VAR[6]" value="DeleteUser"'.$strDisabled.'>'.mi18n("Delete"),chr(10);
}
if ($arrSettings["FrontendDel"] == "DisableUser") {
   echo '                           <input type="radio" name="CMS_VAR[6]" value="DisableUser" checked'.$strDisabled.'>'.mi18n("Disable"),chr(10);
} else {
   echo '                           <input type="radio" name="CMS_VAR[6]" value="DisableUser"'.$strDisabled.'>'.mi18n("Disable"),chr(10);
}
if ($arrSettings["FrontendDel"] == "Nothing") {
   echo '                           <input type="radio" name="CMS_VAR[6]" value="Nothing" checked'.$strDisabled.'>'.mi18n("No changes"),chr(10);
} else {
   echo '                           <input type="radio" name="CMS_VAR[6]" value="Nothing"'.$strDisabled.'>'.mi18n("No changes"),chr(10);
}
echo '                       </td>',chr(10);
echo '                    </tr>',chr(10);
echo '                 </table>',chr(10);
echo '              </td>',chr(10);
echo '           </tr>',chr(10);
echo '        </table>',chr(10);
Die Änderungen beheben Probleme mit Einträgen in der Art "Mac's Weinladen" an allen möglichen Stellen und ermöglicht die Konfiguration der Module unter Firefox.

Übersetzungen wolltet ihr ja mal bei Gelegenheit nochmal überarbeiten; sagt Bescheid, ich stehe gerne helfend zur Verfügung.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » So 30. Okt 2005, 15:22

Damit der Versuch scheitert, an Empfänger ohne Schlüssel zu senden, folgende Änderungen integrieren:

class.newsletter.php, Funktion send:
Statt

Code: Alles auswählen

							$message2 = str_replace("MAIL_NAME", "$name", $message);
							$message2 = str_replace("MAIL_UNSUBSCRIBE", $path."unsubscribe=".$key, $message2);
							$message2 = str_replace("MAIL_CHANGE", $path."change=".$key, $message2);
							$message2 = str_replace("MAIL_STOP", $path."stop=".$key, $message2);
							$message2 = str_replace("MAIL_GOON", $path."goon=".$key, $message2);
							
							$mail		= new phpmailer();
							$mail->From	= $from;
						      	$mail->FromName = $from;
      							$mail->AddAddress($to);
							$mail->Mailer	= "mail";
							$mail->Subject	= $subject;
							$mail->Body	= $message2."\n\n".$foot;
							// $mail->AltBody  = $body;

							// if (!mail("$to", "$subject", "$message2\n\n$foot", 'From: '.$from."\n"."X-Mailer: Contenido [PHP/" . phpversion())) {
							if (!$mail->Send()) {
								$result[] = $name . " (" . $to . "): " . i18n("Newsletter to ") . $to . i18n(" could not be sent.");
							} else {
								$result[] = $name . " (" . $to . "): " . i18n("Sent successfully");
							}
folgenden Code setzen:

Code: Alles auswählen

							if (strlen($key) == 30) { // Prevents sending without having a key
			
								$message2 = str_replace("MAIL_NAME", "$name", $message);
								$message2 = str_replace("MAIL_UNSUBSCRIBE", $path."unsubscribe=".$key, $message2);
								$message2 = str_replace("MAIL_CHANGE", $path."change=".$key, $message2);
								$message2 = str_replace("MAIL_STOP", $path."stop=".$key, $message2);
								$message2 = str_replace("MAIL_GOON", $path."goon=".$key, $message2);
							
								$mail		= new phpmailer();
								$mail->From	= $from;
							      	$mail->FromName = $from;
      								$mail->AddAddress($to);
								$mail->Mailer	= "mail";
								$mail->Subject	= $subject;
								$mail->Body	= $message2."\n\n".$foot;
								// $mail->AltBody  = $body;
								if (!$mail->Send()) {
									$result[] = $name . " (" . $to . "): " . i18n("Newsletter to ") . $to . i18n(" could not be sent.");
								} else {
									$result[] = $name . " (" . $to . "): " . i18n("Sent successfully");
								}
							} else {
								$result[] = $name . " (" . $to . "): " . i18n("Newsletter to ") . $to . i18n(" could not be sent (recipient has an incompatible or empty key).");
							}
Daraus ergibt sich (leider) eine weitere Übersetzung:

Code: Alles auswählen

msgid " could not be sent (recipient has an incompatible or empty key)."
msgstr " konnte nicht gesendet werden (Empf&auml;nger verf&uuml;gt &uuml;ber einen inkompatiblen oder keinen Schk&uuml;ssel)."
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Mo 31. Okt 2005, 14:05

HerrB hat geschrieben:Die letzten Reinlichkeiten für V4.6:

Code: Alles auswählen

		/* Changing e.g. \' back to ' (magic_quotes) */
		$name     = stripslashes($name);
		$newsfrom = stripslashes($newsfrom);
		$subject  = stripslashes($subject);
		$message  = stripslashes($message);
Ist drin.

Die direkt danach folgende Abfrage

Code: Alles auswählen

    			$newsletters->select("name='$name' and idclient='$client' AND idlang='$lang'");
in

Code: Alles auswählen

    			$newsletters->select("name='".urlencode($name)."' and idclient='$client' AND idlang='$lang'");
ändern.
Ich habe das mal folgendermaßen geändert:

Code: Alles auswählen

				$newsletters->resetQuery();
				$newsletters->setWhere("name", $name);
				$newsletters->setWhere("idclient", $client);
				$newsletters->setWhere("idlang", $lang);
				$newsletters->query();
zusätzlich muß der Konstruktor in der class.newsletters.php so aussehen:

Code: Alles auswählen

	function NewsletterCollection()
	{
		global $cfg;
		parent::ItemCollection($cfg["tab"]["news"], "idnews");
		$this->_setItemClass("Newsletter");
	}
Da setWhere sich automatisch um das Encoden der Werte kümmert (urlencode ist übrigens nicht genug), ist das angenehmer.
include.newsletter_menu.php:
Ist geändert.
include.recipients.group_edit.php:
Auch hier habe ich select durch setWhere/query ersetzt.
Außerdem ist eine Korrektur nicht angekommen, der Bereich sieht endgültig so aus:
Dito mit setWhere/query
include.recipients.group_menu.php:
include.recipients_edit.php:
Ist auch drin. Jetzt hab ich mich aber mit dem kleinen phpBB-Editfenster vertan, ich habe alle Änderungen gemacht, aber bin mit dem quoten hier durcheinandergekommen ;)

Die Übersetzung aus dem letzten Posting kann man wie folgt lösen:
[quote9
sprintf(i18n("Newsletter to %s could not be sent (recipient has an incompatible or empty key)."), $to);[/quote]

Ich poste mal gleich unter Contenido Development die i18n secrets ;)

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Mo 31. Okt 2005, 14:12

ähm eine frage noch:

mi18n("txtMailDelete")

soll txtMailDelete wirklich übersetzt werden? Ich würde sagen nein...

Ich lasse den Newsletter erstmal so wie er ist, notfalls muß man noch eine 4.6.1 recht zeitnah nachschieben ;)

jost
Beiträge: 322
Registriert: Mo 10. Jan 2005, 20:12
Kontaktdaten:

Beitrag von jost » Mo 31. Okt 2005, 14:49

Ach ja - heute ist es ja soweit ;-)

Gesperrt