Newsletter-Blöcken fehlerhaftes auslesen von Plugin-Date

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

Newsletter-Blöcken fehlerhaftes auslesen von Plugin-Date

Beitrag von OliverL » Do 28. Feb 2008, 19:08

- CONTENIDO 4.6.23 -

Ich habe ein Empfänger-Plugin (recipients) für einen Kunden geschrieben in dem eine Personalisierteausgabe der Anrede erstellt wird mit den Feldern: Geschlecht und Vorname. (Nach-)Name existiert ja schon.
Als Wandet variable habe ich "geschlecht", "vorname" und zusätzlich "brief_anrede". Und bei den Get-Funktionen Komuliertedaten aus
Geschlecht + Vorname + Name = brief_anrede

Im Testnewsletter an mich ist alles OK.
Im Blockversand bei 1 Mail pro Block ist alles gut.

Mache ich 50 Mails pro Block steht in der ersten mail alles was soll
aber in der zweiten Mail die Daten von der ersten Mail
und in der dritten die Daten auch aus der ersten Mail
...

ich möchte dem Kunden aber nicht zumuten das er 6300 Mails in sekunden-Takt verschicken muss.

Hat jemand ne Lösung oder Post?
Richtig cool wäre ne vollständige Datei :lol:

Ich denke das es in der Datei 'class.newsletter.jobs.php' in Zeile um 404-427 steht aber ich finde es nicht.
Zuletzt geändert von OliverL am Fr 10. Okt 2008, 21:28, insgesamt 2-mal geändert.

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Do 13. Mär 2008, 18:34

wie sieht das plugin aus ?
*** make your own tools (wishlist :: thx)

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

Beitrag von OliverL » Fr 14. Mär 2008, 08:42

Code: Alles auswählen

<?php
/*****************************************
* File      :   $RCSfile: company.php,v $
* Project   :   Contenido
* Descr     :   Navision-Plugin
* Modified  :   $Date: 2008/02/01 00:00:00 $
*
*  teammedia GmbH, www.teammedia.net
*
* $Id: company.php,v 1.  2008/02/01 00:00:00 oliver.lohkemper Exp $
******************************************/

function recipients_company_canonicalVariables() {	
	return array(	"company_ad_code" 			=> str_replace("ä","ae", i18n("company_ad_code", 			"recipients_company") ),
								"company_ad_signatur"		=> str_replace("ä","ae", i18n("company_ad_sig", 			"recipients_company") ),
								"company_anrede" 				=> i18n("company_anrede", 			"recipients_company"),
								"company_vorname" 			=> i18n("company_vorname", 			"recipients_company"),
								"company_anrede_code" 	=> i18n("company_anrede_code", 	"recipients_company"),
								"company_paperhead" 		=> i18n("company_paperhead", 		"recipients_company")
								);
}

function recipients_company_getvalue( $field ) {
	global $recipient;
	$access	= array( 'company_ad_code', 'company_anrede', 'company_vorname', 'company_anrede_code' );
										
	if ( in_array($field, $access) ) {
		return $recipient->getProperty( $field, "recipient" );
	}
	elseif( $field == 'company_paperhead' ) {
		$anrede_code 	= $recipient->getProperty( 'company_anrede_code', 	"recipient" );
		$anrede			 	= $recipient->getProperty( 'company_anrede', 				"recipient" );
		$vorname 			= $recipient->getProperty( 'company_vorname', 			"recipient" );
		$name 				= $recipient->get("name");
		
		switch ($anrede_code) {
		case 1:
				if(strtolower($anrede) == 'frau' and $name ) $output = 'Sehr geehrte Frau '.$name.',';
				elseif(strtolower($anrede) == 'herr' and $name ) $output = 'Sehr geehrter Herr '.$name.',';
				else $output = 'Sehr geehrte Damen und Herren,';
			break;
		case 4:
				if( $vorname ) $output = 'Hallo '.$vorname.',';
				elseif( $anrede and $name ) $output = 'Hallo '.$anrede.' '.$name.',';
				else $output = 'Hallo,';
			break;
		case 7:
				$output = ( $anrede and $name ? 'Hallo '.$anrede.' '.$name.',' : 'Sehr geehrte Damen und Herren,' );
			break;
		}
		return $output;
	}
	elseif( $field == 'company_ad_signatur' ) {
		global $cfgClient, $client;
		if( file_exists($cfgClient[$client]['upl']['path'].'newsletter/verkaeufer.txt') ) {
			
			$ad_daten = file($cfgClient[$client]['upl']['path'].'newsletter/verkaeufer.txt');
			$ad_code = $recipient->getProperty( $field, "recipient" );
			
			foreach( $ad_daten as $value ) {
				$kuerzel = strtok($value, ";");
				if( $ad_code == $kuerzel ) $output = str_replace(";", "\n", substr($value, strlen($kuerzel)+1) );
			}
		}
		else {
			return 'Datei existiert nicht!<br>'.$cfgClient[$client]['upl']['frontendpath'].'newsletter/verkaeufer.txt';
		}
	}
}

