Substitute.pm

DENIS Sébastien, 12/06/2018 05:12 pm

Download (3.7 kB)

 
1
#! /usr/bin/perl
2
#
3
# Copyright (C) 2012-2016 Alexis Bienvenue <paamc@passoire.fr>
4
#
5
# This file is part of Auto-Multiple-Choice
6
#
7
# Auto-Multiple-Choice is free software: you can redistribute it
8
# and/or modify it under the terms of the GNU General Public License
9
# as published by the Free Software Foundation, either version 2 of
10
# the License, or (at your option) any later version.
11
#
12
# Auto-Multiple-Choice is distributed in the hope that it will be
13
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
14
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
# General Public License for more details.
16
#
17
# You should have received a copy of the GNU General Public License
18
# along with Auto-Multiple-Choice.  If not, see
19
# <http://www.gnu.org/licenses/>.
20
21
package AMC::Substitute;
22
23
use AMC::Basic;
24
25
use utf8;
26
27
sub new {
28
    my (%o)=@_;
29
    my $self={'names'=>'',
30
	      'scoring'=>'',
31
	      'assoc'=>'',
32
	      'name'=>'','chsign'=>4,
33
	      'lk'=>'',
34
	  };
35
36
    for (keys %o) {
37
	$self->{$_}=$o{$_} if(defined($self->{$_}));
38
    }
39
40
    bless $self;
41
    return($self);
42
}
43
44
sub format_note {
45
  my ($self,$mark)=@_;
46
47
  if($self->{'chsign'}) {
48
    $mark=sprintf("%.*g",$self->{'chsign'},$mark);
49
  }
50
  return($mark);
51
}
52
53
# Affiche le niveau acquis pour chaque compétence entrée comme groupe
54
# <30%: non maîtrisé - <70%: maîtrise incomplète - <100%: maîtrise satisfaisante - =100%: maîtrise experte
55
sub format_skills {
56
  my ($self,$student,$copy)=@_;
57
  my $sth = $self->{scoring}->statement('studentSkillLevel');
58
  $sth->execute($student, $copy);
59
  my $stext = "\t\t\t\t\t\t\t\t\t";
60
  while(my @row=$sth->fetchrow_array) { # retrieve one row
61
    if (scalar(split '',$stext) > 6) {$stext = $stext . "\n\t";}
62
    $stext = $stext . @row[0] . " : ";
63
    if (@row[1]>0.9) {
64
      $stext = $stext . "maîtrise experte 😄";
65
    } elsif (@row[1]>0.5) {
66
      $stext = $stext . "maîtrise satisfaisante 😊";
67
    } elsif (@row[1]>0) {
68
      $stext = $stext . "maîtrise incomplète 😕";
69
    } else {
70
      $stext = $stext . "non maîtrisé 😟";
71
    }
72
  }
73
  return($stext);
74
}
75
76
# Affiche les pourcentages de réussite par groupe, arrondi à l'entier, le minimum étant fixé à zéro
77
sub format_knowledge {
78
  my ($self,$student,$copy)=@_;
79
  my $sth = $self->{scoring}->statement('studentSkillLevel');
80
  $sth->execute($student, $copy);
81
  my $stext = "\n";
82
  while(my @row=$sth->fetchrow_array) { # retrieve one row
83
    if (scalar(split '',$stext) > 6) {$stext = $stext . "  —  ";}
84
    my $knowledge=int(@row[1]*100+.5);
85
    $stext = $stext . @row[0] . " : " . (0, $knowledge)[$knowledge>0] . " %";
86
  }
87
  return($stext);
88
}
89
90
sub substitute {
91
  my ($self,$text,$student,$copy)=@_;
92
93
  if($self->{'scoring'}) {
94
    my $student_mark=$self->{'scoring'}->student_global($student,$copy);
95
96
    if($student_mark) {
97
$text =~ s/\%[M]/$self->format_note($student_mark->{'max'})/ge;
98
       $text =~ s/\%[s]/$self->format_note($student_mark->{'mark'})/ge;
99
       $text =~ s/\%[m]/$self->format_note($self->{'scoring'}->variable('mark_max'))/ge;
100
       $text =~ s/\%[C]/$self->format_skills($student, $copy)/ge;
101
       $text =~ s/\%[c]/$self->format_knowledge($student, $copy)/ge;
102
    } else {
103
      debug "No marks found ! Copy=".studentids_string($student,$copy);
104
    }
105
  }
106
107
  $text =~ s/\%[n]/$self->{'name'}/ge;
108
109
  if($self->{'assoc'} && $self->{'names'}) {
110
    $self->{'lk'}=$self->{'assoc'}->variable('key_in_list')
111
      if(!$self->{'lk'});
112
113
    my $i=$self->{'assoc'}->get_real($student,$copy);
114
    my $n;
115
116
    debug "Association -> ID=$i";
117
118
    if(defined($i)) {
119
      ($n)=$self->{'names'}->data($self->{'lk'},$i,test_numeric=>1);
120
      if($n) {
121
	$text=$self->{'names'}->substitute($n,$text,'prefix'=>'%');
122
      }
123
    }
124
  }
125
126
  return($text);
127
}
128
129
1;