Plugin: Empfänger/Recipients

OliverL
Beiträge: 870
Registriert: Do 28. Jun 2007, 09:28
Kontaktdaten:

Beitrag von OliverL » Mo 25. Feb 2008, 17:14

Hab was NEUES gefunden!!


Plugin-STORE im User-Import
In allen store-Functions wird $recipient in die Funktion geholt.
Verwendet man aber den User-Importer Existiert dieses Objekt nicht sondern $oRecipient.

Auszeitgründen hab ich das gemacht:

Code: Alles auswählen

global $recipient;
global $oRecipient;
if( is_object( $recipient ) ) { // Edit
	$recipient->setProperty( ... );
}
elseif( is_object( $oRecipient ) ) { // Data-Import
	$oRecipient->setProperty( ... );
}


"Suche in" ohne Plugin-Felder
beim FEU-Menü werden die 'wantedVariables' als "Suche in"-Felder angezeigt. (Auch hier leider aus Zeitgründen kein Lösungsvorschlag)


mfg
und viel spass :lol:
OliL

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

Beitrag von HerrB » Sa 15. Mär 2008, 19:44

"Suche in" ohne Plugin-Felder
beim FEU-Menü werden die 'wantedVariables' als "Suche in"-Felder angezeigt. (Auch hier leider aus Zeitgründen kein Lösungsvorschlag)
Also für die FEUser kann man diesen Effekt explizit deaktivieren, da er bei relativ wenigen Usern mit relativ wenigen Plugins zu einem völligen Zusammenbruch des Bereichs führt.

Ich weiß gerade nicht, wie Dein Wunsch aussieht: Dies bei FEUser deaktivieren? Dann siehe docs/techref/backend.

Bei Empfängern ergänzen? Aktuell: No way, das führt zu den gleichen Performance-Problemen... und das grundsätzlich zu beheben, ist deutlich aufwendig.

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

OliverL
Beiträge: 870
Registriert: Do 28. Jun 2007, 09:28
Kontaktdaten:

Beitrag von OliverL » Mo 17. Mär 2008, 08:40

Moin,

1. Ja, es wäre mein Wunsch gewesen das zu ergänzen, aber die Begründung reicht mir auch.

2. zum Store-Problem reicht mir die Antwort aus:
http://contenido.org/forum/viewtopic.ph ... 996#114996

THX @ HerrB

Oli

PS.: Ansonsten ist der neue Newsletter der Geiste! Ich freu mich jedes mal wenn ich ihn sehe.
Zuletzt geändert von OliverL am Fr 10. Okt 2008, 21:28, insgesamt 1-mal geändert.

funomat
Beiträge: 345
Registriert: Do 26. Feb 2004, 22:13
Wohnort: Neuss
Kontaktdaten:

Beitrag von funomat » Mi 30. Apr 2008, 11:37

Hallo HerrB,

ich habe nun endlich mal Zeit gefunden den von mir im November (!!!!) geposteten Fehler zu suchen. Und siehe da, ich habe den Fehler sogar gefunden.

In der Datei class.newsletter.jobs.php findet man in Zeile ~407 folgende Anweisung:

Code: Alles auswählen

$recipient = new Recipient;
und in Zeile ~427

Code: Alles auswählen

unset($recipient);
Das steht hier aber an der falschen Stelle!!

Hier mal die komplette Schleife ab Zeile ~374:

Code: Alles auswählen

