Xsettings
Inhaltsverzeichnis
xsettings - Benutzereinstellungen
Das Kommando xsettings dient den Benutzereinstellungen, derzeit sind das die Änderung der Sprache und des Passworts.
Plausibilitätsprüfungen
Die Bedienung ist so, wie man es erwartet. Erwähnung sollten vielleicht noch die Plausibilitätsprüfungen finden, welche die Länge des Passworts und die Übereinstimmung mit der Passwortbestätigung prüfen. Schlagen diese Prüfungen fehl, wird das Ergebnis statt des Trees angezeigt (solange Daten geändert sind, kann im Baum ohnehin nicht navigiert werden). Die fehlgeschlagenen Prüfungen verhindern das Speichern, nicht aber das Verwerfen der Änderung.
Code
xsettings
#rights n=frm r_user=w #frm y=treepage c=$T(xsettings) flt=xsettings_flt w=400 #btn y=save s=#save se=c #btn y=cancel s=#cancel se=cp #btn y=back s=#treeback se=b #btn y=backback s=#treebackback se=b #filter
Das Kommando xsettings ist ziemlich Standard. Die Berechtigungen sind hier für alle User - schließlich sollen die ja hier ihr Passwort ändern können. Buttons für Ex- und Import gibt es nicht - xsettings hat auch keine eigenen Tabellen.
xsettings_flt
#tree_clear #tree_add u=root c=$T(change_passwort) s="#page_fill d=xsettings_page_password" #tree_add u=root c=$T(Set_language) s="#page_fill d=xsettings_page_language"
Der Baum kennt lediglich zwei Seiten.
xsettings_page_language
#page #prim as=Y #cat as=N sz=360 c=$T(Languages) #btns_seg #btns_btn c=$T(Set_language) w=150 cmd=xtranslation_exec(setlang,xsettings_page_language) #grd_seg frc=0 fcc=1 clt=ss n=lang c="$T(selected): $LANGUAGE()" b=H #grd_col f=translate_language_id c1=ID w=30 y=guid ro=Y #grd_col f=name c1="Name" w=200 wst=300 l=40 ro=Y #sql select * from translate_language #grd_data q=sql t=translate_language
Das Kommando ähnelt ziemlich xtranslation_page_languages. Es können hier keine Sprachen hinzugefügt werden. Beim Setzen der Sprache wird auch xtranslation_exec verwendet, deshalb muss der Name der Seite - hier xsettings_page_language - als Parameter übergeben werden.
xsettings_page_password
#page #prim as=Y #cat as=Y c=$T(User) #cmdclear #cmd #page_val i=vl col=1 row=4 z=$HASH($PVAL(vl,1,2),SHA512) #vl_seg cc=2 clt=ss w1=150 w2=300 wst2=300 n=vl c=" " b=H #vl_line c1="ID" f2=user_user_id ro2=Y #vl_line c1="Login" f2=login ro2=Y #vl_line c1=$T(new_password) nd2=Y chg2=1 pw2=Y #vl_line c1=$T(confirm_password) nd2=Y pw2=Y #vl_line c1=$T(password_hash) f2=password ro2=Y #sql select * from user_user where user_user_id = :kid #vl_data q=sql t=user_user kid=$USERID() #page_check c=$T(check_password_length) chk="$BOOL($LEN($PVAL(vl,1,2)) > 5)" #page_check c=$T(check_password_confirmation) chk="$BOOL($PVAL(vl,1,2) = $PVAL(vl,1,3))"
Wenn ein neues Passwort eingegeben wird, dann soll dieses gehasht in der Zeile password geschrieben werden. Das Kommando dafür wird hier mit #cmd als lokales Kommando definiert und trägt die Nummer 1. Mit dem #cmdclear wird sichergestellt, dass es vor der Definition leer ist. Das lokale Kommando holt mit $PVAL() das eingegebene Passwort aus dem VL-Segment, führt die Funktion $HASH() aus und schreibt den Wert mit #page_val zurück in das VL-Segment.
Das lokale Kommando wird in der Zeile für das neue Passwort eingesetzt. Mit dem Parameter chg2=1 wird definiert, dass bei Änderung des Wertes in der zweiten Spalte (die erste trägt die Beschriftung) das lokale Kommando 1 (also das mit #cmd definierte) ausgeführt wird. Die Passwörter selbst werden nicht in der Datenbank gespeichert, von daher ist nd2=Y ("no data") zu setzen. Das Passwort soll auch nicht im Klartext angezeigt werden, also ist pw2=Y zu setzen.
Der Parameter kid des SQL-Statements wird mit der Funktion $USERID() auf die ID des angemeldeten Users gesetzt - dieser soll ja sein - und nur sein - eigenes Passwort ändern.
Die Plausibilitätsprüfungen werden mit der Prozedur #page_check durchgeführt. Die Bedingung im Parameter chk muss Y sein, sonst gilt die Prüfung als fehlgeschlagen und der angegebene Text wird ausgegeben.