Contao\MemberModel::findActiveByEmailAndUsername PHP Method

findActiveByEmailAndUsername() public static method

Find an active member by their e-mail-address and username
public static findActiveByEmailAndUsername ( string $strEmail, string $strUsername = null, array $arrOptions = [] ) : MemberModel | null
$strEmail string The e-mail address
$strUsername string The username
$arrOptions array An optional options array
return MemberModel | null The model or null if there is no member
    public static function findActiveByEmailAndUsername($strEmail, $strUsername = null, array $arrOptions = array())
    {
        $t = static::$strTable;
        $time = \Date::floorToMinute();
        $arrColumns = array("{$t}.email=? AND {$t}.login='1' AND ({$t}.start='' OR {$t}.start<='{$time}') AND ({$t}.stop='' OR {$t}.stop>'" . ($time + 60) . "') AND {$t}.disable=''");
        if ($strUsername !== null) {
            $arrColumns[] = "{$t}.username=?";
        }
        return static::findOneBy($arrColumns, array($strEmail, $strUsername), $arrOptions);
    }

Usage Example

 /**
  * Generate the module
  */
 protected function compile()
 {
     /** @var PageModel $objPage */
     global $objPage;
     $GLOBALS['TL_LANGUAGE'] = $objPage->language;
     \System::loadLanguageFile('tl_member');
     $this->loadDataContainer('tl_member');
     // Set new password
     if (strlen(\Input::get('token'))) {
         $this->setNewPassword();
         return;
     }
     // Username widget
     if (!$this->reg_skipName) {
         $arrFields['username'] = $GLOBALS['TL_DCA']['tl_member']['fields']['username'];
         $arrFields['username']['name'] = 'username';
     }
     // E-mail widget
     $arrFields['email'] = $GLOBALS['TL_DCA']['tl_member']['fields']['email'];
     $arrFields['email']['name'] = 'email';
     // Captcha widget
     if (!$this->disableCaptcha) {
         $arrFields['captcha'] = array('name' => 'lost_password', 'label' => $GLOBALS['TL_LANG']['MSC']['securityQuestion'], 'inputType' => 'captcha', 'eval' => array('mandatory' => true));
     }
     $row = 0;
     $strFields = '';
     $doNotSubmit = false;
     $strFormId = 'tl_lost_password_' . $this->id;
     // Initialize the widgets
     foreach ($arrFields as $arrField) {
         /** @var Widget $strClass */
         $strClass = $GLOBALS['TL_FFL'][$arrField['inputType']];
         // Continue if the class is not defined
         if (!class_exists($strClass)) {
             continue;
         }
         $arrField['eval']['required'] = $arrField['eval']['mandatory'];
         /** @var Widget $objWidget */
         $objWidget = new $strClass($strClass::getAttributesFromDca($arrField, $arrField['name']));
         $objWidget->storeValues = true;
         $objWidget->rowClass = 'row_' . $row . ($row == 0 ? ' row_first' : '') . ($row % 2 == 0 ? ' even' : ' odd');
         ++$row;
         // Validate the widget
         if (\Input::post('FORM_SUBMIT') == $strFormId) {
             $objWidget->validate();
             if ($objWidget->hasErrors()) {
                 $doNotSubmit = true;
             }
         }
         $strFields .= $objWidget->parse();
     }
     $this->Template->fields = $strFields;
     $this->Template->hasError = $doNotSubmit;
     // Look for an account and send the password link
     if (\Input::post('FORM_SUBMIT') == $strFormId && !$doNotSubmit) {
         if ($this->reg_skipName) {
             $objMember = \MemberModel::findActiveByEmailAndUsername(\Input::post('email', true), null);
         } else {
             $objMember = \MemberModel::findActiveByEmailAndUsername(\Input::post('email', true), \Input::post('username'));
         }
         if ($objMember === null) {
             sleep(2);
             // Wait 2 seconds while brute forcing :)
             $this->Template->error = $GLOBALS['TL_LANG']['MSC']['accountNotFound'];
         } else {
             $this->sendPasswordLink($objMember);
         }
     }
     $this->Template->formId = $strFormId;
     $this->Template->username = \StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['username']);
     $this->Template->email = \StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['emailAddress']);
     $this->Template->action = \Environment::get('indexFreeRequest');
     $this->Template->slabel = \StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['requestPassword']);
     $this->Template->rowLast = 'row_' . $row . ' row_last' . ($row % 2 == 0 ? ' even' : ' odd');
 }