/** * Проапгрейдить дисцилпины преподавателями. * @param array $tpds то что возвращается функцией <a href="#upgradeGroups">upgradeGroups</a> * @param bool $name флаг, записывать имя преподавателя или нет. по умолчанию true * @param bool $st флаг, братьли информацию о студентах преподавателя. по умолчанию false * @return array [ [ <то что было в массиве> preps=>[gr_id=>[ [id,id_tutor ,name*,st=>[numst]*] ]] ] ] */ public static function upgradePreps(&$tpds, $name = true, $st = false) { $MsSQL = RPDB::connect(); $dis = RPU::reshape($tpds, 'id_link'); $STH = $MsSQL->prepare("SELECT * from dis_tutor_gr where id_tup_d IN(" . RPU::plas($dis) . ")"); if (!$STH->execute(array_keys($dis))) { throw new Exception('Ошибка получения преподавателей'); } if ($pr = $STH->fetchAll(PDO::FETCH_ASSOC)) { /*Дополнительная информация, если нужна*/ if ($st) { $id_dis_tutor_gr = RPU::reshape($pr, 'id'); $STH = $MsSQL->prepare("SELECT * from tutor_st where id_dis_tutor_gr IN(" . RPU::plas($id_dis_tutor_gr) . ")"); if (!$STH->execute(array_keys($id_dis_tutor_gr))) { throw new Exception('Ошибка получения студентов'); } $stud = RPU::groupBy($STH->fetchAll(PDO::FETCH_ASSOC), 'id_dis_tutor_gr'); } if ($name) { $names = RPIrro::prepsNames(RPU::reshape($pr, 'id_tutor', 'id_tutor')); } /*------------------------------------*/ foreach ($pr as $k => $v) { $ar = array('id' => $v['id'], 'id_tutor' => $v['id_tutor']); if ($name) { $ar['name'] = $names[$v['id_tutor']]; } if ($st) { $ar['st'] = RPU::reshape($stud[$v['id']], false, 'numst'); } $preps[$v['id_tup_d']][$v['gr']][] = $ar; } } foreach ($tpds as $k => $v) { foreach ($v['groups'] as $gr) { $tpds[$k]['preps'][$gr] = $preps[$v['id_link']][$gr]; } } return $tpds; }
//Приведение формата чисел к печатному //Берем баллы студентов для связи ТУП+Д $ball = RPU::e(RPIrro::getBalls($dis, array($gr['id']))); //Взять настройки семестра $set = RPU::getSemSet($sem, false); //Подсчет МВБ $dis = RPIrro::upgradeGrades($dis, $ball, RPIrro::getStudents($gr['id']), $set['week']); $dis = RPIrro::upgradePreps($dis, true, true); //ИР КМ $irs_km = RPIrro::getKMIr(RPU::reshape($dis, false, 'id_link')); foreach ($irs_km as $k => $ir) { $ir['link'] = RPUrl::getIrUrl($ir['link']); $ir = RPU::label($ir); $irs_km[$k] = RPU::cnt($ir); } $irs_km = RPU::groupBy($irs_km, 'p'); //Подготовка к печати $nopreps = array(array('name' => 'Не назначен', 'st' => array())); //симуляция для случаев, когда преподов нет foreach ($dis as $i => $d) { //Не выводим студенту информацию о других $dis[$i]['grades'] = end(RPU::filterBy($d['grades'], array('numst' => $numst))); //Кафедра и препод $dis[$i]['kaf'] = $kafs[$d['id_dis']]['name']; //Опускаем для удобства $dis[$i]['kms'] = $d['kms'][$gr['id']]; $dis[$i]['mvb'] = $d['mvb'][$gr['id']]; $dis[$i]['mvbi'] = $d['mvbi'][$gr['id']]; $dis[$i]['preps'] = $d['preps'][$gr['id']] ? $d['preps'][$gr['id']] : $nopreps; $dis[$i]['preps'] = RPU::reshape($dis[$i]['preps'], 'id_tutor'); //---------------------