public function execute($contextObject)
 {
     $result = "";
     if (!is_null(CCorriculumsManager::getDiscipline($contextObject->corriculum_discipline_id)->cycle->corriculum->nisChairman)) {
         $result = CCorriculumsManager::getDiscipline($contextObject->corriculum_discipline_id)->cycle->corriculum->nisChairman->getNameShort();
     }
     return $result;
 }
 public function actionGetItem($id)
 {
     $result = array();
     $discipline = CCorriculumsManager::getDiscipline($id);
     if (!is_null($discipline)) {
         $result[$discipline->getId()] = $discipline->discipline->getValue();
     }
     return $result;
 }
 public function actionGetViewData()
 {
     $result = array();
     $plan = CWorkPlanManager::getWorkplan(CRequest::getInt("plan_id"));
     $discipline = CCorriculumsManager::getDiscipline($plan->corriculum_discipline_id);
     $query = new CQuery();
     $query->select("term.id as id, term.title as name")->from(TABLE_CORRICULUM_DISCIPLINE_SECTIONS . " as term")->condition("discipline_id=" . $discipline->getId());
     foreach ($query->execute()->getItems() as $item) {
         $result[$item["id"]] = $item["name"];
     }
     return $result;
 }
 public function actionGetViewData()
 {
     $result = array();
     $plan = CWorkPlanManager::getWorkplan(CRequest::getInt("plan_id"));
     $discipline = CCorriculumsManager::getDiscipline($plan->corriculum_discipline_id);
     $corriculum = $discipline->cycle->corriculum;
     $query = new CQuery();
     $query->select("discipline.id as id, subject.name as name")->from(TABLE_CORRICULUM_DISCIPLINES . " as discipline")->innerJoin(TABLE_CORRICULUM_CYCLES . " as cycle", "discipline.cycle_id = cycle.id")->innerJoin(TABLE_DISCIPLINES . " as subject", "discipline.discipline_id = subject.id")->condition("cycle.corriculum_id=" . $corriculum->getId());
     foreach ($query->execute()->getItems() as $item) {
         $result[$item["id"]] = $item["name"];
     }
     return $result;
 }
 public function execute($contextObject)
 {
     $corriculumDiscipline = $contextObject->corriculumDiscipline;
     $corriculum = CCorriculumsManager::getCorriculum($corriculumDiscipline->cycle->corriculum->getId());
     //массив последующих дисциплин из текущей рабочей программы
     $disciplinesAfter = array();
     if (!is_null($contextObject->disciplinesAfter)) {
         foreach ($contextObject->disciplinesAfter->getItems() as $disciplineAfter) {
             $disciplinesAfter[$disciplineAfter->getId()] = $disciplineAfter->discipline->getValue();
         }
     }
     //массив с ключами дисциплин, у которых название семестра больше либо равно названию семестра текущей дисциплины
     $disciplines = array();
     //получаем все дисциплины учебного плана
     foreach ($corriculum->getDisciplines() as $disc) {
         //получаем семестры дисциплин
         foreach ($disc->sections as $section) {
             //получаем семестры текущей дисциплины учебного плана
             foreach ($corriculumDiscipline->sections->getItems() as $currentSection) {
                 //проверяем, что название текущего семестра меньше либо равно названию семестров всех дисциплин учебного плана
                 if ($currentSection->title <= $section->title) {
                     $disciplines[$section->discipline_id] = $section->title;
                 }
             }
         }
     }
     //массив с ключами дисциплин с нужными компетенциями
     $competentions = array();
     foreach ($corriculum->getDisciplines() as $disc) {
         //получаем компетенции всех дисциплин учебного плана
         foreach ($disc->competentions as $competention) {
             //получаем компетенции текущей дисциплины учебного плана
             //foreach ($corriculumDiscipline->competentions->getItems() as $currentCompetention) {
             //проверяем, что компетенции текущей дисциплины совпадают с компетенциями других дисциплин учебного плана
             //if ($currentCompetention->competention_id == $competention->competention_id) {
             $competentions[$competention->discipline_id] = $competention->competention_id;
             //}
             //}
         }
     }
     //получаем нужные дисциплины учебного плана
     $disciplinesCorriculum = array();
     foreach ($disciplines as $section_id => $section) {
         foreach ($competentions as $comp_id => $competention) {
             //сравниваем массив $disciplines с нужными семестрами с массивом $competentions с нужными компетенциями по совпадающим ключам дисциплин
             if ($section_id == $comp_id) {
                 //массив дисциплин, отобранных по семестру и компетенциям, ключ - id дисциплины, значение - id компетенции
                 $disciplinesCorriculum[$comp_id] = $competention;
             }
         }
     }
     //массив, по которому будем выводить компетенции в шаблон
     $items = array();
     //сравниваем по совпадающим ключам массив последующих дисциплин с массивом дисциплин, отобранных по семестру и компетенциям
     foreach (array_intersect_key($disciplinesAfter, $disciplinesCorriculum) as $key => $value) {
         //записываем в массив $items id отобранных дисциплин
         $items[] = $key;
     }
     $result = array();
     foreach ($items as $value) {
         $discipl = CCorriculumsManager::getDiscipline($value);
         foreach ($discipl->competentions->getItems() as $comp) {
             $dataRow = array();
             $dataRow[0] = count($result) + 1;
             if (!is_null($comp->competention)) {
                 $str = $comp->competention->getValue();
                 //удаляем текст в скобках - код компетенции
                 $text = preg_replace("|\\(.*?\\)|is", "", $str);
                 //удаляем последний символ пробела из строки
                 $rest = substr($text, 0, -1);
                 $dataRow[1] = $rest;
                 //берем код компетенции - текст из скобок
                 preg_match('/\\((.+)\\)/', $str, $m);
                 $dataRow[2] = $m[1];
             }
             if (!is_null($comp->level)) {
                 $dataRow[3] = $comp->level->getValue();
             }
             if (!is_null($comp->discipline)) {
                 $dataRow[4] = $comp->discipline->discipline->getValue();
             }
             $result[] = $dataRow;
         }
     }
     return $result;
 }
 public function actionDown()
 {
     $discipline = CCorriculumsManager::getDiscipline(CRequest::getInt("id"));
     /**
      * Проверим, вдруг это первый запуск и ничего не отсортировано еще
      */
     if (is_null($discipline->ordering)) {
         $cycle = $discipline->cycle;
         if (!is_null($cycle)) {
             $i = 1;
             foreach ($cycle->disciplines->getItems() as $d) {
                 $d->ordering = $i;
                 $d->save();
                 $i++;
             }
         }
     }
     /**
      * Двигаем только если текущая не последняя
      */
     $cycle = $discipline->cycle;
     if (!is_null($cycle)) {
         if ($discipline->ordering < $cycle->disciplines->getCount()) {
             $curr = $discipline->ordering;
             $d = $cycle->getNthDiscipline($curr + 1);
             if (!is_null($d)) {
                 $d->ordering = $curr;
                 $discipline->ordering = $curr + 1;
                 $discipline->save();
                 $d->save();
             }
         }
     }
     /**
      * Возвращаем обратно
      */
     $this->redirect("cycles.php?action=edit&id=" . $discipline->cycle_id);
 }
 public function actionAdd()
 {
     /**
      * получим дисциплину, по которой делаем рабочую программу
      * @var CCorriculumDiscipline $discipline
      * @var CCorriculum $corriculum
      */
     $discipline = CCorriculumsManager::getDiscipline(CRequest::getInt("id"));
     $corriculum = $discipline->cycle->corriculum;
     //
     $plan = new CWorkPlan();
     $plan->title = "Наименование не указано";
     $plan->title_display = $plan->title;
     // дисциплина из учебного плана
     $plan->corriculum_discipline_id = $discipline->getId();
     // дисциплина из справочника
     if (!is_null($discipline->discipline)) {
         $plan->discipline_id = $discipline->discipline->getId();
     }
     // копируем информацию из учебного плана
     if (!is_null($corriculum)) {
         $plan->direction_id = $corriculum->speciality_direction_id;
         $plan->qualification_id = $corriculum->qualification_id;
         $plan->education_form_id = $corriculum->form_id;
     }
     $plan->year = date("Y");
     $plan->authors = new CArrayList();
     $plan->authors->add(CSession::getCurrentPerson()->getId(), CSession::getCurrentPerson()->getId());
     // место дисциплины в структуре плана
     if (!is_null($discipline->cycle)) {
         $plan->position = "Дисциплина относится к базовой части учебного цикла " . $discipline->cycle->title;
     }
     $plan->save();
     /**
      * Скопируем компетенции из плана
      * @var CCorriculumDisciplineCompetention $competention
      */
     foreach ($discipline->competentions->getItems() as $competention) {
         $planCompetention = new CWorkPlanCompetention();
         $planCompetention->plan_id = $plan->getId();
         $planCompetention->allow_delete = 0;
         $planCompetention->competention_id = $competention->competention_id;
         if ($competention->knowledge_id != 0) {
             $planCompetention->knowledges->add($competention->knowledge_id, $competention->knowledge_id);
         }
         if ($competention->skill_id != 0) {
             $planCompetention->skills->add($competention->skill_id, $competention->skill_id);
         }
         if ($competention->experience_id != 0) {
             $planCompetention->experiences->add($competention->experience_id, $competention->experience_id);
         }
         $planCompetention->save();
     }
     $this->redirect("?action=edit&id=" . $plan->getId());
 }
 /**
  * Копирование одной выбранной рабочей программы
  */
 public function actionCopy()
 {
     $pl = new CWorkPlan();
     $pl->setAttributes(CRequest::getArray($pl->getClassName()));
     $plan = CWorkPlanManager::getWorkplan($pl->getId());
     $newPlan = $plan->copy();
     $newPlan->corriculum_discipline_id = $pl->corriculum_discipline_id;
     $discipline = CCorriculumsManager::getDiscipline($pl->corriculum_discipline_id);
     if (!is_null($discipline->discipline)) {
         $newPlan->discipline_id = $discipline->discipline->getId();
     }
     $newPlan->save();
     /**
      * Редирект на страницу со списком
      */
     $this->redirect("workplans.php?action=index");
 }