Dsao_Model_User_Profile Klassenreferenz

Klasse verarbeitet Eingaben des Benutzers in seinem Profil. Mehr ...

Klassendiagramm für Dsao_Model_User_Profile:

Dsao_Model_Abstract

Aufstellung aller Elemente

Öffentliche Methoden

 editProfile (Zend_Controller_Request_Http $request, Dsao_User $user)
 Bearbeitung des Profils.

Geschützte Methoden

 _editEmailAddress ()
 Ändern der E-Mail-Adresse.
 _editPassword ()
 Ändern des Passworts.
 _editUserData ()
 Ändern der Benutzerdaten.

Geschützte Attribute

 $_request = null
 Zend_Controller_Request_Http, Objekt mit Formulardaten.
 $_user = null
 Dsao_User, Benutzer, dessen Daten geändert werden sollen.


Ausführliche Beschreibung

Klasse verarbeitet Eingaben des Benutzers in seinem Profil.

Autor:
DSAo-Md

http://www.gnu.org/licenses/gpl-3.0.html GNU Public License

Version:
SVN: $Id: Profile.php 512 2009-06-19 08:11:48Z saviola777 $

Definiert in Zeile 9 der Datei Profile.php.


Dokumentation der Elementfunktionen

Dsao_Model_User_Profile::_editEmailAddress (  )  [protected]

Ändern der E-Mail-Adresse.

Prüft, ob neue E-Mail-Adresse gültig ist und setzt sie ggf.

Rückgabe:
bool, ob neue E-Mail-Adresse übernommen werden soll

Definiert in Zeile 28 der Datei Profile.php.

Benutzt Dsao_Model_Abstract::getLog() und Dsao_Registry::getModel().

Wird benutzt von editProfile().

00029   {
00030     // Falls HTTP-Abfrage oder Benutzer nicht initialisiert, abbrechen
00031     if (!$this->_request || !$this->_user)
00032     {
00033       return false;
00034     }
00035 
00036     // Formulardaten initialisieren
00037     $emailAddress             = strtolower(trim
00038       ($this->_request->getPost('emailAddress')));
00039     $emailAddressVerification = strtolower(trim($this->_request->getPost
00040       ('emailAddressVerification')));
00041     $password                 = $this->_request->getPost('password');
00042 
00043     // Validator für die E-Mail-Adresse
00044     $validator = new Zend_Validate_EmailAddress();
00045 
00046     // Falls keine E-Mail-Adresse übergeben, oder neue mit bisheriger
00047     // uebereinstimmt
00048     if (!$emailAddress || $emailAddress == $this->_user->emailAddress)
00049     {
00050       $this->getLog()->err(null, __METHOD__);
00051     }
00052 
00053     // Falls zweite Eingabe nicht mit der ersten uebereinstimmt
00054     else if ($emailAddress != $emailAddressVerification)
00055     {
00056       $this->getLog()->err('user_register_email_error_nonconform', __METHOD__);
00057     }
00058 
00059     // Falls Passwort nicht eingegeben wurde
00060     else if (!$password)
00061     {
00062       $this->getLog()->err
00063         ('user_profile_edit_error_password_missing', __METHOD__);
00064     }
00065 
00066     // Falls Passwort falsch, abbrechen
00067     else if (md5($password) != $this->_user->password)
00068     {
00069       $this->getLog()->err('user_profile_edit_error_password_wrong', __METHOD__);
00070     }
00071 
00072     // Falls E-Mail-Adresse ungueltig, abbrechen
00073     else if (!$validator->isValid($emailAddress))
00074     {
00075       $this->getLog()->err('user_register_email_error_invalid', __METHOD__);
00076     }
00077 
00078     // Einmaligkeit der E-Mail-Adresse pruefen
00079     else if (Dsao_Registry::getModel('User_Register')->isUniqueEmailAddress($emailAddress))
00080     {
00081       $this->getLog()->err('user_register_email_error_not_unique', __METHOD__);
00082     }
00083 
00084     // Falls Fehler aufgetreten sind
00085     if ($this->getLog()->hasError(__METHOD__))
00086     {
00087       return false;
00088     }
00089 
00090     // Keine Fehler aufgetreten, also E-Mail-Adresse ändern
00091     $this->_user->emailAddress = $emailAddress;
00092 
00093     return true;
00094   }

Dsao_Model_User_Profile::_editPassword (  )  [protected]

Ändern des Passworts.

Die Methode prueft, ob der Benutzer sowohl das alte, als auch das neue (zwei mal) Passwort korrekt eingegeben hat und aendert es ggf.

Rückgabe:
bool, ob Passwort geändert wurde

Definiert in Zeile 104 der Datei Profile.php.

Benutzt Dsao_Hash::fromText() und Dsao_Model_Abstract::getLog().

Wird benutzt von editProfile().

