Skip to content

Commit

Permalink
WIP event planning personal and group separation
Browse files Browse the repository at this point in the history
  • Loading branch information
catdesu committed Mar 11, 2024
1 parent 861b131 commit a6dec34
Show file tree
Hide file tree
Showing 7 changed files with 272 additions and 117 deletions.
16 changes: 16 additions & 0 deletions orif/timbreuse/Config/Routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@
// User groups routes
$routes->group('user-groups', function($routes) {
$routes->get('', '\Timbreuse\Controllers\UserGroups');

$routes->get('create', '\Timbreuse\Controllers\UserGroups::create');
$routes->get('create/(:num)', '\Timbreuse\Controllers\UserGroups::create/$1');
$routes->post('create', '\Timbreuse\Controllers\UserGroups::create');

$routes->get('update/(:num)', '\Timbreuse\Controllers\UserGroups::update/$1');
$routes->get('update/(:num)/(:num)', '\Timbreuse\Controllers\UserGroups::update/$1/$2');
$routes->post('update/(:num)', '\Timbreuse\Controllers\UserGroups::update/$1');

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

Expand All @@ -30,22 +33,29 @@
// Event plannings
$routes->group('event-plannings', function($routes) {
$routes->get('', '\Timbreuse\Controllers\EventPlannings');

$routes->get('personal/create', '\Timbreuse\Controllers\EventPlannings::createPersonal');
$routes->post('personal/create', '\Timbreuse\Controllers\EventPlannings::createPersonal');
$routes->get('personal/create/(:num)', '\Timbreuse\Controllers\EventPlannings::createPersonal/$1');

$routes->get('group/create', '\Timbreuse\Controllers\EventPlannings::createGroup');
$routes->post('group/create', '\Timbreuse\Controllers\EventPlannings::createGroup');
$routes->get('group/create/(:num)', '\Timbreuse\Controllers\EventPlannings::createGroup/$1');

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

// Event types routes
$routes->group('event-types', function($routes) {
$routes->get('', '\Timbreuse\Controllers\EventTypes');

$routes->get('create', '\Timbreuse\Controllers\EventTypes::create');
$routes->post('create', '\Timbreuse\Controllers\EventTypes::create');

$routes->get('update/(:num)', '\Timbreuse\Controllers\EventTypes::update/$1');
$routes->post('update/(:num)', '\Timbreuse\Controllers\EventTypes::update/$1');

$routes->get('delete/(:num)', '\Timbreuse\Controllers\EventTypes::delete/$1');
$routes->post('delete/(:num)/(:num)', '\Timbreuse\Controllers\EventTypes::delete/$1/$2');
});
Expand All @@ -55,6 +65,12 @@
});
});

// Personal event planning
$routes->group('event-plannings', function($routes) {
$routes->get('', '\Timbreuse\Controllers\PersonalEventPlannings::index');
$routes->get('(:num)', '\Timbreuse\Controllers\PersonalEventPlannings::index/$1');
});

// Event series routes
$routes->get('event-series/html/form', '\Timbreuse\Controllers\EventSeries::getCreateSeriesHTML');

Expand Down
108 changes: 7 additions & 101 deletions orif/timbreuse/Controllers/EventPlannings.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,20 @@

namespace Timbreuse\Controllers;

use App\Controllers\BaseController;
use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
use Timbreuse\Models\EventPlanningsModel;
use Timbreuse\Models\EventTypesModel;
use Timbreuse\Models\UserGroupsModel;
use Timbreuse\Models\UsersModel;

