/** * Получить компетенции дисциплины/модуля * @param int $id ID дисциплины или модуля * @param string $type редим - 'dis' или 'mod' * @return array [id,type,komps=>[k.*,type,vid,pod_komps=>[k.*]]] */ public static function komp_of_obj($id, $type) { $MsSQL = RPDB::connect(); $ret = array('id' => $id, 'type' => $type); if ($type == 'mod') { $table = 'module'; } else { $table = 'dis'; } $STH = $MsSQL->query("Select name from {$table} where id='{$id}'"); $ret['name'] = current($STH->fetch(PDO::FETCH_ASSOC)); $obj_komps = array(); $obj_pod_komps = array(); $parent = array(); if ($STH = $MsSQL->prepare("select k.*,case when tk.name is null then tvk.name else tk.name end type,vk.name vid from komp k left join type_komp tk on(tk.id=k.id_type_komp) left join vid_komp vk on(vk.id=k.id_vid_komp) left join type_komp tvk on(tvk.id=vk.id_type_komp), link_komp_{$type} kd where kd.id_komp=k.id and kd.id_{$type}=?")) { if ($STH->execute(array($id))) { while ($row = $STH->fetch(PDO::FETCH_ASSOC)) { if ($row['id_parent_komp']) { $obj_pod_komps[] = $row; $parent[] = $row['id_parent_komp']; } else { $obj_komps[] = $row; } } if (count($parent)) { $_komps = array(); $STH = $MsSQL->prepare("select k.*,case when tk.name is null then tvk.name else tk.name end type,vk.name vid from komp k left join type_komp tk on(tk.id=k.id_type_komp) left join vid_komp vk on(vk.id=k.id_vid_komp) left join type_komp tvk on(tvk.id=vk.id_type_komp) where k.id in(" . RPU::plas($parent) . ")"); if ($STH->execute($parent)) { while ($row = $STH->fetch(PDO::FETCH_ASSOC)) { $row['pod_komps'] = RPU::filterByOne($obj_pod_komps, 'id_parent_komp', $row['id']); $_komps[] = $row; } } $obj_komps = array_merge($obj_komps, $_komps); $obj_komps = RPU::matrixSort($obj_komps, 'name'); } } } $ret['komps'] = $obj_komps; return $ret; }
} else { throw new Exception("Ошибка получения настроек семестра"); } if ($iup) { $help = '. Текущая неделя для студента: ' . $set['week']; } $dis = RPIrro::upgradeGrades(array($dis), $ball, $st_all, $set['week']); $dis = end(RPIrro::upgradeStarted($dis, array($gr['id']))); $unvis = RPIrro::getUnvisit($gr['id'], $set); //Формирование массива для вывода $km = RPU::reshape($dis['kms'][$gr['id']], false, array('id', 'week', 'name', 'sh', 'max_ball', 'min_ball', 'bonus', 'type_name')); $km = RPU::filterBy($km, array('max_ball' => true)); $arResult['print']['km'] = RPU::matrixSort($km, 'week'); $arResult['print']['mvb']['max'] = $dis['mvb'][$gr['id']]; $arResult['print']['mvb']['min'] = $dis['mvbi'][$gr['id']]; $namecheck = RPU::filterByOne($km, 'name', true); if (empty($namecheck)) { $arResult['print']['rowspan'] = 3; } else { $arResult['print']['rowspan'] = 4; } $body = array(); $i = 0; foreach ($stud as $numst => $name) { if ($iup and $iup['numst'] != $numst) { continue; } if (!empty($dis['preps']['st']) and !in_array($numst, $dis['preps']['st'])) { continue; } $body[$i]['name'] = $name;