Modul: Change E-Mail/Änderung E-Mail

Gesperrt
laurin

Modul: Change E-Mail/Änderung E-Mail

Beitrag von laurin » Fr 29. Dez 2006, 15:15

Hallo,

habe das Newslettermodul von HerrB im Einsatz, um einen Login zu realisieren. Jetzt würde ich den Nutzern gerne die Möglichkeit geben, Ihre eMailadresse in einem Web-Formular ändern zu können, ohne den Link, den man im Newslettererhält.

Kann mir jemand helfen?

Dankeschöööön.

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

Beitrag von HerrB » Fr 29. Dez 2006, 16:03

Kann mir jemand helfen?
Err, grundsätzlich ja, mir fehlt nur die Zeit.

Ein entsprechendes Modul existiert noch nicht. Es wäre aber relativ leicht möglich, so etwas zu realisieren. Aber vielleicht gelingt es on the fly...

Und schon gibt es eins:
Das Modul ist nur für Contenido V4.6.x ff geeignet. Es ist außerdem "on-the-fly" gecoded, wenn es also nicht auf Anhieb funktioniert - tschuldigung (Bananen-Software). Ich hübsche das Ganze auch nochmal bei Gelegenheit, die CSS-Styles fehlen und die Übersetzung muss man zunächst selbst vornehmen... :wink:

Das Modul muss bei einem Artikel eingesetzt werden, der sich in einer geschützen Kategorie befindet. Alle Frontendnutzer sollten Zugriff auf diese Kategorie haben.

Wichtig: Das Modul funktioniert nur, wenn FrontendUser-Account = E-Mail-Adresse des Nutzers! Das ist bei Verwendung der Newsletter-Module (mit FrontendLink) automatisch der Fall.

Wichtig: Ändert sich die E-Mail-Adresse und damit auch der Frontend-Account, muss danach ein Logout erfolgen - ist vielleicht noch nicht gleich dabei (sonst "fliegt" der Nutzer bei jedem nächsten Klick aus dem geschützten Bereich). Auch wäre es sinnvoll, bei Änderung der E-Mail-Adresse wieder eine Bestätigung via E-Mail zu erfordern - ist noch nicht drin. Dito Template-Unterstützung.

Beschreibung:

Code: Alles auswählen

Change E-Mail 0.9

HerrB, 29.12.2006
Nur Ausgabe:

Code: Alles auswählen

<?php
cInclude("classes", "class.htmlelements.php");
cInclude("classes", "class.newsletter.recipients.php");
cInclude("classes", "class.frontend.users.php");


if ($auth->auth[uid] !== "nobody")
{

   if ($_REQUEST["action"] == "save")
   {
      $sMessage = "";

      if ($_REQUEST["txtMail1"] !== "" || $_REQUEST["txtMail2"] !== "")
      {
         $_REQUEST["txtMail1"] = stripslashes($_REQUEST["txtMail1"]);
         $_REQUEST["txtMail2"] = stripslashes($_REQUEST["txtMail2"]);

         if ($_REQUEST["txtMail1"] == "" || $_REQUEST["txtMail2"] == "") {
            $sMessage = mi18n("If changing the e-mail please specify new e-mail address and retype the new address to avoid typos.");
         } else if ($_REQUEST["txtMail1"] !== $_REQUEST["txtMail2"]) {
            $sMessage = mi18n("The new e-mail address and the retyped address must be equal.");
         } else if ($_REQUEST["txtMail1"] > 100) {
            $sMessage = mi18n("Please specify a new e-mail with 100 characters max.");
         } else if (!isValidMail($_REQUEST["txtMail1"]) || strpos($_REQUEST["txtMail1"], ";") >= 0 || strpos($_REQUEST["txtMail1"], ",") >= 0) {
            $sMessage = mi18n("Please specify a valid e-mail address.");
         }
      
         if ($sMessage == "") {
            $oFrontendUser = new FrontendUser;
            $oFrontendUser->loadByPrimaryKey($auth->auth[uid]);

            $sOldMail = $oFrontendUser->get("username"); // $auth->auth[uname] would be the same, I know...

            $oFrontendUser->set("username", strtolower($_REQUEST["txtMail1"]));
            $oFrontendUser->store();
            unset($oFrontendUser);

            $oRecipients = new RecipientCollection;
            $oRecipients->setWhere("idclient", $client);
            // $oRecipients->setWhere("idlang", $lang); // Only for one language?
            $oRecipients->setWhere("email", $sOldMail);
            $oRecipients->query();

            while ($oRecipient = $oRecipients->next()) {
               $oRecipient->set("email", strtolower($_REQUEST["txtMail1"]));
               $oRecipient->store();
            }

            unset($sOldMail);
            unset($oRecipient);
            unset($oRecipients);

            $sMessage = mi18n("E-Mail has been changed. Please logout and login to use the new settings.");
         } else {
            $sMessage = '<font color="#FF0000">'.$sMessage.'</font>';
         }
      }
   }

   echo '<form name="frmProfile" method="post" action="'.$auth->url().'">'."\n";
   echo '  <table class="special" cellspacing="0"> '."\n";
   echo '    <tr>'."\n";
   echo '      <td class="detail_headline" colspan="2">'.mi18n("Change email:").'</td>'."\n";
   echo '    </tr>'."\n"; 
   if ($sMessage != "") {
      echo '    <tr>'."\n";
      echo '      <td class="detail_text" colspan="2">'.$sMessage.'</td>'."\n";
      echo '    </tr>'."\n";
   }

   $oTxtMail1 = new cHTMLTextbox("txtMail1", $_REQUEST["txtMail1"], 24);
   echo '    <tr>'."\n";
   echo '      <td class="detail_text" style="width: 100px;">'.mi18n("New email:").'</td>'."\n";
   echo '      <td class="detail_text">'.$oTxtMail1->render().'</td>'."\n";
   echo '    </tr>'."\n";

   $oTxtMail2 = new cHTMLTextbox("txtMail2", $_REQUEST["txtMail2"], 24);
   echo '    <tr>'."\n";
   echo '      <td class="detail_text" style="width: 100px;">'.mi18n("Retype email:").'</td>'."\n";
   echo '      <td class="detail_text">'.$oTxtMail2->render().'</td>'."\n";
   echo '    </tr>'."\n";

   $oHidAction = new cHTMLHiddenField ("action", "save");
   $oBtnSubmit = new cHTMLButton ("btnSubmit", mi18n("OK"));
   echo '    <tr>'."\n";
   echo '      <td class="detail_text" style="width: 100px;">&nbsp;</td>'."\n";
   echo '      <td class="detail_text">'.$oHidAction->render().$oBtnSubmit->render().'</td>'."\n";
   echo '    </tr>'."\n";
   echo '  </table>'."\n";
   echo '</form>'."\n";

}

