public function get_course_map_facility_ID($course_ID)
 {
     $this->curriculum_db->select("course_facility_map.facility_ID");
     $this->curriculum_db->join("course_facility_map", "course_facility_map.course_ID = course_list.course_ID");
     $this->curriculum_db->where("course_list.course_ID", $course_ID);
     $results = $this->curriculum_db->get("course_list")->result_array();
     if ($results) {
         return sql_result_to_column($results, "facility_ID");
     } else {
         return array();
     }
 }
 public function open_all_door_by_num($card_num, $start, $end)
 {
     //取得所有門禁資訊
     $doors = $this->facility_model->get_facility_list(array("type" => "door"))->result_array();
     //取得所有門禁的編號
     $door_IDs = sql_result_to_column($doors, "ID");
     //新增
     $this->add_by_card_num($door_IDs, $card_num, $start, $end);
 }
 public function get_time_by_checkbox($input_array_time, $f_IDs)
 {
     $facilities_ID = $this->facility_model->get_vertical_group_facilities($f_IDs, array("facility_only" => TRUE));
     $facilities = $this->facility_model->get_facility_list(array("ID" => $facilities_ID))->result_array();
     if (!$facilities) {
         throw new Exception("無此儀器!", ERROR_CODE);
     }
     $unit_sec = max(sql_result_to_column($facilities, "unit_sec"));
     $min_time = min($input_array_time);
     $max_time = max($input_array_time) + $unit_sec;
     //確認選擇了連續時段
     for ($i = $min_time; $i < $max_time; $i += $unit_sec) {
         if (!in_array($i, $input_array_time)) {
             throw new Exception("請選擇連續時段。", WARNING_CODE);
         }
     }
     //確認選擇了整點時段
     if (!is_int_multiple_unit_time($min_time, $unit_sec) || !is_int_multiple_unit_time($max_time, $unit_sec)) {
         throw new Exception("非整點時段!", ERROR_CODE);
     }
     return array($min_time, $max_time);
 }
 public function edit_config()
 {
     try {
         $this->is_admin_login();
         $this->load->model('admin_model');
         $this->data['admin_ID_select_options'] = $this->admin_model->get_admin_ID_select_options();
         //取得管理員名單
         $admin_list = $this->reward_model->get_admin_privilege_list(array("privilege" => "reward_super_admin"))->result_array();
         if ($admin_list) {
             $this->data['admin_ID'] = sql_result_to_column($admin_list, "admin_ID");
         }
         $this->load->view('templates/header');
         $this->load->view('templates/sidebar');
         $this->load->view('reward/config', $this->data);
         $this->load->view('templates/footer');
     } catch (Exception $e) {
         $this->show_error_page();
     }
 }
 public function get_class_profs_ID($class_ID)
 {
     $lessons = $this->curriculum_model->get_lesson_list(array("class_ID" => $class_ID))->result_array();
     return $profs_ID = array_unique(sql_result_to_column($lessons, "lesson_prof_ID"));
 }
 public function certify($reg_IDs = "", $updated_by = NULL)
 {
     if (!isset($updated_by)) {
         $updated_by = $this->session->userdata('ID');
     }
     foreach ((array) $reg_IDs as $reg_ID) {
         $reg = $this->curriculum_model->get_reg_list(array("reg_ID" => $reg_ID))->row_array();
         if (!$reg) {
             throw new Exception("無此報名!", ERROR_CODE);
         }
         //檢查權限
         if (!$this->curriculum_model->is_super_admin()) {
             $this->load->model('curriculum/lesson_model');
             $lessons = $this->curriculum_model->get_lesson_list(array("course_ID" => $reg['course_ID'], "class_code" => $reg['class_code'], "lesson_type" => "certification"))->result_array();
             //只要是有上過認證課的老師就有權限
             if (!$lessons || !in_array($this->session->userdata('ID'), sql_result_to_column($lessons, "lesson_prof_ID"))) {
                 throw new Exception("權限不足!", ERROR_CODE);
             }
         }
         if ($reg['reg_state'] == "confirmed") {
             //已確認,要通過認證
             if ($reg['course_ID'] == "1") {
                 //安全講習,較特殊
                 $this->load->model('user_model');
                 $this->user_model->update_user_security_verification($reg['user_ID']);
             } else {
                 //先檢查相關的報名是否有含認證課程
                 //if(!in_array('certification',explode(",",$reg['class_type']))) throw new Exception("此課程不含認證課程!",ERROR_CODE);
                 $data = array("user_ID" => $reg['user_ID'], "course_ID" => $reg['course_ID'], "class_code" => $reg['class_code'], "group_class_suite" => TRUE);
                 $reg = $this->curriculum_model->get_reg_list($data)->row_array();
                 $class_type = explode(',', $reg['class_type']);
                 if (!in_array('certification', $class_type)) {
                     throw new Exception("此課程不含認證課程!", ERROR_CODE);
                 }
                 //開啟相關儀器權限(先取得該課程相關的儀器,再開啟權限)
                 $data = array("course_ID" => $reg['course_ID']);
                 $results = $this->curriculum_model->get_course_facility_map($data)->result_array();
                 $this->load->model('facility/user_privilege_model');
                 foreach ($results as $result) {
                     $this->user_privilege_model->add($result['facility_ID'], $reg['user_ID'], "normal");
                 }
             }
             //將所有的報名更改狀態為已認證
             $data = array("user_ID" => $reg['user_ID'], "course_ID" => $reg['course_ID'], "class_code" => $reg['class_code']);
             $regs = $this->curriculum_model->get_reg_list($data)->result_array();
             foreach ($regs as $reg) {
                 $data = array("reg_state" => "certified", "reg_certified_by" => $updated_by, "reg_ID" => $reg['reg_ID']);
                 $this->curriculum_model->update_reg($data);
             }
             //$data = array(	"reg_state"=>"certified",
             //				"reg_certified_by"=>$updated_by,
             //				"reg_ID"=>$reg['reg_ID']);
             //$this->curriculum_model->update_reg($data);
         } else {
             throw new Exception("尚未確認已到", ERROR_CODE);
         }
     }
 }
 public function send_curriculum_tomorrow_lesson_notification()
 {
     $this->load->model('curriculum_model');
     $this->load->model('curriculum/class_model');
     $this->load->model('curriculum/course_model');
     $this->load->model('user_model');
     $this->load->model('facility/access_ctrl_model');
     //取得課務員email
     $admins = $this->curriculum_model->get_admin_privilege_list(array("privilege" => "curriculum_super_admin"))->result_array();
     $admin_emails = sql_column_to_key_value_array($admins, "admin_email");
     //找出明天有開課的課堂
     $lessons = $this->curriculum_model->get_lesson_list(array("lesson_start_time" => date("Y-m-d 00:00:00", strtotime("+1day")), "lesson_end_time" => date("Y-m-d 00:00:00", strtotime("+2day")), "class_state" => array("normal", "additional")))->result_array();
     foreach ($lessons as $lesson) {
         $class = $this->curriculum_model->get_class_list(array("class_ID" => $lesson['class_ID']))->row_array();
         $regs = $this->curriculum_model->get_reg_list(array("class_ID" => $lesson['class_ID']))->result_array();
         //認證課程用特殊處理方式
         $original_canceled_reg_nums = 0;
         $original_canceled_reg_user_IDs = array();
         if ($this->class_model->is_certification_class_only($class['class_type'])) {
             //先取得原本沒開課的報名人數
             $original_canceled_regs = $this->curriculum_model->get_reg_list(array("course_ID" => $class['course_ID'], "class_code" => $class['class_code'], "class_state" => "canceled", "group_class_suite" => TRUE));
             $original_canceled_reg_nums = $original_canceled_regs->num_rows();
             $original_canceled_reg_user_IDs = sql_result_to_column($original_canceled_regs->result_array(), "user_ID");
         }
         foreach ($regs as $reg) {
             //通知正取生
             if (empty($class['class_max_participants']) || $reg['reg_rank'] - $original_canceled_reg_nums <= $class['class_max_participants']) {
                 if (!in_array($reg['user_ID'], $original_canceled_reg_user_IDs)) {
                     //幫他們開門禁權限
                     $user_profile = $this->user_model->get_user_profile_list(array("user_ID" => $reg['user_ID']))->row_array();
                     if (!empty($user_profile['card_num'])) {
                         $facility_IDs = $this->course_model->get_course_map_facility_ID($reg['course_ID']);
                         if (!empty($facility_IDs)) {
                             foreach ($facility_IDs as $facility_ID) {
                                 $this->access_ctrl_model->add($facility_ID, $user_profile['ID'], strtotime($lesson['lesson_start_time']), strtotime($lesson['lesson_end_time']), TRUE);
                             }
                         }
                     }
                     $this->email->to($user_profile['email'])->cc($admin_emails);
                     $this->email->subject("成大微奈米科技研究中心 -課程系統通知- [明天上課]");
                     $this->email->message("{$user_profile['name']} 您好,<br>\r\n\t\t\t\t\t\t\t<br>\r\n\t\t\t\t\t\t\t明日是 {$lesson['course_cht_name']} 課程 " . $this->curriculum_model->get_class_type_str($lesson['lesson_type']) . " 的上課日,請準時出席,謝謝。<br>\r\n\t\t\t\t\t\t\t日期:" . date("Y-m-d", strtotime($lesson['lesson_start_time'])) . "<br>\r\n\t\t\t\t\t\t\t時間:" . date("H:i:s", strtotime($lesson['lesson_start_time'])) . "<br>\r\n\t\t\t\t\t\t\t課程名稱:{$lesson['course_cht_name']}<br>\r\n\t\t\t\t\t\t\t地點:{$lesson['location_cht_name']}<br>\r\n\t\t\t\t\t\t\t授課者:{$lesson['lesson_prof_name']}<br>");
                     $this->email->send();
                 }
             }
         }
     }
     echo "DONE";
 }
 public function get_max_pre_open_sec($f_ID = NULL)
 {
     $options = array("ID" => $f_ID);
     $facilities = $this->get_facility_list($options)->result_array();
     if ($facilities) {
         $pre_open_sec = sql_result_to_column($facilities, "pre_open_sec");
         return max($pre_open_sec);
     } else {
         return 0;
     }
 }
 public function query_reg()
 {
     try {
         $this->is_user_login();
         $input_data = $this->input->get(NULL, TRUE);
         $options = array("class_code" => isset($input_data['class_code']) ? $input_data['class_code'] : "", "course_ID" => empty($input_data['course_ID']) ? NULL : $input_data['course_ID'], "group_class_suite" => TRUE);
         $regs = $this->curriculum_model->get_reg_list($options)->result_array();
         $output['aaData'] = array();
         $this->load->model('user_model');
         foreach ($regs as $reg) {
             //查詢學員資料
             $user_profile = $this->user_model->get_user_profile_list(array("user_ID" => $reg['user_ID']))->row_array();
             $row = array();
             $row[] = "{$reg['course_cht_name']} ({$reg['course_eng_name']})";
             $row[] = $reg['class_code'];
             $row[] = $this->curriculum_model->get_class_type_str($reg['class_type']);
             if (empty($reg['class_max_participants']) || $reg['reg_rank'] <= $reg['class_max_participants']) {
                 $row[] = $user_profile['name'] . form_label("正取" . $reg['reg_rank'], "", array("class" => "label label-success"));
             } else {
                 $row[] = $user_profile['name'] . form_label("備取" . ($reg['reg_rank'] - $reg['class_max_participants']), "", array("class" => "label label-warning"));
             }
             $row[] = $user_profile['org_name'] . $user_profile['department'];
             $row[] = $user_profile['mobile'];
             $row[] = $user_profile['email'];
             $row[] = $user_profile['boss_name'];
             $display = array();
             //取得授課人員名單
             $lessons = $this->curriculum_model->get_lesson_list(array("course_ID" => $reg['course_ID'], "class_code" => $reg['class_code']))->result_array();
             $lesson_prof_IDs = array_unique(sql_result_to_column($lessons, "lesson_prof_ID"));
             if ($this->curriculum_model->is_super_admin() || in_array($this->session->userdata('ID'), $lesson_prof_IDs)) {
                 if ($reg['reg_state'] == "selected") {
                     $display[] = form_checkbox("reg_ID[]", $reg['reg_ID']);
                 } else {
                     if ($reg['reg_state'] == "confirmed") {
                         if ($this->curriculum_model->is_super_admin()) {
                             $display[] = form_checkbox("reg_ID[]", $reg['reg_ID']);
                         } else {
                             if ($reg['course_ID'] == 1) {
                                 //取得可認證授課人員名單
                                 $certification_lessons = $this->curriculum_model->get_lesson_list(array("course_ID" => $reg['course_ID'], "class_code" => $reg['class_code']))->result_array();
                                 $certification_prof_IDs = array_unique(sql_result_to_column($lessons, "lesson_prof_ID"));
                                 if (in_array($this->session->userdata('ID'), $certification_prof_IDs)) {
                                     $display[] = form_checkbox("reg_ID[]", $reg['reg_ID']);
                                 }
                             } else {
                                 if (in_array('certification', explode(",", $reg['class_type']))) {
                                     //取得可認證授課人員名單
                                     $certification_lessons = $this->curriculum_model->get_lesson_list(array("course_ID" => $reg['course_ID'], "class_code" => $reg['class_code'], "lesson_type" => "certification"))->result_array();
                                     $certification_prof_IDs = array_unique(sql_result_to_column($lessons, "lesson_prof_ID"));
                                     if (in_array($this->session->userdata('ID'), $certification_prof_IDs)) {
                                         $display[] = form_checkbox("reg_ID[]", $reg['reg_ID']);
                                     }
                                 }
                             }
                         }
                     }
                 }
             } else {
                 if ($reg['user_ID'] != $this->session->userdata('ID')) {
                     continue;
                 }
             }
             //顯示狀態
             if (!empty($reg['reg_confirmed_by'])) {
                 $display[] = form_label("已到", "", array("class" => "label label-success"));
             }
             if (!empty($reg['reg_certified_by'])) {
                 $display[] = form_label("已過", "", array("class" => "label label-success"));
             }
             //超級管理員隨時都可以取消
             if ($this->curriculum_model->is_super_admin() && $reg['reg_state'] == 'selected') {
                 $display[] = form_button("del", "取消", "class='btn btn-danger btn-small' value='{$reg['reg_ID']}'");
             }
             $row[] = implode(' ', $display);
             $output['aaData'][] = $row;
         }
         echo json_encode($output);
     } catch (Exception $e) {
         echo json_encode($output);
     }
 }