diff --git a/modules/Activities/activities_attendance.php b/modules/Activities/activities_attendance.php index afc73da7c7..9f2a5fdea5 100644 --- a/modules/Activities/activities_attendance.php +++ b/modules/Activities/activities_attendance.php @@ -19,12 +19,17 @@ along with this program. If not, see . */ +use Gibbon\Forms\Form; +use Gibbon\Services\Format; +use Gibbon\Domain\User\UserGateway; +use Gibbon\Domain\System\SettingGateway; use Gibbon\Domain\Activities\ActivityGateway; +use Gibbon\Domain\Activities\ActivityStaffGateway; +use Gibbon\Domain\Activities\ActivityStudentGateway; +use Gibbon\Domain\Activities\ActivityAttendanceGateway; use Gibbon\Domain\Attendance\AttendanceLogPersonGateway; use Gibbon\Domain\Calendar\CalendarEventGateway; use Gibbon\Domain\System\SettingGateway; -use Gibbon\Forms\Form; -use Gibbon\Services\Format; //Module includes require_once __DIR__ . '/moduleFunctions.php'; @@ -47,14 +52,11 @@ } $settingGateway = $container->get(SettingGateway::class); - $data = array('gibbonSchoolYearID' => $session->get('gibbonSchoolYearID')); - $sql = ""; if($highestAction == "Enter Activity Attendance") { - $sql = "SELECT gibbonActivity.gibbonActivityID AS value, name, programStart FROM gibbonActivity WHERE gibbonSchoolYearID=:gibbonSchoolYearID AND active='Y' ORDER BY name, programStart"; + $result = $container->get(ActivityGateway::class)->selectActivitiesBySchoolYear($session->get('gibbonSchoolYearID')); } elseif($highestAction == "Enter Activity Attendance_leader") { - $data["gibbonPersonID"] = $session->get("gibbonPersonID"); - $sql = "SELECT gibbonActivity.gibbonActivityID AS value, name, programStart FROM gibbonActivityStaff JOIN gibbonActivity ON (gibbonActivityStaff.gibbonActivityID = gibbonActivity.gibbonActivityID) WHERE gibbonSchoolYearID=:gibbonSchoolYearID AND active='Y' AND gibbonActivityStaff.gibbonPersonID=:gibbonPersonID AND (gibbonActivityStaff.role='Organiser' OR gibbonActivityStaff.role='Assistant' OR gibbonActivityStaff.role='Coach') ORDER BY name, programStart"; + $result = $container->get(ActivityStaffGateway::class)-> selectActivityByStaff($session->get('gibbonPersonID')); } $form = Form::create('action', $session->get('absoluteURL').'/index.php','get'); @@ -64,7 +66,7 @@ $row = $form->addRow(); $row->addLabel('gibbonActivityID', __('Activity')); - $row->addSearchSelect('gibbonActivityID')->fromQuery($pdo, $sql, $data)->selected($gibbonActivityID)->required()->placeholder(); + $row->addSearchSelect('gibbonActivityID')->fromResults($result)->selected($gibbonActivityID)->required()->placeholder(); $row = $form->addRow(); $row->addSearchSubmit($session); @@ -75,18 +77,8 @@ if (empty($gibbonActivityID)) { return; } - - - $data = array('gibbonSchoolYearID' => $session->get('gibbonSchoolYearID'), 'gibbonActivityID' => $gibbonActivityID); - $sql = "SELECT gibbonPerson.gibbonPersonID, surname, preferredName, gibbonFormGroup.gibbonFormGroupID, gibbonActivityStudent.status, gibbonFormGroup.nameShort as formGroup FROM gibbonPerson JOIN gibbonStudentEnrolment ON (gibbonPerson.gibbonPersonID=gibbonStudentEnrolment.gibbonPersonID) JOIN gibbonFormGroup ON (gibbonFormGroup.gibbonFormGroupID=gibbonStudentEnrolment.gibbonFormGroupID) JOIN gibbonActivityStudent ON (gibbonActivityStudent.gibbonPersonID=gibbonPerson.gibbonPersonID) WHERE gibbonPerson.status='Full' AND (dateStart IS NULL OR dateStart<='".date('Y-m-d')."') AND (dateEnd IS NULL OR dateEnd>='".date('Y-m-d')."') AND gibbonStudentEnrolment.gibbonSchoolYearID=:gibbonSchoolYearID AND gibbonActivityStudent.status='Accepted' AND gibbonActivityID=:gibbonActivityID ORDER BY gibbonActivityStudent.status, surname, preferredName"; - $studentResult = $connection2->prepare($sql); - $studentResult->execute($data); - - - $data = array('gibbonActivityID' => $gibbonActivityID); - $sql = "SELECT gibbonSchoolYearTermIDList, maxParticipants, programStart, programEnd, (SELECT COUNT(*) FROM gibbonActivityStudent JOIN gibbonPerson ON (gibbonActivityStudent.gibbonPersonID=gibbonPerson.gibbonPersonID) WHERE gibbonActivityStudent.gibbonActivityID=gibbonActivity.gibbonActivityID AND gibbonActivityStudent.status='Waiting List' AND gibbonPerson.status='Full') AS waiting FROM gibbonActivity WHERE gibbonActivityID=:gibbonActivityID"; - $activityResult = $connection2->prepare($sql); - $activityResult->execute($data); + $studentResult = $container->get(UserGateway::class)->selectStudentsByActivity($session->get('gibbonSchoolYearID'), $gibbonActivityID); + $activityResult = $container->get(ActivityStudentGateway::class)->selectActivityByStudents($gibbonActivityID); if ($studentResult->rowCount() < 1 || $activityResult->rowCount() < 1) { echo $page->getBlankSlate(); @@ -94,13 +86,9 @@ return; } - $students = $studentResult->fetchAll(); - $data = array('gibbonActivityID' => $gibbonActivityID); - $sql = 'SELECT gibbonActivityAttendance.date, gibbonActivityAttendance.timestampTaken, gibbonActivityAttendance.attendance, gibbonPerson.preferredName, gibbonPerson.surname FROM gibbonActivityAttendance, gibbonPerson WHERE gibbonActivityAttendance.gibbonPersonIDTaker=gibbonPerson.gibbonPersonID AND gibbonActivityAttendance.gibbonActivityID=:gibbonActivityID'; - $attendanceResult = $connection2->prepare($sql); - $attendanceResult->execute($data); + $attendanceResult = $container->get(ActivityAttendanceGateway::class)->selectStudentAttendanceByActivity($gibbonActivityID); // Gather the existing attendance data (by date and not index, should the time slots change) $sessionAttendanceData = array(); @@ -108,8 +96,8 @@ while ($attendance = $attendanceResult->fetch()) { $sessionAttendanceData[ $attendance['date'] ] = array( 'data' => (!empty($attendance['attendance'])) ? unserialize($attendance['attendance']) : array(), - 'info' => sprintf(__('Recorded at %1$s on %2$s by %3$s.'), substr($attendance['timestampTaken'], 11), Format::date(substr($attendance['timestampTaken'], 0, 10)), Format::name('', $attendance['preferredName'], $attendance['surname'], 'Staff', false, true)), - ); + 'info' => sprintf(__('Recorded at %1$s on %2$s by %3$s.'), substr($attendance['timestampTaken'], 11), Format::date(substr($attendance['timestampTaken'], 0, 10)), Format::name('', $attendance['preferredName'], $attendance['surname'], 'Staff', false, true), + )); } $today = date('Y-m-d'); diff --git a/modules/Activities/activities_attendanceProcess.php b/modules/Activities/activities_attendanceProcess.php index bb798813ca..3e8da1d1e1 100644 --- a/modules/Activities/activities_attendanceProcess.php +++ b/modules/Activities/activities_attendanceProcess.php @@ -19,6 +19,8 @@ along with this program. If not, see . */ use Gibbon\Data\Validator; +use Gibbon\Domain\Activities\ActivityStaffGateway; +use Gibbon\Domain\Activities\ActivityAttendanceGateway; require_once '../../gibbon.php'; @@ -39,11 +41,9 @@ $highestAction = getHighestGroupedAction($guid, '/modules/Activities/activities_attendance.php', $connection2); if($highestAction == "Enter Activity Attendance_leader") { - try { - $dataCheck = array("gibbonPersonID" => $gibbonPersonID, "gibbonActivityID" => $gibbonActivityID); - $sqlCheck = "SELECT role FROM gibbonActivityStaff WHERE gibbonActivityID=:gibbonActivityID AND gibbonPersonID=:gibbonPersonID"; - $resultCheck = $connection2->prepare($sqlCheck); - $resultCheck->execute($dataCheck); + try { + + $resultCheck = $container->get(ActivityStaffGateway::class)->selectStaffRoleByActivity($gibbonPersonID, $gibbonActivityID); if ($resultCheck->rowCount() > 0) { $row = $resultCheck->fetch(); @@ -90,14 +90,8 @@ $sessionAttendance = (isset($attendance[$i])) ? serialize($attendance[$i]) : ''; - try { - $data = array('gibbonActivityID' => $gibbonActivityID, 'date' => $sessionDate); - $sql = 'SELECT gibbonActivityAttendanceID FROM gibbonActivityAttendance WHERE gibbonActivityID=:gibbonActivityID AND date=:date'; - $result = $connection2->prepare($sql); - $result->execute($data); - } catch (PDOException $e) { - $partialFail = true; - } + $result = $container->get(ActivityAttendanceGateway::class)->selectActivityAttendanceByActivity($gibbonActivityID, $sessionDate); + // INSERT if ($result->rowCount() <= 0) { @@ -109,7 +103,8 @@ try { $data = array('gibbonActivityID' => $gibbonActivityID, 'gibbonPersonIDTaker' => $gibbonPersonID, 'attendance' => $sessionAttendance, 'date' => $sessionDate); - $sql = 'INSERT INTO gibbonActivityAttendance SET gibbonActivityID=:gibbonActivityID, gibbonPersonIDTaker=:gibbonPersonIDTaker, attendance=:attendance, date=:date '; + $sql = 'INSERT INTO gibbonActivityAttendance + SET gibbonActivityID=:gibbonActivityID, gibbonPersonIDTaker=:gibbonPersonIDTaker, attendance=:attendance, date=:date '; $result = $connection2->prepare($sql); $result->execute($data); } catch (PDOException $e) { @@ -140,3 +135,4 @@ } } } + \ No newline at end of file diff --git a/modules/Activities/activities_attendance_sheet.php b/modules/Activities/activities_attendance_sheet.php index 53461f1ec1..4f151b8b36 100644 --- a/modules/Activities/activities_attendance_sheet.php +++ b/modules/Activities/activities_attendance_sheet.php @@ -20,8 +20,11 @@ */ use Gibbon\Forms\Form; -use Gibbon\Forms\DatabaseFormFactory; use Gibbon\Services\Format; +use Gibbon\Domain\User\UserGateway; +use Gibbon\Forms\DatabaseFormFactory; +use Gibbon\Domain\Activities\ActivityGateway; +use Gibbon\Domain\Activities\ActivityStudentGateway; //Module includes require_once __DIR__ . '/moduleFunctions.php'; @@ -51,11 +54,10 @@ $form->addHiddenValue('q', "/modules/".$session->get('module')."/activities_attendance_sheet.php"); - $data = array('gibbonSchoolYearID' => $session->get('gibbonSchoolYearID')); - $sql = "SELECT gibbonActivityID AS value, name FROM gibbonActivity WHERE gibbonSchoolYearID=:gibbonSchoolYearID AND active='Y' ORDER BY name, programStart"; + $result = $container->get(ActivityGateway::class)->selectActivitiesBySchoolYear($session->get('gibbonSchoolYearID')); $row = $form->addRow(); $row->addLabel('gibbonActivityID', __('Activity')); - $row->addSearchSelect('gibbonActivityID')->fromQuery($pdo, $sql, $data)->selected($gibbonActivityID)->required()->placeholder(); + $row->addSearchSelect('gibbonActivityID')->fromResults($result)->selected($gibbonActivityID)->required()->placeholder(); $row = $form->addRow(); $row->addLabel('numberOfColumns', __('Number of Columns')); @@ -73,12 +75,9 @@ echo __('Report Data'); echo ''; - $data = array('gibbonSchoolYearID' => $session->get('gibbonSchoolYearID'), 'gibbonActivityID' => $gibbonActivityID); - $sql = "SELECT gibbonPerson.gibbonPersonID, surname, preferredName, gibbonFormGroupID, gibbonActivityStudent.status FROM gibbonPerson JOIN gibbonStudentEnrolment ON (gibbonPerson.gibbonPersonID=gibbonStudentEnrolment.gibbonPersonID) JOIN gibbonActivityStudent ON (gibbonActivityStudent.gibbonPersonID=gibbonPerson.gibbonPersonID) WHERE gibbonPerson.status='Full' AND (dateStart IS NULL OR dateStart<='".date('Y-m-d')."') AND (dateEnd IS NULL OR dateEnd>='".date('Y-m-d')."') AND gibbonSchoolYearID=:gibbonSchoolYearID AND gibbonActivityStudent.status='Accepted' AND gibbonActivityID=:gibbonActivityID ORDER BY gibbonActivityStudent.status, surname, preferredName"; - $result = $connection2->prepare($sql); - $result->execute($data); + $result = $container->get(UserGateway::class)->selectStudentsByActivity($session->get('gibbonSchoolYearID'), $gibbonActivityID); - if ($result->rowCount() < 1) { + if (empty($result)) { echo $page->getBlankSlate(); } else { $form = Form::createBlank('buttons'); diff --git a/modules/Activities/activities_manage.php b/modules/Activities/activities_manage.php index 9f9a79464d..1ab5982f7d 100644 --- a/modules/Activities/activities_manage.php +++ b/modules/Activities/activities_manage.php @@ -20,6 +20,7 @@ */ use Gibbon\Domain\Activities\ActivityGateway; +use Gibbon\Domain\School\SchoolYearGateway; use Gibbon\Domain\School\SchoolYearTermGateway; use Gibbon\Domain\System\SettingGateway; use Gibbon\Forms\Prefab\BulkActionForm; @@ -83,11 +84,11 @@ $row->addTextField('search')->setValue($criteria->getSearchText()); if ($dateType != 'Date') { - $data = array('gibbonSchoolYearID' => $session->get('gibbonSchoolYearID')); - $sql = "SELECT gibbonSchoolYearTermID as value, name FROM gibbonSchoolYearTerm WHERE gibbonSchoolYearID=:gibbonSchoolYearID ORDER BY sequenceNumber"; + $result = $container->get(SchoolYearTermGateway::class)->selectSchoolYearTermName($session->get('gibbonSchoolYearID')); + $row = $form->addRow(); $row->addLabel('gibbonSchoolYearTermID', __('Term')); - $row->addSelect('gibbonSchoolYearTermID')->fromQuery($pdo, $sql, $data)->selected($gibbonSchoolYearTermID)->placeholder(); + $row->addSelect('gibbonSchoolYearTermID')->fromResults($result)->selected($gibbonSchoolYearTermID)->placeholder(); } $row = $form->addRow(); @@ -119,11 +120,11 @@ 'DuplicateParticipants' => __('Duplicate With Participants'), 'Delete' => __('Delete'), ); - $sql = "SELECT gibbonSchoolYearID as value, gibbonSchoolYear.name FROM gibbonSchoolYear WHERE (status='Upcoming' OR status='Current') ORDER BY sequenceNumber LIMIT 0, 2"; + $result = $container->get(SchoolYearGateway::class)->selectCurrentOrUpcomingSchoolYear(); $col = $form->createBulkActionColumn($bulkActions); $col->addSelect('gibbonSchoolYearIDCopyTo') - ->fromQuery($pdo, $sql) + ->fromResults($result) ->setClass('shortWidth schoolYear'); $col->addSubmit(__('Go')); diff --git a/modules/Activities/activities_manageProcessBulk.php b/modules/Activities/activities_manageProcessBulk.php index 3b01e3e036..3c70894c9c 100644 --- a/modules/Activities/activities_manageProcessBulk.php +++ b/modules/Activities/activities_manageProcessBulk.php @@ -1,4 +1,9 @@ $gibbonActivityID]; - $sql = 'SELECT * FROM gibbonActivity WHERE gibbonActivityID=:gibbonActivityID'; - $result = $connection2->prepare($sql); - $result->execute($data); + $result = $container->get(ActivityGateway::class)->getByID($gibbonActivityID); } catch (PDOException $e) { $partialFail = true; } - if ($result->rowCount() != 1) { + if (!empty($result)) { $partialFail = true; } else { - $row = $result->fetch(); + $row = $result; $name = $row['name']; if ($gibbonSchoolYearIDCopyTo == $session->get('gibbonSchoolYearID')) { $name .= ' (Copy)'; @@ -91,14 +93,9 @@ $AI = str_pad($connection2->lastInsertID(), 8, '0', STR_PAD_LEFT); //Check and create staff - try { - $dataParticipants = array('gibbonActivityID' => $gibbonActivityID); - $sqlParticipants = 'SELECT * FROM gibbonActivityStaff WHERE gibbonActivityID=:gibbonActivityID'; - $resultParticipants = $connection2->prepare($sqlParticipants); - $resultParticipants->execute($dataParticipants); - } catch (PDOException $e) { - $partialFail = true; - } + $resultParticipants = $container->get(ActivityStaffGateway::class)->selectWhere(['gibbonActivityID' => $gibbonActivityID]); + + while ($rowParticipants = $resultParticipants->fetch()) { try { $dataParticipants2 = array('gibbonActivityID' => $AI, 'gibbonPersonID' => $rowParticipants['gibbonPersonID'], 'role' => $rowParticipants['role']); @@ -111,14 +108,8 @@ } //Check and create slots - try { - $dataParticipants = array('gibbonActivityID' => $gibbonActivityID); - $sqlParticipants = 'SELECT * FROM gibbonActivitySlot WHERE gibbonActivityID=:gibbonActivityID'; - $resultParticipants = $connection2->prepare($sqlParticipants); - $resultParticipants->execute($dataParticipants); - } catch (PDOException $e) { - $partialFail = true; - } + $resultParticipants = $container->get(ActivitySlotGateway::class)->selectWhere(['gibbonActivityID' => $gibbonActivityID]); + while ($rowParticipants = $resultParticipants->fetch()) { try { $dataParticipants2 = array('gibbonActivityID' => $AI, 'gibbonSpaceID' => $rowParticipants['gibbonSpaceID'], 'locationExternal' => $rowParticipants['locationExternal'], 'gibbonDaysOfWeekID' => $rowParticipants['gibbonDaysOfWeekID'], 'timeStart' => $rowParticipants['timeStart'], 'timeEnd' => $rowParticipants['timeEnd']); @@ -133,14 +124,8 @@ //Deal with participants if ($action == 'DuplicateParticipants') { //Check and create staff - try { - $dataParticipants = array('gibbonActivityID' => $gibbonActivityID); - $sqlParticipants = 'SELECT * FROM gibbonActivityStudent WHERE gibbonActivityID=:gibbonActivityID'; - $resultParticipants = $connection2->prepare($sqlParticipants); - $resultParticipants->execute($dataParticipants); - } catch (PDOException $e) { - $partialFail = true; - } + $resultParticipants = $container->get(ActivityStudentGateway::class)->selectWhere(['gibbonActivityID' => $gibbonActivityID]); + while ($rowParticipants = $resultParticipants->fetch()) { try { $dataParticipants2 = array('gibbonActivityID' => $AI, 'gibbonPersonID' => $rowParticipants['gibbonPersonID'], 'status' => $rowParticipants['status'], 'timestamp' => $rowParticipants['timestamp']); @@ -167,10 +152,7 @@ foreach ($activities AS $gibbonActivityID) { //For every activity to be copied //Check existence of activity and fetch details try { - $data = array('gibbonActivityID' => $gibbonActivityID); - $sql = 'SELECT * FROM gibbonActivity WHERE gibbonActivityID=:gibbonActivityID'; - $result = $connection2->prepare($sql); - $result->execute($data); + $result = $container->get(ActivityGateway::class)->selectActvity($gibbonActivityID); } catch (PDOException $e) { $partialFail = true; } diff --git a/modules/Activities/activities_manage_add.php b/modules/Activities/activities_manage_add.php index 69946be847..354e62898b 100644 --- a/modules/Activities/activities_manage_add.php +++ b/modules/Activities/activities_manage_add.php @@ -22,6 +22,8 @@ use Gibbon\Forms\Form; use Gibbon\Forms\DatabaseFormFactory; use Gibbon\Domain\Activities\ActivityGateway; +use Gibbon\Domain\School\DaysOfWeekGateway; +use Gibbon\Domain\School\SchoolYearTermGateway; use Gibbon\Domain\System\SettingGateway; use Gibbon\Domain\Activities\ActivityCategoryGateway; @@ -105,10 +107,8 @@ $row->addCheckboxSchoolYearTerm('gibbonSchoolYearTermIDList', $session->get('gibbonSchoolYearID'))->checkAll(); } else { $listingStart = $listingEnd = $programStart = $programEnd = new DateTime(); + $result = $container->get(SchoolYearTermGateway::class)->selectBySchoolYear($session->get('gibbonSchoolYearID')); - $data = array('gibbonSchoolYearID' => $session->get('gibbonSchoolYearID'), 'today' => date('Y-m-d')); - $sql = "SELECT * FROM gibbonSchoolYearTerm WHERE gibbonSchoolYearID=:gibbonSchoolYearID AND lastDay>=:today ORDER BY sequenceNumber"; - $result = $pdo->executeQuery($data, $sql); if ($result->rowCount() > 0) { if ($currentTerm = $result->fetch()) { $listingStart = (new DateTime($currentTerm['lastDay']))->modify('-2 weeks'); @@ -206,13 +206,14 @@ $form->addRow()->addHeading('Time Slots', __('Time Slots')); //Block template - $sqlWeekdays = "SELECT gibbonDaysOfWeekID as value, name FROM gibbonDaysOfWeek ORDER BY sequenceNumber"; + + $result = $container->get(DaysOfWeekGateway::class)->selectDaysOfWeek(); $slotBlock = $form->getFactory()->createTable()->setClass('blank'); $row = $slotBlock->addRow(); $row->addLabel('gibbonDaysOfWeekID', __('Slot Day')); $row->addSelect('gibbonDaysOfWeekID') - ->fromQuery($pdo, $sqlWeekdays) + ->fromResults($result) ->placeholder() ->addClass('floatLeft'); diff --git a/modules/Activities/activities_manage_delete.php b/modules/Activities/activities_manage_delete.php index bb59091eff..5212860694 100644 --- a/modules/Activities/activities_manage_delete.php +++ b/modules/Activities/activities_manage_delete.php @@ -19,6 +19,7 @@ along with this program. If not, see . */ +use Gibbon\Domain\Activities\ActivityGateway; use Gibbon\Forms\Prefab\DeleteForm; //Module includes @@ -34,20 +35,16 @@ if ($gibbonActivityID == '') { $page->addError(__('You have not specified one or more required parameters.')); } else { + $values = $container->get(ActivityGateway::class)->getByID($gibbonActivityID); - $data = array('gibbonActivityID' => $gibbonActivityID); - $sql = 'SELECT * FROM gibbonActivity WHERE gibbonActivityID=:gibbonActivityID'; - $result = $connection2->prepare($sql); - $result->execute($data); - if ($result) { - if ($result->rowCount() != 1) { + if (empty($values)) { $page->addError( __('The selected record does not exist, or you do not have access to it.')); } else { $form = DeleteForm::createForm($session->get('absoluteURL').'/modules/'.$session->get('module')."/activities_manage_deleteProcess.php?search=".$_GET['search']."&gibbonSchoolYearTermID=".$_GET['gibbonSchoolYearTermID']); $form->addHiddenValue('gibbonActivityID', $gibbonActivityID); echo $form->getOutput(); } - } + } } ?> diff --git a/modules/Activities/activities_manage_deleteProcess.php b/modules/Activities/activities_manage_deleteProcess.php index 183137321e..2978eb943e 100644 --- a/modules/Activities/activities_manage_deleteProcess.php +++ b/modules/Activities/activities_manage_deleteProcess.php @@ -19,6 +19,8 @@ along with this program. If not, see . */ +use Gibbon\Domain\Activities\ActivityGateway; + include '../../gibbon.php'; $gibbonActivityID = $_POST['gibbonActivityID'] ?? ''; @@ -36,17 +38,14 @@ header("Location: {$URL}"); } else { try { - $data = array('gibbonActivityID' => $gibbonActivityID); - $sql = 'SELECT * FROM gibbonActivity WHERE gibbonActivityID=:gibbonActivityID'; - $result = $connection2->prepare($sql); - $result->execute($data); + $values = $container->get(ActivityGateway::class)->getByID($gibbonActivityID); } catch (PDOException $e) { $URL .= '&return=error2'; header("Location: {$URL}"); exit(); } - if ($result->rowCount() != 1) { + if (empty($values)) { $URL .= '&return=error2'; header("Location: {$URL}"); } else { diff --git a/modules/Activities/activities_manage_edit.php b/modules/Activities/activities_manage_edit.php index 6979ff02aa..d07e19a8f9 100644 --- a/modules/Activities/activities_manage_edit.php +++ b/modules/Activities/activities_manage_edit.php @@ -22,10 +22,11 @@ use Gibbon\Services\Format; use Gibbon\Forms\Form; use Gibbon\Forms\DatabaseFormFactory; -use Gibbon\Domain\System\SettingGateway; use Gibbon\Domain\Activities\ActivityGateway; use Gibbon\Domain\Activities\ActivityStaffGateway; use Gibbon\Domain\Activities\ActivitySlotGateway; +use Gibbon\Domain\School\DaysOfWeekGateway; +use Gibbon\Domain\System\SettingGateway; use Gibbon\Domain\Activities\ActivityPhotoGateway; use Gibbon\Domain\Activities\ActivityCategoryGateway; @@ -232,13 +233,13 @@ $form->addRow()->addHeading('Time Slots', __('Time Slots')); //Block template - $sqlWeekdays = "SELECT gibbonDaysOfWeekID as value, name FROM gibbonDaysOfWeek ORDER BY sequenceNumber"; + $result = $container->get(DaysOfWeekGateway::class)->selectDaysOfWeek(); $slotBlock = $form->getFactory()->createTable()->setClass('blank'); $row = $slotBlock->addRow(); $row->addLabel('gibbonDaysOfWeekID', __('Slot Day')); $row->addSelect('gibbonDaysOfWeekID') - ->fromQuery($pdo, $sqlWeekdays) + ->fromResults($result) ->placeholder() ->addClass('floatLeft'); diff --git a/modules/Activities/activities_manage_enrolment_add.php b/modules/Activities/activities_manage_enrolment_add.php index 0398889c59..39fb91d504 100644 --- a/modules/Activities/activities_manage_enrolment_add.php +++ b/modules/Activities/activities_manage_enrolment_add.php @@ -19,8 +19,10 @@ along with this program. If not, see . */ +use Gibbon\Domain\Activities\ActivityGateway; use Gibbon\Domain\School\SchoolYearTermGateway; use Gibbon\Domain\System\SettingGateway; +use Gibbon\Domain\User\UserGateway; use Gibbon\Forms\Form; use Gibbon\Services\Format; @@ -36,10 +38,7 @@ $highestAction = getHighestGroupedAction($guid, '/modules/Activities/activities_manage_enrolment.php', $connection2); if ($highestAction == 'My Activities_viewEditEnrolment') { - $data = array('gibbonPersonID' => $session->get('gibbonPersonID'), 'gibbonSchoolYearID' => $session->get('gibbonSchoolYearID'), 'gibbonActivityID' => $gibbonActivityID); - $sql = "SELECT gibbonActivity.*, NULL as status, gibbonActivityStaff.role FROM gibbonActivity JOIN gibbonActivityStaff ON (gibbonActivity.gibbonActivityID=gibbonActivityStaff.gibbonActivityID) WHERE gibbonActivity.gibbonActivityID=:gibbonActivityID AND gibbonActivityStaff.gibbonPersonID=:gibbonPersonID AND gibbonActivityStaff.role='Organiser' AND gibbonSchoolYearID=:gibbonSchoolYearID AND active='Y' ORDER BY name"; - $result = $connection2->prepare($sql); - $result->execute($data); + $result = $container->get(ActivityGateway::class)->selectActivityByYearandStaff($session->get('gibbonPersonID'), $session->get('gibbonSchoolYearID'), $gibbonActivityID); if (!$result || $result->rowCount() == 0) { //Acess denied @@ -60,16 +59,11 @@ if ($gibbonActivityID == '') { $page->addError(__('You have not specified one or more required parameters.')); } else { - $data = array('gibbonActivityID' => $gibbonActivityID); - $sql = 'SELECT gibbonActivity.*, gibbonActivityType.access, gibbonActivityType.maxPerStudent, gibbonActivityType.enrolmentType, gibbonActivityType.backupChoice, gibbonActivityType.waitingList FROM gibbonActivity LEFT JOIN gibbonActivityType ON (gibbonActivity.type=gibbonActivityType.name) WHERE gibbonActivityID=:gibbonActivityID'; - $result = $connection2->prepare($sql); - $result->execute($data); + $values = $container->get(ActivityGateway::class)->getActivityDetailsByID($gibbonActivityID); - if ($result->rowCount() != 1) { + if (empty($values)) { $page->addError(__('The specified record does not exist.')); } else { - $values = $result->fetch(); - $settingGateway = $container->get(SettingGateway::class); $dateType = $settingGateway->getSettingByScope('Activities', 'dateType'); @@ -114,18 +108,8 @@ } $students = array(); - $data = array('gibbonYearGroupIDList' => $values['gibbonYearGroupIDList'], 'gibbonSchoolYearID' => $session->get('gibbonSchoolYearID'), 'date' => date('Y-m-d')); - $sql = "SELECT gibbonPerson.gibbonPersonID, preferredName, surname, gibbonFormGroup.name AS formGroupName - FROM gibbonPerson - JOIN gibbonStudentEnrolment ON (gibbonPerson.gibbonPersonID=gibbonStudentEnrolment.gibbonPersonID) - JOIN gibbonFormGroup ON (gibbonStudentEnrolment.gibbonFormGroupID=gibbonFormGroup.gibbonFormGroupID) - JOIN gibbonYearGroup ON (gibbonStudentEnrolment.gibbonYearGroupID=gibbonYearGroup.gibbonYearGroupID) - WHERE gibbonStudentEnrolment.gibbonSchoolYearID=:gibbonSchoolYearID - AND FIND_IN_SET(gibbonYearGroup.gibbonYearGroupID, :gibbonYearGroupIDList) - AND gibbonPerson.status='FULL' - AND (dateStart IS NULL OR dateStart<=:date) AND (dateEnd IS NULL OR dateEnd>=:date) - ORDER BY formGroupName, gibbonPerson.surname, gibbonPerson.preferredName"; - $result = $pdo->executeQuery($data, $sql); + + $result = $container->get(UserGateway::class)->selectUserByFormGroup($values['gibbonYearGroupIDList'], $session->get('gibbonSchoolYearID')); if ($result->rowCount() > 0) { $students['--'.__('Enrolable Students').'--'] = array_reduce($result->fetchAll(), function($group, $item) { @@ -134,8 +118,7 @@ }, array()); } - $sql = "SELECT gibbonPersonID, surname, preferredName, status, username FROM gibbonPerson WHERE status='Full' OR status='Expected' ORDER BY surname, preferredName"; - $result = $pdo->executeQuery(array(), $sql); + $result = $container->get(UserGateway::class)->selectUsers(); if ($result->rowCount() > 0) { $students['--'.__('All Users').'--'] = array_reduce($result->fetchAll(), function ($group, $item) { @@ -173,4 +156,4 @@ echo $form->getOutput(); } } -} +} \ No newline at end of file diff --git a/modules/Activities/activities_manage_enrolment_delete.php b/modules/Activities/activities_manage_enrolment_delete.php index 28e449fec5..3c171b1fb5 100644 --- a/modules/Activities/activities_manage_enrolment_delete.php +++ b/modules/Activities/activities_manage_enrolment_delete.php @@ -20,6 +20,7 @@ */ use Gibbon\Forms\Prefab\DeleteForm; +use Gibbon\Domain\Activities\ActivityGateway; if (isActionAccessible($guid, $connection2, '/modules/Activities/activities_manage_enrolment_delete.php') == false) { // Access denied @@ -31,12 +32,8 @@ $highestAction = getHighestGroupedAction($guid, '/modules/Activities/activities_manage_enrolment.php', $connection2); if ($highestAction == 'My Activities_viewEditEnrolment') { - - $data = array('gibbonPersonID' => $session->get('gibbonPersonID'), 'gibbonSchoolYearID' => $session->get('gibbonSchoolYearID'), 'gibbonActivityID' => $gibbonActivityID); - $sql = "SELECT gibbonActivity.*, NULL as status, gibbonActivityStaff.role FROM gibbonActivity JOIN gibbonActivityStaff ON (gibbonActivity.gibbonActivityID=gibbonActivityStaff.gibbonActivityID) WHERE gibbonActivity.gibbonActivityID=:gibbonActivityID AND gibbonActivityStaff.gibbonPersonID=:gibbonPersonID AND gibbonActivityStaff.role='Organiser' AND gibbonSchoolYearID=:gibbonSchoolYearID AND active='Y' ORDER BY name"; - $result = $connection2->prepare($sql); - $result->execute($data); - + $result = $container->get(ActivityGateway::class)->selectActivityByYearandStaff($session->get('gibbonPersonID'), $session->get('gibbonSchoolYearID'), $gibbonActivityID); + if (!$result || $result->rowCount() == 0) { //Acess denied $page->addError(__('You do not have access to this action.')); @@ -51,10 +48,7 @@ $page->addError(__('You have not specified one or more required parameters.')); } else { - $data = array('gibbonActivityID' => $gibbonActivityID, 'gibbonPersonID' => $gibbonPersonID); - $sql = 'SELECT gibbonActivity.*, gibbonActivityStudent.*, surname, preferredName FROM gibbonActivity JOIN gibbonActivityStudent ON (gibbonActivity.gibbonActivityID=gibbonActivityStudent.gibbonActivityID) JOIN gibbonPerson ON (gibbonActivityStudent.gibbonPersonID=gibbonPerson.gibbonPersonID) WHERE gibbonActivityStudent.gibbonActivityID=:gibbonActivityID AND gibbonActivityStudent.gibbonPersonID=:gibbonPersonID'; - $result = $connection2->prepare($sql); - $result->execute($data); + $result = $container->get(ActivityGateway::class)->selectActivityAndStudent($gibbonActivityID, $gibbonPersonID); if ($result->rowCount() != 1) { $page->addError(__('The specified record cannot be found.')); @@ -69,4 +63,4 @@ } } } -?> +?> \ No newline at end of file diff --git a/modules/Activities/activities_manage_enrolment_edit.php b/modules/Activities/activities_manage_enrolment_edit.php index e553d9ab73..b0c54333ec 100644 --- a/modules/Activities/activities_manage_enrolment_edit.php +++ b/modules/Activities/activities_manage_enrolment_edit.php @@ -19,13 +19,14 @@ along with this program. If not, see . */ -use Gibbon\Domain\School\SchoolYearTermGateway; -use Gibbon\Domain\System\SettingGateway; use Gibbon\Forms\Form; use Gibbon\Services\Format; +use Gibbon\Domain\System\SettingGateway; +use Gibbon\Domain\Activities\ActivityGateway; +use Gibbon\Domain\School\SchoolYearTermGateway; use Gibbon\Http\Url; -//Module includes +// Module includes require_once __DIR__ . '/moduleFunctions.php'; if (isActionAccessible($guid, $connection2, '/modules/Activities/activities_manage_enrolment_edit.php') == false) { @@ -38,11 +39,7 @@ $highestAction = getHighestGroupedAction($guid, '/modules/Activities/activities_manage_enrolment.php', $connection2); if ($highestAction == 'My Activities_viewEditEnrolment') { - - $data = array('gibbonPersonID' => $session->get('gibbonPersonID'), 'gibbonSchoolYearID' => $session->get('gibbonSchoolYearID'), 'gibbonActivityID' => $gibbonActivityID); - $sql = "SELECT gibbonActivity.*, NULL as status, gibbonActivityStaff.role FROM gibbonActivity JOIN gibbonActivityStaff ON (gibbonActivity.gibbonActivityID=gibbonActivityStaff.gibbonActivityID) WHERE gibbonActivity.gibbonActivityID=:gibbonActivityID AND gibbonActivityStaff.gibbonPersonID=:gibbonPersonID AND gibbonActivityStaff.role='Organiser' AND gibbonSchoolYearID=:gibbonSchoolYearID AND active='Y' ORDER BY name"; - $result = $connection2->prepare($sql); - $result->execute($data); + $result = $container->get(ActivityGateway::class)->selectActivityByYearandStaff($session->get('gibbonPersonID'), $session->get('gibbonSchoolYearID'), $gibbonActivityID); if (!$result || $result->rowCount() == 0) { //Acess denied @@ -64,18 +61,14 @@ if ($gibbonPersonID == '' or $gibbonActivityID == '') { $page->addError(__('You have not specified one or more required parameters.')); } else { - - $data = array('gibbonActivityID' => $gibbonActivityID, 'gibbonPersonID' => $gibbonPersonID); - $sql = 'SELECT gibbonActivity.*, gibbonActivityStudent.*, surname, preferredName, gibbonActivityType.access, gibbonActivityType.maxPerStudent, gibbonActivityType.enrolmentType, gibbonActivityType.backupChoice, gibbonActivityType.waitingList FROM gibbonActivity JOIN gibbonActivityStudent ON (gibbonActivity.gibbonActivityID=gibbonActivityStudent.gibbonActivityID) JOIN gibbonPerson ON (gibbonActivityStudent.gibbonPersonID=gibbonPerson.gibbonPersonID) LEFT JOIN gibbonActivityType ON (gibbonActivity.type=gibbonActivityType.name) WHERE gibbonActivityStudent.gibbonActivityID=:gibbonActivityID AND gibbonActivityStudent.gibbonPersonID=:gibbonPersonID'; - $result = $connection2->prepare($sql); - $result->execute($data); - + $result = $container->get(ActivityGateway::class)->getActivityAndStudentDetails($gibbonActivityID, $gibbonPersonID); + if ($result->rowCount() != 1) { $page->addError(__('The specified record cannot be found.')); } else { //Let's go! $values = $result->fetch(); - + $settingGateway = $container->get(SettingGateway::class); $dateType = $settingGateway->getSettingByScope('Activities', 'dateType'); diff --git a/modules/Activities/activities_my_full.php b/modules/Activities/activities_my_full.php index c9f05d6ea1..6b4839f1aa 100644 --- a/modules/Activities/activities_my_full.php +++ b/modules/Activities/activities_my_full.php @@ -19,6 +19,8 @@ along with this program. If not, see . */ +use Gibbon\Domain\Activities\ActivityGateway; +use Gibbon\Domain\Activities\ActivityStaffGateway; use Gibbon\Domain\School\SchoolYearTermGateway; use Gibbon\Domain\System\SettingGateway; use Gibbon\Services\Format; @@ -47,11 +49,8 @@ else { $today = date('Y-m-d'); - $data = array('gibbonSchoolYearID' => $session->get('gibbonSchoolYearID'), 'gibbonActivityID' => $gibbonActivityID); - $sql = "SELECT gibbonActivity.*, gibbonActivityType.description as activityTypeDescription FROM gibbonActivity LEFT JOIN gibbonActivityType ON (gibbonActivity.type=gibbonActivityType.name) WHERE gibbonSchoolYearID=:gibbonSchoolYearID AND active='Y' AND gibbonActivityID=:gibbonActivityID"; - $result = $connection2->prepare($sql); - $result->execute($data); - + $result = $container->get(ActivityGateway::class)->getActivityAndDescription($session->get('gibbonSchoolYearID'), $gibbonActivityID); + if ($result->rowCount() != 1) { echo "
"; echo __('The selected record does not exist, or you do not have access to it.'); @@ -123,12 +122,9 @@ echo ''; echo ""; echo "".__('Staff').'
'; - - $dataStaff = array('gibbonActivityID' => $row['gibbonActivityID']); - $sqlStaff = "SELECT title, preferredName, surname, role FROM gibbonActivityStaff JOIN gibbonPerson ON (gibbonActivityStaff.gibbonPersonID=gibbonPerson.gibbonPersonID) WHERE gibbonActivityID=:gibbonActivityID AND gibbonPerson.status='Full' AND (dateStart IS NULL OR dateStart<='".date('Y-m-d')."') AND (dateEnd IS NULL OR dateEnd>='".date('Y-m-d')."') ORDER BY surname, preferredName"; - $resultStaff = $connection2->prepare($sqlStaff); - $resultStaff->execute($dataStaff); - + + $resultStaff = $container->get(ActivityStaffGateway::class)->selectStaffByActivity( $row['gibbonActivityID']); + if ($resultStaff->rowCount() < 1) { echo ''.__('None').''; } else { @@ -218,7 +214,6 @@ echo ''; } - $dataStudents = array('gibbonActivityID' => $row['gibbonActivityID']); $sqlStudents = "SELECT title, preferredName, surname FROM gibbonActivityStudent JOIN gibbonPerson ON (gibbonActivityStudent.gibbonPersonID=gibbonPerson.gibbonPersonID) WHERE gibbonActivityID=:gibbonActivityID AND gibbonPerson.status='Full' AND (dateStart IS NULL OR dateStart<='".date('Y-m-d')."') AND (dateEnd IS NULL OR dateEnd>='".date('Y-m-d')."') AND gibbonActivityStudent.status='Waiting List' ORDER BY timestamp"; $resultStudents = $connection2->prepare($sqlStudents); diff --git a/modules/Library/library_lending_item_edit.php b/modules/Library/library_lending_item_edit.php index c111b90738..81bf7a1e0c 100644 --- a/modules/Library/library_lending_item_edit.php +++ b/modules/Library/library_lending_item_edit.php @@ -20,8 +20,9 @@ */ use Gibbon\Forms\Form; -use Gibbon\Forms\DatabaseFormFactory; use Gibbon\Services\Format; +use Gibbon\Domain\User\UserGateway; +use Gibbon\Forms\DatabaseFormFactory; $gibbonLibraryItemEventID = trim($_GET['gibbonLibraryItemEventID']) ?? ''; $gibbonLibraryItemID = trim($_GET['gibbonLibraryItemID']) ?? ''; @@ -152,8 +153,7 @@ }, array()); } - $sql = "SELECT gibbonPersonID, surname, preferredName, status, username FROM gibbonPerson WHERE status='Full' OR status='Expected' ORDER BY surname, preferredName"; - $result = $pdo->executeQuery(array(), $sql); + $result = $container->get(UserGateway::class)->selectUsers(); if ($result->rowCount() > 0) { $people['--'.__('All Users').'--'] = array_reduce($result->fetchAll(), function($group, $item) { diff --git a/modules/Library/library_lending_item_return.php b/modules/Library/library_lending_item_return.php index 2360bcbe1d..7bd7372736 100644 --- a/modules/Library/library_lending_item_return.php +++ b/modules/Library/library_lending_item_return.php @@ -20,8 +20,9 @@ */ use Gibbon\Forms\Form; -use Gibbon\Forms\DatabaseFormFactory; use Gibbon\Services\Format; +use Gibbon\Domain\User\UserGateway; +use Gibbon\Forms\DatabaseFormFactory; $gibbonLibraryItemEventID = trim($_GET['gibbonLibraryItemEventID']) ?? ''; $gibbonLibraryItemID = trim($_GET['gibbonLibraryItemID']) ?? ''; @@ -127,8 +128,7 @@ }, array()); } - $sql = "SELECT gibbonPersonID, surname, preferredName, status, username FROM gibbonPerson WHERE status='Full' OR status='Expected' ORDER BY surname, preferredName"; - $result = $pdo->executeQuery(array(), $sql); + $result = $container->get(UserGateway::class)->selectUsers(); if ($result->rowCount() > 0) { $people['--'.__('All Users').'--'] = array_reduce($result->fetchAll(), function($group, $item) { diff --git a/modules/Library/library_lending_item_signout.php b/modules/Library/library_lending_item_signout.php index 7524b05dbb..8991707096 100644 --- a/modules/Library/library_lending_item_signout.php +++ b/modules/Library/library_lending_item_signout.php @@ -19,10 +19,11 @@ along with this program. If not, see . */ -use Gibbon\Domain\System\SettingGateway; use Gibbon\Forms\Form; -use Gibbon\Forms\DatabaseFormFactory; use Gibbon\Services\Format; +use Gibbon\Domain\User\UserGateway; +use Gibbon\Forms\DatabaseFormFactory; +use Gibbon\Domain\System\SettingGateway; $gibbonLibraryItemID = trim($_GET['gibbonLibraryItemID'] ?? ''); $gibbonLibraryItemEventID = $_GET['gibbonLibraryItemEventID'] ?? ''; diff --git a/modules/Markbook/moduleFunctions.php b/modules/Markbook/moduleFunctions.php index e55f91ade5..3afcdbc99e 100644 --- a/modules/Markbook/moduleFunctions.php +++ b/modules/Markbook/moduleFunctions.php @@ -101,7 +101,15 @@ function classChooser($guid, $pdo, $gibbonCourseClassID) if (isset($currentTerm['gibbonSchoolYearTermID'])) { $selectTerm = $currentTerm['gibbonSchoolYearTermID']; } - + $result = $container->get(SchoolYearTermGateway::class)->selectSchoolYearTermName($session->get('gibbonSchoolYearID')); + $terms = ($result->rowCount() > 0)? $result->fetchAll(\PDO::FETCH_KEY_PAIR) : array(); + + $col->addContent(__('Term').':')->prepend('  '); + $col->addSelect('gibbonSchoolYearTermID') + ->fromArray(array('-1' => __('All Terms'))) + ->fromArray($terms) + ->selected($selectTerm) + ->setClass('shortWidth'); } $data = array("gibbonSchoolYearID" => $session->get('gibbonSchoolYearID')); diff --git a/src/Domain/Activities/ActivityAttendanceGateway.php b/src/Domain/Activities/ActivityAttendanceGateway.php new file mode 100644 index 0000000000..f5d4e6eba5 --- /dev/null +++ b/src/Domain/Activities/ActivityAttendanceGateway.php @@ -0,0 +1,65 @@ +. +*/ + +namespace Gibbon\Domain\Activities; + +use Gibbon\Domain\Traits\TableAware; +use Gibbon\Domain\QueryCriteria; +use Gibbon\Domain\QueryableGateway; +use Gibbon\Services\Format; + +/** + * Activity Gateway + * + * @version v27 + * @since v27 + */ +class ActivityAttendanceGateway extends QueryableGateway +{ + use TableAware; + + private static $tableName = 'gibbonActivityAttendance'; + private static $primaryKey = 'gibbonActivityAttendanceID'; + + private static $searchableColumns = []; + + public function selectStudentAttendanceByActivity($gibbonActivityID) { + + $data = ['gibbonActivityID' => $gibbonActivityID]; + + $sql = 'SELECT gibbonActivityAttendance.date, gibbonActivityAttendance.timestampTaken, gibbonActivityAttendance.attendance, gibbonPerson.preferredName, gibbonPerson.surname + FROM gibbonActivityAttendance, gibbonPerson + WHERE gibbonActivityAttendance.gibbonPersonIDTaker=gibbonPerson.gibbonPersonID + AND gibbonActivityAttendance.gibbonActivityID=:gibbonActivityID'; + + return $this->db()->select($sql, $data); + + } + + public function selectActivityAttendanceByActivity ($gibbonActivityID, $date) { + $data = ['gibbonActivityID' => $gibbonActivityID, 'date' => $date]; + + $sql = 'SELECT gibbonActivityAttendanceID FROM gibbonActivityAttendance WHERE gibbonActivityID=:gibbonActivityID AND date=:date'; + + return $this->db()->select($sql, $data); + } + +} diff --git a/src/Domain/Activities/ActivityGateway.php b/src/Domain/Activities/ActivityGateway.php index eb14b55c9f..bd21dd677d 100644 --- a/src/Domain/Activities/ActivityGateway.php +++ b/src/Domain/Activities/ActivityGateway.php @@ -289,11 +289,7 @@ public function selectActivityEnrolmentByStudent($gibbonSchoolYearID, $gibbonPer public function selectWeekdayNamesByActivity($gibbonActivityID) { $data = array('gibbonActivityID' => $gibbonActivityID); - $sql = "SELECT DISTINCT nameShort - FROM gibbonActivitySlot - JOIN gibbonDaysOfWeek ON (gibbonActivitySlot.gibbonDaysOfWeekID=gibbonDaysOfWeek.gibbonDaysOfWeekID) - WHERE gibbonActivityID=:gibbonActivityID - ORDER BY sequenceNumber"; + $sql = "SELECT DISTINCT nameShort FROM gibbonActivitySlot JOIN gibbonDaysOfWeek ON (gibbonActivitySlot.gibbonDaysOfWeekID=gibbonDaysOfWeek.gibbonDaysOfWeekID) WHERE gibbonActivityID=:gibbonActivityID ORDER BY sequenceNumber"; return $this->db()->select($sql, $data); } @@ -419,32 +415,15 @@ public function selectActivityDetailsByCategory($gibbonActivityCategoryID) function getStudentActivityCountByType($type, $gibbonPersonID) { $data = array('gibbonPersonID' => $gibbonPersonID, 'type' => $type, 'date' => date('Y-m-d')); - $sql = "SELECT COUNT(*) - FROM gibbonActivity - JOIN gibbonActivityStudent ON (gibbonActivity.gibbonActivityID=gibbonActivityStudent.gibbonActivityID) - JOIN gibbonSchoolYear ON (gibbonSchoolYear.gibbonSchoolYearID=gibbonActivity.gibbonSchoolYearID) - WHERE gibbonActivityStudent.gibbonPersonID=:gibbonPersonID - AND gibbonActivityStudent.status='Accepted' - AND gibbonActivity.type=:type - AND gibbonActivity.active='Y' - AND :date BETWEEN gibbonSchoolYear.firstDay AND gibbonSchoolYear.lastDay"; + $sql = "SELECT COUNT(*) FROM gibbonActivity JOIN gibbonActivityStudent ON (gibbonActivity.gibbonActivityID=gibbonActivityStudent.gibbonActivityID) JOIN gibbonSchoolYear ON (gibbonSchoolYear.gibbonSchoolYearID=gibbonActivity.gibbonSchoolYearID) WHERE gibbonActivityStudent.gibbonPersonID=:gibbonPersonID AND gibbonActivityStudent.status='Accepted' AND gibbonActivity.type=:type AND gibbonActivity.active='Y' AND :date BETWEEN gibbonSchoolYear.firstDay AND gibbonSchoolYear.lastDay"; + return $this->db()->selectOne($sql, $data); } function getOverlappingActivityTimeSlot($gibbonActivityID, $gibbonPersonID, $dateType) { $data = ['gibbonActivityID' => $gibbonActivityID, 'gibbonPersonID' => $gibbonPersonID]; - $sql = "SELECT existingActivity.gibbonActivityID as id, existingActivity.name - FROM gibbonActivity as sourceActivity - JOIN gibbonActivitySlot as sourceSlot ON (sourceActivity.gibbonActivityID=sourceSlot.gibbonActivityID) - JOIN gibbonActivity as existingActivity ON (existingActivity.gibbonSchoolYearID=sourceActivity.gibbonSchoolYearID) - LEFT JOIN gibbonActivitySlot as existingSlot ON (existingActivity.gibbonActivityID=existingSlot.gibbonActivityID) - LEFT JOIN gibbonActivityStudent as existingEnrolment ON (existingActivity.gibbonActivityID=existingEnrolment.gibbonActivityID AND existingEnrolment.gibbonPersonID=:gibbonPersonID ) - WHERE sourceActivity.gibbonActivityID=:gibbonActivityID - AND existingEnrolment.status='Accepted' - AND existingActivity.active='Y' - AND existingSlot.gibbonDaysOfWeekID=sourceSlot.gibbonDaysOfWeekID - AND ( + $sql = "SELECT existingActivity.gibbonActivityID as id, existingActivity.name FROM gibbonActivity as sourceActivity JOIN gibbonActivitySlot as sourceSlot ON (sourceActivity.gibbonActivityID=sourceSlot.gibbonActivityID)JOIN gibbonActivity as existingActivity ON (existingActivity.gibbonSchoolYearID=sourceActivity.gibbonSchoolYearID) LEFT JOIN gibbonActivitySlot as existingSlot ON (existingActivity.gibbonActivityID=existingSlot.gibbonActivityID) LEFT JOIN gibbonActivityStudent as existingEnrolment ON (existingActivity.gibbonActivityID=existingEnrolment.gibbonActivityID AND existingEnrolment.gibbonPersonID=:gibbonPersonID) WHERE sourceActivity.gibbonActivityID=:gibbonActivityID AND existingEnrolment.status='Accepted' AND existingActivity.active='Y' AND existingSlot.gibbonDaysOfWeekID=sourceSlot.gibbonDaysOfWeekID AND ( (existingSlot.timeStart >= sourceSlot.timeStart AND existingSlot.timeStart < sourceSlot.timeEnd) OR (sourceSlot.timeStart >= existingSlot.timeStart AND sourceSlot.timeStart < existingSlot.timeEnd) ) @@ -461,7 +440,39 @@ function getOverlappingActivityTimeSlot($gibbonActivityID, $gibbonPersonID, $dat return $this->db()->select($sql, $data); } + + public function selectActivityByYearandStaff($gibbonPersonID, $gibbonSchoolYearID, $gibbonActivityID) + { + $data = ['gibbonPersonID' => $gibbonPersonID, 'gibbonSchoolYearID' => $gibbonSchoolYearID, 'gibbonActivityID' => $gibbonActivityID]; + $sql = "SELECT gibbonActivity.*, NULL as status, gibbonActivityStaff.role FROM gibbonActivity JOIN gibbonActivityStaff ON (gibbonActivity.gibbonActivityID=gibbonActivityStaff.gibbonActivityID) WHERE gibbonActivity.gibbonActivityID=:gibbonActivityID AND gibbonActivityStaff.gibbonPersonID=:gibbonPersonID AND gibbonActivityStaff.role='Organiser' AND gibbonSchoolYearID=:gibbonSchoolYearID AND active='Y' ORDER BY name"; + + return $this->db()->select($sql, $data); + } + + public function selectActivityAndStudent($gibbonActivityID, $gibbonPersonID) + { + $data = ['gibbonActivityID' => $gibbonActivityID, 'gibbonPersonID' => $gibbonPersonID]; + $sql = 'SELECT gibbonActivity.*, gibbonActivityStudent.*, surname, preferredName FROM gibbonActivity JOIN gibbonActivityStudent ON (gibbonActivity.gibbonActivityID=gibbonActivityStudent.gibbonActivityID) JOIN gibbonPerson ON (gibbonActivityStudent.gibbonPersonID=gibbonPerson.gibbonPersonID) WHERE gibbonActivityStudent.gibbonActivityID=:gibbonActivityID AND gibbonActivityStudent.gibbonPersonID=:gibbonPersonID'; + + return $this->db()->select($sql, $data); + } + + public function getActivityAndStudentDetails($gibbonActivityID, $gibbonPersonID) + { + $data = ['gibbonActivityID' => $gibbonActivityID, 'gibbonPersonID' => $gibbonPersonID]; + $sql = 'SELECT gibbonActivity.*, gibbonActivityStudent.*, surname, preferredName, gibbonActivityType.access, gibbonActivityType.maxPerStudent, gibbonActivityType.enrolmentType, gibbonActivityType.backupChoice FROM gibbonActivity JOIN gibbonActivityStudent ON (gibbonActivity.gibbonActivityID=gibbonActivityStudent.gibbonActivityID) JOIN gibbonPerson ON (gibbonActivityStudent.gibbonPersonID=gibbonPerson.gibbonPersonID) LEFT JOIN gibbonActivityType ON (gibbonActivity.type=gibbonActivityType.name) WHERE gibbonActivityStudent.gibbonActivityID=:gibbonActivityID AND gibbonActivityStudent.gibbonPersonID=:gibbonPersonID'; + + return $this->db()->select($sql, $data); + } + + public function getActivityAndDescription($gibbonSchoolYearID, $gibbonActivityID) + { + $data = ['gibbonSchoolYearID' => $gibbonSchoolYearID, 'gibbonActivityID' => $gibbonActivityID]; + $sql = "SELECT gibbonActivity.*, gibbonActivityType.description as activityTypeDescription FROM gibbonActivity LEFT JOIN gibbonActivityType ON (gibbonActivity.type=gibbonActivityType.name) WHERE gibbonSchoolYearID=:gibbonSchoolYearID AND active='Y' AND gibbonActivityID=:gibbonActivityID"; + return $this->db()->select($sql, $data); + } + public function getActivitySignUpAccess($gibbonActivityID, $gibbonPersonID) { $data = ['gibbonActivityID' => $gibbonActivityID, 'gibbonPersonID' => $gibbonPersonID]; diff --git a/src/Domain/Activities/ActivityStaffGateway.php b/src/Domain/Activities/ActivityStaffGateway.php index b3f2a44bf8..160f98809b 100644 --- a/src/Domain/Activities/ActivityStaffGateway.php +++ b/src/Domain/Activities/ActivityStaffGateway.php @@ -40,7 +40,8 @@ class ActivityStaffGateway extends QueryableGateway private static $searchableColumns = ['surname', 'preferredName']; - public function selectActivityStaff($gibbonActivityID) { + public function selectActivityStaff($gibbonActivityID) + { $select = $this ->newSelect() ->cols(['preferredName, surname, gibbonActivityStaff.*']) @@ -123,18 +124,21 @@ public function selectStaffByCategory($gibbonActivityCategoryID) public function selectStaffByActivity($gibbonActivityID) { $gibbonActivityID = is_array($gibbonActivityID) ? $gibbonActivityID : [$gibbonActivityID]; - $data = ['gibbonActivityID' => $gibbonActivityID]; + $data = ['gibbonActivityID' => $gibbonActivityID, 'today' => date('Y-m-d')]; $sql = "SELECT gibbonActivity.*, gibbonActivityStaff.gibbonPersonID, gibbonActivityStaff.role FROM gibbonActivity JOIN gibbonActivityStaff ON (gibbonActivity.gibbonActivityID=gibbonActivityStaff.gibbonActivityID) + JOIN gibbonPerson ON (gibbonPerson.gibbonPersonID=gibbonActivityStaff.gibbonPersonID) WHERE gibbonActivity.gibbonActivityID=:gibbonActivityID AND gibbonActivityStaff.role='Organiser' AND active='Y' + AND gibbonPerson.status='Full' AND (dateStart IS NULL OR dateStart<=:today) AND (dateEnd IS NULL OR dateEnd>=:today) ORDER BY name"; return $this->db()->select($sql, $data); } - public function selectActivityOrganiserByPerson($gibbonActivityID, $gibbonPersonID) { + public function selectActivityOrganiserByPerson($gibbonActivityID, $gibbonPersonID) + { $data = ['gibbonPersonID' => $gibbonPersonID, 'gibbonActivityID' => $gibbonActivityID]; $sql = "SELECT gibbonActivity.*, NULL as status, gibbonActivityStaff.role FROM gibbonActivity JOIN gibbonActivityStaff ON (gibbonActivity.gibbonActivityID=gibbonActivityStaff.gibbonActivityID) WHERE gibbonActivity.gibbonActivityID=:gibbonActivityID AND gibbonActivityStaff.gibbonPersonID=:gibbonPersonID AND gibbonActivityStaff.role='Organiser' AND active='Y' ORDER BY name"; @@ -183,11 +187,28 @@ public function selectActivityStaffByID($gibbonActivityID, $gibbonPersonID) { ]); } - public function insertActivityStaff($gibbonActivityID, $gibbonPersonID, $role) { + public function insertActivityStaff($gibbonActivityID, $gibbonPersonID, $role) + { return $this->insert([ 'gibbonPersonID' => $gibbonPersonID, 'gibbonActivityID' => $gibbonActivityID, 'role' => $role ]); } + + public function selectActivityByStaff($gibbonPersonID) + { + $data = ['gibbonPersonID' => $gibbonPersonID]; + $sql = "SELECT gibbonActivity.gibbonActivityID AS value, name, programStart FROM gibbonActivityStaff JOIN gibbonActivity ON (gibbonActivityStaff.gibbonActivityID = gibbonActivity.gibbonActivityID) WHERE gibbonSchoolYearID=:gibbonSchoolYearID AND active='Y' AND gibbonActivityStaff.gibbonPersonID=:gibbonPersonID AND (gibbonActivityStaff.role='Organiser' OR gibbonActivityStaff.role='Assistant' OR gibbonActivityStaff.role='Coach') ORDER BY name, programStart"; + + return $this->db()->select($sql, $data); + } + + public function selectStaffRoleByActivity($gibbonPersonID, $gibbonActivityID ) + { + $dataCheck = ['gibbonPersonID' => $gibbonPersonID, 'gibbonActivityID' => $gibbonActivityID]; + $sqlCheck = "SELECT role FROM gibbonActivityStaff WHERE gibbonActivityID=:gibbonActivityID AND gibbonPersonID=:gibbonPersonID"; + + return $this->db()->select($sqlCheck, $dataCheck); + } } diff --git a/src/Domain/Activities/ActivityStudentGateway.php b/src/Domain/Activities/ActivityStudentGateway.php index 500aa738ea..15d3f1fbd1 100644 --- a/src/Domain/Activities/ActivityStudentGateway.php +++ b/src/Domain/Activities/ActivityStudentGateway.php @@ -40,7 +40,8 @@ class ActivityStudentGateway extends QueryableGateway private static $searchableColumns = ['surname', 'preferredName']; - public function queryActivityEnrolment($criteria, $gibbonActivityID) { + public function queryActivityEnrolment($criteria, $gibbonActivityID) + { $query = $this ->newQuery() ->cols(['gibbonActivityStudent.*', 'surname', 'preferredName', 'gibbonFormGroup.nameShort as formGroup', 'FIND_IN_SET(gibbonActivityStudent.status, "Accepted,Pending,Waiting List,Not Accepted,Left") as sortOrder']) @@ -55,7 +56,16 @@ public function queryActivityEnrolment($criteria, $gibbonActivityID) { return $this->runQuery($query, $criteria); } - + + public function selectActivityByStudents($gibbonActivityID) + { + $data = ['gibbonActivityID' => $gibbonActivityID]; + $sql = "SELECT gibbonSchoolYearTermIDList, maxParticipants, programStart, programEnd, (SELECT COUNT(*) + FROM gibbonActivityStudent JOIN gibbonPerson ON (gibbonActivityStudent.gibbonPersonID=gibbonPerson.gibbonPersonID) WHERE gibbonActivityStudent.gibbonActivityID=gibbonActivity.gibbonActivityID AND gibbonActivityStudent.status='Waiting List' AND gibbonPerson.status='Full') AS waiting FROM gibbonActivity WHERE gibbonActivityID=:gibbonActivityID"; + + return $this->db()->select($sql, $data); + } + public function queryAllActivityParticipants($criteria, $gibbonActivityID) { $query = $this ->newQuery() @@ -168,10 +178,10 @@ public function selectEnrolmentsByCategory($gibbonActivityCategoryID) AND (gibbonPerson.dateEnd IS NULL OR gibbonPerson.dateEnd >= :today) GROUP BY gibbonActivityStudent.gibbonPersonID ORDER BY gibbonYearGroup.sequenceNumber, gibbonFormGroup.name, gibbonPerson.surname, gibbonPerson.preferredName"; - + return $this->db()->select($sql, $data); } - + public function getEnrolmentByCategoryAndPerson($gibbonActivityCategoryID, $gibbonPersonID) { $data = ['gibbonActivityCategoryID' => $gibbonActivityCategoryID, 'gibbonPersonID' => $gibbonPersonID]; @@ -196,5 +206,4 @@ public function deleteEnrolmentByCategoryAndPerson($gibbonActivityCategoryID, $g return $this->db()->selectOne($sql, $data); } - } diff --git a/src/Domain/School/DaysOfWeekGateway.php b/src/Domain/School/DaysOfWeekGateway.php index 64df551be7..e94ad24567 100644 --- a/src/Domain/School/DaysOfWeekGateway.php +++ b/src/Domain/School/DaysOfWeekGateway.php @@ -53,5 +53,11 @@ public function getDayOfWeekByDate($date) return $this->db()->selectOne($sql, $data); } - + public function selectDaysOfWeek() + { + $sql = "SELECT gibbonDaysOfWeekID as value, name FROM gibbonDaysOfWeek ORDER BY sequenceNumber"; + + return $this->db()->select($sql); + + } } diff --git a/src/Domain/School/SchoolYearGateway.php b/src/Domain/School/SchoolYearGateway.php index 739e7936a3..a223dd8fd8 100644 --- a/src/Domain/School/SchoolYearGateway.php +++ b/src/Domain/School/SchoolYearGateway.php @@ -169,4 +169,11 @@ public function getCurrentSchoolYear() { return $this->db()->selectOne("SELECT * FROM gibbonSchoolYear WHERE status='Current'"); } + + public function selectCurrentOrUpcomingSchoolYear() + { + $sql = "SELECT gibbonSchoolYearID as value, gibbonSchoolYear.name FROM gibbonSchoolYear WHERE (status='Upcoming' OR status='Current') ORDER BY sequenceNumber LIMIT 0, 2"; + + return $this->db()->select($sql); + } } diff --git a/src/Domain/School/SchoolYearTermGateway.php b/src/Domain/School/SchoolYearTermGateway.php index cfad84ee27..2e911e4d51 100644 --- a/src/Domain/School/SchoolYearTermGateway.php +++ b/src/Domain/School/SchoolYearTermGateway.php @@ -198,4 +198,20 @@ public function getTermNamesByID($gibbonSchoolYearTermID): array ])->fetchAll(\PDO::FETCH_COLUMN, 0); } + public function selectBySchoolYear($gibbonSchoolYearID) + { + $data = ['gibbonSchoolYearID' => $gibbonSchoolYearID, 'today' => date('Y-m-d')]; + $sql = "SELECT * FROM gibbonSchoolYearTerm WHERE gibbonSchoolYearID=:gibbonSchoolYearID AND lastDay>=:today ORDER BY sequenceNumber"; + + return $this->db()->select($sql, $data); + } + + public function selectSchoolYearTermName($gibbonSchoolYearID) + { + $data = ['gibbonSchoolYearID' => $gibbonSchoolYearID]; + $sql = "SELECT gibbonSchoolYearTermID as value, name FROM gibbonSchoolYearTerm WHERE gibbonSchoolYearID=:gibbonSchoolYearID ORDER BY sequenceNumber"; + + return $this->db()->select($sql, $data); + } + } diff --git a/src/Domain/User/UserGateway.php b/src/Domain/User/UserGateway.php index 782a79b223..b05e91e03d 100644 --- a/src/Domain/User/UserGateway.php +++ b/src/Domain/User/UserGateway.php @@ -213,7 +213,15 @@ public function removeRoleFromUser($gibbonPersonID, $gibbonRoleID) return $this->db()->update($sql, $data); } - + + public function selectUserByFormGroup($gibbonYearGroupIDList, $gibbonSchoolYearID) + { + $data = ['gibbonYearGroupIDList' => $gibbonYearGroupIDList, 'gibbonSchoolYearID' => $gibbonSchoolYearID, 'date' => date('Y-m-d')]; + $sql = "SELECT gibbonPerson.gibbonPersonID, preferredName, surname, gibbonFormGroup.name AS formGroupName FROM gibbonPerson JOIN gibbonStudentEnrolment ON (gibbonPerson.gibbonPersonID=gibbonStudentEnrolment.gibbonPersonID) JOIN gibbonFormGroup ON (gibbonStudentEnrolment.gibbonFormGroupID=gibbonFormGroup.gibbonFormGroupID) JOIN gibbonYearGroup ON (gibbonStudentEnrolment.gibbonYearGroupID=gibbonYearGroup.gibbonYearGroupID) WHERE gibbonStudentEnrolment.gibbonSchoolYearID=:gibbonSchoolYearID AND FIND_IN_SET(gibbonYearGroup.gibbonYearGroupID, :gibbonYearGroupIDList) AND gibbonPerson.status='FULL' AND (dateStart IS NULL OR dateStart<=:date) AND (dateEnd IS NULL OR dateEnd>=:date) ORDER BY formGroupName, gibbonPerson.surname, gibbonPerson.preferredName"; + + return $this->db()->select($sql, $data); + } + public function selectActiveUsersBySchoolYear($gibbonSchoolYearID) { $data = ['gibbonSchoolYearID' => $gibbonSchoolYearID]; @@ -221,6 +229,20 @@ public function selectActiveUsersBySchoolYear($gibbonSchoolYearID) return $this->db()->select($sql, $data); } + + public function selectUsers() + { + $sql = "SELECT gibbonPersonID, surname, preferredName, status, username FROM gibbonPerson WHERE status='Full' OR status='Expected' ORDER BY surname, preferredName"; + + return $this->db()->select($sql); + } + + public function selectStudentsByActivity($gibbonSchoolYearID, $gibbonActivityID) + { + $data = ['gibbonSchoolYearID' => $gibbonSchoolYearID, 'gibbonActivityID' => $gibbonActivityID, 'today' => date('Y-m-d')]; + $sql = "SELECT gibbonPerson.gibbonPersonID, surname, preferredName, gibbonFormGroupID, gibbonActivityStudent.status + FROM gibbonPerson JOIN gibbonStudentEnrolment ON (gibbonPerson.gibbonPersonID=gibbonStudentEnrolment.gibbonPersonID) JOIN gibbonActivityStudent ON (gibbonActivityStudent.gibbonPersonID=gibbonPerson.gibbonPersonID) WHERE gibbonPerson.status='Full' AND (dateStart IS NULL OR dateStart <= :today) AND (dateEnd IS NULL OR dateEnd >= :today) AND gibbonSchoolYearID=:gibbonSchoolYearID AND gibbonActivityStudent.status='Accepted' AND gibbonActivityID=:gibbonActivityID ORDER BY gibbonActivityStudent.status, surname, preferredName"; + } public function selectTransportList() {