Esempio n. 1
0
             unset($dis[$i]['kms'][$key]);
             continue;
         }
     }
     if (empty($km['min_ball'])) {
         $km['min_ball'] = 0;
     }
     //Для лучшего отображения
     if ($km['week'] == $set['week'] && $set['week'] != 18) {
         $dis[$i]['nowkm'] = true;
     }
     //Наличие КМ на текущей неделе
     //Обработка балла
     $b = end(RPU::filterBy($ball[$d['id_link']], array('id_km' => $km['id'], 'numst' => $numst)));
     //Балл за текущее КМ
     $km['ball'] = RPU::solveGrade($b['ball'], $km['max_ball']);
     //Полная информация о оценке и т.д.
     $km['ball']['tutor'] = $dis[$i]['preps'][$b['creator']]['name'] ? $dis[$i]['preps'][$b['creator']]['name'] : 'N/A';
     if (is_null($km['ball']['b'])) {
         //Если балл не стоит, то нужен прочерк
         $km['ball']['b'] = '-';
         $km['ball']['o'] = $km['week'] < $set['week'] ? 'n' : 'f';
         //Если балл не стоит на будующей неделе, показываться вообще не будет
     }
     if ($km['ball']['b'] == '-1') {
         $km['ball']['b'] = 'н';
     }
     $dis[$i]['kms'][$key] = $km;
 }
 $dis[$i]['kms'] = RPU::matrixSort($dis[$i]['kms'], 'week');
 if (empty($dis[$i]['kms'])) {
Esempio n. 2
0
 /**
  * Рассчёт МВБ и суммарных оценок студентов.
  * <b>Внимание!</b> Массив дисциплин дожен содержать информацию о перезачётах. 
  * @param array $tpds то что возвращается функцией <a href="#upDises">upDises</a>
  * @param array $balls то что возвращается функцией <a href="#getBalls">getBalls</a>
  * @param array $students то что возвращается функцией <a href="#getStudents">getStudents</a>
  * @param int $week неделя
  * @return array [ [ <то что было в массиве> grades=>[numst,o,b,p],mvb,mvbi] ]
  */
 public static function upgradeGrades($tpds, $balls, $students, $week)
 {
     $week = $week < 18 ? $week : 19;
     $getNumst = function ($a) {
         return $a['numst'];
     };
     /*Для оптимизации*/
     $students = RPU::groupBy($students, 'gr');
     foreach ($balls as $k => $v) {
         $ba[$k] = RPU::groupBy($v, 'id_km');
     }
     $balls = $ba;
     /*--------------*/
     foreach ($tpds as $key => $tpd) {
         $tpds[$key]['mvb'] = array();
         $all_sob = array();
         $st_of_gr = array();
         $n_of_gr = array();
         foreach ($tpd['groups'] as $gr) {
             $st_of_gr[$gr] = $students[$gr];
             $n_of_gr[$gr] = array_map($getNumst, $st_of_gr[$gr]);
             //RPU::reshape($st_of_gr[$id_gr],false,'numst');
         }
         foreach ($tpd['kms'] as $id_gr => $gr_kms) {
             $gr_mvb = 0;
             $gr_mvbi = 0;
             $gr_num_km = 0;
             foreach ($gr_kms as $km) {
                 if ($km['week'] < $week) {
                     $_balls = $balls[$tpd['id_link']][$km['id']];
                     $gr_num_km++;
                     $flag = empty($_balls);
                     //$gr_st=RPU::filterBy($students,array('gr'=>$id_gr));
                     //$gr_st=RPU::reshape($st_of_gr[$id_gr],false,'numst');
                     #===============================================================================================
                     foreach ($_balls as $ball) {
                         $numst = $ball['numst'];
                         if (!in_array($numst, $n_of_gr[$id_gr])) {
                             continue;
                         }
                         if (!isset($all_sob[$numst])) {
                             $all_sob[$numst] = array('count_km' => 0, 'sob' => 0, 'sob_bonus' => 0);
                         }
                         if ($ball['ball'] and $ball['ball'] != -1) {
                             $all_sob[$numst]['count_km']++;
                             if (!$km['bonus']) {
                                 $all_sob[$numst]['sob'] += $ball['ball'];
                             } else {
                                 $all_sob[$numst]['sob_bonus'] += $ball['ball'];
                             }
                         }
                     }
                     #===============================================================================================
                     if (($week == 19 or !$flag) and !$km['bonus']) {
                         $gr_mvb += (double) $km['max_ball'];
                         $gr_mvbi += (double) $km['min_ball'];
                     }
                 }
             }
             //================ group
             $tpds[$key]['mvb'][$id_gr] = $gr_mvb > 100 ? 100 : $gr_mvb;
             $tpds[$key]['mvbi'][$id_gr] = $gr_mvbi;
             //$gr_students=RPU::filterBy($students,array('gr'=>$id_gr));
             foreach ($st_of_gr[$id_gr] as $one_student) {
                 $mvb = $tpds[$key]['mvb'][$id_gr];
                 $sob = 0;
                 $numst = $one_student['numst'];
                 if (isset($all_sob[$numst])) {
                     $_sob = $all_sob[$numst];
                     $sob = $_sob['sob'];
                     if ($_sob['count_km'] == $gr_num_km) {
                         $sob += $_sob['sob_bonus'];
                     }
                     $sob = $sob > $mvb ? $mvb : $sob;
                 } elseif (isset($tpd['offset'][$numst])) {
                     $sob = $tpd['offset'][$numst];
                 } else {
                     $sob = 0;
                 }
                 $grade = RPU::solveGrade($sob, $mvb);
                 $grade['numst'] = $numst;
                 $tpds[$key]['grades'][$numst] = $grade;
             }
         }
     }
     return $tpds;
 }
Esempio n. 3
0
}
$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;
    $body[$i]['numst'] = $numst;
    $body[$i]['text'] = false;
    if (isset($dis['offset'][$numst])) {
        if ($dis['offset'][$numst] != '50') {
            $grad = RPU::solveGrade($dis['offset'][$numst], 100);
            $text = 'дисциплина перезачтена c оценкой ' . $grad['o'];
        } else {
            $text = 'дисциплина перезачтена';
        }
        $body[$i++]['text'] = $text;
        $no_show[$numst] = true;
        continue;
    }
    if ($dis['vdv'] and !in_array($numst, $dis['numsts'])) {
        $body[$i++]['text'] = 'Студент не выбрал данную дисциплину для изучения';
        $no_show[$numst] = true;
        continue;
    }
    $un = RPU::filterBy($unvis, array('numst' => $numst));
    $u = array();