Backend\Modules\Profiles\Engine\Model::getUrl PHP Method

getUrl() public static method

Retrieve a unique URL for a profile based on the display name.
public static getUrl ( string $displayName, integer $id = null ) : string
$displayName string The display name to base on.
$id integer The id of the profile to ignore.
return string
    public static function getUrl($displayName, $id = null)
    {
        // decode specialchars
        $displayName = \SpoonFilter::htmlspecialcharsDecode((string) $displayName);
        // urlise
        $url = CommonUri::getUrl($displayName);
        // get db
        $db = BackendModel::getContainer()->get('database');
        // new item
        if ($id === null) {
            // get number of profiles with this URL
            $number = (int) $db->getVar('SELECT 1
                 FROM profiles AS p
                 WHERE p.url = ?
                 LIMIT 1', (string) $url);
            // already exists
            if ($number != 0) {
                // add number
                $url = BackendModel::addNumber($url);
                // try again
                return self::getUrl($url);
            }
        } else {
            // get number of profiles with this URL
            $number = (int) $db->getVar('SELECT 1
                 FROM profiles AS p
                 WHERE p.url = ? AND p.id != ?
                 LIMIT 1', array((string) $url, (int) $id));
            // already exists
            if ($number != 0) {
                // add number
                $url = BackendModel::addNumber($url);
                // try again
                return self::getUrl($url, $id);
            }
        }
        // cough up new url
        return $url;
    }

Usage Example

Esempio n. 1
0
 /**
  * Validate the form
  */
 private function validateForm()
 {
     // is the form submitted?
     if ($this->frm->isSubmitted()) {
         // cleanup the submitted fields, ignore fields that were added by hackers
         $this->frm->cleanupFields();
         // get fields
         $txtEmail = $this->frm->getField('email');
         $txtDisplayName = $this->frm->getField('display_name');
         $txtPassword = $this->frm->getField('password');
         $txtFirstName = $this->frm->getField('first_name');
         $txtLastName = $this->frm->getField('last_name');
         $txtCity = $this->frm->getField('city');
         $ddmGender = $this->frm->getField('gender');
         $ddmDay = $this->frm->getField('day');
         $ddmMonth = $this->frm->getField('month');
         $ddmYear = $this->frm->getField('year');
         $ddmCountry = $this->frm->getField('country');
         // email filled in?
         if ($txtEmail->isFilled(BL::getError('EmailIsRequired'))) {
             // valid email?
             if ($txtEmail->isEmail(BL::getError('EmailIsInvalid'))) {
                 // email already exists?
                 if (BackendProfilesModel::existsByEmail($txtEmail->getValue(), $this->id)) {
                     // set error
                     $txtEmail->addError(BL::getError('EmailExists'));
                 }
             }
         }
         // display name filled in?
         if ($txtDisplayName->isFilled(BL::getError('DisplayNameIsRequired'))) {
             // display name already exists?
             if (BackendProfilesModel::existsDisplayName($txtDisplayName->getValue(), $this->id)) {
                 // set error
                 $txtDisplayName->addError(BL::getError('DisplayNameExists'));
             }
         }
         // one of the bday fields are filled in
         if ($ddmDay->isFilled() || $ddmMonth->isFilled() || $ddmYear->isFilled()) {
             // valid date?
             if (!checkdate($ddmMonth->getValue(), $ddmDay->getValue(), $ddmYear->getValue())) {
                 // set error
                 $ddmYear->addError(BL::getError('DateIsInvalid'));
             }
         }
         // no errors?
         if ($this->frm->isCorrect()) {
             // build item
             $values['email'] = $txtEmail->getValue();
             // only update if display name changed
             if ($txtDisplayName->getValue() != $this->profile['display_name']) {
                 $values['display_name'] = $txtDisplayName->getValue();
                 $values['url'] = BackendProfilesModel::getUrl($txtDisplayName->getValue(), $this->id);
             }
             // new password filled in?
             if ($txtPassword->isFilled()) {
                 // get new salt
                 $salt = BackendProfilesModel::getRandomString();
                 // update salt
                 BackendProfilesModel::setSetting($this->id, 'salt', $salt);
                 // build password
                 $values['password'] = BackendProfilesModel::getEncryptedString($txtPassword->getValue(), $salt);
             }
             // update values
             BackendProfilesModel::update($this->id, $values);
             // birthday is filled in
             if ($ddmYear->isFilled()) {
                 // mysql format
                 $birthDate = $ddmYear->getValue() . '-';
                 $birthDate .= str_pad($ddmMonth->getValue(), 2, '0', STR_PAD_LEFT) . '-';
                 $birthDate .= str_pad($ddmDay->getValue(), 2, '0', STR_PAD_LEFT);
             } else {
                 $birthDate = null;
             }
             // update settings
             BackendProfilesModel::setSetting($this->id, 'first_name', $txtFirstName->getValue());
             BackendProfilesModel::setSetting($this->id, 'last_name', $txtLastName->getValue());
             BackendProfilesModel::setSetting($this->id, 'gender', $ddmGender->getValue());
             BackendProfilesModel::setSetting($this->id, 'birth_date', $birthDate);
             BackendProfilesModel::setSetting($this->id, 'city', $txtCity->getValue());
             BackendProfilesModel::setSetting($this->id, 'country', $ddmCountry->getValue());
             // trigger event
             BackendModel::triggerEvent($this->getModule(), 'after_edit', array('item' => $values));
             // everything is saved, so redirect to the overview
             $this->redirect(BackendModel::createURLForAction('Index') . '&report=saved&var=' . urlencode($values['email']) . '&highlight=row-' . $this->id);
         }
     }
 }
All Usage Examples Of Backend\Modules\Profiles\Engine\Model::getUrl