00105   {
00106     // Falls HTTP-Abfrage oder Benutzer nicht initialisiert, abbrechen
00107     if (!$this->_request || !$this->_user)
00108     {
00109       return false;
00110     }
00111 
00112     // Formulardaten initialisieren
00113     $password                 = $this->_request->getPost('password');
00114     $passwordNew              = $this->_request->getPost('passwordNew');
00115     $passwordNewVerification  = $this->_request->getPost
00116       ('passwordNewVerification');
00117 
00118     // Validator für das Passwort instanziieren
00119     $validator = new Dsao_Validate_Password();
00120 
00121     // Falls neues Passwort nicht uebergeben wurde oder mit bisherigem
00122     // übereinstimmt, abbrechen
00123     if (!$passwordNew || md5($passwordNew) == $this->_user->password)
00124     {
00125       $this->getLog()->err(null, __METHOD__);
00126     }
00127 
00128     // Falls zweite Eingabe nicht mit erster uebereinstimmt, abbrechen
00129     else if ($passwordNew != $passwordNewVerification)
00130     {
00131       $this->getLog()->err
00132         ('user_register_password_error_nonconform', __METHOD__);
00133     }
00134 
00135     // Falls Passwort nicht eingegeben, abbrechen
00136     else if (!$password)
00137     {
00138       $this->getLog()->err
00139         ('user_profile_edit_error_password_missing', __METHOD__);
00140     }
00141 
00142     // Falls Passwort falsch, abbrechen
00143     else if (md5($password) != $this->_user->password)
00144     {
00145       $this->getLog()->err('user_profile_edit_error_password_wrong', __METHOD__);
00146     }
00147 
00148     // Falls neues Passwort ungueltig, abbrechen
00149     else if (!$validator->isValid($passwordNew))
00150     {
00151       $this->getLog()->err('user_register_password_error_invalid', __METHOD__);
00152     }
00153 
00154     // Falls Fehler aufgetreten sind, abbrechen
00155     if ($this->getLog()->hasError(__METHOD__))
00156     {
00157       return false;
00158     }
00159 
00160     // Keine Fehler aufgetreten, also Passwort aendern
00161     $this->_user->password = Dsao_Hash_Password::fromText($passwordNew)
00162       ->getHash();
00163 
00164     return true;
00165   }

Dsao_Model_User_Profile::_editUserData (  )  [protected]

Ändern der Benutzerdaten.

Prueft, ob Benutzerdaten geaendert wurden und, falls gueltige Werte uebergeben wurden, schreibt diese in das Benutzerobjekt.

Die Methode geht gruppierte Elemente (numerisch, alphanumerisch usw.) durch und filtert / prueft sie auf Gueltigkeit, bevor sie ggf. in das Benutzerobjekt geschrieben werden.

Rückgabe:
array, Array mit geaenderten Benutzerdaten oder leeres Array

Definiert in Zeile 179 der Datei Profile.php.

Benutzt Dsao_Model_Abstract::underscore().

Wird benutzt von editProfile().

