Skip to content

Commit

Permalink
Delete a event serie with their linked event plannings
Browse files Browse the repository at this point in the history
  • Loading branch information
catdesu committed Mar 14, 2024
1 parent e6289b6 commit d5edf15
Show file tree
Hide file tree
Showing 5 changed files with 129 additions and 20 deletions.
3 changes: 3 additions & 0 deletions orif/timbreuse/Config/Routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@

$routes->group('event-series', function($routes) {
$routes->get('', '\Timbreuse\Controllers\EventSeries');

$routes->get('delete/(:num)', '\Timbreuse\Controllers\EventSeries::delete/$1');
$routes->post('delete/(:num)/(:num)', '\Timbreuse\Controllers\EventSeries::delete/$1/$2');
});

// Event types routes
Expand Down
72 changes: 53 additions & 19 deletions orif/timbreuse/Controllers/EventSeries.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,25 +48,7 @@ public function index() {
'days_of_week' => ucfirst(lang('tim_lang.field_days_of_week')),
];

$eventSeries = $eventSeriesModel
->select('
event_series.id,
start_date,
end_date,
recurrence_frequency,
recurrence_interval,
days_of_week,
GROUP_CONCAT(DISTINCT event_type.name) AS event_type_name,
GROUP_CONCAT(DISTINCT user_group.name) AS user_group_name,
GROUP_CONCAT(DISTINCT user_sync.name) AS user_lastname,
GROUP_CONCAT(DISTINCT user_sync.surname) AS user_firstname'
)
->join('event_planning', 'fk_event_series_id = event_series.id', 'left')
->join('event_type', 'event_type.id = fk_event_type_id', 'left')
->join('user_sync', 'user_sync.id_user = fk_user_sync_id', 'left')
->join('user_group', 'user_group.id = fk_user_group_id', 'left')
->groupBy('event_series.id')
->findAll();
$eventSeries = $eventSeriesModel->findAllSeries();