while ($oLog = $oLogs->next())
			{
				$iCount++;
				$oLog->set("status", "sending");
				$oLog->store();				
				
				$sRcpMsgText = $sMessageText;
				$sRcpMsgHTML = $sMessageHTML;
				
				$sKey		= $oLog->get("rcphash");
				$sEMail 	= $oLog->get("rcpemail");
				$bSendHTML	= false;
				if ($oLog->get("rcpnewstype") == 1) {
					$bSendHTML = true; // Recipient accepts html newsletter
				}
				
				if (strlen($sKey) == 30) // Prevents sending without having a key
				{
					$sRcpMsgText = str_replace("{KEY}", 	$sKey, $sRcpMsgText);
					$sRcpMsgText = str_replace("MAIL_MAIL", $sEMail, $sRcpMsgText);
					$sRcpMsgText = str_replace("MAIL_NAME", $oLog->get("rcpname"), $sRcpMsgText);				
				
					// Replace message tags (html message)
					if ($bIsHTML && $bSendHTML)
					{
						$sRcpMsgHTML = str_replace("{KEY}", 	$sKey, $sRcpMsgHTML);
						$sRcpMsgHTML = str_replace("MAIL_MAIL", $sEMail, $sRcpMsgHTML);
						$sRcpMsgHTML = str_replace("MAIL_NAME", $oLog->get("rcpname"), $sRcpMsgHTML);
					}
				
					if ($bPluginEnabled)
					{
						// Don't change name of $recipient variable as it is used in plugins!
						$recipient = new Recipient;
						$recipient->loadByPrimaryKey($oLog->get("idnewsrcp"));
						
						foreach ($aPlugins as $sPlugin => $aPluginVar)
						{
							foreach ($aPluginVar as $sPluginVar)
							{
								// Replace tags in text message
								$sRcpMsgText = str_replace("MAIL_".strtoupper($sPluginVar), call_user_func("recipients_".$sPlugin."_getvalue", $sPluginVar), $sRcpMsgText);
									
								// Replace tags in html message
								if ($bIsHTML && $bSendHTML) {
									if (function_exists("recipients_".$sPlugin."_getHTMLValue")) {
										$sRcpMsgHTML = str_replace("MAIL_".strtoupper($sPluginVar), call_user_func("recipients_".$sPlugin."_getHTMLValue", $sPluginVar), $sRcpMsgHTML);
									} else {
										$sRcpMsgHTML = str_replace("MAIL_".strtoupper($sPluginVar), call_user_func("recipients_".$sPlugin."_getvalue", $sPluginVar), $sRcpMsgHTML);
									}
								}
							}
						}
						unset($recipient);					}
				
					$oMail = new phpmailer();
					$oMail->CharSet		= $sEncoding;
					$oMail->IsHTML($bIsHTML && $bSendHTML);
					$oMail->From		= $sFrom;
					$oMail->FromName	= $sFromName;
					$oMail->AddAddress($sEMail);
					$oMail->Mailer		= "mail";
					$oMail->Subject		= $sSubject;
			
					if ($bIsHTML && $bSendHTML)
					{
						$oMail->Body	= $sRcpMsgHTML;
						$oMail->AltBody	= $sRcpMsgText."\n\n";
					} else {
						$oMail->Body	= $sRcpMsgText."\n\n";
					}
			
					if ($oMail->Send()) {
						$oLog->set("status", "successful");
						$oLog->set("sent",	 date("Y-m-d H:i:s"), false);
					} else {
						$oLog->set("status", "error (sending)");
					}
				} else {
					$oLog->set("status", "error (key)");
				}
				$oLog->store();
			}
Das ganze müsste man hiermit ersetzen:

Code: Alles auswählen