function recipients_company_getHTMLValue( $field ) {
	global $recipient;
	$access	= array( 'company_ad_code', 'company_anrede', 'company_vorname', 'company_anrede_code' );
	if ( in_array($field, $access) ) return $recipient->getProperty( $field, "recipient" );
	elseif( $field == 'company_paperhead' ) {
		$anrede_code 	= $recipient->getProperty( 'company_anrede_code', 	"recipient" );
		$anrede			 	= $recipient->getProperty( 'company_anrede', 				"recipient" );
		$vorname 			= $recipient->getProperty( 'company_vorname', 			"recipient" );
		$name 				= $recipient->get("name");
		
		switch ($anrede_code) {
		case 1:
				if(strtolower($anrede) == 'frau' and $name ) $output = 'Sehr geehrte Frau '.htmlentities($name).',';
				elseif(strtolower($anrede) == 'herr' and $name ) $output = 'Sehr geehrter Herr '.htmlentities($name).',';
				else $output = 'Sehr geehrte Damen und Herren,';
			break;
		case 4:
				if( $vorname ) $output = 'Hallo '.htmlentities($vorname).',';
				elseif( $anrede and $name ) $output = 'Hallo '.htmlentities($anrede).' '.htmlentities($name).',';
				else $output = 'Hallo,';
			break;
		case 7:
				if( $anrede and $name ) $output = 'Hallo '.htmlentities($anrede).' '.htmlentities($name).',';
				else $output = 'Sehr geehrte Damen und Herren,';
			break;
		}
		return $output;
	}
	elseif( $field == 'company_ad_signatur' ) {
		global $cfgClient, $client;
		if( file_exists($cfgClient[$client]['upl']['path'].'newsletter/verkaeufer.txt') ) {
			
			$ad_daten = file($cfgClient[$client]['upl']['path'].'newsletter/verkaeufer.txt');
			$ad_code = $recipient->getProperty( 'company_ad_code', "recipient" );
			
			foreach( $ad_daten as $value ) {
				$kuerzel = strtok($value, ";");
				if( $ad_code == $kuerzel ) {
					$output = nl2br(htmlentities(str_replace(";", "\n", substr($value, strlen($kuerzel)+1))));
				}
			}
			if( !$output ) {
				$ad_code = "000";
				foreach( $ad_daten as $value ) {
					$kuerzel = strtok($value, ";");
					if( $ad_code == $kuerzel ) {
						$output = nl2br(htmlentities(str_replace(";", "\n", substr($value, strlen($kuerzel)+1))));
					}
				}
			}
			
			return $output;
		}
		else {
			return 'Datei existiert nicht!<br>'.$cfgClient[$client]['upl']['frontendpath'].'newsletter/verkaeufer.txt';
		}
	}
}


function recipients_company_wantedVariables() {
	return array(	'company_ad_code', 'company_ad_signatur', 'company_anrede', 'company_vorname', 'company_anrede_code', 'company_paperhead' );
}

function recipients_company_store( $variables ) {
	global $recipient;
	global $oRecipient;
	if( is_object( $recipient ) ) { // Edit
		$recipient->setProperty('company_ad_code', 			"recipient", $variables['company_ad_code']);
		$recipient->setProperty('company_anrede', 			"recipient", $variables['company_anrede']);
		$recipient->setProperty('company_vorname', 			"recipient", $variables['company_vorname']);
		$recipient->setProperty('company_anrede_code', 	"recipient", $variables['company_anrede_code']);
	}
	elseif( is_object( $oRecipient ) ) { // Data-Import
	
		$klasse_1 = array('w-offiz','m-offiz');
		$klasse_4 = array('m-du', 'w-du');
		
		
		if(     'w' == strtolower(substr($variables['company_anrede'],0,1 )) )
			$variables['company_anrede'] = 'Frau';
		elseif( 'm' == strtolower(substr($variables['company_anrede'],0,1 )) )
			$variables['company_anrede'] = 'Herr';
		else
			$variables['company_anrede'] = '';
		
		
		
		$oRecipient->setProperty('company_ad_code', 		"recipient", $variables['company_ad_code']);
		$oRecipient->setProperty('company_anrede', 			"recipient", $variables['company_anrede']);
		$oRecipient->setProperty('company_vorname', 		"recipient", $variables['company_vorname']);
		
		if( in_array( $variables['company_anrede_code'], $klasse_1 ) AND !$variables['company_anrede_code'] )
			$oRecipient->setProperty('company_anrede_code', "recipient", "1");
		elseif( in_array( $variables['company_anrede_code'], $klasse_4 ) AND !$variables['company_anrede_code'] )
			$oRecipient->setProperty('company_anrede_code', "recipient", "4");
		elseif(  !$variables['company_anrede_code'] )
			$oRecipient->setProperty('company_anrede_code', "recipient", "7");
		else
			$oRecipient->setProperty('company_anrede_code', "recipient", $variables['company_anrede_code'] );
	}
	
	return true;
}
function recipients_company_getTitle() {
	return i18n("Companydata", "frontendusers_company");	
}

