diff --git a/app/assets/javascripts/controllers/admin/settings.js.erb b/app/assets/javascripts/controllers/admin/settings.js.erb index 1e36f006c..2c7091f78 100644 --- a/app/assets/javascripts/controllers/admin/settings.js.erb +++ b/app/assets/javascripts/controllers/admin/settings.js.erb @@ -12,8 +12,8 @@ */ 'use strict'; -Application.Controllers.controller('SettingsController', ['$scope', '$rootScope', '$filter', '$uibModal', 'Setting', 'growl', 'settingsPromise', 'privacyDraftsPromise', 'cgvFile', 'cguFile', 'logoFile', 'logoBlackFile', 'faviconFile', 'profileImageFile', 'CSRF', '_t', - function ($scope, $rootScope, $filter, $uibModal, Setting, growl, settingsPromise, privacyDraftsPromise, cgvFile, cguFile, logoFile, logoBlackFile, faviconFile, profileImageFile, CSRF, _t) { +Application.Controllers.controller('SettingsController', ['$scope', '$rootScope', '$filter', '$uibModal', 'dialogs', 'Setting', 'growl', 'settingsPromise', 'privacyDraftsPromise', 'cgvFile', 'cguFile', 'logoFile', 'logoBlackFile', 'faviconFile', 'profileImageFile', 'CSRF', '_t', + function ($scope, $rootScope, $filter, $uibModal, dialogs, Setting, growl, settingsPromise, privacyDraftsPromise, cgvFile, cguFile, logoFile, logoBlackFile, faviconFile, profileImageFile, CSRF, _t) { /* PUBLIC SCOPE */ // timepickers steps configuration @@ -140,10 +140,14 @@ Application.Controllers.controller('SettingsController', ['$scope', '$rootScope' $scope.summernoteOptsHomePage = Object.assign({}, $rootScope.summernoteOpts); $scope.summernoteOptsHomePage.toolbar[5][1].push('nugget'); // toolbar -> insert -> nugget $scope.summernoteOptsHomePage.nugget = { - label: "🧱", - tooltip: "blabla", + label: '\uF12E', + tooltip: _t('app.admin.settings.home_items'), list: [ - '[[lorem ipsum]]' + `
${_t('app.admin.settings.item_news')}
`, + `
${_t('app.admin.settings.item_projects')}
`, + `
${_t('app.admin.settings.item_twitter')}
`, + `
${_t('app.admin.settings.item_members')}
`, + `
${_t('app.admin.settings.item_events')}
` ] } @@ -305,6 +309,29 @@ Application.Controllers.controller('SettingsController', ['$scope', '$rootScope' }); } + /** + * Reset the home page to its initial state (factory value) + */ + $scope.resetHomePage = function () { + dialogs.confirm({ + resolve: { + object () { + return { + title: _t('app.admin.settings.confirmation_required'), + msg: _t('app.admin.settings.confirm_reset_home_page') + }; + } + } + } + , function () { // confirmed + Setting.reset({ name: 'home_content' }, function (data) { + $scope.homeContent.value = data.value; + growl.success(_t('app.admin.settings.home_content_reset')); + }) + } + ) + } + /* PRIVATE SCOPE */ /** diff --git a/app/assets/javascripts/router.js.erb b/app/assets/javascripts/router.js.erb index 00c091f02..eb3ae0b05 100644 --- a/app/assets/javascripts/router.js.erb +++ b/app/assets/javascripts/router.js.erb @@ -1006,7 +1006,7 @@ angular.module('application.router', ['ui.router']) 'fablab_name', 'name_genre', 'reminder_enable', \ 'reminder_delay', 'visibility_yearly', 'visibility_others', \ 'display_name_enable', 'machines_sort_by', 'fab_analytics', \ - 'link_name']` }).$promise; + 'link_name', 'home_content']` }).$promise; }], privacyDraftsPromise: ['Setting', function (Setting) { return Setting.get({ name: 'privacy_draft', history: true }).$promise; }], cguFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'cgu-file' }).$promise; }], diff --git a/app/assets/javascripts/services/setting.js b/app/assets/javascripts/services/setting.js index c0b43b645..f97ef9af6 100644 --- a/app/assets/javascripts/services/setting.js +++ b/app/assets/javascripts/services/setting.js @@ -15,6 +15,11 @@ Application.Services.factory('Setting', ['$resource', function ($resource) { }, query: { isArray: false + }, + reset: { + url: '/api/settings/reset/:name', + params: { name: '@name' }, + method: 'PUT' } } ); diff --git a/app/assets/stylesheets/modules/settings.scss b/app/assets/stylesheets/modules/settings.scss new file mode 100644 index 000000000..fccd4ee60 --- /dev/null +++ b/app/assets/stylesheets/modules/settings.scss @@ -0,0 +1,44 @@ +.admin-settings { + .home-page-settings { + .home-page-content { + .note-editor { + .note-toolbar .note-btn-group .note-btn .nugget { + font-family: "FontAwesome"; + } + .note-editing-area .note-editable { + #news { + width: 100%; + background-color: #b1b1b1; + color: white; + border: 1px dashed #8f9091; + border-radius: 5px; + text-align: center; + vertical-align: middle; + line-height: 10rem; + font-size: 2em; + } + + #projects { + @extend #news; + line-height: 523px; + } + + #twitter { + @extend #news; + line-height: 162px; + } + + #members { + @extend #news; + line-height: 320px; + } + + #events { + @extend #news; + line-height: 621px; + } + } + } + } + } +} diff --git a/app/assets/templates/admin/settings/home_page.html b/app/assets/templates/admin/settings/home_page.html index 64f0a1c23..ef55538c1 100644 --- a/app/assets/templates/admin/settings/home_page.html +++ b/app/assets/templates/admin/settings/home_page.html @@ -1,8 +1,9 @@ -
+
-
+

{{ 'app.admin.settings.customize_home_page' }}

+ diff --git a/app/assets/templates/admin/settings/index.html.erb b/app/assets/templates/admin/settings/index.html.erb index 46bcb0e8b..65bb3cdb0 100644 --- a/app/assets/templates/admin/settings/index.html.erb +++ b/app/assets/templates/admin/settings/index.html.erb @@ -14,7 +14,7 @@
-
+
diff --git a/app/controllers/api/settings_controller.rb b/app/controllers/api/settings_controller.rb index 00c3eb465..2aad40349 100644 --- a/app/controllers/api/settings_controller.rb +++ b/app/controllers/api/settings_controller.rb @@ -2,7 +2,7 @@ # API Controller for resources of type Setting class API::SettingsController < API::ApiController - before_action :authenticate_user!, only: :update + before_action :authenticate_user!, only: %i[update bulk_update reset] def index @settings = Setting.where(name: names_as_string_to_array) @@ -36,6 +36,19 @@ class API::SettingsController < API::ApiController @show_history = params[:history] == 'true' && current_user.admin? end + def reset + authorize Setting + + setting = Setting.find_or_create_by(name: params[:name]) + first_val = setting.history_values.order(created_at: :asc).limit(1).first + new_val = HistoryValue.create!( + setting_id: setting.id, + value: first_val.value, + invoicing_profile_id: current_user.invoicing_profile.id + ) + render json: new_val, status: :ok + end + private def setting_params diff --git a/app/models/setting.rb b/app/models/setting.rb index 76a707366..cd9506dad 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -1,3 +1,8 @@ +# frozen_string_literal: true + +# Setting is a configuration element of the platform. Only administrators are allowed to modify Settings +# For some settings, changing them will involve some callback actions (like rebuilding the stylesheets if the theme color Setting is changed). +# A full history of the previous values is kept in database with the date and the author of the change class Setting < ActiveRecord::Base has_many :history_values validates :name, inclusion: @@ -65,7 +70,8 @@ class Setting < ActiveRecord::Base hub_last_version hub_public_key fab_analytics - link_name] } + link_name + home_content] } after_update :update_stylesheet, :notify_privacy_policy_changed if :value_changed? diff --git a/app/policies/setting_policy.rb b/app/policies/setting_policy.rb index aacdb6453..a2c47fc45 100644 --- a/app/policies/setting_policy.rb +++ b/app/policies/setting_policy.rb @@ -2,7 +2,7 @@ # Check the access policies for API::SettingsController class SettingPolicy < ApplicationPolicy - %w[update bulk_update].each do |action| + %w[update bulk_update reset].each do |action| define_method "#{action}?" do user.admin? end diff --git a/config/locales/app.admin.fr.yml b/config/locales/app.admin.fr.yml index fe9b97b31..10629b518 100644 --- a/config/locales/app.admin.fr.yml +++ b/config/locales/app.admin.fr.yml @@ -928,6 +928,18 @@ fr: space_explications_alert: "l'explication sur la page de réservation d'un espace" main_color: "la couleur principale" secondary_color: "la couleur secondaire" + customize_home_page: "Personnaliser la page d'accueil" + reset_home_page: "Remettre la page d'accueil dans son état initial" + confirmation_required: "Confirmation requise" + confirm_reset_home_page: "Voulez-vous vraiment remettre la page d'accueil à sa valeur d'usine ?" + home_items: "Éléments de la page d'accueil" + item_news: "Brève" + item_projects: "Derniers projets" + item_twitter: "Dernier tweet" + item_members: "Derniers membres" + item_events: "Prochains événements" + home_content: "la page d'accueil" + home_content_reset: "La page d'accueil a bien été restaurée dans sa configuration initiale." home_blogpost: "la brève de la page d'accueil" twitter_name: "nom du flux Twitter" link_name: "l'intitulé du lien vers la page \"À propos\"" diff --git a/config/routes.rb b/config/routes.rb index 69ea91d56..a304a7c16 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -47,6 +47,7 @@ Rails.application.routes.draw do resources :admins, only: %i[index create destroy] resources :settings, only: %i[show update index], param: :name do patch '/bulk_update', action: 'bulk_update', on: :collection + put '/reset/:name', action: 'reset', on: :collection end resources :users, only: %i[index create] resources :members, only: %i[index show create update destroy] do diff --git a/db/seeds.rb b/db/seeds.rb index 51a0bf59a..cfe973cd6 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -214,7 +214,7 @@ if Machine.count.zero? "\r\nVitesse d'analyse (scannage): 4-15 mm/sec\r\n \r\n \r\nLogiciel utilisé pour le fraisage: Roland Modela player" \ " 4 \r\nLogiciel utilisé pour l'usinage de circuits imprimés: Cad.py (linux)\r\nFormats acceptés: STL,PNG 3D\r\n" \ "Format d'exportation des données scannées: DXF, VRML, STL, 3DMF, IGES, Grayscale, Point Group et BMP\r\n", - slug: 'petite-fraiseuse' }, + slug: 'petite-fraiseuse' } ]) Price.all.each do |p| @@ -294,13 +294,18 @@ end unless Setting.find_by(name: 'subscription_explications_alert').try(:value) setting = Setting.find_or_initialize_by(name: 'subscription_explications_alert') - setting.value = '

Règle sur la date de début des abonnements

  • ' \ - ' Si vous ĂŞtes un nouvel utilisateur - i.e aucune ' \ - " formation d'enregistrĂ©e sur le site - votre abonnement dĂ©butera Ă  la date de rĂ©servation de votre première " \ - ' formation.
  • Si vous avez dĂ©jĂ  une ' \ - " formation ou plus de validĂ©e, votre abonnement dĂ©butera Ă  la date de votre achat d'abonnement.
  • " \ - "

Merci de bien prendre ses informations en compte, et merci de votre compréhension. L'équipe du Fab Lab.
" \ - '

' + setting.value = <<~HTML +

Règle sur la date de début des abonnements

+
    +
  • Si vous ĂŞtes un nouvel utilisateur - i.e aucune + formation d'enregistrĂ©e sur le site - votre abonnement dĂ©butera Ă  la date de rĂ©servation de votre première + formation.
  • +
  • Si vous avez dĂ©jĂ  une formation ou plus de validĂ©e, + votre abonnement dĂ©butera Ă  la date de votre achat d'abonnement.
  • +
+

Merci de bien prendre ses informations en compte, et merci de votre compréhension. L'équipe du Fab Lab.
+

+ HTML setting.save end @@ -495,138 +500,140 @@ end unless Setting.find_by(name: 'privacy_draft').try(:value) setting = Setting.find_or_initialize_by(name: 'privacy_draft') - setting.value = "

La présente politique de confidentialité définit et vous informe de la manière dont _________ utilise et protège les - informations que vous nous transmettez, le cas échéant, lorsque vous utilisez le présent site accessible à partir de l’URL suivante : - _________ (ci-après le « Site »).

Veuillez noter que cette politique de confidentialité est susceptible d’être modifiée ou - complétée à tout moment par _________, notamment en vue de se conformer à toute évolution législative, réglementaire, jurisprudentielle - ou technologique. Dans un tel cas, la date de sa mise à jour sera clairement identifiée en tête de la présente politique et l'Utilisateur - sera informé par courriel. Ces modifications engagent l’Utilisateur dès leur mise en ligne. Il convient par conséquent que l’Utilisateur - consulte régulièrement la présente politique de confidentialité et d’utilisation des cookies afin de prendre connaissance de ses - éventuelles modifications.

I. DONNÉES PERSONNELLES

D’une manière générale, il vous est possible de visiter le site de - _________ sans communiquer aucune information personnelle vous concernant. En toute hypothèse, vous n’êtes en aucune manière obligé de - transmettre ces informations à _________.

Néanmoins, en cas de refus, il se peut que vous ne puissiez pas bénéficier de - certaines informations ou services que vous avez demandé. A ce titre en effet, _________ peut être amené dans certains cas à vous - demander de renseigner vos nom, prénom, pseudonyme, sexe, adresse mail, numéro de téléphone, entreprise et date de naissance (ci-après - vos « Informations Personnelles »). En fournissant ces informations, vous acceptez expressément qu’elles soient traitées par - _________, aux fins indiquées au point 2 ci-dessous.

Conformément au Règlement Général sur la Protection des Données (General - Data Protection Regulation) adopté par le Parlement européen le 14 avril 2016, et à la Loi Informatique et Libertés du 6 janvier 1978 - modifiée, _________ vous informe des points suivants :

1. Identité du responsable du traitement

Le responsable du - traitement est (la sociĂ©tĂ©/l'association) _________ – (adresse) _________, (code postal) _________ (ville) _________ – (Pays) - _________ .

2. Finalités du traitement

_________ est susceptible de traiter vos Informations Personnelles :

(a) - aux fins de vous fournir les informations ou les services que vous avez demandés (notamment : l'envoi de notifications relatives à - vos activités sur le Site, l’envoi de la Newsletter, la correspondance par email, l’envoi d’informations commerciales, livres - blancs ou encore l’évaluation de votre niveau de satisfaction quant aux services proposés) ;

(b) aux fins de recueillir des - informations nous permettant d’améliorer notre Site, nos produits et services (notamment par le biais de cookies) ;

(c) - aux fins de pouvoir vous contacter à propos de différents événements relatifs à _________, incluant notamment la mise à jour des - produits et le support client.

3. Destinataires

Seul _________ est destinataire de vos Informations Personnelles. - Celles-ci, que ce soit sous forme individuelle ou agrégée, ne sont jamais transmises à un tiers, nonobstant les sous-traitants - auxquels _________ fait appel (vous trouverez de plus amples informations à leur sujet au point 7 ci-dessous). Ni _________, - ni l’un quelconque de ses sous-traitants, ne procèdent à la commercialisation des données personnelles des visiteurs et Utilisateurs de - son Site.

4. Durée de conservation

Vos Informations Personnelles sont conservées par _________ uniquement pour le temps - correspondant à la finalité de la collecte tel qu’indiqué en 2 ci-dessus qui ne saurait en tout état de cause excéder 36 mois.

5. - Droits Informatique et Libertés

Vous disposez des droits suivants concernant vos Informations Personnelles, que vous pouvez exercer - en nous écrivant à l’adresse postale mentionnée au point 1 ou en contactant le délégué à la protection des données, dont l'adresse est - mentionnée ci-contre.

o Droit d’accès et de communication des données

Vous avez la faculté d’accéder aux Informations - Personnelles qui vous concernent.

Cependant, en raison de l’obligation de sécurité et de confidentialité dans le traitement des - données à caractère personnel qui incombe à _________, vous êtes informé que votre demande sera traitée sous réserve que vous apportiez la - preuve de votre identité, notamment par la production d’un scan de votre titre d’identité valide (en cas de demande par voie électronique) - ou d’une photocopie signée de votre titre d’identité valide (en cas de demande adressée par écrit).

_________ vous informe qu’il - sera en droit, le cas échéant, de s’opposer aux demandes manifestement abusives (de par leur nombre, leur caractère répétitif ou - systématique).

Pour vous aider dans votre démarche, notamment si vous désirez exercer votre droit d’accès par le biais d’une - demande écrite à l’adresse postale mentionnée au point 1, vous trouverez en cliquant sur le lien suivant un modèle de courrier élaboré par la Commission - Nationale de l’Informatique et des Libertés (la « CNIL »).

o Droit de rectification des données

Au titre de ce droit, - la législation vous habilite à demander la rectification, la mise à jour, le verrouillage ou encore l’effacement des données vous - concernant qui peuvent s’avérer le cas échéant inexactes, erronées, incomplètes ou obsolètes.

Egalement, vous pouvez définir des - directives générales et particulières relatives au sort des données à caractère personnel après votre décès. Le cas échéant, les héritiers - d’une personne décédée peuvent exiger de prendre en considération le décès de leur proche et/ou de procéder aux mises à jour nécessaires. -

Pour vous aider dans votre démarche, notamment si vous désirez exercer, pour votre propre compte ou pour le compte de l’un de vos - proches défunt, votre droit de rectification par le biais d’une demande écrite à l’adresse postale mentionnée au point 1, vous trouverez - en cliquant sur le lien - suivant un modèle de courrier élaboré par la CNIL.

o Droit d’opposition

L’exercice de ce droit n’est possible que dans - l’une des deux situations suivantes :

Lorsque l’exercice de ce droit est fondé sur des motifs légitimes ; ou

Lorsque - l’exercice de ce droit vise à faire obstacle à ce que les données recueillies soient utilisées à des fins de prospection commerciale.

-

Pour vous aider dans votre démarche, notamment si vous désirez exercer votre droit d’opposition par le biais d’une demande écrite - adressée à l’adresse postale indiquée au point 1, vous trouverez en cliquant sur le lien suivant un modèle de - courrier élaboré par la CNIL.

6. Délais de réponse

_________ s’engage à répondre à votre demande d’accès, de rectification - ou d’opposition ou toute autre demande complémentaire d’informations dans un délai raisonnable qui ne saurait dépasser 1 mois à compter - de la réception de votre demande.

7. Prestataires habilités et transfert vers un pays tiers de l’Union Européenne

_________ - vous informe qu’il a recours à ses prestataires habilités pour faciliter le recueil et le traitement des données que vous nous avez - communiqué. Ces prestataires peuvent être situés en dehors de l’Union Européenne et ont communication des données recueillies par le - biais des divers formulaires présents sur le Site.

_________ s’est prĂ©alablement assurĂ© de la mise en Ĺ“uvre par ses prestataires de - garanties adĂ©quates et du respect de conditions strictes en matière de confidentialitĂ©, d’usage et de protection des donnĂ©es. Tout - particulièrement, la vigilance s’est portĂ©e sur l’existence d’un fondement lĂ©gal pour effectuer un quelconque transfert de donnĂ©es vers un - pays tiers. A ce titre, l’un de nos prestataires est soumis Ă  (nom de la règle) _________ approuvĂ©es par la (nom de l'autoritĂ©) _________ - en (annĂ©e d'approbation) _________.

8. Plainte auprès de l’autorité compétente

Si vous considérez que _________ ne - respecte pas ses obligations au regard de vos Informations Personnelles, vous pouvez adresser une plainte ou une demande auprès de - l’autorité compétente. En France, l’autorité compétente est la CNIL à laquelle vous pouvez adresser une demande par voie électronique en - cliquant sur le lien suivant : https://www.cnil.fr/fr/plaintes/internet.

-

II. POLITIQUE RELATIVE AUX COOKIES

Lors de votre première connexion sur le site web de _________, vous êtes avertis par un - bandeau en bas de votre écran que des informations relatives à votre navigation sont susceptibles d’être enregistrées dans des fichiers - dénommés « cookies ». Notre politique d’utilisation des cookies vous permet de mieux comprendre les dispositions que nous mettons en œuvre - en matière de navigation sur notre site web. Elle vous informe notamment sur l’ensemble des cookies présents sur notre site web, leur - finalité (partie I.) et vous donne la marche à suivre pour les paramétrer (partie II.)

1. Informations générales sur les cookies - présents sur le site de _________

_________, en tant qu’éditeur du présent site web, pourra procéder à l’implantation d’un cookie - sur le disque dur de votre terminal (ordinateur, tablette, mobile etc.) afin de vous garantir une navigation fluide et optimale sur notre - site Internet.

Les « cookies » (ou témoins de connexion) sont des petits fichiers texte de taille limitée qui nous permettent de - reconnaître votre ordinateur, votre tablette ou votre mobile aux fins de personnaliser les services que nous vous proposons.

Les - informations recueillies par le biais des cookies ne permettent en aucune manière de vous identifier nominativement. Elles sont utilisées - exclusivement pour nos besoins propres afin d’améliorer l’interactivité et la performance de notre site web et de vous adresser des - contenus adaptés à vos centres d’intérêts. Aucune de ces informations ne fait l’objet d’une communication auprès de tiers sauf lorsque - _________ a obtenu au préalable votre consentement ou bien lorsque la divulgation de ces informations est requise par la loi, sur ordre - d’un tribunal ou toute autorité administrative ou judiciaire habilitée à en connaître.

Pour mieux vous éclairer sur les informations - que les cookies identifient, vous trouverez ci-dessous un tableau listant les différents types de cookies susceptibles d’être utilisés sur - le site web de _________, leur nom, leur finalité ainsi que leur durée de conservation.

2. Configuration de vos préférences sur les - cookies

Vous pouvez accepter ou refuser le dépôt de cookies à tout moment.

Lors de votre première connexion sur le site web - de _________, une bannière présentant brièvement des informations relatives au dépôt de cookies et de technologies similaires apparaît en - bas de votre écran. Cette bannière vous demande de choisir explicitement d'acceptez ou non le dépôt de cookies sur votre terminal. -

Après avoir fait votre choix, vous pouvez le modifier ultĂ©rieurement  en vous connectant Ă  votre compte utilisateur puis en - naviguant dans la section intitulĂ©e « mes paramètres Â», accessible via un clic sur votre nom, en haut Ă  droite de l'Ă©cran.

-

Selon le type de cookie en cause, le recueil de votre consentement au dépôt et à la lecture de cookies sur votre terminal peut être - impératif.

a. Les cookies exemptés de consentement

Conformément aux recommandations de la Commission Nationale de - l’Informatique et des Libertés (CNIL), certains cookies sont dispensés du recueil préalable de votre consentement dans la mesure où ils - sont strictement nécessaires au fonctionnement du site internet ou ont pour finalité exclusive de permettre ou faciliter la communication - par voie électronique. Il s’agit des cookies suivants :

o Identifiant de session et authentification sur l'API. - Ces cookies sont intĂ©gralement soumis Ă  la prĂ©sente politique dans la mesure oĂą ils sont Ă©mis et gĂ©rĂ©s par _________.

- o Stripe, permettant de gérer les paiements par carte bancaire et dont la politique de confidentialité est accessible sur ce - lien.

o Disqus, permettant de poster des commentaires sur les fiches projet et - dont la politique de confidentialité est accessible sur ce lien - .

b. Les cookies nécessitant le recueil préalable de votre consentement

Cette - exigence concerne les cookies émis par des tiers et qui sont qualifiés de « persistants » dans la mesure où ils demeurent dans votre - terminal jusqu’à leur effacement ou leur date d’expiration.

De tels cookies étant émis par des tiers, leur utilisation et leur dépôt - sont soumis à leurs propres politiques de confidentialité dont vous trouverez un lien ci-dessous. Cette famille de cookie comprend les - cookies de mesure d’audience (Google Analytics).

Les cookies de mesure d’audience établissent des statistiques concernant la - fréquentation et l’utilisation de divers éléments du site web (comme les contenus/pages que vous avez visité). - Ces données participent à l’amélioration de l’ergonomie du site web de _________. Un outil de mesure d’audience est utilisé sur le - présent site internet :

o Google Analytics pour gérer les statistiques de visites dont la politique de - confidentialité est disponible (uniquement en anglais) à partir du lien - suivant.

c. Vous disposez de divers outils de paramétrage des cookies

La plupart - des navigateurs Internet sont configurés par défaut de façon à ce que le dépôt de cookies soit autorisé. Votre navigateur vous offre - l’opportunité de modifier ces paramètres standards de manière à ce que l’ensemble des cookies soit rejeté systématiquement ou bien à ce - qu’une partie seulement des cookies soit acceptée ou refusée en fonction de leur émetteur.

ATTENTION : Nous attirons votre - attention sur le fait que le refus du dépôt de cookies sur votre terminal est néanmoins susceptible d’altérer votre expérience - d’utilisateur ainsi que votre accès à certains services ou fonctionnalités du présent site web. Le cas échéant, _________ décline toute - responsabilité concernant les conséquences liées à la dégradation de vos conditions de navigation qui interviennent en raison de votre - choix de refuser, supprimer ou bloquer les cookies nécessaires au fonctionnement du site. - Ces conséquences ne sauraient constituer un dommage et vous ne pourrez prétendre à aucune indemnité de ce fait.

-

Votre navigateur vous permet également de supprimer les cookies existants sur votre - terminal ou encore de vous signaler lorsque de nouveaux cookies sont susceptibles d’être déposés sur votre terminal. Ces paramètres n’ont - pas d’incidence sur votre navigation mais vous font perdre tout le bénéfice apporté par le cookie.

Veuillez ci-dessous prendre - connaissance des multiples outils mis à votre disposition afin que vous puissiez paramétrer les cookies déposés sur votre terminal.

-

d. Le paramétrage de votre navigateur Internet

Chaque navigateur Internet propose ses propres paramètres de gestion des - cookies. Pour savoir de quelle manière modifier vos préférences en matière de cookies, vous trouverez ci-dessous les liens vers l’aide - nécessaire pour accéder au menu de votre navigateur prévu à cet effet :

- -

Pour de plus amples informations concernant les outils de maîtrise des cookies, vous pouvez consulter le - site internet de la CNIL.

" + setting.value = <<~HTML +

La présente politique de confidentialité définit et vous informe de la manière dont _________ utilise et protège les + informations que vous nous transmettez, le cas échéant, lorsque vous utilisez le présent site accessible à partir de l’URL suivante : + _________ (ci-après le « Site »).

Veuillez noter que cette politique de confidentialité est susceptible d’être modifiée ou + complétée à tout moment par _________, notamment en vue de se conformer à toute évolution législative, réglementaire, jurisprudentielle + ou technologique. Dans un tel cas, la date de sa mise à jour sera clairement identifiée en tête de la présente politique et l'Utilisateur + sera informé par courriel. Ces modifications engagent l’Utilisateur dès leur mise en ligne. Il convient par conséquent que l’Utilisateur + consulte régulièrement la présente politique de confidentialité et d’utilisation des cookies afin de prendre connaissance de ses + éventuelles modifications.

I. DONNÉES PERSONNELLES

D’une manière générale, il vous est possible de visiter le site de + _________ sans communiquer aucune information personnelle vous concernant. En toute hypothèse, vous n’êtes en aucune manière obligé de + transmettre ces informations à _________.

Néanmoins, en cas de refus, il se peut que vous ne puissiez pas bénéficier de + certaines informations ou services que vous avez demandé. A ce titre en effet, _________ peut être amené dans certains cas à vous + demander de renseigner vos nom, prénom, pseudonyme, sexe, adresse mail, numéro de téléphone, entreprise et date de naissance (ci-après + vos « Informations Personnelles »). En fournissant ces informations, vous acceptez expressément qu’elles soient traitées par + _________, aux fins indiquées au point 2 ci-dessous.

Conformément au Règlement Général sur la Protection des Données (General + Data Protection Regulation) adopté par le Parlement européen le 14 avril 2016, et à la Loi Informatique et Libertés du 6 janvier 1978 + modifiée, _________ vous informe des points suivants :

1. Identité du responsable du traitement

Le responsable du + traitement est (la sociĂ©tĂ©/l'association) _________ – (adresse) _________, (code postal) _________ (ville) _________ – (Pays) + _________ .

2. Finalités du traitement

_________ est susceptible de traiter vos Informations Personnelles :

(a) + aux fins de vous fournir les informations ou les services que vous avez demandés (notamment : l'envoi de notifications relatives à + vos activités sur le Site, l’envoi de la Newsletter, la correspondance par email, l’envoi d’informations commerciales, livres + blancs ou encore l’évaluation de votre niveau de satisfaction quant aux services proposés) ;

(b) aux fins de recueillir des + informations nous permettant d’améliorer notre Site, nos produits et services (notamment par le biais de cookies) ;

(c) + aux fins de pouvoir vous contacter à propos de différents événements relatifs à _________, incluant notamment la mise à jour des + produits et le support client.

3. Destinataires

Seul _________ est destinataire de vos Informations Personnelles. + Celles-ci, que ce soit sous forme individuelle ou agrégée, ne sont jamais transmises à un tiers, nonobstant les sous-traitants + auxquels _________ fait appel (vous trouverez de plus amples informations à leur sujet au point 7 ci-dessous). Ni _________, + ni l’un quelconque de ses sous-traitants, ne procèdent à la commercialisation des données personnelles des visiteurs et Utilisateurs de + son Site.

4. Durée de conservation

Vos Informations Personnelles sont conservées par _________ uniquement pour le temps + correspondant à la finalité de la collecte tel qu’indiqué en 2 ci-dessus qui ne saurait en tout état de cause excéder 36 mois.

5. + Droits Informatique et Libertés

Vous disposez des droits suivants concernant vos Informations Personnelles, que vous pouvez exercer + en nous écrivant à l’adresse postale mentionnée au point 1 ou en contactant le délégué à la protection des données, dont l'adresse est + mentionnée ci-contre.

o Droit d’accès et de communication des données

Vous avez la faculté d’accéder aux Informations + Personnelles qui vous concernent.

Cependant, en raison de l’obligation de sécurité et de confidentialité dans le traitement des + données à caractère personnel qui incombe à _________, vous êtes informé que votre demande sera traitée sous réserve que vous apportiez la + preuve de votre identité, notamment par la production d’un scan de votre titre d’identité valide (en cas de demande par voie électronique) + ou d’une photocopie signée de votre titre d’identité valide (en cas de demande adressée par écrit).

_________ vous informe qu’il + sera en droit, le cas échéant, de s’opposer aux demandes manifestement abusives (de par leur nombre, leur caractère répétitif ou + systématique).

Pour vous aider dans votre démarche, notamment si vous désirez exercer votre droit d’accès par le biais d’une + demande écrite à l’adresse postale mentionnée au point 1, vous trouverez en cliquant sur le lien suivant un modèle de courrier élaboré par la Commission + Nationale de l’Informatique et des Libertés (la « CNIL »).

o Droit de rectification des données

Au titre de ce droit, + la législation vous habilite à demander la rectification, la mise à jour, le verrouillage ou encore l’effacement des données vous + concernant qui peuvent s’avérer le cas échéant inexactes, erronées, incomplètes ou obsolètes.

Egalement, vous pouvez définir des + directives générales et particulières relatives au sort des données à caractère personnel après votre décès. Le cas échéant, les héritiers + d’une personne décédée peuvent exiger de prendre en considération le décès de leur proche et/ou de procéder aux mises à jour nécessaires. +

Pour vous aider dans votre démarche, notamment si vous désirez exercer, pour votre propre compte ou pour le compte de l’un de vos + proches défunt, votre droit de rectification par le biais d’une demande écrite à l’adresse postale mentionnée au point 1, vous trouverez + en cliquant sur le lien + suivant un modèle de courrier élaboré par la CNIL.

o Droit d’opposition

L’exercice de ce droit n’est possible que dans + l’une des deux situations suivantes :

Lorsque l’exercice de ce droit est fondé sur des motifs légitimes ; ou

Lorsque + l’exercice de ce droit vise à faire obstacle à ce que les données recueillies soient utilisées à des fins de prospection commerciale.

+

Pour vous aider dans votre démarche, notamment si vous désirez exercer votre droit d’opposition par le biais d’une demande écrite + adressée à l’adresse postale indiquée au point 1, vous trouverez en cliquant sur le lien suivant un modèle de + courrier élaboré par la CNIL.

6. Délais de réponse

_________ s’engage à répondre à votre demande d’accès, de rectification + ou d’opposition ou toute autre demande complémentaire d’informations dans un délai raisonnable qui ne saurait dépasser 1 mois à compter + de la réception de votre demande.

7. Prestataires habilités et transfert vers un pays tiers de l’Union Européenne

_________ + vous informe qu’il a recours à ses prestataires habilités pour faciliter le recueil et le traitement des données que vous nous avez + communiqué. Ces prestataires peuvent être situés en dehors de l’Union Européenne et ont communication des données recueillies par le + biais des divers formulaires présents sur le Site.

_________ s’est prĂ©alablement assurĂ© de la mise en Ĺ“uvre par ses prestataires de + garanties adĂ©quates et du respect de conditions strictes en matière de confidentialitĂ©, d’usage et de protection des donnĂ©es. Tout + particulièrement, la vigilance s’est portĂ©e sur l’existence d’un fondement lĂ©gal pour effectuer un quelconque transfert de donnĂ©es vers un + pays tiers. A ce titre, l’un de nos prestataires est soumis Ă  (nom de la règle) _________ approuvĂ©es par la (nom de l'autoritĂ©) _________ + en (annĂ©e d'approbation) _________.

8. Plainte auprès de l’autorité compétente

Si vous considérez que _________ ne + respecte pas ses obligations au regard de vos Informations Personnelles, vous pouvez adresser une plainte ou une demande auprès de + l’autorité compétente. En France, l’autorité compétente est la CNIL à laquelle vous pouvez adresser une demande par voie électronique en + cliquant sur le lien suivant : https://www.cnil.fr/fr/plaintes/internet.

+

II. POLITIQUE RELATIVE AUX COOKIES

Lors de votre première connexion sur le site web de _________, vous êtes avertis par un + bandeau en bas de votre écran que des informations relatives à votre navigation sont susceptibles d’être enregistrées dans des fichiers + dénommés « cookies ». Notre politique d’utilisation des cookies vous permet de mieux comprendre les dispositions que nous mettons en œuvre + en matière de navigation sur notre site web. Elle vous informe notamment sur l’ensemble des cookies présents sur notre site web, leur + finalité (partie I.) et vous donne la marche à suivre pour les paramétrer (partie II.)

1. Informations générales sur les cookies + présents sur le site de _________

_________, en tant qu’éditeur du présent site web, pourra procéder à l’implantation d’un cookie + sur le disque dur de votre terminal (ordinateur, tablette, mobile etc.) afin de vous garantir une navigation fluide et optimale sur notre + site Internet.

Les « cookies » (ou témoins de connexion) sont des petits fichiers texte de taille limitée qui nous permettent de + reconnaître votre ordinateur, votre tablette ou votre mobile aux fins de personnaliser les services que nous vous proposons.

Les + informations recueillies par le biais des cookies ne permettent en aucune manière de vous identifier nominativement. Elles sont utilisées + exclusivement pour nos besoins propres afin d’améliorer l’interactivité et la performance de notre site web et de vous adresser des + contenus adaptés à vos centres d’intérêts. Aucune de ces informations ne fait l’objet d’une communication auprès de tiers sauf lorsque + _________ a obtenu au préalable votre consentement ou bien lorsque la divulgation de ces informations est requise par la loi, sur ordre + d’un tribunal ou toute autorité administrative ou judiciaire habilitée à en connaître.

Pour mieux vous éclairer sur les informations + que les cookies identifient, vous trouverez ci-dessous un tableau listant les différents types de cookies susceptibles d’être utilisés sur + le site web de _________, leur nom, leur finalité ainsi que leur durée de conservation.

2. Configuration de vos préférences sur les + cookies

Vous pouvez accepter ou refuser le dépôt de cookies à tout moment.

Lors de votre première connexion sur le site web + de _________, une bannière présentant brièvement des informations relatives au dépôt de cookies et de technologies similaires apparaît en + bas de votre écran. Cette bannière vous demande de choisir explicitement d'acceptez ou non le dépôt de cookies sur votre terminal. +

Après avoir fait votre choix, vous pouvez le modifier ultĂ©rieurement  en vous connectant Ă  votre compte utilisateur puis en + naviguant dans la section intitulĂ©e « mes paramètres Â», accessible via un clic sur votre nom, en haut Ă  droite de l'Ă©cran.

+

Selon le type de cookie en cause, le recueil de votre consentement au dépôt et à la lecture de cookies sur votre terminal peut être + impératif.

a. Les cookies exemptés de consentement

Conformément aux recommandations de la Commission Nationale de + l’Informatique et des Libertés (CNIL), certains cookies sont dispensés du recueil préalable de votre consentement dans la mesure où ils + sont strictement nécessaires au fonctionnement du site internet ou ont pour finalité exclusive de permettre ou faciliter la communication + par voie électronique. Il s’agit des cookies suivants :

o Identifiant de session et authentification sur l'API. + Ces cookies sont intĂ©gralement soumis Ă  la prĂ©sente politique dans la mesure oĂą ils sont Ă©mis et gĂ©rĂ©s par _________.

+ o Stripe, permettant de gérer les paiements par carte bancaire et dont la politique de confidentialité est accessible sur ce + lien.

o Disqus, permettant de poster des commentaires sur les fiches projet et + dont la politique de confidentialité est accessible sur ce lien + .

b. Les cookies nécessitant le recueil préalable de votre consentement

Cette + exigence concerne les cookies émis par des tiers et qui sont qualifiés de « persistants » dans la mesure où ils demeurent dans votre + terminal jusqu’à leur effacement ou leur date d’expiration.

De tels cookies étant émis par des tiers, leur utilisation et leur dépôt + sont soumis à leurs propres politiques de confidentialité dont vous trouverez un lien ci-dessous. Cette famille de cookie comprend les + cookies de mesure d’audience (Google Analytics).

Les cookies de mesure d’audience établissent des statistiques concernant la + fréquentation et l’utilisation de divers éléments du site web (comme les contenus/pages que vous avez visité). + Ces données participent à l’amélioration de l’ergonomie du site web de _________. Un outil de mesure d’audience est utilisé sur le + présent site internet :

o Google Analytics pour gérer les statistiques de visites dont la politique de + confidentialité est disponible (uniquement en anglais) à partir du lien + suivant.

c. Vous disposez de divers outils de paramétrage des cookies

La plupart + des navigateurs Internet sont configurés par défaut de façon à ce que le dépôt de cookies soit autorisé. Votre navigateur vous offre + l’opportunité de modifier ces paramètres standards de manière à ce que l’ensemble des cookies soit rejeté systématiquement ou bien à ce + qu’une partie seulement des cookies soit acceptée ou refusée en fonction de leur émetteur.

ATTENTION : Nous attirons votre + attention sur le fait que le refus du dépôt de cookies sur votre terminal est néanmoins susceptible d’altérer votre expérience + d’utilisateur ainsi que votre accès à certains services ou fonctionnalités du présent site web. Le cas échéant, _________ décline toute + responsabilité concernant les conséquences liées à la dégradation de vos conditions de navigation qui interviennent en raison de votre + choix de refuser, supprimer ou bloquer les cookies nécessaires au fonctionnement du site. + Ces conséquences ne sauraient constituer un dommage et vous ne pourrez prétendre à aucune indemnité de ce fait.

+

Votre navigateur vous permet également de supprimer les cookies existants sur votre + terminal ou encore de vous signaler lorsque de nouveaux cookies sont susceptibles d’être déposés sur votre terminal. Ces paramètres n’ont + pas d’incidence sur votre navigation mais vous font perdre tout le bénéfice apporté par le cookie.

Veuillez ci-dessous prendre + connaissance des multiples outils mis à votre disposition afin que vous puissiez paramétrer les cookies déposés sur votre terminal.

+

d. Le paramétrage de votre navigateur Internet

Chaque navigateur Internet propose ses propres paramètres de gestion des + cookies. Pour savoir de quelle manière modifier vos préférences en matière de cookies, vous trouverez ci-dessous les liens vers l’aide + nécessaire pour accéder au menu de votre navigateur prévu à cet effet :

+ +

Pour de plus amples informations concernant les outils de maîtrise des cookies, vous pouvez consulter le + site internet de la CNIL.

+ HTML setting.save end @@ -644,6 +651,28 @@ unless Setting.find_by(name: 'link_name').try(:value) setting.save end +unless Setting.find_by(name: 'home_content').try(:value) + setting = Setting.find_or_initialize_by(name: 'home_content') + setting.value = <<~HTML +
+
Brève
+
+
+
+
Derniers projets
+
+
+
Dernier tweet
+
Derniers membres
+
+
+
+
Prochains événements
+
+ HTML + setting.save +end + if StatisticCustomAggregation.count.zero? # available reservations hours for machines machine_hours = StatisticType.find_by(key: 'hour', statistic_index_id: 2) diff --git a/vendor/assets/javascripts/summernote-ext-nugget.js b/vendor/assets/javascripts/summernote-ext-nugget.js index 16019e29b..6d93bbb6c 100644 --- a/vendor/assets/javascripts/summernote-ext-nugget.js +++ b/vendor/assets/javascripts/summernote-ext-nugget.js @@ -1,33 +1,5 @@ -// Credits to: https://github.com/pHAlkaline/summernote-plugins/tree/master/plugins/nugget -/* - summernote-nugget +// Inspired by: https://github.com/pHAlkaline/summernote-plugins/tree/master/plugins/nugget - Allow users to insert custom nuggets into the WYSIWYG. - - Installation - - 1) Copy the plugin - - You must copy the plugin/nugget folder into your local summernote plugin folder. - - 2) Configure the plugin - - After that, to initialize the template plugin, you have to set these options : - - $('#summernote').summernote({ - toolbar: [ - ['insert', ['nugget']] - ], - nugget: { - list: [ - '[[Condo.name]]', - '[[Condo.title]]' - ] - }, - }); - - * - **/ (function (factory) { /* global define */ if (typeof define === 'function' && define.amd) { @@ -91,17 +63,17 @@ 'nugget': function (context) { // ui has renders to build ui elements. // - you can create a button with `ui.button` - var ui = $.summernote.ui; - var options = context.options.nugget; - var context_options = context.options; - var lang = context_options.langInfo; - var defaultOptions = { + const ui = $.summernote.ui; + const options = context.options.nugget; + const context_options = context.options; + const lang = context_options.langInfo; + const defaultOptions = { label: lang.nugget.Nugget, tooltip: lang.nugget.Insert_nugget }; // Assign default values if not supplied - for (var propertyName in defaultOptions) { + for (const propertyName in defaultOptions) { if (options.hasOwnProperty(propertyName) === false) { options[propertyName] = defaultOptions[propertyName]; } @@ -111,7 +83,7 @@ context.memo('button.nugget', function () { // create button - var button = ui.buttonGroup([ + const button = ui.buttonGroup([ ui.button({ className: 'dropdown-toggle', contents: '' + options.label + ' ', @@ -122,15 +94,22 @@ }), ui.dropdown({ className: 'dropdown-nugget', - items: options.list, + contents: options.list.map((i) => { + const li = document.createElement('li'); + const a = document.createElement('a'); + a.innerHTML = i.trim(); + a.setAttribute('href', '#'); + li.appendChild(a); + return li.outerHTML; + }), click: function (event) { event.preventDefault(); - var $button = $(event.target); - var value = $button.data('value'); - var node = document.createElement('span'); - node.innerHTML = value; - context.invoke('editor.insertText', value); + const $button = $(event.target); + const value = $button[0].outerHTML; + const node = document.createElement('div'); + node.innerHTML = value.trim(); + context.invoke('editor.insertNode', node.firstChild); } })