File:
[LON-CAPA] /
loncom /
interface /
lonhtmlcommon.pm
Revision
1.9:
download - view:
text,
annotated -
select for diffs
Fri Aug 30 15:35:08 2002 UTC (21 years, 11 months ago) by
stredwic
Branches:
MAIN
CVS tags:
HEAD
Fixed an error for map selection in problem statistics. Added a new
module that will display a graph of percentage correctness for
a problem or series of problems based on input. It doesn't quite
look correct yet, because of graph.gif. I will have to edit graph.gif
in order to get ranges for the x axis etc. This was also an
experiment to see multiple dependent selections. Will probably do
that with student assessment next, but with students.
1: # The LearningOnline Network with CAPA
2: # a pile of common html routines
3: #
4: # $Id: lonhtmlcommon.pm,v 1.9 2002/08/30 15:35:08 stredwic Exp $
5: #
6: # Copyright Michigan State University Board of Trustees
7: #
8: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
9: #
10: # LON-CAPA is free software; you can redistribute it and/or modify
11: # it under the terms of the GNU General Public License as published by
12: # the Free Software Foundation; either version 2 of the License, or
13: # (at your option) any later version.
14: #
15: # LON-CAPA is distributed in the hope that it will be useful,
16: # but WITHOUT ANY WARRANTY; without even the implied warranty of
17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18: # GNU General Public License for more details.
19: #
20: # You should have received a copy of the GNU General Public License
21: # along with LON-CAPA; if not, write to the Free Software
22: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23: #
24: # /home/httpd/html/adm/gpl.txt
25: #
26: # http://www.lon-capa.org/
27: #
28:
29: package Apache::lonhtmlcommon;
30:
31: use strict;
32:
33: sub AscendOrderOptions {
34: my ($order, $page, $formName)=@_;
35:
36: my $OpSel1 = '';
37: my $OpSel2 = '';
38:
39: if($order eq 'Ascending') {
40: $OpSel1 = ' selected';
41: } else {
42: $OpSel2 = ' selected';
43: }
44:
45: my $Str = '';
46: $Str .= '<select name="'.(($page)?$page:'').'Ascend"';
47: if($formName) {
48: $Str .= ' onchange="document.'.$formName.'.submit()"';
49: }
50: $Str .= '>'."\n";
51: $Str .= '<option'.$OpSel1.'>Ascending</option>'."\n".
52: '<option'.$OpSel2.'>Descending</option>'."\n";
53: $Str .= '</select>'."\n";
54:
55: return $Str;
56: }
57:
58: sub MapOptions {
59: my ($data, $page, $formName)=@_;
60: my $Str = '';
61: $Str .= '<select name="';
62: $Str .= (($page)?$page:'').'Maps"';
63: if($formName) {
64: $Str .= ' onchange="document.'.$formName.'.submit()"';
65: }
66: $Str .= '>'."\n";
67:
68: my $selected = 0;
69: foreach my $sequence (split(':',$data->{'orderedSequences'})) {
70: $Str .= '<option';
71: if($data->{$page.'Maps'} eq $data->{$sequence.':title'}) {
72: $Str .= ' selected';
73: $selected = 1;
74: }
75: $Str .= '>'.$data->{$sequence.':title'}.'</option>'."\n";
76: }
77: $Str .= '<option';
78: if(!$selected) {
79: $Str .= ' selected';
80: }
81: $Str .= '>All Maps</option>'."\n";
82:
83: $Str .= '</select>'."\n";
84:
85: return $Str;
86: }
87:
88: sub ProblemOptions {
89: my ($data, $page, $map, $formName)=@_;
90: my $Str = '';
91: $Str .= '<select name="';
92: $Str .= (($page)?$page:'').'ProblemSelect"';
93: if($formName) {
94: $Str .= ' onchange="document.'.$formName.'.submit()"';
95: }
96: $Str .= '>'."\n";
97:
98: my $selected = 0;
99: foreach my $sequence (split(':',$data->{'orderedSequences'})) {
100: if($data->{$sequence.':title'} eq $map || $map eq 'All Maps') {
101: foreach my $problem (split(':', $data->{$sequence.':problems'})) {
102: $Str .= '<option';
103: if($data->{$page.'ProblemSelect'} eq
104: $data->{$problem.':title'}) {
105: $Str .= ' selected';
106: $selected = 1;
107: }
108: $Str .= '>'.$data->{$problem.':title'}.'</option>'."\n";
109: }
110: }
111: }
112: $Str .= '<option';
113: if(!$selected) {
114: $Str .= ' selected';
115: }
116: $Str .= '>All Problems</option>'."\n";
117:
118: $Str .= '</select>'."\n";
119:
120: return $Str;
121: }
122:
123: sub PartOptions {
124: my ($data, $page, $parts, $formName)=@_;
125: my $Str = '';
126:
127: if(!defined($parts)) {
128: return '';
129: }
130:
131: $Str .= '<select name="';
132: $Str .= (($page)?$page:'').'PartSelect"';
133: if($formName) {
134: $Str .= ' onchange="document.'.$formName.'.submit()"';
135: }
136: $Str .= '>'."\n";
137:
138: my $selected = 0;
139: foreach my $part (@$parts) {
140: $Str .= '<option';
141: if($data->{$page.'PartSelect'} eq $part) {
142: $Str .= ' selected';
143: $selected = 1;
144: }
145: $Str .= '>'.$part.'</option>'."\n";
146: }
147: $Str .= '<option';
148: if(!$selected) {
149: $Str .= ' selected';
150: }
151: $Str .= '>All Parts</option>'."\n";
152:
153: $Str .= '</select>'."\n";
154:
155: return $Str;
156: }
157:
158: sub StudentOptions {
159: my ($cache, $students, $selectedName, $page, $formName)=@_;
160:
161: my $Str = '';
162: $Str .= '<select name="'.(($page)?$page:'').'Student"';
163: if($formName) {
164: $Str .= ' onchange="document.'.$formName.'.submit()"';
165: }
166: $Str .= '>'."\n";
167:
168: my $selected=0;
169:
170: foreach (@$students) {
171: $Str .= '<option';
172: if($selectedName eq $_) {
173: $Str .= ' selected';
174: $selected = 1;
175: }
176: $Str .= '>';
177: $Str .= $cache->{$_.':fullname'};
178: $Str .= '</option>'."\n";
179: }
180:
181: $Str .= '<option';
182: if($selectedName eq 'No Student Selected') {
183: $Str .= ' selected';
184: $selected = 1;
185: }
186: $Str .= '>No Student Selected</option>'."\n";
187:
188: $Str .= '<option';
189: if(!$selected) {
190: $Str .= ' selected';
191: }
192: $Str .= '>All Students</option>'."\n";
193:
194: $Str .= '</select>'."\n";
195:
196: return $Str;
197: }
198:
199: sub StatusOptions {
200: my ($status, $formName)=@_;
201:
202: my $OpSel1 = '';
203: my $OpSel2 = '';
204: my $OpSel3 = '';
205:
206: if($status eq 'Any') { $OpSel3 = ' selected'; }
207: elsif($status eq 'Expired' ) { $OpSel2 = ' selected'; }
208: else { $OpSel1 = ' selected'; }
209:
210: my $Str = '';
211: $Str .= '<select name="Status"';
212: if(defined($formName) && $formName ne '') {
213: $Str .= ' onchange="document.'.$formName.'.submit()"';
214: }
215: $Str .= '>'."\n";
216: $Str .= '<option'.$OpSel1.'>Active</option>'."\n";
217: $Str .= '<option'.$OpSel2.'>Expired</option>'."\n";
218: $Str .= '<option'.$OpSel3.'>Any</option>'."\n";
219: $Str .= '</select>'."\n";
220: }
221:
222: sub MultipleSectionSelect {
223: my ($sections,$selectedSections)=@_;
224:
225: my $Str = '';
226: $Str .= '<select name="Section" multiple="true" size="4">'."\n";
227:
228: foreach (@$sections) {
229: $Str .= '<option';
230: foreach my $selected (@$selectedSections) {
231: if($_ eq $selected) {
232: $Str .= ' selected=""';
233: }
234: }
235: $Str .= '>'.$_.'</option>'."\n";
236: }
237: $Str .= '</select>'."\n";
238:
239: return $Str;
240: }
241:
242: sub Title {
243: my ($pageName)=@_;
244:
245: my $Str = '';
246:
247: $Str .= '<html><head><title>'.$pageName.'</title></head>'."\n";
248: $Str .= &Apache::loncommon::bodytag($pageName)."\n";
249: $Str .= '<script>window.focus(); window.width=500;window.height=500;';
250: $Str .= '</script>'."\n";
251:
252: return $Str;
253: }
254:
255: =pod
256:
257: =item &CreateTableHeadings()
258:
259: This function generates the column headings for the chart.
260:
261: =over 4
262:
263: Inputs: $CacheData, $keyID, $headings, $spacePadding
264:
265: $CacheData: pointer to a hash tied to the cached data database
266:
267: $keyID: a pointer to an array containing the names of the data
268: held in a column and is used as part of a key into $CacheData
269:
270: $headings: The names of the headings for the student information
271:
272: $spacePadding: The spaces to go between columns
273:
274: Output: $Str
275:
276: $Str: A formatted string of the table column headings.
277:
278: =back
279:
280: =cut
281:
282: sub CreateHeadings {
283: my ($data,$keyID,$headings,$displayString,$format)=@_;
284: my $Str='';
285: my $formatting = '';
286:
287: for(my $index=0; $index<(scalar @$headings); $index++) {
288: my $currentHeading=$headings->[$index];
289: if($format eq 'preformatted') {
290: my @dataLength=split(//,$currentHeading);
291: my $length=scalar @dataLength;
292: $formatting = (' 'x
293: ($data->{$keyID->[$index].':columnWidth'}-$length));
294: }
295: my $linkdata=$keyID->[$index];
296:
297: my $tempString = $displayString;
298: $tempString =~ s/LINKDATA/$linkdata/;
299: $tempString =~ s/DISPLAYDATA/$currentHeading/;
300: $tempString =~ s/FORMATTING/$formatting/;
301:
302: $Str .= $tempString;
303: }
304:
305: return $Str;
306: }
307:
308: =pod
309:
310: =item &FormatStudentInformation()
311:
312: This function produces a formatted string of the student's information:
313: username, domain, section, full name, and PID.
314:
315: =over 4
316:
317: Input: $cache, $name, $keyID, $spacePadding
318:
319: $cache: This is a pointer to a hash that is tied to the cached data
320:
321: $name: The name and domain of the current student in name:domain format
322:
323: $keyID: A pointer to an array holding the names used to
324:
325: remove data from the hash. They represent the name of the data to be removed.
326:
327: $spacePadding: Extra spaces that represent the space between columns
328:
329: Output: $Str
330:
331: $Str: Formatted string.
332:
333: =back
334:
335: =cut
336:
337: sub FormatStudentInformation {
338: my ($data,$name,$keyID,$displayString,$format)=@_;
339: my $Str='';
340: my $currentColumn;
341:
342: for(my $index=0; $index<(scalar @$keyID); $index++) {
343: $currentColumn=$data->{$name.':'.$keyID->[$index]};
344:
345: if($format eq 'preformatted') {
346: my @dataLength=split(//,$currentColumn);
347: my $length=scalar @dataLength;
348: $currentColumn.= (' 'x
349: ($data->{$keyID->[$index].':columnWidth'}-$length));
350: }
351:
352: my $tempString = $displayString;
353: $tempString =~ s/DISPLAYDATA/$currentColumn/;
354:
355: $Str .= $tempString;
356: }
357:
358: return $Str;
359: }
360:
361: # Create progress
362: sub Create_PrgWin {
363: my ($r, $title, $heading)=@_;
364: $r->print('<script>'.
365: "popwin=open(\'\',\'popwin\',\'width=400,height=100\');".
366: "popwin.document.writeln(\'<html><body bgcolor=\"#88DDFF\">".
367: "<title>$title</title>".
368: "<h4>$heading</h4>".
369: "<form name=popremain>".
370: "<input type=text size=35 name=remaining value=Starting></form>".
371: "</body></html>\');".
372: "popwin.document.close();".
373: "</script>");
374:
375: $r->rflush();
376: }
377:
378: # update progress
379: sub Update_PrgWin {
380: my ($displayString,$r)=@_;
381: $r->print('<script>popwin.document.popremain.remaining.value="'.
382: $displayString.'";</script>');
383: $r->rflush();
384: }
385:
386: # close Progress Line
387: sub Close_PrgWin {
388: my ($r)=@_;
389: $r->print('<script>popwin.close()</script>'."\n");
390: $r->rflush();
391: }
392:
393: 1;
394: __END__
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>