$recipient = new Recipient; # edit by funomat TG
			while ($oLog = $oLogs->next())
			{
				$iCount++;
				$oLog->set("status", "sending");
				$oLog->store();				
				
				$sRcpMsgText = $sMessageText;
				$sRcpMsgHTML = $sMessageHTML;
				
				$sKey		= $oLog->get("rcphash");
				$sEMail 	= $oLog->get("rcpemail");
				$bSendHTML	= false;
				if ($oLog->get("rcpnewstype") == 1) {
					$bSendHTML = true; // Recipient accepts html newsletter
				}
				
				if (strlen($sKey) == 30) // Prevents sending without having a key
				{
					$sRcpMsgText = str_replace("{KEY}", 	$sKey, $sRcpMsgText);
					$sRcpMsgText = str_replace("MAIL_MAIL", $sEMail, $sRcpMsgText);
					$sRcpMsgText = str_replace("MAIL_NAME", $oLog->get("rcpname"), $sRcpMsgText);				
				
					// Replace message tags (html message)
					if ($bIsHTML && $bSendHTML)
					{
						$sRcpMsgHTML = str_replace("{KEY}", 	$sKey, $sRcpMsgHTML);
						$sRcpMsgHTML = str_replace("MAIL_MAIL", $sEMail, $sRcpMsgHTML);
						$sRcpMsgHTML = str_replace("MAIL_NAME", $oLog->get("rcpname"), $sRcpMsgHTML);
					}
				
					if ($bPluginEnabled)
					{
						// Don't change name of $recipient variable as it is used in plugins!
						// $recipient = new Recipient; # edit by funomat TG
						$recipient->loadByPrimaryKey($oLog->get("idnewsrcp"));
						
						foreach ($aPlugins as $sPlugin => $aPluginVar)
						{
							foreach ($aPluginVar as $sPluginVar)
							{
								// Replace tags in text message
								$sRcpMsgText = str_replace("MAIL_".strtoupper($sPluginVar), call_user_func("recipients_".$sPlugin."_getvalue", $sPluginVar), $sRcpMsgText);
									
								// Replace tags in html message
								if ($bIsHTML && $bSendHTML) {
									if (function_exists("recipients_".$sPlugin."_getHTMLValue")) {
										$sRcpMsgHTML = str_replace("MAIL_".strtoupper($sPluginVar), call_user_func("recipients_".$sPlugin."_getHTMLValue", $sPluginVar), $sRcpMsgHTML);
									} else {
										$sRcpMsgHTML = str_replace("MAIL_".strtoupper($sPluginVar), call_user_func("recipients_".$sPlugin."_getvalue", $sPluginVar), $sRcpMsgHTML);
									}
								}
							}
						}
						// unset($recipient); # edit by funomat TG
					}
				
					$oMail = new phpmailer();
					$oMail->CharSet		= $sEncoding;
					$oMail->IsHTML($bIsHTML && $bSendHTML);
					$oMail->From		= $sFrom;
					$oMail->FromName	= $sFromName;
					$oMail->AddAddress($sEMail);
					$oMail->Mailer		= "mail";
					$oMail->Subject		= $sSubject;
			
					if ($bIsHTML && $bSendHTML)
					{
						$oMail->Body	= $sRcpMsgHTML;
						$oMail->AltBody	= $sRcpMsgText."\n\n";
					} else {
						$oMail->Body	= $sRcpMsgText."\n\n";
					}
			
					if ($oMail->Send()) {
						$oLog->set("status", "successful");
						$oLog->set("sent",	 date("Y-m-d H:i:s"), false);
					} else {
						$oLog->set("status", "error (sending)");
					}
				} else {
					$oLog->set("status", "error (key)");
				}
				$oLog->store();
			}
			unset($recipient); # edit by funomat TG
Die Änderungen sind mit edit by funomat TG gekennzeichnet.
Das selbe Problem dürfte in der 4.8.x auch auftreten, da der Code an der Stelle nicht verändert wurde.

Gruß,
funomat
tiago.de | adk-msi.de | iseringhausen.de | the-iseringhausen.de
Manchmal glaube ich, der beste Beweis dafür, dass es anderswo im Weltall intelligentes Leben gibt, ist der, dass noch niemand versucht hat, Kontakt zu uns aufzunehmen. (Calvin & Hobbes)

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

Beitrag von HerrB » Fr 9. Mai 2008, 18:39

Ähm, also wenn es bei Dir funktioniert, super. Allerdings ist die Objekterzeugung und -zerstörung innerhalb der Schleife durchaus korrekt, da das Objekt außerhalb nicht verwendet wird.

