From 3f6b0c0fa5003cbd9297cfdc611041a33eee8eb8 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Tue, 21 Jul 2015 22:02:13 -0600 Subject: [PATCH] various updates --- admin.php | 2 - classes/controller.php | 48 +++-- languages.yaml | 19 ++ themes/grav/templates/email/base.html.twig | 191 +++++++++++++++++- themes/grav/templates/forgot.html.twig | 36 ++-- .../forms/fields/password/password.html.twig | 1 + .../forms/fields/text/text.html.twig | 1 + themes/grav/templates/login.html.twig | 24 +-- .../grav/templates/partials/login.html.twig | 15 ++ themes/grav/templates/reset.html.twig | 40 ++-- 10 files changed, 287 insertions(+), 90 deletions(-) create mode 100644 languages.yaml create mode 100644 themes/grav/templates/partials/login.html.twig diff --git a/admin.php b/admin.php index 44a0fb0e..ed4ec752 100644 --- a/admin.php +++ b/admin.php @@ -176,8 +176,6 @@ class AdminPlugin extends Plugin $page = new Page; $page->init(new \SplFileInfo(__DIR__ . "/pages/admin/{$self->template}.md")); $page->slug(basename($self->template)); - $page->extension('.md'); - return $page; }; } diff --git a/classes/controller.php b/classes/controller.php index ba2dd331..abb7c9b6 100644 --- a/classes/controller.php +++ b/classes/controller.php @@ -120,10 +120,12 @@ class AdminController */ protected function taskLogin() { + $l = $this->grav['language']; + if ($this->admin->authenticate($this->post)) { - $this->admin->setMessage('You have been logged in.'); + $this->admin->setMessage($l->translate('LOGIN_LOGGED_IN')); } else { - $this->admin->setMessage('Login failed.'); + $this->admin->setMessage($l->translate('LOGIN_FAILED')); } return true; @@ -136,8 +138,10 @@ class AdminController */ protected function taskLogout() { + $l = $this->grav['language']; + $this->admin->session()->invalidate()->start(); - $this->admin->setMessage('You have been logged out.'); + $this->admin->setMessage($l->translate('LOGGED_OUT')); $this->setRedirect('/'); return true; @@ -145,25 +149,27 @@ class AdminController protected function taskForgot() { + $l = $this->grav['language']; + $data = $this->post; $username = isset($data['username']) ? $data['username'] : ''; $user = !empty($username) ? User::load($username) : null; if (!isset($this->grav['Email'])) { - $this->admin->setMessage('Cannot reset password. This site is not configured to send emails.'); + $this->admin->setMessage($l->translate('FORGOT_EMAIL_NOT_CONFIGURED')); $this->setRedirect('/'); return true; } if (!$user || !$user->exists()) { - $this->admin->setMessage('User with username \'' . $username . '\' does not exist.'); + $this->admin->setMessage($l->translate(['FORGOT_USERNAME_DOES_NOT_EXIST', $username])); $this->setRedirect('/forgot'); return true; } if (empty($user->email)) { - $this->admin->setMessage('Cannot reset password for \'' . $username . '\', no email address is set.'); + $this->admin->setMessage($l->translate(['FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL', $username])); $this->setRedirect('/forgot'); return true; } @@ -178,14 +184,14 @@ class AdminController $fullname = $user->fullname ?: $username; $reset_link = rtrim($this->grav['uri']->rootUrl(true), '/') . '/' . trim($this->admin->base, '/') . '/reset/task:reset/user:' . $username . '/token:' . $token; - $from = $this->grav['config']->get('site.author.email', 'noreply@getgrav.org'); + $sitename = $this->grav['config']->get('site.title', 'Website'); + $from = $this->grav['config']->get('plugins.email.from', 'noreply@getgrav.org'); $to = $user->email; - $subject = $this->grav['config']->get('site.title', 'Website') . ' password reset'; - $body = $this->grav['twig']->processString('{% include "email/reset.html.twig" %}', [ - 'name' => $fullname, - 'author' => $author, - 'reset_link' =>$reset_link - ]); + + $subject = $l->translate(['FORGOT_EMAIL_SUBJECT', $sitename]); + $content = $l->translate(['FORGOT_EMAIL_BODY', $fullname, $reset_link, $author, $sitename]); + + $body = $this->grav['twig']->processTemplate('email/base.html.twig', ['content' => $content]); $message = $this->grav['Email']->message($subject, $body, 'text/html') ->setFrom($from) @@ -194,9 +200,9 @@ class AdminController $sent = $this->grav['Email']->send($message); if ($sent < 1) { - $this->admin->setMessage('Failed to email instructions, please try again later.'); + $this->admin->setMessage($l->translate('FORGOT_FAILED_TO_EMAIL')); } else { - $this->admin->setMessage('Instructions to reset your password have been sent by email.'); + $this->admin->setMessage($l->translate(['FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL', $to])); } $this->setRedirect('/'); @@ -205,10 +211,11 @@ class AdminController public function taskReset() { + $l = $this->grav['language']; + $data = $this->post; if (isset($data['password'])) { - $username = isset($data['username']) ? $data['username'] : null; $user = !empty($username) ? User::load($username) : null; $password = isset($data['password']) ? $data['password'] : null; @@ -218,9 +225,8 @@ class AdminController list($good_token, $expire) = explode('::', $user->reset); if ($good_token === $token) { - if (time() > $expire) { - $this->admin->setMessage('Reset link has expired, please try again.'); + $this->admin->setMessage($l->translate('RESET_LINK_EXPIRED')); $this->setRedirect('/forgot'); return true; } @@ -231,13 +237,13 @@ class AdminController $user->password = $password; $user->save(); - $this->admin->setMessage('Password has been reset.'); + $this->admin->setMessage($l->translate('RESET_PASSWORD_RESET')); $this->setRedirect('/'); return true; } } - $this->admin->setMessage('Invalid reset link used, please try again.'); + $this->admin->setMessage($l->translate('RESET_INVALID_LINK')); $this->setRedirect('/forgot'); return true; @@ -246,7 +252,7 @@ class AdminController $token = $this->grav['uri']->param('token'); if (empty($user) || empty($token)) { - $this->admin->setMessage('Invalid reset link used, please try again.'); + $this->admin->setMessage($l->translate('RESET_INVALID_LINK')); $this->setRedirect('/forgot'); return true; } diff --git a/languages.yaml b/languages.yaml new file mode 100644 index 00000000..99d90c55 --- /dev/null +++ b/languages.yaml @@ -0,0 +1,19 @@ +en: + EMAIL_FOOTER: Powered by Grav - The Modern Flat File CMS + LOGIN_BTN: Login + LOGIN_BTN_FORGOT: Forgot + LOGIN_BTN_RESET: Reset Password + LOGIN_BTN_SEND_INSTRUCTIONS: Send Reset Instructions + LOGIN_LOGGED_IN: You have been logged in + LOGIN_FAILED: Login failed + LOGGED_OUT: You have been logged out + RESET_LINK_EXPIRED: Reset link has expired, please try again + RESET_PASSWORD_RESET: Password has been reset + RESET_INVALID_LINK: Invalid reset link used, please try again + FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: Instructions to reset your password have been sent via email to %s + FORGOT_FAILED_TO_EMAIL: Failed to email instructions, please try again later + FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: Cannot reset password for %s, no email address is set + FORGOT_USERNAME_DOES_NOT_EXIST: User with username %s does not exist + FORGOT_EMAIL_NOT_CONFIGURED: Cannot reset password. This site is not configured to send emails + FORGOT_EMAIL_SUBJECT: %s Password Reset Request + FORGOT_EMAIL_BODY:

Password Reset

Dear %1$s,

A request was made on %4$s to reset your password.


Click this to reset your password

Alternatively, copy the following URL into your browser's address bar:

%2$s


Kind regards,

%3$s

\ No newline at end of file diff --git a/themes/grav/templates/email/base.html.twig b/themes/grav/templates/email/base.html.twig index 31c27b13..80cb38a0 100644 --- a/themes/grav/templates/email/base.html.twig +++ b/themes/grav/templates/email/base.html.twig @@ -1,11 +1,194 @@ - {% block head %} + - {% endblock %} + Really Simple HTML Email Template + - - {% block content %}{% endblock %} + + + + + + + + + + +
+
+ + + + +
+ {{ content }} +
+
+
+ + + + + + + + + + + + diff --git a/themes/grav/templates/forgot.html.twig b/themes/grav/templates/forgot.html.twig index eae4dbcc..33eca4a8 100644 --- a/themes/grav/templates/forgot.html.twig +++ b/themes/grav/templates/forgot.html.twig @@ -1,25 +1,17 @@ -{% extends 'partials/base.html.twig' %} +{% embed 'partials/login.html.twig' with {title:'Grav Forgot Password'} %} -{% block page %} -
-

- Grav forgot password -

+ {% block form %} + {% for field in page.header.form.fields %} + {% if field.type %} +
+ {% include ["forms/fields/#{field.type}/#{field.type}.html.twig", 'forms/fields/text/text.html.twig'] %} +
+ {% endif %} + {% endfor %} +
+ +
+ {% endblock %} - {% include 'partials/messages.html.twig' %} - -
- {% for field in page.header.form.fields %} - {% if field.type %} -
- {% include ["forms/fields/#{field.type}/#{field.type}.html.twig", 'forms/fields/text/text.html.twig'] %} -
- {% endif %} - {% endfor %} -
- -
-
-
-{% endblock %} +{% endembed %} diff --git a/themes/grav/templates/forms/fields/password/password.html.twig b/themes/grav/templates/forms/fields/password/password.html.twig index 464f7a8d..759aa92a 100644 --- a/themes/grav/templates/forms/fields/password/password.html.twig +++ b/themes/grav/templates/forms/fields/password/password.html.twig @@ -18,6 +18,7 @@ name="{{ (scope ~ field.name)|fieldName }}" value="{{ value|join(', ') }}" {% if field.placeholder %}placeholder="{{ field.placeholder }}"{% endif %} + {% if field.title %}title="{{ field.title }}"{% endif %} {% if field.autofocus in ['on', 'true', 1] %}autofocus="autofocus"{% endif %} {% if field.novalidate in ['on', 'true', 1] %}novalidate="novalidate"{% endif %} {% if field.autocomplete in ['on', 'off'] %}autocomplete="{{ field.autocomplete }}"{% endif %} diff --git a/themes/grav/templates/forms/fields/text/text.html.twig b/themes/grav/templates/forms/fields/text/text.html.twig index cb1e6583..94579613 100644 --- a/themes/grav/templates/forms/fields/text/text.html.twig +++ b/themes/grav/templates/forms/fields/text/text.html.twig @@ -18,6 +18,7 @@ name="{{ (scope ~ field.name)|fieldName }}" value="{{ value|join(', ') }}" {% if field.placeholder %}placeholder="{{ field.placeholder }}"{% endif %} + {% if field.title %}title="{{ field.title }}"{% endif %} {% if field.autofocus in ['on', 'true', 1] %}autofocus="autofocus"{% endif %} {% if field.novalidate in ['on', 'true', 1] %}novalidate="novalidate"{% endif %} {% if field.readonly in ['on', 'true', 1] %}readonly="readonly"{% endif %} diff --git a/themes/grav/templates/login.html.twig b/themes/grav/templates/login.html.twig index d5e2be6f..00366ecf 100644 --- a/themes/grav/templates/login.html.twig +++ b/themes/grav/templates/login.html.twig @@ -1,15 +1,7 @@ -{% extends 'partials/base.html.twig' %} +{% embed 'partials/login.html.twig' with {title:'Grav Login'} %} -{% block page %} -
-

- Grav Login -

- - {% include 'partials/messages.html.twig' %} - -
- {% for field in page.header.form.fields %} + {% block form %} + {% for field in page.header.form.fields %} {% if field.type %}
{% include ["forms/fields/#{field.type}/#{field.type}.html.twig", 'forms/fields/text/text.html.twig'] %} @@ -17,10 +9,10 @@ {% endif %} {% endfor %}
- Forgot - + {{ 'LOGIN_BTN_FORGOT'|t }} +
- -
-{% endblock %} + {% endblock %} + +{% endembed %} diff --git a/themes/grav/templates/partials/login.html.twig b/themes/grav/templates/partials/login.html.twig new file mode 100644 index 00000000..28935bae --- /dev/null +++ b/themes/grav/templates/partials/login.html.twig @@ -0,0 +1,15 @@ +{% extends 'partials/base.html.twig' %} + +{% block page %} +
+

+ {{ title }} +

+ + {% include 'partials/messages.html.twig' %} + +
+ {% block form %}{% endblock %} +
+
+{% endblock %} \ No newline at end of file diff --git a/themes/grav/templates/reset.html.twig b/themes/grav/templates/reset.html.twig index 096ab0bc..3e805d8e 100644 --- a/themes/grav/templates/reset.html.twig +++ b/themes/grav/templates/reset.html.twig @@ -1,29 +1,19 @@ -{% extends 'partials/base.html.twig' %} +{% embed 'partials/login.html.twig' with {title:'Grav Reset Password'} %} -{% block page %} -
-

- Reset Grav password -

+ {% block form %} + {% for field in page.header.form.fields %} + {% set value = attribute(admin.forgot, field.name) is defined ? attribute(admin.forgot, field.name) : null %} - {% include 'partials/messages.html.twig' %} + {% if field.type %} +
+ {% include ["forms/fields/#{field.type}/#{field.type}.html.twig", 'forms/fields/text/text.html.twig'] %} +
+ {% endif %} + {% endfor %} +
+ +
+ {% endblock %} -
- - {% for field in page.header.form.fields %} - {% set value = attribute(admin.forgot, field.name) is defined ? attribute(admin.forgot, field.name) : null %} - - {% if field.type %} -
- {% include ["forms/fields/#{field.type}/#{field.type}.html.twig", 'forms/fields/text/text.html.twig'] %} -
- {% endif %} - {% endfor %} - -
- -
-
-
-{% endblock %} +{% endembed %}