diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ca41322..59cb6118 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,20 @@ +# v1.0.0-rc.7 +## 11/23/2015 + +1. [](#improved) + * Various French language updates +1. [](#bugfix) + * **Nonce fixes** (hopefully the last of them!) + # v1.0.0-rc.6 -## XX/XX/2015 +## 11/21/2015 1. [](#improved) * Implemented logic to detect when offline and suppress Ajax calls + * Added nonce logic to be used by JS +1. [](#bugfix) + * Nonce fix for updating themes + * Nonce fix for deleting pages # v1.0.0-rc.5 ## 11/20/2015 diff --git a/blueprints.yaml b/blueprints.yaml index 901af086..38aed3b2 100644 --- a/blueprints.yaml +++ b/blueprints.yaml @@ -1,5 +1,5 @@ name: Admin Panel -version: 1.0.0-rc.5 +version: 1.0.0-rc.7 description: Adds an advanced administration panel to manage your site icon: empire author: diff --git a/classes/controller.php b/classes/controller.php index 2271487f..9b367bff 100644 --- a/classes/controller.php +++ b/classes/controller.php @@ -267,7 +267,7 @@ class AdminController $author = $this->grav['config']->get('site.author.name', ''); $fullname = $user->fullname ?: $username; - $reset_link = rtrim($this->grav['uri']->rootUrl(true), '/') . '/' . trim($this->admin->base, '/') . '/reset/task' . $param_sep . 'reset/user'. $param_sep . $username . '/token' . $param_sep . $token; + $reset_link = rtrim($this->grav['uri']->rootUrl(true), '/') . '/' . trim($this->admin->base, '/') . '/reset/task' . $param_sep . 'reset/user'. $param_sep . $username . '/token' . $param_sep . $token . '/admin-nonce' . $param_sep . Utils::getNonce('admin-form'); $sitename = $this->grav['config']->get('site.title', 'Website'); $from = $this->grav['config']->get('plugins.email.from', 'noreply@getgrav.org'); @@ -738,9 +738,11 @@ class AdminController } // Filter value and save it. - $this->post = array('enabled' => 1, '_redirect' => 'plugins'); + $this->post = array('enabled' => 1); $obj = $this->prepareData(); $obj->save(); + + $this->post = array('_redirect' => 'plugins'); $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_ENABLED_PLUGIN'), 'info'); return true; @@ -762,9 +764,11 @@ class AdminController } // Filter value and save it. - $this->post = array('enabled' => 0, '_redirect' => 'plugins'); + $this->post = array('enabled' => 0); $obj = $this->prepareData(); $obj->save(); + + $this->post = array('_redirect' => 'plugins'); $this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_DISABLED_PLUGIN'), 'info'); return true; diff --git a/languages.yaml b/languages.yaml index 84954da7..bacea043 100644 --- a/languages.yaml +++ b/languages.yaml @@ -454,20 +454,20 @@ en: fr: PLUGIN_ADMIN: ADMIN_BETA_MSG: "C'est une version beta ! Utilisez-là en production à vos risques et périls..." - ADMIN_REPORT_ISSUE: "Vous avez trouvé un problème ? Reportez-le s'il vous plait sur GitHub." + ADMIN_REPORT_ISSUE: "Vous avez rencontré une anomalie ? Veuillez la reporter sur GitHub." EMAIL_FOOTER: "Powered by Grav - The Modern Flat File CMS" LOGIN_BTN: "Connexion" LOGIN_BTN_FORGOT: "Mot de passe oublié" LOGIN_BTN_RESET: "Réinitialiser le mot de passe" LOGIN_BTN_SEND_INSTRUCTIONS: "Envoyer les instructions de réinitialisation" - LOGIN_LOGGED_IN: "Vous avez été connecté avec succès" - LOGIN_FAILED: "Echec de la connexion" - LOGGED_OUT: "Vous avez été déconecté" - RESET_LINK_EXPIRED: "Le lien de réinitialisation a expiré, réessayez s'il vous plait" + LOGIN_LOGGED_IN: "Vous vous êtes connecté avec succès" + LOGIN_FAILED: "Échec de la connexion" + LOGGED_OUT: "Vous avez été déconnecté" + RESET_LINK_EXPIRED: "Le lien de réinitialisation a expiré, veuillez réessayer" RESET_PASSWORD_RESET: "Le mot de passe a été réinitialisé" - RESET_INVALID_LINK: "Lien de réinitialisation invalide, réessayez s'il vous plait" + RESET_INVALID_LINK: "Lien de réinitialisation invalide, veuillez réessayer" FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Les instructions pour réinitialiser votre mot de passe ont été envoyées par email à %s" - FORGOT_FAILED_TO_EMAIL: "Echec d'envoi des instructions par email. Réessayez ultérieurement s'il vous plait" + FORGOT_FAILED_TO_EMAIL: "Échec de l'envoi des instructions par email. Veuillez réessayez ultérieurement" FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Impossible de réinitialiser le mot de passe pour %s, aucune adresse email n'est définie" FORGOT_USERNAME_DOES_NOT_EXIST: "L'utilisateur avec le nom d'utilisateur %s n'existe pas" FORGOT_EMAIL_NOT_CONFIGURED: "Impossible de réinitialiser le mot de passe. Ce site n'est pas configuré pour envoyer des emails" @@ -496,14 +496,14 @@ fr: CONTINUE: "Continuer" MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: "Confirmation exigée" MODAL_CHANGED_DETECTED_TITLE: "Modifications détectées" - MODAL_CHANGED_DETECTED_DESC: "Vous avez des modifications non sauvegardées. Etes-vous sûr(e) de quitter sans sauvegarder ?" + MODAL_CHANGED_DETECTED_DESC: "Vous avez des modifications non sauvegardées. Êtes-vous sûr(e) de vouloir quitter sans sauvegarder ?" MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "Confirmation exigée" - MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "Etes-vous sûr(e) de vouloir supprimer ce fichier ? Cette action ne peut être annulée." + MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "Êtes-vous sûr(e) de vouloir supprimer ce fichier ? Cette action ne pourra pas être annulée." ADD_FILTERS: "Ajouter des filtres" SEARCH_PAGES: "Rechercher des pages" VERSION: "Version" WAS_MADE_WITH: "A été réalisé avec" - BY: "par" + BY: "Par" UPDATE_THEME: "Mettre à jour le thème" UPDATE_PLUGIN: "Mettre à jour le plugin" OF_THIS_THEME_IS_NOW_AVAILABLE: "de ce thème est maintenant disponible" @@ -512,7 +512,7 @@ fr: HOMEPAGE: "Page d'accueil" DEMO: "Démo" BUG_TRACKER: "Gestion de bugs" - KEYWORDS: "Mots clés" + KEYWORDS: "Mots-clés" LICENSE: "Licence" DESCRIPTION: "Description" README: "Lisez-moi" @@ -525,14 +525,14 @@ fr: ADD: "Ajouter" CLEAR_CACHE: "Nettoyer le cache" CLEAR_CACHE_ALL_CACHE: "Totalité du cache" - CLEAR_CACHE_ASSETS_ONLY: "Seulement les assets" - CLEAR_CACHE_IMAGES_ONLY: "Seulement les images" - CLEAR_CACHE_CACHE_ONLY: "Seulement le cache" + CLEAR_CACHE_ASSETS_ONLY: "Uniquement les assets" + CLEAR_CACHE_IMAGES_ONLY: "Uniquement les images" + CLEAR_CACHE_CACHE_ONLY: "Uniquement le cache" DASHBOARD: "Tableau de bord" - UPDATES_AVAILABLE: "Mises à jour disponible" + UPDATES_AVAILABLE: "Mises à jour disponibles" DAYS: "Jours" UPDATE: "Mettre à jour" - BACKUP: "Sauvegarde backup" + BACKUP: "Sauvegarde" STATISTICS: "Statistiques" TODAY: "Aujourd'hui" WEEK: "Semaine" @@ -562,14 +562,14 @@ fr: INSTALL: "Installer" ACTIVE_THEME: "Thème actif" SWITCHING_TO: "Basculer vers" - SWITCHING_TO_DESCRIPTION: "En basculant vers un thème différent, il n'y a pas de garantie que les dispositions de la page soient supportées. Il y a un risque potentiel d'erreurs lors du chargement desdites pages." + SWITCHING_TO_DESCRIPTION: "En basculant vers un thème différent, il n'y a aucune garantie que la mise en page soit prise en charge. Il y a un risque potentiel d'erreurs lors du chargement desdites pages." SWITCHING_TO_CONFIRMATION: "Souhaitez-vous poursuivre et basculer vers le thème" CREATE_NEW_USER: "Créer un nouvel utilisateur" REMOVE_USER: "Retirer l'utilisateur" ACCESS_DENIED: "Accès refusé" ACCOUNT_NOT_ADMIN: "votre compte ne possède pas les permissions d'administrateur" - PHP_INFO: "PHP Info" - INSTALLER: "Installer" + PHP_INFO: "Informations PHP" + INSTALLER: "Installeur" AVAILABLE_THEMES: "Thèmes disponibles" AVAILABLE_PLUGINS: "Plugins disponibles" INSTALLED_THEMES: "Thèmes installés" @@ -598,8 +598,8 @@ fr: METHOD: "Méthode" ERROR_CLEARING_CACHE: "Erreur de nettoyage du cache" AN_ERROR_OCCURRED: "Une erreur est survenue" - YOUR_BACKUP_IS_READY_FOR_DOWNLOAD: "Votre sauvegarde backup est prête à télécharger" - DOWNLOAD_BACKUP: "Télécharger la sauvegarde backup" + YOUR_BACKUP_IS_READY_FOR_DOWNLOAD: "Votre sauvegarde est prête à être téléchargée" + DOWNLOAD_BACKUP: "Télécharger la sauvegarde" PAGES_FILTERED: "Pages filtrées" NO_PAGE_FOUND: "Aucune page trouvée" INVALID_PARAMETERS: "Paramètres invalides" @@ -608,27 +608,27 @@ fr: UNKNOWN_ERRORS: "Erreurs inconnues" EXCEEDED_GRAV_FILESIZSE_LIMIT: "Limite de taille de fichier Grav dépassée." UNSUPPORTED_FILE_TYPE: "Type de fichier non supporté" - FAILED_TO_MOVE_UPLOADED_FILE: "Echec du déplacement du fichier uploadé." - FILE_UPLOADED_SUCCESSFULLY: "Fichier uploadé avec succès" + FAILED_TO_MOVE_UPLOADED_FILE: "Échec du déplacement du fichier uploadé." + FILE_UPLOADED_SUCCESSFULLY: "Fichier chargé avec succès" FILE_DELETED: "Fichier supprimé" - FILE_COULD_NOT_BE_DELETED: "Le fichier ne peut être supprimé" + FILE_COULD_NOT_BE_DELETED: "Le fichier ne peut pas être supprimé" FILE_NOT_FOUND: "Fichier non trouvé" NO_FILE_FOUND: "Aucun fichier trouvé" GRAV_WAS_SUCCESSFULLY_UPDATED_TO: "Grav a été mis à jour avec succès" - GRAV_UPDATE_FAILED: "Mise à jour Grav échouée" - EVERYTHING_UPDATED: "Tout est mis à jour" - UPDATES_FAILED: "Mises à jour échouées" + GRAV_UPDATE_FAILED: "La mise à jour de Grav a échoué" + EVERYTHING_UPDATED: "Tout est à jour" + UPDATES_FAILED: "Les mises à jour ont échoué" AVATAR_BY: "Avatar par" - LAST_BACKUP: "Dernière sauvegarde backup" + LAST_BACKUP: "Dernière sauvegarde" FULL_NAME: "Nom complet" USERNAME: "Nom d'utilisateur" - EMAIL: "Email" + EMAIL: "E-mail" PASSWORD: "Mot de passe" TITLE: "Titre" LANGUAGE: "Langue" ACCOUNT: "Compte" - EMAIL_VALIDATION_MESSAGE: "Doit être une adresse email valide" - PASSWORD_VALIDATION_MESSAGE: "Le mot de passe doit contenir au moins un chiffre, une lettre minuscule et majuscule, et au moins 8 caractère ou plus" + EMAIL_VALIDATION_MESSAGE: "Doit être une adresse e-mail valide" + PASSWORD_VALIDATION_MESSAGE: "Le mot de passe doit contenir au moins un chiffre, une lettre minuscule et majuscule et au minimum 8 caractères" LANGUAGE_HELP: "Définir la langue préférée" MEDIA: "Média" DEFAULTS: "Par défaut" @@ -637,10 +637,10 @@ fr: SITE_TITLE_HELP: "Titre par défaut pour votre site, souvent utilisé dans les thèmes" DEFAULT_AUTHOR: "Auteur par défaut" DEFAULT_AUTHOR_HELP: "Un nom d'auteur par défaut, souvent utilisé dans les thèmes ou le contenu des pages" - DEFAULT_EMAIL: "Email par défaut" - DEFAULT_EMAIL_HELP: "Une email par défaut à référencer dans les thèmes ou pages" - TAXONOMY_TYPES: "Types de taxonomie" - TAXONOMY_TYPES_HELP: "Les types de taxonomie doivent être définis ici si vous souhaitez les utiliser dans les pages" + DEFAULT_EMAIL: "E-mail par défaut" + DEFAULT_EMAIL_HELP: "Une e-mail par défaut à référencer dans les thèmes ou pages" + TAXONOMY_TYPES: "Types de hiérarchisation" + TAXONOMY_TYPES_HELP: "Les types de hiérarchisation doivent être définis ici si vous souhaitez les utiliser dans les pages" PAGE_SUMMARY: "Résumé de page" ENABLED: "Activé" ENABLED_HELP: "Activer le résumé de page (le résumé retourne le même contenu que la page)" @@ -649,7 +649,7 @@ fr: SUMMARY_SIZE: "Taille du résumé" SUMMARY_SIZE_HELP: "Le nombre de caractères de la page à utiliser comme contenu de résumé" FORMAT: "Format" - FORMAT_HELP: "court = utilise la première occurrence du délimiteur ou la taille; long = le délimiteur de résumé sera ignoré" + FORMAT_HELP: "court = utilise la première occurrence du délimiteur ou la taille ; long = le délimiteur de résumé sera ignoré" SHORT: "Court" LONG: "Long" DELIMITER: "Délimiteur" diff --git a/themes/grav/js/admin-all.js b/themes/grav/js/admin-all.js index 1c2e1e27..5c1b9f0f 100644 --- a/themes/grav/js/admin-all.js +++ b/themes/grav/js/admin-all.js @@ -21,7 +21,9 @@ var bytesToSize = function(bytes) { var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1; var keepAlive = function keepAlive() { - $.post(GravAdmin.config.base_url_relative + '/task' + GravAdmin.config.param_sep + 'keepAlive'); + $.post(GravAdmin.config.base_url_relative + '/task' + GravAdmin.config.param_sep + 'keepAlive', { + 'admin-nonce': GravAdmin.config.admin_nonce + }); }; $(function () { @@ -296,7 +298,7 @@ $(function () { if (grav.isUpdatable) { var icon = ' '; content = 'Grav v{available} ' + translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE + '! (' + translations.PLUGIN_ADMIN.CURRENT + ': v{version}) ', - button = ''; + button = ''; if (grav.isSymlink) { button = ''; @@ -328,7 +330,7 @@ $(function () { var length, icon = '', content = '{updates} ' + translations.PLUGIN_ADMIN.OF_YOUR + ' {type} ' + translations.PLUGIN_ADMIN.HAVE_AN_UPDATE_AVAILABLE, - button = '' + translations.PLUGIN_ADMIN.UPDATE + ' {Type}', + button = '' + translations.PLUGIN_ADMIN.UPDATE + ' {Type}', plugins = $('.grav-update.plugins'), themes = $('.grav-update.themes'), sidebar = {plugins: $('#admin-menu a[href$="/plugins"]'), themes: $('#admin-menu a[href$="/themes"]')}; diff --git a/themes/grav/templates/pages.html.twig b/themes/grav/templates/pages.html.twig index b67301e3..891336dd 100644 --- a/themes/grav/templates/pages.html.twig +++ b/themes/grav/templates/pages.html.twig @@ -60,6 +60,7 @@ {% set admin_route = twig_vars['admin_route'] %} {% set admin_lang = twig_vars['admin_lang'] %} {% set warn = twig_vars['warn'] %} + {% set uri = twig_vars['uri'] %} {% if page.header.content.order.by %} {% set pcol = page.children().order(page.header.content.order.by, page.header.content.order.dir) %} @@ -96,9 +97,9 @@ {% if warn %} - + {% else %} - + {% endif %}

{{ p.header.routes.default ?: p.route }} {{ p.template() }}

diff --git a/themes/grav/templates/partials/plugins-list.html.twig b/themes/grav/templates/partials/plugins-list.html.twig index c182aca3..4ac84cbb 100644 --- a/themes/grav/templates/partials/plugins-list.html.twig +++ b/themes/grav/templates/partials/plugins-list.html.twig @@ -24,7 +24,7 @@ {% if (not installing and (plugin.form.fields.enabled.type != 'hidden')) %} - + {% elseif (installing) %}