From ec3256b3cc52f0c7b6fbd7e8c21e675c35ab8487 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=B3th=20Rich=C3=A1rd?= Date: Sun, 28 Jul 2019 15:45:19 +0200 Subject: [PATCH] training/presence visibility by coach --- _class/class_training.php | 5 + _class/class_user.php | 5 + _include/include_presence.php | 259 ++++++++++++++++++--------------- _include/include_trainings.php | 90 +++++++----- 4 files changed, 204 insertions(+), 155 deletions(-) diff --git a/_class/class_training.php b/_class/class_training.php index 323aea6..c7b607a 100644 --- a/_class/class_training.php +++ b/_class/class_training.php @@ -135,6 +135,11 @@ class training { return !empty($this->tr_coaches); } + public static function has_any_coach($training_id) { + global $sql; + return $sql->num_of_rows("SELECT * FROM training_coach WHERE trc_training_tr_id = " . $training_id); + } + public function is_helper() { //megadja, hogy van-e beállítva segédedző az edzéshez //TRUE HA IGEN, FALSE EGYÉBKÉNT diff --git a/_class/class_user.php b/_class/class_user.php index 987bc9e..175de2c 100644 --- a/_class/class_user.php +++ b/_class/class_user.php @@ -165,6 +165,11 @@ class user { return $this->authorities; } + public static function user_can_edit_training($user_id, $training_id) { + global $sql; + return $sql->num_of_rows("SELECT * FROM training_coach WHERE trc_coach_uc_id = " . $user_id ." AND trc_training_tr_id = " . $training_id); + } + public static function create_user($_name, $_password, $_authorities = array()) { global $sql; $new_user_id = $sql->insert_into('user_coach', array( diff --git a/_include/include_presence.php b/_include/include_presence.php index 3e541b8..2a3f780 100644 --- a/_include/include_presence.php +++ b/_include/include_presence.php @@ -11,140 +11,161 @@ if ($this->is_id()) { //alg.: lekérjük, hogy az elmúlt 4 hétben, ezen a napon, ezzel az edzés típussal milyen edzés ID-k vannak //presence-ből countoljuk az user_kid ID-kat - - $presence_query = "SELECT * FROM user_kid ORDER BY uk_name;"; - $presence_assoc_array = $sql->assoc_array($presence_query); - //végig kell menni rajta h legeneráljuk az usereket - - $users = array(); - //var_dump($presence_assoc_array); - /* - foreach ($presence_assoc_array as $presence) { - $user = new user_kid(); - $user->set_user_data_by_id($presence['uk_id']); - $users[] = $user; + if (!$user->has_authority_by_name('admin') && !user::user_can_edit_training($user->get_ua_id(), $this->get_id()) && training::has_any_coach($this->get_id())) { + $smarty->display('access_denied.tpl'); } - */ - - //training data - $training = new training(); - $training->set_training_data_by_id($this->get_id()); - - //SZŰRÉS - $tr_ids = array(); - for ($i=1; $i <=4 ; $i++) { - $actual_date = date("Y-m-d H:i:s" , strtotime($training->get_tr_date() . " - " . $i . " weeks")); - $tr_ids_query = "SELECT * FROM training WHERE tr_deleted = 0 AND tr_date = '" . $actual_date . "' and tr_training_type_trt_id = " . $training->get_tr_training_type_trt_id() . ";"; - $tr_id = $sql->single_variable($tr_ids_query); - if ($tr_id) $tr_ids[] = $tr_id; - } - //végigmegyünk az edzésekkel a presencen - $presence_query = " - SELECT `pr_user_kid_uk_id` , count( `pr_id` ) AS 'presence' - FROM `presence` - JOIN user_kid ON uk_id = pr_user_kid_uk_id - JOIN training ON tr_id = pr_training_tr_id - WHERE `pr_training_tr_id`". - (!empty($tr_ids)?"IN ( " . implode(',', $tr_ids) . " ) ":" ") - ."AND `uk_deleted` = 0 - AND `tr_deleted` = 0 - AND `uk_is_active` = 1 - GROUP BY `pr_user_kid_uk_id` - ORDER BY count( `pr_id` ) DESC, uk_name ASC; - "; - //echo $presence_query; - if (!empty($tr_ids)) { + else { + $presence_query = "SELECT * FROM user_kid ORDER BY uk_name;"; $presence_assoc_array = $sql->assoc_array($presence_query); + //végig kell menni rajta h legeneráljuk az usereket + + $users = array(); + //var_dump($presence_assoc_array); + /* foreach ($presence_assoc_array as $presence) { $user = new user_kid(); - $user->set_user_data_by_id($presence['pr_user_kid_uk_id']); + $user->set_user_data_by_id($presence['uk_id']); $users[] = $user; } - } + */ - //legeneráljuk a maradékot - $exeptions = array(); - $rest_users = array(); - foreach ($users as $user) { - $exeptions[] = $user->get_uk_id(); - } + //training data + $training = new training(); + $training->set_training_data_by_id($this->get_id()); - if (!empty($exeptions)) $rest_user_query = "SELECT * FROM user_kid WHERE uk_id NOT IN (" . implode(',', $exeptions) . ") AND uk_deleted = 0 AND uk_is_active = 1 ORDER BY uk_name ASC;"; //ha vannak kiemelt userek - else $rest_user_query = "SELECT * FROM user_kid WHERE uk_deleted = 0 AND uk_is_active = 1 ORDER BY uk_name;"; //ha nincsenek kiemelt userek - $rest_user_assoc_array = $sql->assoc_array($rest_user_query); - foreach ($rest_user_assoc_array as $rest_user) { - $user = new user_kid(); - $user->set_user_data_by_id($rest_user['uk_id']); - $rest_users[] = $user; + //SZŰRÉS + $tr_ids = array(); + for ($i=1; $i <=4 ; $i++) { + $actual_date = date("Y-m-d H:i:s" , strtotime($training->get_tr_date() . " - " . $i . " weeks")); + $tr_ids_query = "SELECT * FROM training WHERE tr_deleted = 0 AND tr_date = '" . $actual_date . "' and tr_training_type_trt_id = " . $training->get_tr_training_type_trt_id() . ";"; + $tr_id = $sql->single_variable($tr_ids_query); + if ($tr_id) $tr_ids[] = $tr_id; + } + //végigmegyünk az edzésekkel a presencen + $presence_query = " + SELECT `pr_user_kid_uk_id` , count( `pr_id` ) AS 'presence' + FROM `presence` + JOIN user_kid ON uk_id = pr_user_kid_uk_id + JOIN training ON tr_id = pr_training_tr_id + WHERE `pr_training_tr_id`". + (!empty($tr_ids)?"IN ( " . implode(',', $tr_ids) . " ) ":" ") + ."AND `uk_deleted` = 0 + AND `tr_deleted` = 0 + AND `uk_is_active` = 1 + GROUP BY `pr_user_kid_uk_id` + ORDER BY count( `pr_id` ) DESC, uk_name ASC; + "; + //echo $presence_query; + if (!empty($tr_ids)) { + $presence_assoc_array = $sql->assoc_array($presence_query); + foreach ($presence_assoc_array as $presence) { + $user = new user_kid(); + $user->set_user_data_by_id($presence['pr_user_kid_uk_id']); + $users[] = $user; + } + } + + //legeneráljuk a maradékot + $exeptions = array(); + $rest_users = array(); + foreach ($users as $user) { + $exeptions[] = $user->get_uk_id(); + } + + if (!empty($exeptions)) $rest_user_query = "SELECT * FROM user_kid WHERE uk_id NOT IN (" . implode(',', $exeptions) . ") AND uk_deleted = 0 AND uk_is_active = 1 ORDER BY uk_name ASC;"; //ha vannak kiemelt userek + else $rest_user_query = "SELECT * FROM user_kid WHERE uk_deleted = 0 AND uk_is_active = 1 ORDER BY uk_name;"; //ha nincsenek kiemelt userek + $rest_user_assoc_array = $sql->assoc_array($rest_user_query); + foreach ($rest_user_assoc_array as $rest_user) { + $user = new user_kid(); + $user->set_user_data_by_id($rest_user['uk_id']); + $rest_users[] = $user; + } + + + + //TRAINING-COACH ARRAY + $trc_query = "SELECT * FROM training_coach JOIN user_coach ON ua_id = trc_coach_uc_id WHERE trc_helper = 0 AND ua_deleted = 0 AND trc_training_tr_id = " . $this->get_id(); + $trc_coaches = array(); + $trc_assoc_array = $sql->assoc_array($trc_query); + foreach ($trc_assoc_array as $trc_data) { + $new_coach = new user(); + $new_coach->set_user_data_by_id($trc_data['trc_coach_uc_id']); + $trc_coaches[] = $new_coach; + } + + //TRAINING-HELPER ARRAY + $trc_query = "SELECT * FROM training_coach JOIN user_coach ON ua_id = trc_coach_uc_id WHERE trc_helper = 1 AND ua_deleted = 0 AND trc_training_tr_id = " . $this->get_id(); + $trc_helpers = array(); + $trc_assoc_array = $sql->assoc_array($trc_query); + foreach ($trc_assoc_array as $trc_data) { + $new_coach = new user(); + $new_coach->set_user_data_by_id($trc_data['trc_coach_uc_id']); + $trc_helpers[] = $new_coach; + } + + //var_dump($users); + + //headcount + $headcount_query = "SELECT * FROM presence WHERE pr_training_tr_id = " . $this->get_id() . ";"; + $headcount = $sql->num_of_rows($headcount_query); + + + //csak lista + $s_users = array(); + $presence_query = " + SELECT `pr_user_kid_uk_id` + FROM `presence` + JOIN user_kid ON uk_id = pr_user_kid_uk_id + WHERE `pr_training_tr_id` = ".$this->get_id()." + AND uk_deleted = 0 + ORDER BY uk_name ASC; + "; + + + $presence_assoc_array = $sql->assoc_array($presence_query); + foreach ($presence_assoc_array as $presence) { + $s_user = new user_kid(); + $s_user->set_user_data_by_id($presence['pr_user_kid_uk_id']); + $s_users[] = $s_user; + } + + + + $smarty->assign('training', $training); + $smarty->assign('trainings', $tr_ids); + $smarty->assign('headcount', count($presence_assoc_array)); + $smarty->assign("trc_coaches", $trc_coaches); + $smarty->assign("trc_helpers", $trc_helpers); + $smarty->assign('presence_assoc_array', $presence_assoc_array); + $smarty->assign('users', $users); + $smarty->assign('sorted_users', $s_users); + $smarty->assign('rest_users', $rest_users); + $smarty->assign('tr_id', $this->get_id()); + + $smarty->display("presence.tpl"); } - //TRAINING-COACH ARRAY - $trc_query = "SELECT * FROM training_coach JOIN user_coach ON ua_id = trc_coach_uc_id WHERE trc_helper = 0 AND ua_deleted = 0 AND trc_training_tr_id = " . $this->get_id(); - $trc_coaches = array(); - $trc_assoc_array = $sql->assoc_array($trc_query); - foreach ($trc_assoc_array as $trc_data) { - $new_coach = new user(); - $new_coach->set_user_data_by_id($trc_data['trc_coach_uc_id']); - $trc_coaches[] = $new_coach; - } - - //TRAINING-HELPER ARRAY - $trc_query = "SELECT * FROM training_coach JOIN user_coach ON ua_id = trc_coach_uc_id WHERE trc_helper = 1 AND ua_deleted = 0 AND trc_training_tr_id = " . $this->get_id(); - $trc_helpers = array(); - $trc_assoc_array = $sql->assoc_array($trc_query); - foreach ($trc_assoc_array as $trc_data) { - $new_coach = new user(); - $new_coach->set_user_data_by_id($trc_data['trc_coach_uc_id']); - $trc_helpers[] = $new_coach; - } - - //var_dump($users); - - //headcount - $headcount_query = "SELECT * FROM presence WHERE pr_training_tr_id = " . $this->get_id() . ";"; - $headcount = $sql->num_of_rows($headcount_query); - - - //csak lista - $s_users = array(); - $presence_query = " - SELECT `pr_user_kid_uk_id` - FROM `presence` - JOIN user_kid ON uk_id = pr_user_kid_uk_id - WHERE `pr_training_tr_id` = ".$this->get_id()." - AND uk_deleted = 0 - ORDER BY uk_name ASC; - "; - - - $presence_assoc_array = $sql->assoc_array($presence_query); - foreach ($presence_assoc_array as $presence) { - $s_user = new user_kid(); - $s_user->set_user_data_by_id($presence['pr_user_kid_uk_id']); - $s_users[] = $s_user; - } - - - - $smarty->assign('training', $training); - $smarty->assign('trainings', $tr_ids); - $smarty->assign('headcount', count($presence_assoc_array)); - $smarty->assign("trc_coaches", $trc_coaches); - $smarty->assign("trc_helpers", $trc_helpers); - $smarty->assign('presence_assoc_array', $presence_assoc_array); - $smarty->assign('users', $users); - $smarty->assign('sorted_users', $s_users); - $smarty->assign('rest_users', $rest_users); - $smarty->assign('tr_id', $this->get_id()); - - $smarty->display("presence.tpl"); - } else { - $traning_list_query = "SELECT * FROM training WHERE tr_deleted = 0 ORDER BY tr_date DESC;"; + if ($user->has_authority_by_name('admin')) { + $traning_list_query = "SELECT * FROM training WHERE tr_deleted = 0 ORDER BY tr_date DESC;"; + } + else { + $traning_list_query = " + SELECT DISTINCT + tr_id + FROM + training + LEFT JOIN + training_coach ON trc_training_tr_id = tr_id + WHERE + tr_deleted = 0 AND (trc_coach_uc_id = ". $user->get_ua_id() ." OR trc_coach_uc_id IS NULL) + ORDER BY tr_date DESC; + "; + } $training_list_assoc_array = $sql->assoc_array($traning_list_query); $training_array = array(); diff --git a/_include/include_trainings.php b/_include/include_trainings.php index 8f4c113..7911e76 100644 --- a/_include/include_trainings.php +++ b/_include/include_trainings.php @@ -5,47 +5,65 @@ if ($this->is_id()) { - # ADOTT EDZÉS ADATAINAK MEGJELENÍTÉSE - //training adatok - $training_data_query = "SELECT * FROM training WHERE tr_id = " . $this->get_id(); - $training_data_assoc_array = $sql->assoc_array($training_data_query); - $smarty->assign('training_data', $training_data_assoc_array[0]); - //TRAINING TYPE ARRAY - $training_type_query = "SELECT * FROM training_type WHERE trt_deleted = 0 ORDER BY trt_name ASC;"; - $training_type_assoc_array = $sql->assoc_array($training_type_query); - $smarty->assign("training_type_assoc_array", $training_type_assoc_array); - //COACH ARRAY - $coach_data_query = "SELECT * FROM user_coach WHERE ua_deleted = 0 ORDER BY ua_id ASC;"; - $coach_data_assoc_array = $sql->assoc_array($coach_data_query); - $coach_array = array(); - foreach ($coach_data_assoc_array as $coach_data) { - $new_coach = new user(); - $new_coach->set_user_data_by_id($coach_data['ua_id']); - $coach_array[] = $new_coach; + if (!$user->has_authority_by_name('admin') && !user::user_can_edit_training($user->get_ua_id(), $this->get_id()) && training::has_any_coach($this->get_id())) { + $smarty->display('access_denied.tpl'); } - //TRAINING-COACH ARRAY - $trc_query = "SELECT * FROM training_coach WHERE trc_training_tr_id = " . $this->get_id(); - $trc_coaches = array(); - $trc_assoc_array = $sql->assoc_array($trc_query); - foreach ($trc_assoc_array as $trc_data) { - $new_coach = new user(); - $new_coach->set_user_data_by_id($trc_data['trc_coach_uc_id']); - $trc_coaches[] = $new_coach; + else { + # ADOTT EDZÉS ADATAINAK MEGJELENÍTÉSE + //training adatok + $training_data_query = "SELECT * FROM training WHERE tr_id = " . $this->get_id(); + $training_data_assoc_array = $sql->assoc_array($training_data_query); + $smarty->assign('training_data', $training_data_assoc_array[0]); + //TRAINING TYPE ARRAY + $training_type_query = "SELECT * FROM training_type WHERE trt_deleted = 0 ORDER BY trt_name ASC;"; + $training_type_assoc_array = $sql->assoc_array($training_type_query); + $smarty->assign("training_type_assoc_array", $training_type_assoc_array); + //COACH ARRAY + $coach_data_query = "SELECT * FROM user_coach WHERE ua_deleted = 0 ORDER BY ua_id ASC;"; + $coach_data_assoc_array = $sql->assoc_array($coach_data_query); + $coach_array = array(); + foreach ($coach_data_assoc_array as $coach_data) { + $new_coach = new user(); + $new_coach->set_user_data_by_id($coach_data['ua_id']); + $coach_array[] = $new_coach; + } + //TRAINING-COACH ARRAY + $trc_query = "SELECT * FROM training_coach WHERE trc_training_tr_id = " . $this->get_id(); + $trc_coaches = array(); + $trc_assoc_array = $sql->assoc_array($trc_query); + foreach ($trc_assoc_array as $trc_data) { + $new_coach = new user(); + $new_coach->set_user_data_by_id($trc_data['trc_coach_uc_id']); + $trc_coaches[] = $new_coach; + } + + $smarty->assign("coach_data_assoc_array", $coach_data_assoc_array); + $smarty->assign("coach_array", $coach_array); //összes coach + $smarty->assign("trc_coaches", $trc_coaches); //csak a bejelölt coach coach + $smarty->assign("tr_id", $this->get_id()); //aktualis training id + + + $smarty->display('training_data_'.$tpl.'.tpl'); } - - $smarty->assign("coach_data_assoc_array", $coach_data_assoc_array); - $smarty->assign("coach_array", $coach_array); //összes coach - $smarty->assign("trc_coaches", $trc_coaches); //csak a bejelölt coach coach - $smarty->assign("tr_id", $this->get_id()); //aktualis training id - - - $smarty->display('training_data_'.$tpl.'.tpl'); - } else { - - $traning_list_query = "SELECT * FROM training WHERE tr_deleted = 0 ORDER BY tr_date DESC;"; + if ($user->has_authority_by_name('admin')) { + $traning_list_query = "SELECT * FROM training WHERE tr_deleted = 0 ORDER BY tr_date DESC;"; + } + else { + $traning_list_query = " + SELECT DISTINCT + tr_id + FROM + training + LEFT JOIN + training_coach ON trc_training_tr_id = tr_id + WHERE + tr_deleted = 0 AND (trc_coach_uc_id = ". $user->get_ua_id() ." OR trc_coach_uc_id IS NULL) + ORDER BY tr_date DESC; + "; + } $training_list_assoc_array = $sql->assoc_array($traning_list_query); $training_array = array();