$data['items'] = array_map(function($eventSerie) {
return [
Expand Down Expand Up @@ -210,6 +192,58 @@ private function createEventPlannings(array $eventSerie, array $eventPlanning) :

return $planningErrors;
}

/**
* Display the delete form and delete the corresponding event planning
*
* @param int $id
* @param int $action
* @return string|RedirectResponse
*/
public function delete(int $id, int $action = 0) : string|RedirectResponse {
$eventSeriesModel = model(EventSeriesModel::class);
$eventPlanningModel = model(EventPlanningsModel::class);
$eventSerie = $eventSeriesModel->findAllSeries($id);
$route = 'admin/event-series';

$of_group_or_user = '';

if (!is_null($eventSerie['user_group_name'])) {
$of_group_or_user .= lang('tim_lang.of_group');
} else {
$of_group_or_user .= lang('tim_lang.of_user');
}

$data = [
'title' => lang('tim_lang.delete_event_serie'),
'eventSerie' => $eventSerie,
'titleParameters' => [
'event_type_name' => $eventSerie['event_type_name'],
'of_group_or_user' => $of_group_or_user,
'group_or_user' => $eventSerie['user_group_name'] ??
"{$eventSerie['user_firstname']} {$eventSerie['user_lastname']}",
],
'route' => $route
];

switch ($action) {
case 0:
return $this->display_view('Timbreuse\Views\eventSeries\confirm_delete', $data);

case 1:
// In case soft delete is implemented
break;

case 2:
if (isset($_POST) && !empty($_POST) && !is_null($_POST['confirmation'])) {
$eventPlanningModel->where('fk_event_series_id', $id)->delete(null, true);
$eventSeriesModel->delete($id, true);
}
break;
}

return redirect()->to(base_url($route));
}

/**
* Get the next date when an event will happen
Expand Down
6 changes: 6 additions & 0 deletions orif/timbreuse/Language/fr/tim_lang.php
Original file line number Diff line number Diff line change
Expand Up @@ -173,4 +173,10 @@
'event_series_list' => 'Séries d’événements',
'group_or_user_name' => 'Groupe / utilisateur',
'personal_event_plannings_list' => 'Événements de planning de "{firstname} {lastname}"',
'delete_event_serie' => 'Supprimer la série d’événement "{event_type_name}" {of_group_or_user} "{group_or_user}"',
'btn_hard_delete_event_serie' => 'Supprimer cette série d’événement',
'really_want_to_delete_event_serie' => 'Voulez-vous vraiment supprimer cette série d’événement ?',
'delete_event_serie_explanation' => nl2br("La suppression d’une série d’événement va également définitivement supprimer tous les événements de planning qui lui sont liés.\n\nLes événements de planning ayant été modifiés seront eux-aussi supprimés."),
'of_group' => 'du groupe',
'of_user' => 'de l’utilisateur',
];
26 changes: 25 additions & 1 deletion orif/timbreuse/Models/EventSeriesModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,33 @@ protected function encodeDays(array $data) {
protected function decodeDays(array $data) {
if (isset($data) && count($data['data']) > 0) {
foreach($data['data'] as &$row) {
$row['days_of_week'] = json_decode($row['days_of_week']);
if (is_array($row) && array_key_exists('days_of_week', $row)) {
$row['days_of_week'] = json_decode($row['days_of_week']);
}
}
}
return $data;
}

public function findAllSeries(?int $eventSeriesId = null) : array {
return $this
->select('
event_series.id,
start_date,
end_date,
recurrence_frequency,
recurrence_interval,
days_of_week,
GROUP_CONCAT(DISTINCT event_type.name) AS event_type_name,
GROUP_CONCAT(DISTINCT user_group.name) AS user_group_name,
GROUP_CONCAT(DISTINCT user_sync.name) AS user_lastname,
GROUP_CONCAT(DISTINCT user_sync.surname) AS user_firstname'
)
->join('event_planning', 'fk_event_series_id = event_series.id', 'left')
->join('event_type', 'event_type.id = fk_event_type_id', 'left')
->join('user_sync', 'user_sync.id_user = fk_user_sync_id', 'left')
->join('user_group', 'user_group.id = fk_user_group_id', 'left')
->groupBy('event_series.id')
->find($eventSeriesId);
}
}
42 changes: 42 additions & 0 deletions orif/timbreuse/Views/eventSeries/confirm_delete.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<div id="page-content-wrapper">
<div class="container">
<div class="row">
<div class="col-12">
<div>
<h1><?= lang('tim_lang.delete_event_serie', $titleParameters) ?></h1>
<h4><?= lang('user_lang.what_to_do') ?></h4>
<div class="alert alert-warning"><?= lang('tim_lang.delete_event_serie_explanation') ?></div>
</div>
<div class="text-right">
<a href="<?= base_url($route); ?>" class="btn btn-secondary">
<?= lang('common_lang.btn_cancel'); ?>
</a>
<button class="btn btn-danger" data-toggle="modal" data-target="#confirmDeleteEventType">
<?= lang('tim_lang.btn_hard_delete_event_serie'); ?>
</button>

<!-- MODAL DELETE CONFIRMATION -->
<div class="modal fade" id="confirmDeleteEventType" tabindex="-1" aria-labelledby="lblConfirmDeleteEventType" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content text-center">
<div class="modal-header">
<h3 class="modal-title"><?= lang('tim_lang.really_want_to_delete_event_serie') ?></h3>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">
<?= lang('common_lang.btn_cancel'); ?>
</button>
<form method="post" action="<?= base_url(uri_string() . '/2'); ?>">
<button type="submit" name="confirmation" class="btn btn-danger">
<?= lang('tim_lang.btn_hard_delete_event_serie'); ?>
</button>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

0 comments on commit d5edf15

Please sign in to comment.