/** * Подача заявки на программу/дисциплину. */ public function action_apply($params) { $user = Model_User::create(); $udata = (object) $user->getAuth(); $links = Resources::getInstance()->links; /* Получаем параметры программы */ $object_id = $params['program_id']; $type = $params['program_type']; /* Если подаётся заявка на дисциплину, */ if (Model_Application::TYPE_DISCIPLINE === $type) { /* то получаем идентификатор программы по дисциплине */ $disc = Model_Discipline::create(); $info = $disc->get($object_id); $program_id = $info['program_id']; } else { /* Если же заявка на программу, то берём её идентификатор */ $program_id = $object_id; } /* Получаем данные программы */ $program = Model_Education_Programs::create(); $info = (object) $program->getProgramInfo($program_id); /* Если программы платная и не заполнен расширенный профиль, то */ if (Model_Education_Programs::PAID_TYPE_PAID === $info->paid_type && !$user->isExtendedProfileSet($udata->user_id)) { // просим пользователя его заполнить $msg = 'Заполните, пожалуйста, подробную анкету слушателя'; $this->flash($msg, $links->get('student.extended-profile')); } $app = Model_Application::create(); if ($app->apply($udata->user_id, $object_id, $type)) { // заявка корректна $return_url = $links->get('student.applications'); $msg = 'Вы успешно подали заявку на учебный курс.<p> Через 10 сек. Вас автоматически перенаправят на страницу просмотра поданых Вами <a href="' . $return_url . '" title=Мои заявки> заявок</a>. <p> Также, Вы можете, не дожидаясь перенаправления, перейти на страницу <a href="' . $links->get('student.apply') . '" title=Авторизация>Мой новый курс</a> и подать зявку на ещё один учебный курс!'; } else { // заявка дубликат $return_url = $links->get('student.apply'); $msg = 'Заявка на эту дисциплину была подана вами ранее. Через 10 сек. Вас автоматически перенаправят на страницу просмотра поданых Вами <a href="' . $return_url . '" title=Мои заявки> заявок</a>. <p> Также, Вы можете, не дожидаясь перенаправления, перейти на страницу <a href="' . $links->get('student.apply') . '" title=Авторизация>Мой новый курс</a> и подать зявку на ещё один учебный курс!'; } $this->flash($msg, $return_url, 10); }
/** * Отображение доступных учебных материалов. */ public function action_show(array $params = array()) { $a = Model_Test::create(); $a->test(); $links = Resources::getInstance()->links; if (!isset($params['discipline_id']) || is_int($params['discipline_id'])) { $this->flash('Не указан идентификатор дисциплины', $links->get('student.programs')); } $discipline_id = intval($params['discipline_id']); $user = Model_User::create(); $udata = (object) $user->getAuth(); $session = Resources_Abstract::getInstance()->session; // если данных о доступных дисциплинах нет - вычислить if (!isset($session->availDisciplines)) { $student = Model_Education_Students::create(); $avail_programs = $student->getAvailDisciplinesForPrograms($udata->user_id); $avail_disciplines = $student->getAvailDisciplinesSeparate($udata->user_id); } $discipline_open = in_array($discipline_id, $session->availDisciplines); if ($discipline_open) { // дисциплина доступна $disc = Model_Discipline::create(); $discipline_data = $disc->get($discipline_id); $section = Model_Section::create(); $sections = $section->getAllByDiscipline($discipline_id); $modelApps = Model_Application::create(); $statuses = $modelApps->getAppsStatus($discipline_id, $udata->user_id); //== Model_Application::STATUS_FINISHED; $statusFinished = array_key_exists(Model_Application::STATUS_FINISHED, $statuses); $material = Model_Educational_Materials::create(); $materials = $material->getAllByDiscipline($discipline_id, $statusFinished); $control_work = Model_ControlWork::create(); $tests = $control_work->getTestsByDiscipline($discipline_id); $this->set('discipline', $discipline_data); $this->set('sections', $sections); $this->set('materials', $materials); $this->set('tests', $tests); $this->set('user_id', $udata->user_id); //print_r($materials); $this->render(); } else { $this->flash('Данная дисциплина на данный Вам недоступна. Возможно Вы не полностью оплатили заявку по данной дисциплине или программе, содержащей данную дисциплину, либо вообще не подавали заявку на ее изучение.', $links->get('student.programs'), 5); } }
/** * Получить список доступных отдельных дисциплин для студента * Идентификаторы доступных дисциплин сохраняются в сессии в массив availDisciplines * * @param int $student_id * @return array */ public function getAvailDisciplinesSeparate($student_id) { $result = array(); $disc = Model_Discipline::create(); $session = Resources_Abstract::getInstance()->session; $app = Model_Application::create(); // Получаем список заявок на отдельные дициплины $disc_app = $app->getProcessedAppsForDisciplines($student_id); foreach ($disc_app as $a) { $a['cost'] = null === $a['cost'] ? 0 : $a['cost']; $a['total_sum'] = null === $a['total_sum'] ? 0 : $a['total_sum']; $a['disc_sum'] = $a['cost'] / 100 * $a['coef']; /* Если программа, которой принадлежит дисциплина, платная */ if (Model_Education_Programs::PAID_TYPE_PAID == $a['paid_type']) { /* и статус заявки подобает, */ if (Model_Application::STATUS_SIGNED !== $a['status'] && Model_Application::STATUS_PREPAID !== $a['status'] && Model_Application::STATUS_FINISHED !== $a['status']) { continue; } $active = true; // сохраняем в сессии как доступную $session->availDisciplines[] = $a['object_id']; } elseif (Model_Education_Programs::PAID_TYPE_FREE == $a['paid_type']) { /* и статус заявки подобает, */ if (Model_Application::STATUS_SIGNED !== $a['status'] && Model_Application::STATUS_FINISHED !== $a['status']) { continue; } $active = true; // сохраняем в сессии как доступную $session->availDisciplines[] = $a['object_id']; } /* И заносим её в список доступных */ $disc = array('discipline_id' => $a['object_id'], 'title' => $a['title'], 'app_id' => $a['app_id'], 'disc_sum' => $a['disc_sum'], 'total_sum' => $a['total_sum'], 'active' => $active); $result[] = $disc; } return $result; }