function recipients_company_display() {
	global $recipient;
	
	$data['company_ad_code'] 			= $recipient->getProperty("company_ad_code", "recipient");
	$data['company_anrede'] 			= $recipient->getProperty("company_anrede", "recipient");
	$data['company_vorname'] 			= $recipient->getProperty("company_vorname", "recipient");
	$data['company_anrede_code'] 	= $recipient->getProperty("company_anrede_code", "recipient");
	if( !$data['company_anrede_code'] ) $data['company_anrede_code'] = 7;
	
	$company_ad_code 				= new cHTMLTextbox("company_ad_code", $data['company_ad_code'],13);
	$company_vorname 				= new cHTMLTextbox("company_vorname", $data['company_vorname'], 40);
	
	$output = '<table width="100%" border="0" cellspacing="0" cellpadding="0">';
    $output.= '<tr>';
    $output.= '<td>'.(i18n("company_anrede", "recipients_company")).'<br>';
				$output.= '<select name="company_anrede" style="width: 100%;">';
				$output.= '	<option value="Herr"'.($data['company_anrede'] == 'Herr' ? ' selected="selected"' : '').'>Herr</option>';
				$output.= '	<option value="Frau"'.($data['company_anrede'] == 'Frau' ? ' selected="selected"' : '').'>Frau</option>';
				$output.= '	<option value="" '.($data['company_anrede'] == '' ? ' selected="selected"' : '').'>- keine -</option>';
				$output.= '</select>';
		$output.= '</td>';
    $output.= '<td>'.(i18n("company_anrede_code", "recipients_company")).'<br>';
				$output.= '<select name="company_anrede_code" style="width: 100%; text-align: center;">';
				$output.= '	<option value="1"'.($data['company_anrede_code'] == 1 ? ' selected="selected"' : '').'>1</option>';
				$output.= '	<option value="4"'.($data['company_anrede_code'] == 4 ? ' selected="selected"' : '').'>4</option>';
				$output.= '	<option value="7"'.($data['company_anrede_code'] == 7 ? ' selected="selected"' : '').'>7</option>';
				$output.= '</select>';
		$output.= '</td>';
    $output.= '<td>'.(i18n("company_ad_code", "recipients_company")).'<br>'.($company_ad_code->render()).'</td>';
    $output.= '</tr>';
		
    $output.= '<tr><td colspan="3">'.(i18n("company_vorname", "recipients_company")).'<br>'.($company_vorname->render()).'</td></tr>';

    $output.= '<tr><td colspan="3"><hr></td></tr>';
    $output.= '<tr><td colspan="3"><b>'.(i18n("company_paperhead", "recipients_company")).'</b></td></tr>';
		$output.= '<tr><td colspan="3">'.(recipients_company_getHTMLValue( 'company_paperhead' )).'</td></tr>';
    $output.= '<tr><td colspan="3"><b>'.(htmlentities(i18n("company_ad_sig", "recipients_company") )).'</b></td></tr>';
		$output.= '<tr><td colspan="3">'.(recipients_company_getHTMLValue( 'company_ad_signatur' )).'</td></tr>';
	$output.= '</table>';
	
	return $output;
}

?>
Zuletzt geändert von OliverL am Mo 17. Mär 2008, 09:41, insgesamt 1-mal geändert.

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

Beitrag von OliverL » Fr 14. Mär 2008, 08:51

Die Variablen "company_paperhead" & "company_ad_signatur" werden für den Newsletter verwendet und werden generiert und nicht eingegeben.

Im _store() ist
$recipient für User-Input
$oRecipient für User-Import
(Leider sind diese Objekte/Variablen nicht identisch)

Ist nen bischen dreckig der Code, aber ich muss
- Daten von einem CRM übernehmen
- will nur: exportieren -> hochladen -> fertig!
- Daten prüfen und eintragen soll der User-Importer
- befütterung des Importers mit ca. 8.000 Datensätzen übernimmt ein Script


mfg Oli

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

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

Also das:
Im _store() ist
$recipient für User-Input
$oRecipient für User-Import
(Leider sind diese Objekte/Variablen nicht identisch)
ist ein Bug. Es muss $recipient heißen (bzw. sollte man das Objekt als Parameter übergeben... -> Contenido-Weiterentwicklung). Kommt.

Du kannst auch in include.recipients_import.php auch nach

Code: Alles auswählen

// Store all base data
						$oRecipient->store();
einfach ein $recipient = $oRecipient setzen (sofern nicht PHP5, sonst $recipient = $oRecipient.clone() oder so).

Das andere werde ich mal austesten.

In recipients_company_getvalue ist ein Bug: Dort wird zweimal company_ad_signatur abgefragt, der zweite Code wird wohl nie aufgerufen werden...

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:32

Moin HerrB,

1. Bug in recipients_company_getvalue ist gefixt. (ist gott sei dank niemandem aufgefallen :) )
2. Beim $recipient und $oRecipient hatte ich mir das schon gedacht.
3. Meiner einer wird auch noch nen bischen testen.

schon mal vorab danke für die Hilfe.

mfg Oli

Gesperrt