/** * @backupGlobals enabled */ public function test_actions() { \Difra\Debugger::disable(); \Difra\Ajaxer::clean(); $actions = []; \Difra\Ajaxer::notify('notification message'); $actions[] = ['action' => 'notify', 'message' => 'notification message', 'lang' => ['close' => \Difra\Locales::get('notifications/close')]]; \Difra\Ajaxer::display('<span>test</span>'); $actions[] = ['action' => 'display', 'html' => '<span>test</span>']; \Difra\Ajaxer::error('error message <span>test</span>'); $actions[] = ['action' => 'error', 'message' => 'error message <span>test</span>', 'lang' => ['close' => \Difra\Locales::get('notifications/close')]]; \Difra\Ajaxer::required('element'); $actions[] = ['action' => 'require', 'name' => 'element']; \Difra\Ajaxer::invalid('inv1'); $actions[] = ['action' => 'invalid', 'name' => 'inv1']; \Difra\Ajaxer::invalid('inv2'); $actions[] = ['action' => 'invalid', 'name' => 'inv2']; \Difra\Ajaxer::status('field1', 'bad value', 'problem'); $actions[] = ['action' => 'status', 'name' => 'field1', 'message' => 'bad value', 'classname' => 'problem']; \Difra\Ajaxer::redirect('/some/page'); $actions[] = ['action' => 'redirect', 'url' => '/some/page']; $_SERVER['HTTP_REFERER'] = '/current/page'; \Difra\Ajaxer::refresh(); $actions[] = ['action' => 'redirect', 'url' => '/current/page']; \Difra\Ajaxer::reload(); $actions[] = ['action' => 'reload']; \Difra\Ajaxer::load('someid', 'some <b>content</b>'); $actions[] = ['action' => 'load', 'target' => 'someid', 'html' => 'some <b>content</b>']; \Difra\Ajaxer::close(); $actions[] = ['action' => 'close']; \Difra\Ajaxer::reset(); $actions[] = ['action' => 'reset']; \Difra\Envi::setUri('/current/page'); \Difra\Ajaxer::confirm('Are you sure?'); $actions[] = ['action' => 'display', 'html' => '<form action="/current/page" class="ajaxer"><input type="hidden" name="confirm" value="1"/>' . '<div>Are you sure?</div>' . '<input type="submit" value="' . \Difra\Locales::get('ajaxer/confirm-yes') . '"/>' . '<input type="button" value="' . \Difra\Locales::get('ajaxer/confirm-no') . '" onclick="ajaxer.close(this)"/>' . '</form>']; $this->assertEquals(\Difra\Ajaxer::getResponse(), json_encode(['actions' => $actions], \Difra\Ajaxer::getJsonFlags())); \Difra\Ajaxer::clean(); $this->assertEquals(\Difra\Ajaxer::getResponse(), '[]'); $this->assertFalse(\Difra\Ajaxer::hasProblem()); \Difra\Ajaxer::reload(); \Difra\Ajaxer::clean(true); $this->assertEquals(\Difra\Ajaxer::getResponse(), '[]'); $this->assertTrue(\Difra\Ajaxer::hasProblem()); }
/** * Recover password (ajax) * @param AjaxString $login Login or e-mail * @param AjaxString $captcha * @throws Exception */ public function indexAjaxAction(AjaxString $login, AjaxString $captcha) { // show recover form if (is_null($login)) { $this->root->appendChild($this->xml->createElement('recover')); Ajaxer::display(View::render($this->xml, 'auth-ajax', true)); return; } $error = false; // login's empty if ($login->val() === '') { Ajaxer::required('login'); $error = true; } if (!$captcha or $captcha->val() == '') { Ajaxer::required('captcha'); $error = true; } /** @var \Difra\Plugins\Capcha $captchaClass */ $captchaClass = \Difra\Plugger::getClass('captcha'); if (!$captchaClass::getInstance()->verifyKey($captcha->val())) { Ajaxer::invalid('captcha'); $error = true; } if ($error) { return; } // recover try { Recover::send($login->val()); Ajaxer::close(); Ajaxer::notify(Locales::get('auth/login/recovered')); } catch (Exception $ex) { Ajaxer::status('email', Locales::get('auth/login/' . $ex->getMessage()), 'problem'); } }
/** * Change password * @param Difra\Param\AjaxString $oldpassword * @param Difra\Param\AjaxString $password1 * @param Difra\Param\AjaxString $password2 */ public function passwordAjaxActionAuth(Param\AjaxString $oldpassword, Param\AjaxString $password1, Param\AjaxString $password2) { $user = User::getCurrent(); if (!$user->verifyPassword($oldpassword)) { Ajaxer::status('oldpassword', Locales::get('auth/password/bad_old'), 'problem'); $ok = false; } else { $ok = true; } $reg = new Register(); $reg->setPassword1($password1->val()); $reg->setPassword2($password2->val()); if (!$reg->validatePasswords()) { if ($ok) { Ajaxer::status('oldpassword', Locales::get('auth/password/old_ok'), 'ok'); } $reg->callAjaxerEvents(); return; } if (!$ok) { return; } $user->setPassword($password1->val()); $this->afterPasswordChangeAjax(); }
/** * Add ajaxer events to highlight wrong or correct fields * @return bool */ public function callAjaxerEvents() { if (!empty($this->successful)) { foreach ($this->successful as $field => $result) { Ajaxer::status($field, Locales::get('auth/register/' . $result), 'ok'); } } if (!empty($this->failures)) { foreach ($this->failures as $field => $result) { switch ($result) { case self::REGISTER_LOGIN_SHORT: $loginMinChars = Users::getLoginMinChars(); Ajaxer::status($field, Locales::get('auth/register/login_short/part1') . $loginMinChars . Wordforms::getInstance()->getQuantityForm(Locales::get('auth/register/login_long/part2'), Wordforms::GENDER_MALE | Wordforms::CASE_GENITIVE, $loginMinChars) . Locales::get('auth/register/login_short/part3'), 'error'); break; case self::REGISTER_LOGIN_LONG: $loginMaxChars = Users::getLoginMaxChars(); Ajaxer::status($field, Locales::get('auth/register/login_long/part1') . $loginMaxChars . Wordforms::getInstance()->getQuantityForm(Locales::get('auth/register/login_long/part2'), Wordforms::GENDER_MALE | Wordforms::CASE_GENITIVE, $loginMaxChars) . Locales::get('auth/register/login_long/part3'), 'error'); break; default: Ajaxer::status($field, Locales::get('auth/register/' . $result), 'error'); } } return false; } return true; }