public function isvaliddurationAction() { $objPeriod = new Acad_Model_DbTable_Period(); $request = $this->getRequest(); $department_id = $request->getParam('department_id'); $degree_id = $request->getParam('degree_id'); $semester_id = $request->getParam('semester_id'); $weekday_number = $request->getParam('weekday_number'); $period_id = $request->getParam('period_id'); $period_detail = $objPeriod->getIdPeriod($period_id); $period_number = $period_detail['period_number']; $tmpperiod_number = $period_number; $groups = Acad_Model_DbTable_Groups::getClassGroups($department_id, $degree_id); $totalgroups = count($groups); array_push($groups, array('group_id' => "ALL")); $grpcnt = 0; $tmpspan = 0; $notavailablegroups = array(); $cnt = 0; while ($tmpperiod_number > 1 && $grpcnt < $totalgroups) { $tmpspan++; $tmpperiod_number = $tmpperiod_number - 1; $tmpperiod_id = $objPeriod->getPeriod($department_id, $degree_id, $semester_id, $weekday_number, $tmpperiod_number); $period_id = $tmpperiod_id[0]['period_id']; $group_detail = $this->model->groupPeroidDuration($period_id, $groups); if (count($group_detail) == 0) { continue; } $grpcnt = $grpcnt + count($group_detail); foreach ($group_detail as $key => $value) { if ($value['period_duration'] > $tmpspan) { $notavailablegroups[$cnt] = $value['group_id']; } if ($value['group_id'] == 'ALL') { $grpcnt = $totalgroups; break; } foreach ($groups as $tmpkey => $tmpvalue) { if ($tmpvalue['group_id'] == $value['group_id']) { unset($groups[$tmpkey]); } } } } print_r($notavailablegroups); }
public function periodStatus($periodId, $detail = FALSE) { $period = Acad_Model_DbTable_Period::getIdPeriod($periodId); $sql = 'SELECT `timetable`.timetable_id, `timetable`.subject_code, `timetable`.subject_mode_id, `timetable`.group_id, `timetable`.staff_id, `timetable`.period_duration, `timetable`.periods_covered, `timetable`.valid_from, `timetable`.valid_upto FROM `period` JOIN `timetable` ON (`period`.`period_id` = `timetable`.`period_id` AND ( CURDATE() < `timetable`.valid_upto AND CURDATE() < `timetable`.valid_from)) WHERE (`period`.department_id = ? AND `period`.degree_id = ? AND `period`.semester_id = ? AND `period`.weekday_number = ? AND `period`.period_type_id != "BRK") AND FIND_IN_SET(?, periods_covered);'; $params = array($period['department_id'], $period['degree_id'], $period['semester_id'], $period['weekday_number'], $period['period_number']); $totalgroups = Acad_Model_DbTable_Groups::getClassGroups($period['department_id'], $period['degree_id'], TRUE); $periodStatus = self::getDefaultAdapter()->fetchAll($sql, $params); $finalStatus = array(); if (!$periodStatus) { $status = 'EMPTY'; } elseif ('ALL' == strtoupper($periodStatus[0]['group_id'])) { if ($detail) { $finalStatus['periodStatus'] = $periodStatus; } $finalStatus['occupiedGroups'] = 'ALL'; $status = 'FULL'; } else { $occupiedGroups = array(); foreach ($periodStatus as $key => $group) { $occupiedGroups[] = $group['group_id']; } $finalStatus['occupiedGroups'] = $occupiedGroups; $tmpavailableGroups = array_diff($totalgroups, $occupiedGroups); if ($detail) { $finalStatus['periodStatus'] = $periodStatus; } if (count($tmpavailableGroups)) { // $tmpavailableGroups has unordered keys so $availableGroups is created. foreach ($tmpavailableGroups as $key => $value) { $availableGroups[] = $value; } $finalStatus['availableGroups'] = $availableGroups; $status = 'PARTIAL'; } else { $status = 'FULL'; } } $finalStatus['maxGroups'] = $totalgroups; $finalStatus['STATUS'] = $status; return $finalStatus; }