So, hab zwar auch eine Mail an den Entwickler dieser Extension verfasst, aber trotzdem mal die extension mit meinen wenigen php Kenntnissen angepasst. Die Datei "class.tx_newloginbox_pi1.php" muss angepasst werden. Zu finden unter "httpdocs/typo3conf/ext/newloginbox/pi1/"
PHP-Code:
if ($workingData['forgot_email'] && t3lib_div::validEmail($workingData['forgot_email'] ) ) {
$templateMarker = '###TEMPLATE_FORGOT_SENT###';
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
'username, password',
'fe_users',
sprintf('email=\'%s\' and pid=\'%d\' %s',
addslashes($workingData['forgot_email'] ),
intval($spid['_STORAGE_PID'] ),
$this->cObj->enableFields('fe_users') ) );
if ($GLOBALS['TYPO3_DB']->sql_num_rows($res ) ) {
// E-Mail found, resultset not empty
$row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res );
$msg = sprintf($this->pi_getLL('forgot_password_pswmsg', '', 0),
$workingData['forgot_email'], $row['username'], $row['password']);
//BoInsert
$this->cObj->sendNotifyEmail($msg, $workingData['forgot_email'], '', $this->conf['email_from'], $this->conf['email_fromName'], $this->conf['replyTo']);//Only if E-Mail found
//Status message
$markerArray['###STATUS_MESSAGE###'] = sprintf($this->pi_getLL('forgot_password_emailSent', '', 1),
'<em>' . htmlspecialchars($workingData['forgot_email']) . '</em>');
$markerArray['###FORGOT_PASSWORD_BACKTOLOGIN###'] = $this->pi_linkTP_keepPIvars($this->pi_getLL('forgot_password_backToLogin', '', 1), array('forgot' => ''));
//EoInsert
} else {
// E-Mail not found, resultset empty
$msg = sprintf($this->pi_getLL('forgot_password_no_pswmsg', '', 0),
$workingData['forgot_email']);
//BoInsert
$markerArray['###STATUS_MESSAGE###'] = sprintf($this->pi_getLL('forgot_password_noEmail', '', 1),"forgot_password_noEmail"
'<em>' . htmlspecialchars($workingData['forgot_email']) . '</em>');//<- adapt locallang.xml with an additional tag
$markerArray['###FORGOT_PASSWORD_BACKTOLOGIN###'] = $this->pi_linkTP_keepPIvars($this->pi_getLL('forgot_password_backToLogin', '', 1), array('forgot' => ''));
//EoInsert
}
// Hook (used by kb_md5fepw extension by Kraft Bernhard <kraftb@gmx.net>)
if (is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['newloginbox']['forgotEmail'])) {
$_params = array (
'msg' => &$msg,
);
foreach($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['newloginbox']['forgotEmail'] as $funcRef) {
t3lib_div::callUserFunction($funcRef, $_params, $this);
}
}
//$this->cObj->sendNotifyEmail($msg, $workingData['forgot_email'], '', $this->conf['email_from'], $this->conf['email_fromName'], $this->conf['replyTo']);
//$markerArray['###STATUS_MESSAGE###'] = sprintf($this->pi_getLL('forgot_password_emailSent', '', 1),
// '<em>' . htmlspecialchars($workingData['forgot_email']) . '</em>');
//$markerArray['###FORGOT_PASSWORD_BACKTOLOGIN###'] = $this->pi_linkTP_keepPIvars($this->pi_getLL('forgot_password_backToLogin', '', 1), array('forgot' => ''));
}
Ich hoffe meine Kommentare sind schon selbsterklärend, aber ich versuche die funktionsweise etwas näher zu bringen.
Die Variable $res erhält durch die Select Abfrage eine Liste mit Userdaten, wenn die E-Mail Adresse gefunden wird. Wenn keine passende Adresse gefunden wird ist das Resultset leer.
Hier wird nun geprüft ob das Resultset Daten enthält. Wenn ja werden die Anweisungen in der Abfrage ausgeführt.
PHP-Code:
if ($GLOBALS['TYPO3_DB']->sql_num_rows($res ) )
In diesem Fall wird die E-Mail gesendet und die Status Message ausgegeben.
Im Else-Zweig wird dann keine E-Mail gesendet, jedoch möchte man eine Fehlermeldung erhalten. Um das Konzept der Sprachdatei beizubehalten habe ich ein neues Tag in der "locallang.xml" unter den jeweiligen Sprachen eingefügt, die verwendet werden sollen. Der Ausschnitt der Funktion zeigt den Aufruf für die "locallang.xml".
PHP-Code:
$markerArray['###STATUS_MESSAGE###'] = sprintf($this->pi_getLL('forgot_password_noEmail', '', 1),
'<em>' . htmlspecialchars($workingData['forgot_email']) . '</em>');
Der übergebene Parameter 'forgot_password_noEmail' ist mein neuer XML Tag, der in der locallang hinzugefügt werden muss.
Folgender Ausschnitt zeigt einen Teil des Deutschen Keys
Code:
<label index="forgot_password_noEmail">Ihre E-Mail wurde nicht gefunden</label>
<label index="forgot_password_emailSent">Ihr Passwort wurde nun zur Email Adresse %s gesendet</label>
<label index="forgot_password_backToLogin">Zurück zum Anmeldeformular</label> Die Kommentare sollten natürlich wieder entfernt werden. Hoffe die kurze Beschreibung war hilfreich.