Merged master into add-name-to-signup
This commit is contained in:
commit
1b7b449ae6
|
@ -1,10 +1,12 @@
|
|||
const React = require('react');
|
||||
const ReactDOM = require('react-dom');
|
||||
const Reflux = require('reflux');
|
||||
const _ = require('lodash');
|
||||
const classNames = require('classnames');
|
||||
|
||||
const UserActions = require('actions/user-actions');
|
||||
const UserStore = require('stores/user-store');
|
||||
const focus = require('lib-core/focus');
|
||||
|
||||
const Button = require('core-components/button');
|
||||
const Form = require('core-components/form');
|
||||
|
@ -35,7 +37,7 @@ let MainHomePageLoginWidget = React.createClass({
|
|||
|
||||
renderLogin() {
|
||||
return (
|
||||
<Widget className="main-home-page--widget" title="Login">
|
||||
<Widget className="main-home-page--widget" title="Login" ref="loginWidget">
|
||||
<Form className="login-widget--form" ref="loginForm" onSubmit={this.handleLoginFormSubmit} errors={this.state.loginFormErrors} onValidateErrors={this.handleLoginFormErrorsValidation}>
|
||||
<div className="login-widget--inputs">
|
||||
<Input placeholder="email" name="email" className="login-widget--input" validation="EMAIL" required/>
|
||||
|
@ -46,7 +48,7 @@ let MainHomePageLoginWidget = React.createClass({
|
|||
<Button type="primary">LOG IN</Button>
|
||||
</div>
|
||||
</Form>
|
||||
<Button className="login-widget--forgot-password" type="link" onClick={this.handleForgotPasswordClick}>
|
||||
<Button className="login-widget--forgot-password" type="link" onClick={this.handleForgotPasswordClick} onMouseDown={(event) => {event.preventDefault()}}>
|
||||
{'Forgot your password?'}
|
||||
</Button>
|
||||
</Widget>
|
||||
|
@ -55,7 +57,7 @@ let MainHomePageLoginWidget = React.createClass({
|
|||
|
||||
renderPasswordRecovery() {
|
||||
return (
|
||||
<Widget className="main-home-page--widget main-home-page--password-widget" title="Password Recovery">
|
||||
<Widget className="main-home-page--widget main-home-page--password-widget" title="Password Recovery" ref="recoverWidget">
|
||||
<Form className="login-widget--form" onSubmit={this.handleForgotPasswordSubmit}>
|
||||
<div className="login-widget--inputs">
|
||||
<Input placeholder="email" name="email" className="login-widget--input" validation="EMAIL"/>
|
||||
|
@ -64,7 +66,7 @@ let MainHomePageLoginWidget = React.createClass({
|
|||
<Button type="primary">Recover my password</Button>
|
||||
</div>
|
||||
</Form>
|
||||
<Button className="login-widget--forgot-password" type="link" onClick={this.handleBackToLoginClick}>
|
||||
<Button className="login-widget--forgot-password" type="link" onClick={this.handleBackToLoginClick} onMouseDown={(event) => {event.preventDefault()}}>
|
||||
{'Back to login form'}
|
||||
</Button>
|
||||
</Widget>
|
||||
|
@ -88,13 +90,13 @@ let MainHomePageLoginWidget = React.createClass({
|
|||
handleForgotPasswordClick() {
|
||||
this.setState({
|
||||
sideToShow: 'back'
|
||||
});
|
||||
}, this.moveFocusToCurrentSide);
|
||||
},
|
||||
|
||||
handleBackToLoginClick() {
|
||||
this.setState({
|
||||
sideToShow: 'front'
|
||||
});
|
||||
}, this.moveFocusToCurrentSide);
|
||||
},
|
||||
|
||||
onUserStoreChanged(event) {
|
||||
|
@ -107,6 +109,23 @@ let MainHomePageLoginWidget = React.createClass({
|
|||
this.refs.loginForm.refs.password.focus()
|
||||
}.bind(this));
|
||||
}
|
||||
},
|
||||
|
||||
moveFocusToCurrentSide() {
|
||||
let currentWidget;
|
||||
let previousWidget;
|
||||
|
||||
if (this.state.sideToShow === 'front') {
|
||||
currentWidget = ReactDOM.findDOMNode(this.refs.loginWidget);
|
||||
previousWidget = ReactDOM.findDOMNode(this.refs.recoverWidget);
|
||||
} else {
|
||||
currentWidget = ReactDOM.findDOMNode(this.refs.recoverWidget);
|
||||
previousWidget = ReactDOM.findDOMNode(this.refs.loginWidget);
|
||||
}
|
||||
|
||||
if (focus.isActiveElementInsideDOMTree(previousWidget)) {
|
||||
focus.focusFirstInput(currentWidget);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
const _ = require('lodash');
|
||||
|
||||
export default {
|
||||
isActiveElementInsideDOMTree(domTree = document) {
|
||||
let activeElement = document.activeElement;
|
||||
let elements = domTree.querySelectorAll('*');
|
||||
|
||||
return (_.findIndex(elements, activeElement) !== -1);
|
||||
},
|
||||
|
||||
focusFirstInput(domTree) {
|
||||
let firstFocusableElement = domTree.querySelector('input');
|
||||
|
||||
if (firstFocusableElement) {
|
||||
firstFocusableElement.focus();
|
||||
}
|
||||
}
|
||||
};
|
|
@ -23,7 +23,12 @@ class InitSettingsController extends Controller {
|
|||
|
||||
private function storeGlobalSettings() {
|
||||
$this->storeSettings([
|
||||
'language' => 'en'
|
||||
'language' => 'en',
|
||||
'no-reply-email' => 'noreply@opensupports.com',
|
||||
'smtp-host' => 'localhost',
|
||||
'smtp-port' => 7070,
|
||||
'smtp-user' => '',
|
||||
'smtp-pass' => '',
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
@ -3,15 +3,13 @@ class MailSender {
|
|||
|
||||
private $mailOptions = [];
|
||||
|
||||
//TODO: Add real initial options when Settings class is available
|
||||
public function __construct() {
|
||||
$this->mailOptions['from'] = 'noreply@opensupports.com';
|
||||
$this->mailOptions['from'] = Setting::getSetting('no-reply-email');
|
||||
|
||||
//SMTP Options
|
||||
$this->mailOptions['smtp_host'] = 'localhost';
|
||||
$this->mailOptions['smtp_port'] = 7070;
|
||||
$this->mailOptions['smtp_user'] = '';
|
||||
$this->mailOptions['smtp_pass'] = '';
|
||||
$this->mailOptions['smtp-host'] = Setting::getSetting('smtp-host');
|
||||
$this->mailOptions['smtp-port'] = Setting::getSetting('smtp-host');
|
||||
$this->mailOptions['smtp-user'] = Setting::getSetting('smtp-host');
|
||||
$this->mailOptions['smtp-pass'] = Setting::getSetting('smtp-host');
|
||||
}
|
||||
|
||||
public function setTemplate($type, $config) {
|
||||
|
@ -29,14 +27,12 @@ class MailSender {
|
|||
$mailer->Subject = $this->mailOptions['subject'];
|
||||
$mailer->Body = $this->mailOptions['body'];
|
||||
|
||||
//$mailer->SMTPDebug = 3;
|
||||
$mailer->isSMTP();
|
||||
$mailer->SMTPAuth = true;
|
||||
$mailer->Host = $this->mailOptions['smtp_host'];
|
||||
$mailer->Port = $this->mailOptions['smtp_port'];
|
||||
$mailer->Username = $this->mailOptions['smtp_user'];
|
||||
$mailer->Password = $this->mailOptions['smtp_pass'];
|
||||
//$mailer->SMTPSecure = "tls";
|
||||
$mailer->Host = $this->mailOptions['smtp-host'];
|
||||
$mailer->Port = $this->mailOptions['smtp-port'];
|
||||
$mailer->Username = $this->mailOptions['smtp-user'];
|
||||
$mailer->Password = $this->mailOptions['smtp-pass'];
|
||||
$mailer->Timeout = 1000;
|
||||
|
||||
if ($mailer->smtpConnect()) {
|
||||
|
|
|
@ -12,7 +12,7 @@ class MailTemplate extends DataStore {
|
|||
|
||||
$bean = RedBean::findOne(MailTemplate::TABLE, 'type = :type AND language = :language', array(
|
||||
':type' => $type,
|
||||
':language' => $globalLanguage->value
|
||||
':language' => $globalLanguage
|
||||
));
|
||||
|
||||
return ($bean) ? new MailTemplate($bean) : null;
|
||||
|
|
|
@ -4,7 +4,9 @@ class Setting extends DataStore {
|
|||
const TABLE = 'setting';
|
||||
|
||||
public static function getSetting($name) {
|
||||
return parent::getDataStore($name, 'name');
|
||||
$dataStore = parent::getDataStore($name, 'name');
|
||||
|
||||
return ($dataStore !== null) ? $dataStore->value : null;
|
||||
}
|
||||
|
||||
public static function getProps() {
|
||||
|
|
Loading…
Reference in New Issue