Community Addon - Registrierung Usernamen mit Leerstellen

Alles über die Anwendung und Entwicklung von AddOns.

Community Addon - Registrierung Usernamen mit Leerstellen

Beitragvon openmind » 26. Jan 2009, 14:08

Im Community Addon gibt es ein Registrierungsproblem. Es können nur Usernamen erfolgreich aktiviert werden, die keine Leerstelle im Usernamen enthalten.

Grund dafür ist, dass Der Aktivierungslink nicht vollständig verlinkt ist, dh. der Name wird zwar vollständig in der Aktivierungsmail dargestallt, aber nur bis zur Leerstelle verlinkt. Ein "Myname 123" bekäme zwar fälschlicherweise eine Aktivierungs-Erfolgsmeldung könnte sich aber nicht einloggen.

Da müsste für die Linkgenerierung vermutlich irgendwie ein StringReplace "Leerstelle" gegen "+" austauschen rein.

Ich hab schon verschiedenes probiert um das zu lösen, bin aber gescheitert.
Mein Ansatz war den usernamen mit ***Username 123*** anstatt ### zu maskieren und dann gesondert zu replacen (damit das einfügen des "+" nur den Link betrifft). Ist mir aber nicht gelungen, weil meine PHP-Kenntnisse nicht ausreichen, um das in Jan´s E-mail replace-Code im ComAddon zu integrieren.

Kann natürlich auch sein, das das ein XForm-Thema ist, denn der username wird ansich absolut korrekt (also mit Leerstelle) von Jans Code replaced aber eben diese Leerstelle ist dann das Problem im Aktivierungslink, der ja glaube ich in XForm erzeugt wird, oder?

Das Problem dürfte auch das neue Forum hier in der Redaxo-Community betreffen.

Lg, openmind
Benutzeravatar
openmind
 
Beiträge: 134
Registriert: 11. Dez 2006, 11:45

Beitragvon openmind » 26. Jan 2009, 20:49

OK, ich habe das Ding gefixt. Wie vermutet lag es an XForm, da hierüber die Aktivierungsmail verschickt wird.

Um die Registrierungsmail hinsichtlich des Usernamen leerstellenfähig zu machen muss diese Datei im XForm Addon geändert werden.

addons/xform/classes/action/class.xform.action_db2email.inc.php

Ab zeile 34:
Diesen Code:
Code: Alles auswählen
foreach ($this->elements_email as $search => $replace)
         {
            $mail_from = str_replace('###'.$search.'###', $replace, $mail_from);
            $mail_subject = str_replace('###'.$search.'###', $replace, $mail_subject);
            $mail_body = str_replace('###'.$search.'###', $replace, $mail_body);   
         }

durch diesen Code ersetzen
Code: Alles auswählen
         foreach ($this->elements_email as $search => $replace)
         {
            $mail_from = str_replace('###'.$search.'###', $replace, $mail_from);
            $mail_subject = str_replace('###'.$search.'###', $replace, $mail_subject);
            $mail_body = str_replace('###'.$search.'###', $replace, $mail_body);
            //0. CSA FIX:Aktivierungslink Community Leerstellen-fähig machen - Wichtig Register-E-mail Template im link ###login### zu ****login**** ändern
            //1. Wert Username holen aber maskiert lassen
            $mail_body = str_replace('****'.$search.'****', '****'.$replace.'****', $mail_body);
         }
         //2. Den gesamten mailbody in ein dreiteiliges Array umwandeln
         $mail_body_array = explode('****',$mail_body);
         //2. maskierten Wert aus dem Array auslesen und in neue Variable schreiben
         $username_emptyspace = $mail_body_array[1];//Inhalt innerhalb der Maskierung auslesen
         //3. Jetzt die Leerstellen im Username durch + ersetzen
         $username_filledspace = str_replace(" ","+", $username_emptyspace);
         //4. Jetzt den noch maskierten Text im mailbody durch den neuen Usernamen ersetzen
         $mail_body = str_replace('****'.$username_emptyspace.'****', $username_filledspace, $mail_body);


Dann im Register-E-mail-Template im Aktivierungslink ###login### zu ****login**** ändern.

Das wars. Jetzt können sich auch User aktivieren die einen "Username 123 456" verwenden. Auch auf Internet Explorer 6 getestet.


Ich setzte die Lösung auch ins Wiki zum Addon.
Ich hoffe ich bekomme bei den anderen Problemen mehr Hilfe.

Lg, openmind
Benutzeravatar
openmind
 
Beiträge: 134
Registriert: 11. Dez 2006, 11:45

Beitragvon openmind » 26. Jan 2009, 21:13

Kann es doch nicht ins Wiki setzen, finde das Passwort für das Wiki nicht mehr. Wo steht denn das gleich nochmal?
Benutzeravatar
openmind
 
Beiträge: 134
Registriert: 11. Dez 2006, 11:45

Beitragvon Koala » 26. Jan 2009, 21:27

openmind hat geschrieben:Kann es doch nicht ins Wiki setzen, finde das Passwort für das Wiki nicht mehr. Wo steht denn das gleich nochmal?

