1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-12-01 12:24:28 +01:00

save as draft or publish

This commit is contained in:
Sylvain 2019-04-18 16:55:50 +02:00
parent caf6054e66
commit d0f0a293f3
6 changed files with 57 additions and 21 deletions

View File

@ -55,9 +55,7 @@ Application.Controllers.controller('SettingsController', ['$scope', '$uibModal',
$scope.twitterSetting = { name: 'twitter_name', value: settingsPromise.twitter_name }; $scope.twitterSetting = { name: 'twitter_name', value: settingsPromise.twitter_name };
$scope.aboutTitleSetting = { name: 'about_title', value: settingsPromise.about_title }; $scope.aboutTitleSetting = { name: 'about_title', value: settingsPromise.about_title };
$scope.aboutBodySetting = { name: 'about_body', value: settingsPromise.about_body }; $scope.aboutBodySetting = { name: 'about_body', value: settingsPromise.about_body };
$scope.privacyBodySetting = { name: 'privacy_body', value: settingsPromise.privacy_body };
$scope.privacyDpoSetting = { name: 'privacy_dpo', value: settingsPromise.privacy_dpo }; $scope.privacyDpoSetting = { name: 'privacy_dpo', value: settingsPromise.privacy_dpo };
$scope.privacyDraftSetting = { name: 'privacy_draft', value: privacyDraftsPromise.setting.value };
$scope.aboutContactsSetting = { name: 'about_contacts', value: settingsPromise.about_contacts }; $scope.aboutContactsSetting = { name: 'about_contacts', value: settingsPromise.about_contacts };
$scope.homeBlogpostSetting = { name: 'home_blogpost', value: settingsPromise.home_blogpost }; $scope.homeBlogpostSetting = { name: 'home_blogpost', value: settingsPromise.home_blogpost };
$scope.machineExplicationsAlert = { name: 'machine_explications_alert', value: settingsPromise.machine_explications_alert }; $scope.machineExplicationsAlert = { name: 'machine_explications_alert', value: settingsPromise.machine_explications_alert };
@ -125,8 +123,11 @@ Application.Controllers.controller('SettingsController', ['$scope', '$uibModal',
value: (settingsPromise.display_name_enable === 'true') value: (settingsPromise.display_name_enable === 'true')
}; };
// binding to the privacy policy revision select // By default, we display the currently published privacy policy
$scope.policyVersion = null; $scope.privacyPolicy = {
version: null,
bodyTemp: settingsPromise.privacy_body
};
/** /**
* For use with 'ng-class', returns the CSS class name for the uploads previews. * For use with 'ng-class', returns the CSS class name for the uploads previews.
@ -170,20 +171,33 @@ Application.Controllers.controller('SettingsController', ['$scope', '$uibModal',
); );
}; };
/**
* The privacy policy has its own special save function because updating the policy must notify all users
*/
$scope.savePrivacyPolicy = function () { $scope.savePrivacyPolicy = function () {
// open modal // open modal
const modalInstance = $uibModal.open({ const modalInstance = $uibModal.open({
templateUrl: '<%= asset_path "admin/settings/save_policy.html" %>', templateUrl: '<%= asset_path "admin/settings/save_policy.html" %>',
controller: 'SavePolicyController' controller: 'SavePolicyController',
resolve: {
saveCb () { return $scope.save; },
privacyPolicy () { return $scope.privacyPolicy; }
}
}); });
// once done, update the invoice model and inform the admin // once done, update the client data
return modalInstance.result.then(function (res) { modalInstance.result.then(function (type) {
$scope.invoices.unshift(res.avoir); Setting.get({ name: 'privacy_draft', history: true }, function (data) {
return Invoice.get({ id: invoice.id }, function (data) { // reset history
invoice.has_avoir = data.has_avoir; $scope.privacyDraftsHistory = [];
return growl.success(_t('invoices.refund_invoice_successfully_created')); data.setting.history.forEach(function (draft) {
$scope.privacyDraftsHistory.push({ id: draft.id, name: _t('settings.privacy.draft_from_USER_DATE', { USER: draft.user, DATE: draft.created_at }), content: draft.value });
}); });
if (type === 'privacy_draft') {
// FIXME
$scope.privacyPolicy.version = data.setting.history[data.setting.history.length - 1].id;
}
})
}); });
}; };
@ -242,7 +256,12 @@ Application.Controllers.controller('SettingsController', ['$scope', '$uibModal',
* Change the revision of the displayed privacy policy, from drafts history * Change the revision of the displayed privacy policy, from drafts history
*/ */
$scope.handlePolicyRevisionChange = function () { $scope.handlePolicyRevisionChange = function () {
$scope.privacyDraftSetting.value = $scope.privacyDraftsHistory[$scope.policyVersion].content; for (const draft of $scope.privacyDraftsHistory) {
if (draft.id == $scope.privacyPolicy.version) {
$scope.privacyPolicy.bodyTemp = draft.content;
break;
}
}
}; };
/* PRIVATE SCOPE */ /* PRIVATE SCOPE */
@ -288,7 +307,7 @@ Application.Controllers.controller('SettingsController', ['$scope', '$uibModal',
} }
privacyDraftsPromise.setting.history.forEach(function (draft) { privacyDraftsPromise.setting.history.forEach(function (draft) {
$scope.privacyDraftsHistory.push({ id: draft.id, name: _t('settings.privacy.draft_from_USER_DATE', { USER: draft.user, DATE: draft.created_at }), content: draft.value }); $scope.privacyDraftsHistory.push({ id: draft.id, name: _t('settings.privacy.draft_from_USER_DATE', { USER: draft.user.name, DATE: moment(draft.created_at).format('L LT') }), content: draft.value });
}); });
}; };
@ -302,17 +321,30 @@ Application.Controllers.controller('SettingsController', ['$scope', '$uibModal',
/** /**
* Controller used in the invoice refunding modal window * Controller used in the invoice refunding modal window
*/ */
Application.Controllers.controller('AvoirModalController', ['$scope', '$uibModalInstance', 'growl', '_t', Application.Controllers.controller('SavePolicyController', ['$scope', '$uibModalInstance', 'saveCb', 'privacyPolicy',
function ($scope, $uibModalInstance, growl, _t) { function ($scope, $uibModalInstance, saveCb, privacyPolicy) {
/* PUBLIC SCOPE */ /* PUBLIC SCOPE */
/**
* Save as draft the current text
*/
$scope.save = function () { $scope.save = function () {
saveCb({ name: 'privacy_draft', value: privacyPolicy.bodyTemp });
$uibModalInstance.close('privacy_draft');
}; };
/**
* Publish the current text as the new privacy policy
*/
$scope.publish = function () { $scope.publish = function () {
saveCb({ name: 'privacy_body', value: privacyPolicy.bodyTemp });
$uibModalInstance.close('privacy_body');
}; };
/**
* Cancel the saving, dismiss the modal window
*/
$scope.cancel = function () { $scope.cancel = function () {
$uibModalInstance.dismiss('cancel');
}; };
} }
]); ]);

View File

@ -3,10 +3,10 @@
<div class="row"> <div class="row">
<div class="col-md-4 col-md-offset-1"> <div class="col-md-4 col-md-offset-1">
<select class="form-control m-b" ng-options="d.id as d.name for d in privacyDraftsHistory" ng-model="policyVersion" ng-change="handlePolicyRevisionChange()"> <select class="form-control m-b" ng-options="d.id as d.name for d in privacyDraftsHistory" ng-model="privacyPolicy.version" ng-change="handlePolicyRevisionChange()">
<option value="" translate>{{ 'settings.privacy.current_policy' }}</option> <option value="" translate>{{ 'settings.privacy.current_policy' }}</option>
</select> </select>
<div class="text-justify" ng-model="privacyBodySetting.value" medium-editor options='{"placeholder": "{{ "settings.input_the_main_content" | translate }}", <div class="text-justify" ng-model="privacyPolicy.bodyTemp" medium-editor options='{"placeholder": "{{ "settings.input_the_main_content" | translate }}",
"buttons": ["bold", "italic", "anchor", "header1", "header2" ] "buttons": ["bold", "italic", "anchor", "header1", "header2" ]
}'> }'>

View File

@ -688,6 +688,7 @@ en:
about_title: "\"About\" page title" about_title: "\"About\" page title"
about_body: "\"About\" page content" about_body: "\"About\" page content"
about_contacts: "\"About\" page contacts" about_contacts: "\"About\" page contacts"
privacy_draft: "privacy policy draft"
privacy_body: "privacy policy" privacy_body: "privacy policy"
privacy_dpo: "data protection officer address" privacy_dpo: "data protection officer address"
booking_window_start: "opening time" booking_window_start: "opening time"

View File

@ -688,6 +688,7 @@ es:
about_title: "Título de la página \"Acerca de\"" about_title: "Título de la página \"Acerca de\""
about_body: "Contenido de la página \"Acerca de\"" about_body: "Contenido de la página \"Acerca de\""
about_contacts: "Página contactos\"Acerca de\"" about_contacts: "Página contactos\"Acerca de\""
privacy_draft: "privacy policy draft" # translation_missing
privacy_body: "privacy policy" # translation_missing privacy_body: "privacy policy" # translation_missing
privacy_dpo: "data protection officer address" # translation_missing privacy_dpo: "data protection officer address" # translation_missing
booking_window_start: "hora de apertura" booking_window_start: "hora de apertura"

View File

@ -688,6 +688,7 @@ fr:
about_title: "titre de la page \"À propos\"" about_title: "titre de la page \"À propos\""
about_body: "corps de la page \"À propos\"" about_body: "corps de la page \"À propos\""
about_contacts: "contacts sur la page \"À propos\"" about_contacts: "contacts sur la page \"À propos\""
privacy_draft: "brouillon de la politique de confidentialité"
privacy_body: "la politique de confidentialité" privacy_body: "la politique de confidentialité"
privacy_dpo: "l'adresse du délégué à la protection des données" privacy_dpo: "l'adresse du délégué à la protection des données"
booking_window_start: "l'heure d'ouverture" booking_window_start: "l'heure d'ouverture"

View File

@ -688,6 +688,7 @@ pt:
about_title: "\"Sobre\" título da página" about_title: "\"Sobre\" título da página"
about_body: "\"Sobre\" conteúdo da página" about_body: "\"Sobre\" conteúdo da página"
about_contacts: "\"Sobre\" página de contatos" about_contacts: "\"Sobre\" página de contatos"
privacy_draft: "privacy policy draft" # translation_missing
privacy_body: "privacy policy" # translation_missing privacy_body: "privacy policy" # translation_missing
privacy_dpo: "data protection officer address" # translation_missing privacy_dpo: "data protection officer address" # translation_missing
booking_window_start: "Horário de abertura" booking_window_start: "Horário de abertura"