From 8a89efa6538f1ec6a0483ad820630fe74c608235 Mon Sep 17 00:00:00 2001 From: Ivan Diaz Date: Sat, 23 Jul 2016 00:45:47 -0300 Subject: [PATCH 1/3] Ivan - Fix lost focus issue [skip ci] --- .../main-home/main-home-page-login-widget.js | 32 +++++++++++++++---- client/src/lib-core/empty.js | 9 ++++++ client/src/lib-core/focus.js | 18 +++++++++++ 3 files changed, 53 insertions(+), 6 deletions(-) create mode 100644 client/src/lib-core/empty.js create mode 100644 client/src/lib-core/focus.js diff --git a/client/src/app/main/main-home/main-home-page-login-widget.js b/client/src/app/main/main-home/main-home-page-login-widget.js index 9b5f90ee..e5ff7945 100644 --- a/client/src/app/main/main-home/main-home-page-login-widget.js +++ b/client/src/app/main/main-home/main-home-page-login-widget.js @@ -1,10 +1,13 @@ 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 empty = require('lib-core/empty'); const Button = require('core-components/button'); const Form = require('core-components/form'); @@ -35,7 +38,7 @@ let MainHomePageLoginWidget = React.createClass({ renderLogin() { return ( - +
@@ -46,7 +49,7 @@ let MainHomePageLoginWidget = React.createClass({
-
@@ -55,7 +58,7 @@ let MainHomePageLoginWidget = React.createClass({ renderPasswordRecovery() { return ( - +
@@ -64,7 +67,7 @@ let MainHomePageLoginWidget = React.createClass({
-
@@ -88,13 +91,13 @@ let MainHomePageLoginWidget = React.createClass({ handleForgotPasswordClick() { this.setState({ sideToShow: 'back' - }); + }, this.moveFocusToCurrentSide); }, handleBackToLoginClick() { this.setState({ sideToShow: 'front' - }); + }, this.moveFocusToCurrentSide); }, onUserStoreChanged(event) { @@ -107,6 +110,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); + } } }); diff --git a/client/src/lib-core/empty.js b/client/src/lib-core/empty.js new file mode 100644 index 00000000..dd01b4e8 --- /dev/null +++ b/client/src/lib-core/empty.js @@ -0,0 +1,9 @@ +export default { + preventDefault(event) { + event.preventDefault(); + }, + + stopPropagation(event) { + event.stopPropagation(); + } +} \ No newline at end of file diff --git a/client/src/lib-core/focus.js b/client/src/lib-core/focus.js new file mode 100644 index 00000000..2cfc1b57 --- /dev/null +++ b/client/src/lib-core/focus.js @@ -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(); + } + } +}; \ No newline at end of file From 1e634fe36655900d744348a60954def444d6f750 Mon Sep 17 00:00:00 2001 From: Ivan Diaz Date: Sat, 23 Jul 2016 16:58:44 -0300 Subject: [PATCH 2/3] Ivan - Remove unnecessary library [skip ci] --- .../app/main/main-home/main-home-page-login-widget.js | 5 ++--- client/src/lib-core/empty.js | 9 --------- 2 files changed, 2 insertions(+), 12 deletions(-) delete mode 100644 client/src/lib-core/empty.js diff --git a/client/src/app/main/main-home/main-home-page-login-widget.js b/client/src/app/main/main-home/main-home-page-login-widget.js index e5ff7945..e6a72c43 100644 --- a/client/src/app/main/main-home/main-home-page-login-widget.js +++ b/client/src/app/main/main-home/main-home-page-login-widget.js @@ -7,7 +7,6 @@ const classNames = require('classnames'); const UserActions = require('actions/user-actions'); const UserStore = require('stores/user-store'); const focus = require('lib-core/focus'); -const empty = require('lib-core/empty'); const Button = require('core-components/button'); const Form = require('core-components/form'); @@ -49,7 +48,7 @@ let MainHomePageLoginWidget = React.createClass({ -
@@ -67,7 +66,7 @@ let MainHomePageLoginWidget = React.createClass({ -
diff --git a/client/src/lib-core/empty.js b/client/src/lib-core/empty.js deleted file mode 100644 index dd01b4e8..00000000 --- a/client/src/lib-core/empty.js +++ /dev/null @@ -1,9 +0,0 @@ -export default { - preventDefault(event) { - event.preventDefault(); - }, - - stopPropagation(event) { - event.stopPropagation(); - } -} \ No newline at end of file From d23fba451ee0d6e16b32c997f92ced1430b6e737 Mon Sep 17 00:00:00 2001 From: ivan Date: Wed, 27 Jul 2016 01:04:29 -0300 Subject: [PATCH 3/3] Ivan - Add smtp settings [skip ci] --- server/controllers/system/init-settings.php | 7 ++++++- server/libs/MailSender.php | 22 +++++++++------------ server/models/MailTemplate.php | 2 +- server/models/Setting.php | 4 +++- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/server/controllers/system/init-settings.php b/server/controllers/system/init-settings.php index e1a3bbbe..578791b5 100644 --- a/server/controllers/system/init-settings.php +++ b/server/controllers/system/init-settings.php @@ -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' => '', ]); } diff --git a/server/libs/MailSender.php b/server/libs/MailSender.php index e419f07f..869b97c2 100644 --- a/server/libs/MailSender.php +++ b/server/libs/MailSender.php @@ -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()) { diff --git a/server/models/MailTemplate.php b/server/models/MailTemplate.php index 2d031e91..14bf7fa0 100644 --- a/server/models/MailTemplate.php +++ b/server/models/MailTemplate.php @@ -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; diff --git a/server/models/Setting.php b/server/models/Setting.php index 0df2404b..c6015d8d 100644 --- a/server/models/Setting.php +++ b/server/models/Setting.php @@ -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() {