Auf der Startseite unter "WICHTIG" :)
.
<?php print $Footer; ?>

Sven

Ich würde ja die Welt verändern,
doch der Quellcode ist mir zu absurd!


REX_DOKU :: REX_WIKI :: REX_FAQ :: REX_WIKIPEDIA
Benutzeravatar
Koala
 
Beiträge: 1528
Registriert: 3. Okt 2005, 12:20
Wohnort: Cottbus

Beitragvon openmind » 26. Jan 2009, 23:44

Hab tausend mal geschaut und doch nichts gesehen !

Danke !
Benutzeravatar
openmind
 
Beiträge: 134
Registriert: 11. Dez 2006, 11:45

Beitragvon Jan.Kristinus » 27. Jan 2009, 08:38

gute idee mit dem maskieren. dann koennen wir doch gleich allen maskieren

Code: Alles auswählen
foreach ($this->elements_email as $search => $replace)
         {
            $mail_from = str_replace('###'.$search.'###', $replace, $mail_from);
            $mail_subject = str_replace('###'.$search.'###', $replace, $mail_subject);
            $mail_body = str_replace('###'.$search.'###', $replace, $mail_body);   

            $mail_from = str_replace('***'.$search.'***', urlencode($replace), $mail_from);
            $mail_subject = str_replace('***'.$search.'***', urlencode($replace), $mail_subject);
            $mail_body = str_replace('***'.$search.'***', urlencode($replace), $mail_body);   

         }


müsste auch so gehen, oder ? .. Kann das jemand testen ?
dann nur noch in den mails die felder in der url mit * statt mit # verwenden.

lg

jn
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/
Benutzeravatar
Jan.Kristinus
Admin
 
Beiträge: 1928
Registriert: 24. Aug 2004, 21:11
Wohnort: Frankfurt

Beitragvon Markus.Staab » 27. Jan 2009, 10:32

Hi zusammen,

statt hier nochmals neue Variablen einzuführen könnte man auch einfach im Template

urlencode('###login###....')

schreiben..

Grüße,
Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon openmind » 27. Jan 2009, 12:45

Hi Jan,

müsste auch so gehen, oder ? .. Kann das jemand testen ?


Das würde wohl gehen, würde ich aber nicht machen. Ist dann eh nur kosmetisch, da im Rest ja nichts ersetzt wird.

Der Teil in ****User name**** ist ein Sonderfall, da wenn, dann nur im Link Leerstellen ersetzt werden müssen. Im restlichen Link sind normalerweise keine Leerstellen.

Übrigends: Es kann im $mailbody nur ein Wert gesetzt werden, dessen Leestellen dann mit + versehen werden, da ich im Array nur den zweiten Teil auslese und dessen Leerstelle ersetzte.
Wenn im gesamte Link Leerstellen ersetzt werden sollen, müsste man den kompletten link maskieren müssen. Hab ich aber nicht getestet.

Ich würde es bei 4 Sternen lassen (eher mehr), da es ja schon mal sein kann, dass man in einer Mail Zusatzanmerkungen mit Sternchen versehen muss, und sich das Ding ja auf den gesamten Mailbody bezieht.
Dass jemand 4 Sternchen benutz halte ich für eher unwahrscheinlich.

Lg, openmind
Benutzeravatar
openmind
 
Beiträge: 134
Registriert: 11. Dez 2006, 11:45

Beitragvon Jan.Kristinus » 27. Jan 2009, 13:12

Hallo,

es geht nicht nur um leerstellen. die ganzen werte in der url muessen passend ersetzt werden. z.b. ein "&" geht genausowenig wie "=" etc.. so gesehen wäre das meines erachtens die sauberste lösung. vor allem, weil es ja eine veränderung der in xform ist, und die ja sonstwie verwendet werden kann (muss ja nicht community sein) ..

aber ich denke, dass das problem mit diesen wegen geloest werden kann. wie es jeder macht ist ihm/ihr überlassen :)

lg

jan
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/
Benutzeravatar
Jan.Kristinus
Admin
 
Beiträge: 1928
Registriert: 24. Aug 2004, 21:11
Wohnort: Frankfurt

Beitragvon openmind » 27. Jan 2009, 13:46

Hi Jan,

es geht nicht nur um leerstellen. die ganzen werte in der url muessen passend ersetzt werden. z.b. ein "&" geht genausowenig wie "=" etc.


Hab ich verstanden.
Dann Betrifft es aber nicht Subject und MailFrom.

Diesfalls müsste man den ganzen Link statt nur den Usernamen maskieren und erstmal ein Array für die Replace-Zeichen definieren, die dann im Link ersetzt werden sollen.

' ' -> +
'&' -> '&amp;'
'=' -> Warum denn das '=' ? Bei mir funzt es, allerdings ohne Rewrite.
Was geht noch nicht?



By the way:
Funktioniert bei Dir eigentlich der ###Replace### bei sendemail_newmessage?
Wenn ja, wäre ich Dir für Infos dankbar.


Lg, openmind
Benutzeravatar
openmind
 
Beiträge: 134
Registriert: 11. Dez 2006, 11:45


Zurück zu AddOns [R4]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast