Show disclaimer + ack checkbox directly on page instead of using modals. Check that disclaimer was acknowledged.

This commit is contained in:
Alexandre Aubin 2018-04-13 03:45:15 +02:00
parent 06ac72375f
commit 535f4c01a8
2 changed files with 45 additions and 32 deletions

View file

@ -260,6 +260,10 @@
// Get rid of _ in the raw name of migrations (cosmetic) // Get rid of _ in the raw name of migrations (cosmetic)
for(var i = 0; i < pending_migrations.length; i++) { for(var i = 0; i < pending_migrations.length; i++) {
pending_migrations[i].name = pending_migrations[i].name.replace(/_/g, " ") pending_migrations[i].name = pending_migrations[i].name.replace(/_/g, " ")
if (pending_migrations[i].disclaimer)
{
pending_migrations[i].disclaimer = pending_migrations[i].disclaimer.replace(/\n/g, "<br />");
}
} }
for(var i = 0; i < done_migrations.length; i++) { for(var i = 0; i < done_migrations.length; i++) {
done_migrations[i].name = done_migrations[i].name.replace(/_/g, " ") done_migrations[i].name = done_migrations[i].name.replace(/_/g, " ")
@ -274,45 +278,43 @@
}); });
app.get('#/tools/migrations/run', function (c) { app.get('#/tools/migrations/run', function (c) {
c.api('/migrations?pending', function(pending_migrations) { var disclaimerAcks = $(".disclaimer-ack");
pending_migrations = pending_migrations.migrations; var withAcceptDisclaimerFlag = false;
var disclaimers = []; for (var i = 0 ; i < disclaimerAcks.length ; i++)
var migrationsLength = pending_migrations.length; {
for(var i = 0; i < migrationsLength; i++) { console.log($(disclaimerAcks[i]).find("input:checked").val());
var m = pending_migrations[i]; if (! $(disclaimerAcks[i]).find("input:checked").val())
if (m.disclaimer)
{
disclaimers.push("<h3>"+m.number+". "+m.name+"</h3>"
+m.disclaimer.replace(/\n/g, "<br />"));
}
};
if (disclaimers.length)
{ {
c.confirm( // FIXME / TODO i18n
y18n.t('migrations'), c.flash('fail', "Some of these migrations require you to acknowledge a disclaimer before running them.");
disclaimers.join('<hr>'), c.redirect('#/tools/migrations');
function(){ return;
c.api('/migrations/migrate?accept_disclaimer',
function (data) {
store.clear('slide');
c.redirect('#/tools/migrations');
}, 'POST')
},
function(){
store.clear('slide');
c.redirect('#/tools/migrations');
}
);
} }
else else
{ {
c.api('/migrations/migrate', withAcceptDisclaimerFlag = true;
}
};
// Not sure if necessary, but this distinction is to avoid accidentally
// triggering a migration with a disclaimer if one goes to the
// /tools/migrations/run page "directly" somehow ...
if (withAcceptDisclaimerFlag)
{
c.api('/migrations/migrate?accept_disclaimer',
function (data) { function (data) {
store.clear('slide'); store.clear('slide');
c.redirect('#/tools/migrations'); c.redirect('#/tools/migrations');
}, 'POST'); }, 'POST')
} }
}); else
{
c.api('/migrations/migrate',
function (data) {
store.clear('slide');
c.redirect('#/tools/migrations');
}, 'POST')
}
}); });
app.get('#/tools/migrations/skip', function (c) { app.get('#/tools/migrations/skip', function (c) {

View file

@ -28,6 +28,17 @@
<p id="description-migration-{{number}}" class="list-group-item-text"> <p id="description-migration-{{number}}" class="list-group-item-text">
{{ description }} {{ description }}
</p> </p>
{{#if disclaimer }}
<hr>
<p id="disclaimer-migration-{{number}}" class="list-group-item-text">
{{ disclaimer }}
<div style="margin-left:20px">
<label style="" id="disclaimer-ack-migration-{{number}}" class="checkbox disclaimer-ack">
<input type="checkbox"> I read and understood this disclaimer
</label>
</div>
</p>
{{/if}}
</div> </div>
{{/pending_migrations}} {{/pending_migrations}}
</div> </div>