class EventPlannings extends BaseController
class EventPlannings extends PersonalEventPlannings
{
// Class properties
private EventPlanningsModel $eventPlanningsModel;
private EventTypesModel $eventTypesModel;
private UserGroupsModel $userGroupsModel;
private UsersModel $userModel;

/**
* Constructor
Expand All @@ -40,17 +37,19 @@ public function initController(
$this->eventPlanningsModel = new EventPlanningsModel();
$this->eventTypesModel = new EventTypesModel();
$this->userGroupsModel = new UserGroupsModel();
$this->userModel = new UsersModel();
}

/**
* Display the event plannings list
*
* @return string
*/
public function index() : string {
#[\Override]
public function index(?int $timUserId = null) : string {
$data['title'] = lang('tim_lang.event_plannings_list');
$data['list_title'] = ucfirst(lang('tim_lang.event_plannings_list'));
$data['isVisible'] = true;
$data['route'] = '';

$data['columns'] = [
'event_date' => ucfirst(lang('tim_lang.field_event_date')),
Expand All @@ -75,47 +74,7 @@ public function index() : string {
$data['url_update'] = 'admin/event-plannings/update/';
$data['url_delete'] = 'admin/event-plannings/delete/';

return $this->display_view('Common\Views\items_list', $data);
}

/**
* Display the create form
*
* @return string|RedirectResponse
*/
public function createPersonal(?int $userId = null) : string|RedirectResponse {
$eventTypes = $this->eventTypesModel->where('is_personal_event_type', true)->findAll();
$user = null;

if (!is_null($userId)) {
$user = $this->userModel->find($userId);
}

$data = [
'title' => lang('tim_lang.create_event_planning_title'),
'eventPlanning' => null,
'sessionEventPlanning' => session()->get('eventPlanningPostData'),
'eventTypes' => $this->mapForSelectForm($eventTypes),
'user' => $user
];

session()->remove('eventPlanningPostData');

if (isset($_POST) && !empty($_POST)) {
if ($this->checkButtonClicked('select_linked_user')) {
return redirect()->to(base_url('admin/users/select?path=admin/event-plannings/personal/create/'));
}

$data['errors'] = $this->getPostDataAndSaveEventPlanning();

if (empty($data['errors'])) {
return redirect()->to(base_url('admin/event-plannings'));
}
}

return $this->display_view([
'Timbreuse\Views\eventPlannings\personal\save_form',
'Timbreuse\Views\eventPlannings\get_event_series_form'], $data);
return $this->display_view(['Common\Views\items_list'], $data);
}

/**
Expand Down Expand Up @@ -154,6 +113,7 @@ public function createGroup(?int $userGroupId = null) : string|RedirectResponse
}

return $this->display_view([
'Timbreuse\Views\eventPlannings\event_tabs',
'Timbreuse\Views\eventPlannings\group\save_form',
'Timbreuse\Views\eventPlannings\get_event_series_form'], $data);
}
Expand Down Expand Up @@ -194,58 +154,4 @@ public function delete(int $id, int $action = 0) : string|RedirectResponse {

return redirect()->to(base_url('admin/event-plannings'));
}

/**
* Retrieves post data from the request and saves the event planning information
*
* @return array Validation errors encountered during the saving process
*/
private function getPostDataAndSaveEventPlanning() : array {
// todo: Save event serie and get id of saved + errors
$eventPlanning = [
'id' => $this->request->getPost('id'),
'fk_event_series_id' => null,
'fk_user_group_id' => $this->request->getPost('linked_user_group_id') ?? null,
'fk_user_sync_id' => $this->request->getPost('linked_user_id') ?? null,
'fk_event_type_id' => $this->request->getPost('fk_event_type_id'),
'event_date' => $this->request->getPost('event_date'),
'start_time' => $this->request->getPost('start_time'),
'end_time' => $this->request->getPost('end_time'),
'is_work_time' => (bool)$this->request->getPost('is_work_time'),
];

$this->eventPlanningsModel->save($eventPlanning);
return $this->eventPlanningsModel->errors();
}

private function mapForSelectForm($array) : array {
return array_combine(array_column($array, 'id'), array_map(function($row) {
return $row['name'];
}, $array));
}

/**
* Check if selectParentButton has been clicked
* Save post data on true
*
* @return bool
*/
private function checkButtonClicked(string $buttonName) : bool {
$selectParentUserGroup = boolval($this->request->getPost($buttonName));

if ($selectParentUserGroup) {
$this->savePostDataToSession('eventPlanningPostData');
}

return $selectParentUserGroup;
}

/**
* Save post data in the user session
*
* @return void
*/
private function savePostDataToSession(string $key) : void {
session()->set($key, $this->request->getPost());
}
}
13 changes: 13 additions & 0 deletions orif/timbreuse/Controllers/PersoLogs.php
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,18 @@ protected function create_planning_link(?int $timUserId=null): array
$button['label'] = ucfirst(lang('tim_lang.planning'));
return $button;
}

protected function create_event_planning_link(?int $timUserId=null): array
{
helper('UtilityFunctions');
if ($timUserId === get_tim_user_id()) {
$button['link'] = base_url('event-plannings');
} else {
$button['link'] = base_url("event-plannings/$timUserId");
}
$button['label'] = ucfirst(lang('tim_lang.event_plannings_list'));
return $button;
}

protected function get_buttons_for_log_views($day, $period,
?int $timUserId=null): array
Expand All @@ -197,6 +209,7 @@ protected function get_buttons_for_log_views($day, $period,
$data['buttons']
);
array_push($data['buttons'], $this->create_planning_link($timUserId));
array_push ($data['buttons'], $this->create_event_planning_link($timUserId));
return $data;
}

Expand Down
Loading

0 comments on commit a6dec34

Please sign in to comment.