Ich teste es gerne nochmal bei mir, aber Deine Änderung hat nur zur Folge, dass nicht jedesmal ein neues Objekt erzeugt wird, sondern das erste "recycelt" wird.

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

funomat
Beiträge: 345
Registriert: Do 26. Feb 2004, 22:13
Wohnort: Neuss
Kontaktdaten:

Beitrag von funomat » Fr 9. Mai 2008, 18:50

Hallo HerrB,

ich weiß ja nicht ob Du Dich noch an den Fehler erinnern kannst. Das Problem war, dass beim Versenden von Newslettern mit Daten aus dem Plugin, immer z.B. die gleiche Anrede für alle Newsletter verwendet wurde. Das heißt, wenn der erste Empfänger eine Frau war, wurden auch alle anderen Empfänger mit Sehr geehrte Frau angesprochen.

Nur mit dieser Änderung hat das ganze funktioniert!

Beim versenden von Testnewslettern an mehrere Empfänger trat das Problem nicht auf.

Gruß,
funomat
tiago.de | adk-msi.de | iseringhausen.de | the-iseringhausen.de
Manchmal glaube ich, der beste Beweis dafür, dass es anderswo im Weltall intelligentes Leben gibt, ist der, dass noch niemand versucht hat, Kontakt zu uns aufzunehmen. (Calvin & Hobbes)

malsdgtac
Beiträge: 717
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Beitrag von malsdgtac » Di 26. Aug 2008, 13:02

Funktioniert das Plugin auch noch beim Newsletter der im Contenido 4.8.7 dabei ist?

newimagine
Beiträge: 33
Registriert: Di 6. Jul 2004, 19:18
Kontaktdaten:

Re: Plugin: Empfänger/Recipients

Beitrag von newimagine » Mo 5. Okt 2009, 11:55

Hallo Zusammen,
also - habe das Plugin mal für die 4.8.12er Version versucht einzusetztn.
Das Anzeigen und Editieren eines zusätzlichen Feldes (in meinem Fall "Anrede") geht ohne Probleme.
Von daher wird es auch kein Problem sein dies in das Frontend bei der Newsletteranmeldung mit aufzunehmen.

Was allerdings im Moment nicht funktioniert ist die Ausgabe des Wertes im jeweiligen Newsletter.

@HerrB: Hast Du da eine Idee?
Beziehungsweise gerne auch eine Idee von jemandem Anders?

Danke!

Viele Grüße,
Christian

newimagine
Beiträge: 33
Registriert: Di 6. Jul 2004, 19:18
Kontaktdaten:

Re: Plugin: Empfänger/Recipients

Beitrag von newimagine » Mo 5. Okt 2009, 12:02

OK. Manchmal sollte man die Augen auf machen:

Unter Administration > System > Experteneinstellungen
muss der Wert "newsletter-recipients-plugin" auf true gesetzt werden bzw. wie folgt angelegt sein:

Typ: newsletter
Name: newsletter-recipients-plugin
Wert: true

Dann funktioniert es auch...

Viele Grüße,
Christian

newimagine
Beiträge: 33
Registriert: Di 6. Jul 2004, 19:18
Kontaktdaten:

Re: Plugin: Empfänger/Recipients

Beitrag von newimagine » Fr 23. Okt 2009, 09:15

Und doch gibt es Probleme.

Wenn ich den HTML-Newsletter versende und als Tag:

Code: Alles auswählen

[mail name="anrede" type="text"]MAIL_ANREDE[/mail]
einsetze, bekomme ich in der Ausgabe des Newsletters:
:: anrede: anrede ::

Jemand ne Idee?

Danke & viele Grüße,
Christian

Kleiner Nachtrag: Im Backend wird bei den möglichen Tags angegeben:
  • Zusätzliche Tags aus Empfänger-Plugins:
    [mail name="anrede" type="text"][/mail]
Da fehlt MAIL_ANREDE drin. Eventuell hilft das weiter?
Danke!

Gesperrt