Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DMoroz / Диплом.doc
Скачиваний:
32
Добавлен:
16.04.2013
Размер:
1.12 Mб
Скачать

Приложения Фрагмент текста программы

# Передача работ преподавателю

sub Operation_1

{

if (!VerifyRights(0)) {NoOper()}; # or any other rights...

$FORM{'screen'}='oper1'; SetPlugin_sID(2);

if ((($FORM{'sort'} eq "")||($FORM{'group'} ne $FORM{'old_group'}))||((!$FORM{'filter_p'})&&($FORM{'sort'} eq "mark"))) {$FORM{'sort'} = 'student';} # Сортировка по умолчанию

#if ((!$FORM{'filter_p'})&&($FORM{'sort'} eq "mark"))

form_up(600,0,'Формирование акта передачи работ преподавателю');

# View limitation reset

nav_reset();

# Set sorting modes

@Sorts=(1,1,1,1,1,1,1);

if ($FORM{'s_student.x'}) {$FORM{'sort'}='student'}

elsif($FORM{'s_group.x'}) {$FORM{'sort'}='group'}

elsif($FORM{'s_test.x'}) {$FORM{'sort'}='test'}

elsif($FORM{'s_mark.x'}) {$FORM{'sort'}='mark'}

elsif($FORM{'s_rs_date.x'}) {$FORM{'sort'}='rs_date'}

elsif($FORM{'s_rt_date.x'}) {$FORM{'sort'}='rt_date'}

;

if ($FORM{'sort'} eq 'student') {$Sorts[0]=2;}

elsif ($FORM{'sort'} eq 'group') {$Sorts[1]=2;}

elsif ($FORM{'sort'} eq 'test') {$Sorts[2]=2;}

elsif ($FORM{'sort'} eq 'mark') {$Sorts[3]=2;}

elsif ($FORM{'sort'} eq 'rs_date') {$Sorts[4]=2;}

else {$Sorts[5]=2;}

$Hidden{'sort'}=$FORM{'sort'}; # Сохраняем сортировку

my (@t_IDs, @t_fams, @t_names)=((),(),());

# 1. Выбор преподавателей из TUTORS

$sql="SELECT DISTINCT tutors.prep_ID, users.ufam, users.uname, uname2 FROM tutors, users WHERE tutors.prep_ID=users.ID order by users.ufam";

$sth=ExecSQL($sql);

Assign2list($sth, \@t_IDs, \@t_fams, \@t_names, \@t_names2);

# Main FORM

t_print qq(<form method="POST" name="uform" action="$CGIname"><b>Преподаватель: </b>);

if ($FORM{'tutor'} eq "") {$FORM{'tutor'}=$t_IDs[0];} # Выбор группы по умолчанию

t_print qq(<select name="tutor" OnChange="document.uform.discip.value=''; document.uform.submit()">);

for (my $i=0; $i<scalar(@t_IDs); $i++)

{

$chk="";

if ($FORM{'tutor'} eq "$t_IDs[$i]") {$chk="selected";}

t_print "<option $chk value='$t_IDs[$i]'>$t_fams[$i] $t_names[$i] $t_names2[$i]";

}

t_print "</select>";

my (@dis_titles, @dis_ids)=((),()); # Названия+ID в формате ID_плана-№_дисциплины в плане;ID_плана-№_дисциплины в плане...

if ($FORM{'tutor'} ne "")

{

# 2. Выбор дисциплин, их названий из TUTORS для выбранного преподавателя

$sql="SELECT DISTINCT tutors.plan_ID, tutors.disnum, disciplines.title FROM tutors, disciplines

WHERE tutors.prep_ID=$FORM{tutor} and disciplines.owner_id=tutors.plan_ID and disciplines.num=tutors.disnum ORDER by tutors.plan_ID, tutors.disnum";

$sth=ExecSQL($sql);

Assign2list($sth, \@plans_IDs, \@disnums, \@titles);

for (my $i=0; $i<scalar(@plans_IDs); $i++)

{

if (inlist("$titles[$i]", @dis_titles))

{

for ($j=0; $j<scalar(@dis_titles); $j++)

{

if ($titles[$i] eq @dis_titles[$j])

{

@dis_ids[$j].=";$plans_IDs[$i]-$disnums[$i]";

}

}

}

else

{

push @dis_titles, $titles[$i];

push @dis_ids, "$plans_IDs[$i]-$disnums[$i]";

}

}

}

t_print "   <b>Дисциплина: </b>";

if ($FORM{'discip'} eq "") {$FORM{'discip'}=$dis_ids[0];} # Выбор дисциплины по умолчанию

t_print qq(<select name="discip" OnChange="document.uform.submit()">);

for (my $i=0; $i<scalar(@dis_ids); $i++)

{

$chk="";

if ($FORM{'discip'} eq "$dis_ids[$i]") {$chk="selected"}

t_print "<option $chk value='$dis_ids[$i]'>$dis_titles[$i]";

}

t_print "</select>";

# Чекбокс для отбора проверенных к.р.

if ($FORM{'filter_p'}) {$chk="checked";} else {$chk="";}

t_print "<br><input type=\"checkbox\" $chk name=\"filter_p\" value=\"yes\" OnClick=\"document.uform.submit()\"><b>Показывать проверенные контрольные работы</b>";

# 3. Выбор контрольных мероприятий, которые должен проверять (или проверил) выбранный преподаватель по выбранной дисциплине (1 дисциплина может быть в нескольких планах %-()

my @stud_IDs=();

my (@plans_dis)=split(';',$FORM{'discip'}); # Массив ПЛАН-ДИСЦИПЛИНА для выбранной дисциплины (их несколько может быть)

my (@plans, @discs)=((),());

foreach(@plans_dis)

{

my ($p, $d)=split('-',$_); # P = plans.ID; D = номер дисциплины

push (@plans, $p);

push (@discs, $d);

}

#а) Выбираем работы, доставленные в институт (kinfo.received!="0000-00-00"), которые предназначаются выбранному преподавателю

$Hidden{'old_tutor'}=$FORM{'tutor'}; # Сохраняем для того, чтобы при смене преподавателя и дисциплины сбрасывать выделенные записи в таблице

$Hidden{'old_discip'}=$FORM{'discip'};

if ($FORM{'tutor'})

{

$sql="SELECT DISTINCT results.userID FROM kinfo, results

WHERE kinfo.tutor_ID=$FORM{tutor} and results.kinfo_ID=kinfo.ID and kinfo.received!='0000-00-00'";

$sth=ExecSQL($sql);

Assign2list($sth, \@stud_IDs);

}

my (@studs, @groups, @lessons, @kinfo_ids, @marks, @rs_dates, @rt_dates)=((),(),(),(),(),(),(),(),());

my @all_discips;

for (my $i=0; $i<scalar(@stud_IDs); $i++)

{

$sql = qq(

SELECT assigned_plans.id, plan_location, plan_ID, TO_DAYS(plan_start), target_type FROM assigned_plans, users

WHERE active=1 AND plan_type=1

AND ((target_type='USER' AND target_ID='$stud_IDs[$i]' AND users.ID='$stud_IDs[$i]')

OR (target_type='GROUP' AND target_ID=users.ugroup AND users.id='$stud_IDs[$i]')

OR (target_type='CATEG' AND target_ID=users.uflags AND users.id='$stud_IDs[$i]'))

ORDER BY target_type ASC

);

$sth = ExecSQL($sql);

Assign2list($sth, \@ids, \@pls, \@pids, \@pstarts);

if (scalar(@ids)>0)

{

my $flag="-1";

my $dis=0;

if ($pls[0] eq "plans") # Если план базовый..

{

for (my $j=0; $j<scalar(@plans); $j++)

{

if ($pids[0] eq @plans[$j])

{

$flag=$j;

$dis=$discs[$j];

last;

}

}

}

else # Если производный, то надо узнать на каком базовом он основан

{

$sql="SELECT base_ID from dplans where id=$pids[0]";

$sth = ExecSQL($sql);

Assign2var($sth, $base_id);

for (my $j=0; $j<scalar(@plans); $j++)

{

if ($base_id eq @plans[$j])

{

$flag=$j;

$sql="SELECT disciplines FROM dplans WHERE ID=$pids[0]";

$sth=ExecSQL($sql);

Assign2var ($sth, $dis);

my @_dis=split(',',$dis);

$dis=@_dis[$discs[$j]-1];

last;

}

}

}

if ($flag ne "-1")

{

# если сюда попали, значит студент обучается по выбранному плану

my $filter_p="";

if (!$FORM{'filter_p'}) {$filter="and results.stage='**?**'";}

$sql = qq (

select results.kinfo_ID, results.lesson, results.stage, kinfo.received, kinfo.handed_out, kinfo.handed_in, kinfo.max_duration

from results, kinfo

where results.userID=$stud_IDs[$i] and results.aplan_ID=$ids[0] and results.discipline=$dis and kinfo.id=results.kinfo_ID

and kinfo.tutor_ID=$FORM{tutor} $filter

);

$sth = ExecSQL($sql);

Assign2list($sth, \@k_ids, \@l_title, \@r_stages, \@k_rs, \@k_hos, \@k_his, \@k_durs);

if (scalar(@k_ids)>0)

{

# Выбор фамилии и имя студента

$sql="select ufam, uname, uname2, ugroup from users where id=$stud_IDs[$i]";

$sth = ExecSQL($sql);

Assign2var($sth, $fam, $name, $name2, $group);

$name =~ s/^(.).*/$1\./g;

$name2 =~ s/^(.).*/$1\./g;

for (my $k=0; $k<scalar(@k_ids); $k++)

{

my $descr="";

$sql="SELECT lessons.title FROM disciplines, lessons WHERE lessons.owner_id=disciplines.id and disciplines.owner_id=$plans[$flag] and disciplines.num=$dis and lessons.num=$l_title[$k]";

$sth=ExecSQL($sql);

Assign2var ($sth, $descr);

push @studs, "$fam $name $name2";

push @groups, $group;

push @lessons, $descr;

push @kinfo_ids, $k_ids[$k];

dec_mark($r_stages[$k]);

push @marks, $r_stages[$k];

if (!inlist("$group", @all_groups)) {push @all_groups, "$group"}

if ($k_hos[$k] eq "0000-00-00") {push @rs_dates, "-";} else {push @rs_dates, date_to_str($k_hos[$k],'.');};

if ($FORM{'filter_p'})

{

if ($k_his[$k] eq "0000-00-00") {push @rt_dates, "-";}

else {push @rt_dates, date_to_str($k_his[$k],'.');}

}

else

{

if ($k_hos[$k] eq "0000-00-00") {push @rt_dates, '-';}

else {push @rt_dates, date_to_str(days_to_date(date_to_days($k_hos[$k])+$k_durs[$k]),'.');}

}

}

}

}

}

}

push @all_groups, "Все";

# Выбор группы

t_print "<br><b>Группа: </b>";

if ($FORM{'group'} eq "") {$FORM{'group'}=$all_groups[0];} # Выбор группы по умолчанию

t_print qq(<select name="group" OnChange="document.uform.submit()">);

foreach (@all_groups)

{

$chk="";

if ($FORM{'group'} eq "$_") {$chk="selected"}

t_print "<option $chk value='$_'>$_";

}

t_print "</select> <input type=\"submit\" value=\"Выделить все\" name=\"select_all\"> <input type=\"submit\" value=\"Снять выделение\" name=\"deselect\">";

$Hidden{'old_group'}=$FORM{'group'};

if ($FORM{'group'} ne "Все")

{

for (my $i=0; $i<scalar(@studs); $i++)

{

if (@groups[$i] ne $FORM{'group'})

{

splice (@studs, $i, 1);

splice (@groups, $i, 1);

splice (@lessons, $i, 1);

splice (@kinfo_ids, $i, 1);

splice (@marks, $i, 1);

splice (@rs_dates, $i, 1);

splice (@rt_dates, $i, 1);

splice (@k_ids, $i, 1);

$i--;

}

}

}

$numrec=scalar(@studs);

# Теперь надо отсортировать массивы в соответствии с выбранным столбцом...

my @ind=();

for ($i=0; $i<scalar(@studs); $i++)

{

push(@ind,$i);

}

if ($FORM{'sort'} eq 'student') # Если сортируем по Студентам

{

@ind=sort{$studs[$a] cmp $studs[$b]}@ind;

}

elsif ($FORM{'sort'} eq 'group') # Если сортируем по Группе

{

@ind=sort{$groups[$a] cmp $groups[$b]}@ind;

}

elsif ($FORM{'sort'} eq 'test') # Если сортируем по наименованию контрольного мероприятия

{

@ind=sort{$lessons[$a] cmp $lessons[$b]}@ind;

}

elsif ($FORM{'sort'} eq 'mark') # Если сортируем по оценке

{

@ind=sort{$marks[$b] cmp $marks[$a]}@ind;

}

elsif ($FORM{'sort'} eq 'rs_date') # Если сортируем по Дате выдачи на проверку

{

@ind=sort

{

cmp_dates(str_to_date($rs_dates[$b]), str_to_date($rs_dates[$a]))

}@ind;

}

elsif ($FORM{'sort'} eq 'rt_date') # Если сортируем по Дате приёма в деканат

{

@ind=sort

{

cmp_dates(str_to_date($rt_dates[$b]), str_to_date($rt_dates[$a]))

}@ind;

}

nav_set();

$Hidden{'offset'}=$recoff;

t_print qq(

<table border="1" bordercolorlight="$TableBG" bordercolordark="$TableBG" bgcolor="$CellBG" cellspacing="0">

<tr align="center"><td nowrap>*</td>

<td nowrap><input type="image" name="s_student" src="$CONFIG{'WebImages'}/sort$Sorts[0].gif" width="11" height="8" title="" border="0"><b>Студент</b></td>

);

if ($FORM{'group'} eq "Все") { t_print qq(<td nowrap><input type="image" name="s_group" src="$CONFIG{'WebImages'}/sort$Sorts[1].gif" width="11" height="8" title="" border="0"><b>Группа</b></td>);}

t_print qq(<td nowrap><input type="image" name="s_test" src="$CONFIG{'WebImages'}/sort$Sorts[2].gif" width="11" height="8" title="" border="0"><b>Контрольное мероприятие</b></td>);

if ($FORM{'filter_p'}) {t_print qq(<td nowrap><input type="image" name="s_mark" src="$CONFIG{'WebImages'}/sort$Sorts[3].gif" width="11" height="8" title="" border="0"><b>Оценка</b></td>);}

if ($FORM{'filter_p'}) {$chk="Дата<br>приёма в деканат"}

else {$chk="Дата<br>планируемого возврата"};

t_print qq(

<td nowrap><input type="image" name="s_rs_date" src="$CONFIG{'WebImages'}/sort$Sorts[4].gif" width="11" height="8" title="" border="0"><b>Дата<br>выдачи на проверку</b></td>

<td nowrap><input type="image" name="s_rt_date" src="$CONFIG{'WebImages'}/sort$Sorts[5].gif" width="11" height="8" title="" border="0"><b>$chk</b></td></tr>);

my $temp=0; # Печать таблицы ===================================

my @list=();

for ($i=0; $i<scalar(@studs); $i++)

{

next if ($i < $recoff);

last if ($i >= $recend);

my $chk="";

my $name = "chk-$kinfo_ids[$ind[$i]]";

push @list, $kinfo_ids[$ind[$i]];

if (($FORM{'select_all'})||inlist("$name", keys %FORM)&&(!$FORM{'deselect'})&&(($FORM{'old_tutor'} eq $FORM{'tutor'})&&($FORM{'old_discip'} eq $FORM{'discip'})))

{

$chk="checked";

$FORM{$name}="checked";

}

else

{

$FORM{$name}="no";

}

t_print qq(

<tr height="24">

<td align="center"><input type="checkbox" name="$name" $chk value="$FORM{$name}"></td>

<td nowrap> $studs[$ind[$i]]</td>

);

if ($FORM{'group'} eq "Все") { t_print qq(<td nowrap> $groups[$ind[$i]]</td>);}

t_print qq(<td nowrap> $lessons[$ind[$i]]</td>);

if ($FORM{'filter_p'}) {t_print qq(<td nowrap align="center">$marks[$ind[$i]]</td>);}

t_print qq(<td nowrap align="center">$rs_dates[$ind[$i]]</td><td nowrap align="center">);

if ((!$FORM{'filter_p'} &&($rt_dates[$ind[$i]] ne "-"))&&(cmp_dates(str_to_date($rt_dates[$ind[$i]]),$curdate) == -1))

{

t_print '<font color=red>'.$rt_dates[$ind[$i]].'</font>';

}

else {t_print qq($rt_dates[$ind[$i]]</td></tr>)}

$temp++;

}

my $numcol=7;

if ($FORM{'group'} ne "Все") {$numcol--;}

if (!$FORM{'filter_p'}) {$numcol--;}

for (my $i=0; $i<$drec-$temp; $i++)

{

t_print "<tr height=\"24\">";

for (my $j=0; $j<$numcol; $j++) {t_print "<td> </td>";}

t_print "</tr>";

}

# Сохраняем выделенные элементы при перелистывании

my $num_of_hiddens=0;

if ($FORM{'select_all'})

{

for ($i=0; $i<scalar(@studs); $i++)

{

if (!inlist("$kinfo_ids[$ind[$i]]", @list)) {$Hidden{'chk-'.$kinfo_ids[$ind[$i]]}="checked"; $num_of_hiddens++;}

}

}

elsif (!($FORM{'old_group'} ne $FORM{'group'})&&(!$FORM{'deselect'})&&($FORM{'filter_p'}))

{

foreach (keys %FORM)

{

if ($_ =~ m/^chk-(.+)$/)

{

if ($FORM{$_} eq "no") {$FORM{$_}="checked";}

if (!inlist("$1", @list)) {$Hidden{$_}="checked"; $num_of_hiddens++;}

}

}

}

if ($num_of_hiddens!=0) {$num_of_hiddens=", не показано выбранных записей: $num_of_hiddens";}else {$num_of_hiddens=""}

nav_bars(7, "<b>$viewed$num_of_hiddens</b>"); # set number of columns! # Панель навигации

t_print "</table>";

if ($FORM{'max_duration'} eq "") {$FORM{'max_duration'}=7};

t_print "<b>Число дней, отведённое на проверку: </b><input name='max_duration' type='text' value='$FORM{max_duration}' size='2'>";

CodeHiddens();

t_print qq(

<br>

<input type="hidden" name="hidden" value="$hidden">

<input type="submit" name="view" value="Создать документ">

);

if (!$FORM{'filter_p'}) {t_print qq(<input type="submit" name="clear" value="Очистить дату выдачи"> );}

t_print qq(

<input type="submit" name="return" value="Назад">

</form>

);

form_bottom();

add_log("Передача работ преподавателю.");

}

Соседние файлы в папке DMoroz