00180   {
00181     // array, Geaenderte Benutzerdaten
00182     $changedCols = array();
00183 
00184     // array, Spalten, in denen Fehler aufgetreten sind
00185     $invalidCols = array();
00186 
00187     // array, Enthaelt alle Arrays fuer die Benutzerdaten
00188     $userDataFilters = array();
00189 
00190     // Zend_Filter_Input, Filter fuer alphanumerische Daten
00191     $userDataFilters['alphanumeric'] = new Dsao_Filter_Input
00192     (
00193       array // Filter
00194       (
00195         '*' => 'StringTrim',
00196       ),
00197       null, // Validatoren
00198       array // Daten
00199       (
00200         'contactAim'       => $this->_request->getPost('contactAim'),
00201         'contactSkype'     => $this->_request->getPost('contactSkype'),
00202         'layout'           => $this->_request->getPost('layout'),
00203         'personalBirthday' => $this->_request->getPost('personalBirthday'),
00204         'personalCity'     => $this->_request->getPost('personalCity'),
00205         'personalCountry'  => $this->_request->getPost('personalCountry'),
00206         'personalForename' => $this->_request->getPost('personalForename'),
00207         'personalStreet'   => $this->_request->getPost('personalStreet'),
00208         'personalSurname'  => $this->_request->getPost('personalSurname'),
00209       )
00210     );
00211 
00212     // Zend_Filter_Input, Filter fuer Benutzerdaten in E-Mail-Adressen-Form
00213     // (MSN, Jabber)
00214     $userDataFilters['emailAddresses'] = new Dsao_Filter_Input
00215     (
00216       array // Filter
00217       (
00218         '*' => 'StringTrim',
00219       ),
00220       array // Validatoren
00221       (
00222         '*' => array
00223         (
00224           'EmailAddress',
00225           'allowEmpty' => true,
00226         ),
00227       ),
00228       array // Daten
00229       (
00230         'contactJabber'  => $this->_request->getPost('contactJabber'),
00231         'contactMsn'     => $this->_request->getPost('contactMsn'),
00232       )
00233     );
00234 
00235     // Zend_Filter_Input, Filter fuer Benutzereinstellungen, die nur an oder
00236     // aus sein koennen
00237     $userDataFilters['flags'] = new Dsao_Filter_Input
00238     (
00239       array // Filter
00240       (
00241         '*' => 'Int',
00242       ),
00243       null, // Validatoren
00244       array // Daten
00245       (
00246         'javascriptLoadFiles'          => $this->_request->getPost
00247           ('javascriptLoadFiles'),
00248         'profileShowContactData'      => $this->_request->getPost
00249           ('showContactData'),
00250         'profileShowEmailAddress'     => $this->_request->getPost
00251           ('showEmailAddress'),
00252         'profileShowPersonalData'     => $this->_request->getPost
00253           ('showPersonalData'),
00254         'scrollMailNotification'      => $this->_request->getPost
00255           ('scrollMailNotification'),
00256       )
00257     );
00258 
00259     // Zend_Filter_Input, Filter fuer numerische Benutzerdaten
00260     $userDataFilters['numeric'] = new Dsao_Filter_Input
00261     (
00262       array // Filter
00263       (
00264         '*' => 'StringTrim',
00265       ),
00266       array // Validatoren
00267       (
00268         '*' => array
00269         (
00270           'Digits',
00271           'allowEmpty' => true,
00272         ),
00273       ),
00274       array // Daten
00275       (
00276         'contactIcq'       => $this->_request->getPost('contactIcq'),
00277         'personalPostcode' => $this->_request->getPost('personalPostcode'),
00278       )
00279     );
00280 
00281     // Arrays mit Filtern durchgehen
00282     foreach ($userDataFilters as $userDataFilter)
00283     {
00284       // Falls ungueltige Felder vorhanden
00285       if ($userDataFilter->hasInvalid())
00286       {
00287         // Ungueltige Felder durchlaufen und Fehlermeldungen ausgeben
00288         foreach ($userDataFilter->getUnknown() as $col => $formValue)
00289         {
00290           $invalidCols[] = self::underscore($col);
00291         }
00292       }
00293 
00294       // Benutzerdaten durchgehen
00295       foreach ($userDataFilter->getEscaped() as $col => $formValue)
00296       {
00297         // Falls Wert altem entspricht, zum Naechsten springen
00298         if ($formValue == $this->_user->$col)
00299         {
00300           continue;
00301         }
00302 
00303         // Ansonsten Wert in Benutzerobjekt schreiben
00304         $this->_user->$col = $formValue;
00305 
00306         // Aktuelle Spalte zu geaenderten Benutzerdaten hinzufuegen
00307         $changedCols[] = $col;
00308       }
00309     }
00310 
00311     return array(
00312       'changedCols' => $changedCols,
00313       'invalidCols' => $invalidCols);
00314   }

Dsao_Model_User_Profile::editProfile ( Zend_Controller_Request_Http $  request,
Dsao_User user 
)

Bearbeitung des Profils.

Nimmt eine HTTP-Anfrage und ein Benutzerobjekt entgegen und prüft dann, ob der Benutzer gültige Angaben zur Änderung seines Profils gemacht hat und gibt ggf. einen Array der geänderten Spalten zurück.

Parameter:
$request Zend_Controller_Request_Http, HTTP-Anfrage des Benutzers
$user Dsao_User, Benutzerobjekt
Rückgabe:
array, Geänderte Spalten

Definiert in Zeile 327 der Datei Profile.php.

Benutzt _editEmailAddress(), _editPassword(), _editUserData() und Dsao_DataHandler_Abstract::setReadOnly().

00328   {
00329     // Klassenvariablen setzen
00330     $this->_request = $request;
00331     $this->_user = $user->setReadOnly(false);
00332 
00333     // array, Geänderte / Fehlerhafte Spalten
00334     $cols = $this->_editUserData();
00335 
00336     // Falls E-Mail-Adresse geändert werden soll
00337     if ($this->_editEmailAddress())
00338     {
00339       $cols['changedCols'][] = 'emailAddress';
00340     }
00341 
00342     // Falls Passwort geändert werden soll
00343     if ($this->_editPassword())
00344     {
00345       $cols['changedCols'][] = 'password';
00346     }
00347 
00348     // Falls Benutzerdaten veraendert wurden
00349     if ($cols['changedCols'])
00350     {
00351       // Benutzerdaten in Datenbank aktualisieren
00352       $this->_user->update($cols['changedCols'])->setReserialize(true);
00353     }
00354 
00355     // Gültigkeit setzen und wieder als schreibgeschützt markieren
00356     $this->_user->setValid()->setReadOnly();
00357 
00358     // Klassenvariablen wieder zurücksetzen
00359     $this->_request = null;
00360     $this->_user = null;
00361 
00362     return $cols;
00363   }


Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Datei:

Erzeugt am Fri Sep 18 19:04:12 2009 für DSA online - Morgendaemmerung von  doxygen 1.5.7.1