Merge branch 'feature/allow-to-remove-date-in-wizard' into 'develop'

Allow to remove date in the poll creation wizard

CF MR !140 

To be cherry-picked in `release`.

See merge request !146
This commit is contained in:
Olivier Perez 2016-08-08 17:15:18 +02:00
parent 1d5af5de3b
commit f3ce74d997
11 changed files with 113 additions and 53 deletions

View File

@ -120,6 +120,17 @@ switch ($step) {
// Clear previous choices
$_SESSION['form']->clearChoices();
// Reorder moments to deal with suppressed dates
$moments = array();
$i = 0;
while(count($moments) < count($_POST['days'])) {
if (!empty($_POST['horaires' . $i])) {
$moments[] = $_POST['horaires' . $i];
}
$i++;
}
for ($i = 0; $i < count($_POST['days']); $i++) {
$day = $_POST['days'][$i];
@ -130,7 +141,7 @@ switch ($step) {
$choice = new Choice($time);
$_SESSION['form']->addChoice($choice);
$schedules = $inputService->filterArray($_POST['horaires' . $i], FILTER_DEFAULT);
$schedules = $inputService->filterArray($moments[$i], FILTER_DEFAULT);
for ($j = 0; $j < count($schedules); $j++) {
if (!empty($schedules[$j])) {
$choice->addSlot(strip_tags($schedules[$j]));
@ -138,6 +149,7 @@ switch ($step) {
}
}
}
$_SESSION['form']->sortChoices();
}
// Display step 3

View File

@ -475,6 +475,15 @@ table.results > tbody > tr:hover > td .glyphicon {
border:none;
background:transparent;
}
#selected-days legend .input-group-addon:last-of-type {
padding-top: 0;
padding-bottom: 0;
}
#selected-days legend {
height: 33px;
}
/* create_classic_poll.php */
.md-a-img {
text-decoration:none !important;

View File

@ -73,29 +73,43 @@ $(document).ready(function () {
.replace('%Y', ("0000" + date.getFullYear()).slice(-4));
};
function getLastDayNumber(last_day) {
if (last_day == null)
last_day = $selected_days.find('fieldset').filter(':last');
return parseInt(/^d([0-9]+)-h[0-9]+$/.exec($(last_day).find('.hours').filter(':first').attr('id'))[1])
}
function newDateFields(dateStr) {
var nb_days = $selected_days.find('fieldset').length;
var last_day = $selected_days.find('fieldset:last');
var last_day = $selected_days.find('fieldset').filter(':last');
var last_day_title = last_day.find('legend input').attr('title');
var new_day_number = getLastDayNumber(last_day) + 1;
var re_id_hours = new RegExp('"d' + (nb_days - 1) + '-h', 'g');
var re_name_hours = new RegExp('name="horaires' + (nb_days - 1), 'g');
var re_id_hours = new RegExp('"d' + (new_day_number - 1) + '-h', 'g');
var re_name_hours = new RegExp('name="horaires' + (new_day_number - 1), 'g');
var new_day_html = last_day.html().replace(re_id_hours, '"d' + nb_days + '-h')
.replace('id="day' + (nb_days - 1) + '"', 'id="day' + nb_days + '"')
.replace('for="day' + (nb_days - 1) + '"', 'for="day' + nb_days + '"')
.replace(re_name_hours, 'name="horaires' + nb_days)
var new_day_html = last_day.html().replace(re_id_hours, '"d' + new_day_number + '-h')
.replace('id="day' + (new_day_number - 1) + '"', 'id="day' + new_day_number + '"')
.replace('for="day' + (new_day_number - 1) + '"', 'for="day' + new_day_number + '"')
.replace(re_name_hours, 'name="horaires' + new_day_number)
.replace(/value="(.*?)"/g, 'value=""')
.replace(/hours" title="(.*?)"/g, 'hours" title="" p')
.replace('title="' + last_day_title + '"', 'title="' + last_day_title.substring(0, last_day_title.indexOf(' ')) + ' ' + (nb_days + 1) + '"');
.replace('title="' + last_day_title + '"', 'title="' + last_day_title.substring(0, last_day_title.indexOf(' ')) + ' ' + (new_day_number + 1) + '"');
last_day
.after('<fieldset>' + new_day_html + '</fieldset>')
.next().find('legend input').val(dateStr);
$('#day' + (nb_days)).focus();
$('#day' + (new_day_number)).focus();
$removeaday_and_copyhours.removeClass('disabled');
}
function manageRemoveadayAndCopyhoursButtons() {
var nb_days = $selected_days.find('fieldset').length;
$('#day' + (getLastDayNumber() - 1)).focus();
if (nb_days == 1) {
$removeaday_and_copyhours.addClass('disabled');
}
}
var useFirstEmptyDateField = function (dateStr) {
var used = false;
$selected_days.find('fieldset legend input').each(function () {
@ -218,11 +232,18 @@ $(document).ready(function () {
$('#remove-a-day').on('click', function () {
$selected_days.find('fieldset:last').remove();
var nb_days = $selected_days.find('fieldset').length;
$('#day' + (nb_days - 1)).focus();
if (nb_days == 1) {
$removeaday_and_copyhours.addClass('disabled');
manageRemoveadayAndCopyhoursButtons();
submitDaysAvalaible();
});
// Button "Remove the current day"
$(document).on('click', '.remove-day', function () {
if ($('#days_container').find('fieldset').length > 1) {
$(this).parents('fieldset').remove();
}
manageRemoveadayAndCopyhoursButtons();
submitDaysAvalaible();
});

View File

@ -260,6 +260,7 @@
"Copy hours of the first day": "Eilañ eurioù an devezh kentañ war an devezhioù all",
"Remove a day": "Dilemel an devezh diwezhañ",
"Add a day": "Ouzhpennañ un devezh",
"Remove this day": "BR_Supprimer ce jour",
"Remove all days": "Dilemel an holl zevezhioù",
"Remove all hours": "Dilemel an holl eurioù"
},

View File

@ -262,6 +262,7 @@
"Copy hours of the first day": "Uhrzeiten des ersten Tags kopieren",
"Remove a day": "Einen Tag entfernen",
"Add a day": "Einen Tag hinzufügen",
"Remove this day": "DE_Supprimer ce jour",
"Remove all days": "Alle Tage entfernen",
"Remove all hours": "Alle Uhrzeiten entfernen"
},

View File

@ -262,6 +262,7 @@
"Copy hours of the first day": "Copy times from the first day",
"Remove a day": "Remove a day",
"Add a day": "Add a day",
"Remove this day": "Remove this day",
"Remove all days": "Remove all days",
"Remove all hours": "Remove all times"
},

View File

@ -262,6 +262,7 @@
"Copy hours of the first day": "Copiar los horarios del primer día en los otros días",
"Remove a day": "Borrar el último día",
"Add a day": "Añadir un día",
"Remove this day": "ES_Supprimer ce jour",
"Remove all days": "Borrar todos los días",
"Remove all hours": "Borrar todos los horarios"
},

View File

@ -262,6 +262,7 @@
"Copy hours of the first day": "Reporter les horaires du premier jour sur les autres jours",
"Remove a day": "Supprimer le dernier jour",
"Add a day": "Ajouter un jour",
"Remove this day": "Supprimer ce jour",
"Remove all days": "Effacer tous les jours",
"Remove all hours": "Effacer tous les horaires"
},

View File

@ -262,6 +262,7 @@
"Copy hours of the first day": "Copiare gli orari del primo giorno",
"Remove a day": "Eliminare l'ultimo giorno",
"Add a day": "Aggiungere un giorno",
"Remove this day": "IT_Supprimer ce jour",
"Remove all days": "Cancellare tutti i giorni",
"Remove all hours": "Cancellare tutti gli orari"
},

View File

@ -262,6 +262,7 @@
"Copy hours of the first day": "Reportar los oraris del primièr jorn suls autres jorns",
"Remove a day": "Suprimir lo darrièr jorn",
"Add a day": "Ajustar un jorn",
"Remove this day": "OC_Supprimer ce jour",
"Remove all days": "Suprimir totes los jorns",
"Remove all hours": "Suprimir totes los oraris"
},

View File

@ -36,49 +36,60 @@
<p>{__('Step 2 date', 'For each selected day, you can choose, or not, meeting hours (e.g.: "8h", "8:30", "8h-10h", "evening", etc.)')}</p>
</div>
{foreach $choices as $i=>$choice}
{if $choice->getName()}
{$day_value = $choice->getName()|date_format:$date_format['txt_date']}
{else}
{$day_value = ''}
{/if}
<fieldset>
<div class="form-group">
<legend>
<label class="sr-only" for="day{$i}">{__('Generic', 'Day')} {$i+1}</label>
<div id="days_container">
{foreach $choices as $i=>$choice}
{if $choice->getName()}
{$day_value = $choice->getName()|date_format:$date_format['txt_date']}
{else}
{$day_value = ''}
{/if}
<fieldset>
<div class="form-group">
<legend>
<label class="sr-only" for="day{$i}">{__('Generic', 'Day')} {$i+1}</label>
<div class="input-group date col-xs-7">
<span class="input-group-addon"><i class="glyphicon glyphicon-calendar text-info"></i></span>
<input type="text" class="form-control" id="day{$i}" title="{__('Generic', 'Day')} {$i+1}"
data-date-format="{__('Date', 'dd/mm/yyyy')}" aria-describedby="dateformat{$i}" name="days[]" value="{$day_value}"
size="10" maxlength="10" placeholder="{__('Date', 'dd/mm/yyyy')}" autocomplete="nope"/>
</div>
<span id="dateformat{$i}" class="sr-only">({__('Date', 'dd/mm/yyyy')})</span>
</legend>
<div class="col-xs-10 col-sm-11">
<div class="input-group date">
<span class="input-group-addon"><i class="glyphicon glyphicon-calendar text-info"></i></span>
<input type="text" class="form-control" id="day{$i}" title="{__('Generic', 'Day')} {$i+1}"
data-date-format="{__('Date', 'dd/mm/yyyy')}" aria-describedby="dateformat{$i}" name="days[]" value="{$day_value}"
size="10" maxlength="10" placeholder="{__('Date', 'dd/mm/yyyy')}" autocomplete="nope"/>
</div>
</div>
<div class="col-xs-2 col-sm-1">
<button type="button" title="{__('Step 2 date', 'Remove this day')}" class="remove-day btn btn-sm btn-link">
<span class="glyphicon glyphicon-remove text-danger"></span>
<span class="sr-only">{__('Step 2 date', 'Remove this day')}</span>
</button>
</div>
<span id="dateformat{$i}" class="sr-only">({__('Date', 'dd/mm/yyyy')})</span>
</legend>
{foreach $choice->getSlots() as $j=>$slot}
<div class="col-sm-2">
<label for="d{$i}-h{$j}" class="sr-only control-label">{__('Generic', 'Time')} {$j+1}</label>
<input type="text" class="form-control hours" title="{$day_value} - {__('Generic', 'Time')} {$j+1}"
placeholder="{__('Generic', 'Time')} {$j+1}" id="d{$i}-h{$j}" name="horaires{$i}[]" value="{$slot}"/>
</div>
{/foreach}
{foreach $choice->getSlots() as $j=>$slot}
<div class="col-sm-2">
<label for="d{$i}-h{$j}" class="sr-only control-label">{__('Generic', 'Time')} {$j+1}</label>
<input type="text" class="form-control hours" title="{$day_value} - {__('Generic', 'Time')} {$j+1}"
placeholder="{__('Generic', 'Time')} {$j+1}" id="d{$i}-h{$j}" name="horaires{$i}[]" value="{$slot}"/>
</div>
{/foreach}
<div class="col-sm-2">
<div class="btn-group btn-group-xs" style="margin-top: 5px;">
<button type="button" title="{__('Step 2 date', 'Remove an hour')}" class="remove-an-hour btn btn-default">
<span class="glyphicon glyphicon-minus text-info"></span>
<span class="sr-only">{__('Step 2 date', 'Remove an hour')}</span>
</button>
<button type="button" title="{__('Step 2 date', 'Add an hour')}" class="add-an-hour btn btn-default">
<span class="glyphicon glyphicon-plus text-success"></span>
<span class="sr-only">{__('Step 2 date', 'Add an hour')}</span>
</button>
<div class="btn-group btn-group-xs" style="margin-top: 5px;">
<button type="button" title="{__('Step 2 date', 'Remove an hour')}" class="remove-an-hour btn btn-default">
<span class="glyphicon glyphicon-minus text-info"></span>
<span class="sr-only">{__('Step 2 date', 'Remove an hour')}</span>
</button>
<button type="button" title="{__('Step 2 date', 'Add an hour')}" class="add-an-hour btn btn-default">
<span class="glyphicon glyphicon-plus text-success"></span>
<span class="sr-only">{__('Step 2 date', 'Add an hour')}</span>
</button>
</div>
</div>
</div>
</div>
</fieldset>
{/foreach}
</fieldset>
{/foreach}
</div>
<div class="col-md-4">