?>
Ungetestet (Backup/Testinstallation!).

Gruß
HerrB
Zuletzt geändert von HerrB am So 31. Dez 2006, 14:47, insgesamt 3-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 29. Dez 2006, 16:05

Habe die Überschrift Deines Beitrags angepasst, damit man es ggf. besser findet.

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

laurin

Beitrag von laurin » Fr 29. Dez 2006, 20:34

Schonmal Danke. Leider leuchtet beim Einfügen die Laterne rot und ich erhalte beim Seitenaufruf einen unauffindbaren Parse Error...

laurin

Beitrag von laurin » Sa 30. Dez 2006, 14:34

SO, jetzt habe ich die Syntaxfehler endlich gefunden, hier mal der berichtige Code (HerrB, füg ihn doch ganz oben ein)

[Edit HerrB: Done]

Es waren zwei ";" und eine ")" zu viel ;)

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

Beitrag von HerrB » So 31. Dez 2006, 14:44

Es waren zwei ";" und eine ")" zu viel
Unglaublich... :wink:

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

mreif
Beiträge: 192
Registriert: Mi 12. Okt 2005, 16:32
Wohnort: Weiterstadt
Kontaktdaten:

Beitrag von mreif » Mo 8. Jan 2007, 12:56

Hallo HerrB,

ich habe das Modul soeben bei unserer Vereinswebseite eingebunden.

Es zeigt zwar keine rote Lampe, aber die neue Mailadresse wird irgendwie nicht angenommen.

Trotz gleicher Angabe der neuen Mailadresse erscheint die deutsche Übersetzung ->
Bitte geben Sie eine gültige E-Mail Adresse ein.
} else if (!isValidMail($_REQUEST["txtMail1"]) || strpos($_REQUEST["txtMail1"], ";") >= 0 || strpos($_REQUEST["txtMail1"], ",") >= 0) {
$sMessage = mi18n("Please specify a valid e-mail address.");
Lösungsvorschläge / Ideen?
Merci vorab.
/mr
Version 4.6.15 - ältere Versionen kommen nicht auf die Kiste

mreif
Beiträge: 192
Registriert: Mi 12. Okt 2005, 16:32
Wohnort: Weiterstadt
Kontaktdaten:

Beitrag von mreif » Mi 10. Jan 2007, 21:54

Hallo Herr B,

ich habe den original Code von oben genommen.
Leider wird die neu eingetragene Mailadresse (sie existiert noch nicht in der Datenbank) nicht übernommen.

Bleibt immer hängen bei: Please specify a valid e-mail address.

@Laurin: läuft das Modul bei Dir problemlos durch ?

Danke für die Rückmeldung / Unterstützung.
/m
Version 4.6.15 - ältere Versionen kommen nicht auf die Kiste

laurin

Beitrag von laurin » So 14. Jan 2007, 12:53

Ich habe es nicht mehr im Einsatz, da es noch nicht vollkommen ist, wie auch HerrB sagt: Man müsste die eMailadresse per Bestätigungsmail überprüfen usw.

Soweit ich mich erinnern kann, hat es aber funktioniert.

Sorry für diese ungefähren Angaben...

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

Beitrag von HerrB » So 14. Jan 2007, 20:43

Nehmt doch testweise mal Teile der Überprüfung raus, z.B. auf Komma oder Semikolon. Wenn selbst isValidMail ein false ausgibt, könnte es u.U. an der Funktion liegen, da bräuchte ich mal eine Beispiel-E-Mail-Adresse (aber bitte zunächst das andere testen).

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

mreif
Beiträge: 192
Registriert: Mi 12. Okt 2005, 16:32
Wohnort: Weiterstadt
Kontaktdaten:

Beitrag von mreif » Di 16. Jan 2007, 08:25

Hallo Herr B,
hallo laurin,

bei mir stand - mitten im Code - von der besagten Zeile
{ #}

Keine Ahnung wie das da mit copy & paste da rein gekmmen sein soll. :oops:
Das war wohl das Problem.
Jetzt funktioniert es :D
/mr
Version 4.6.15 - ältere Versionen kommen nicht auf die Kiste

Gesperrt