Annotation of loncom/imspackages/imsexport.pm, revision 1.7
1.5 www 1: # The LearningOnline Network
2: #
1.7 ! raeburn 3: # $Id: imsexport.pm,v 1.6 2009/02/25 10:26:05 weissno Exp $
1.5 www 4: #
1.1 raeburn 5: # Copyright Michigan State University Board of Trustees
6: #
7: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
8: #
9: # LON-CAPA is free software; you can redistribute it and/or modify
10: # it under the terms of the GNU General Public License as published by
11: # the Free Software Foundation; either version 2 of the License, or
12: # (at your option) any later version.
13: #
14: # LON-CAPA is distributed in the hope that it will be useful,
15: # but WITHOUT ANY WARRANTY; without even the implied warranty of
16: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17: # GNU General Public License for more details.
18: #
19: # You should have received a copy of the GNU General Public License
20: # along with LON-CAPA; if not, write to the Free Software
21: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22: #
23: # /home/httpd/html/adm/gpl.txt
24: #
25: # http://www.lon-capa.org/
26: #
27:
28: package Apache::imsexport;
29:
30: use strict;
31: use Apache::lonnet;
1.7 ! raeburn 32: use LONCAPA;
1.1 raeburn 33:
34: sub simpleproblem {
1.2 raeburn 35: my ($symb) = @_;
36: my $output;
1.1 raeburn 37: my %qparms = &Apache::lonnet::dump('resourcedata',
1.3 albertel 38: $env{'course.'.$env{'request.course.id'}.'.domain'},
39: $env{'course.'.$env{'request.course.id'}.'.num'},
40: $env{'request.course.id'}.'.'.$symb);
1.1 raeburn 41: if ($symb) {
1.3 albertel 42: my $prefix=$env{'request.course.id'}.'.'.$symb.'.0.';
1.1 raeburn 43: my $qtype=$qparms{$prefix.'questiontype'};
44: my $qtext=$qparms{$prefix.'questiontext'};
45: my $hint=$qparms{$prefix.'hinttext'};
46: my %values = ();
47: my %foils = ();
48: if (($qtype eq 'radio') || ($qtype eq 'option')) {
49: my $maxfoils=$qparms{$prefix.'maxfoils'};
50: my $randomize=$qparms{$prefix.'randomize'};
51: if ($qtype eq 'option') {
52: my $options=$qparms{$prefix.'options'};
53: %values = &evaloptionhash($options);
1.2 raeburn 54: $output .= qq|
1.1 raeburn 55: <problem>
56: <optionresponse max="$maxfoils" randomize="$randomize">
57: <foilgroup options="$options">
58: |;
59: for (my $k=0; $k<10; $k++) {
60: my $iter = $k+1;
1.2 raeburn 61: $output .= ' <foil name="foil'.$k.'" value="'.$qparms{$prefix.'value'.$iter}.'"';
62: $output .= ' location="'.$qparms{$prefix.'position'.$iter}.'" ';
63: $output .= '><startouttext />'.$qparms{$prefix.'text'.$iter}.'<endouttext /></foil>'."\n";
1.1 raeburn 64: }
1.2 raeburn 65: chomp($output);
66: $output .= qq|
1.1 raeburn 67: </foilgroup>
68: |;
69: if ($hint) {
1.2 raeburn 70: $output .= '
1.1 raeburn 71: <hintgroup>
72: <hintpart on="default">
73: <startouttext />'.$hint.'<endouttext/>
74: </hintpart>
75: </hintgroup>';
76: }
1.2 raeburn 77: $output .= qq|
1.1 raeburn 78: </optionresponse>
79: </problem>
80: |;
81: } else {
1.2 raeburn 82: $output .= qq|
1.1 raeburn 83: <problem>
84: <radiobuttonresponse max="$maxfoils" randomize="$randomize">
85: <foilgroup>
86: |;
87: for (my $k=0; $k<10; $k++) {
88: my $iter = $k+1;
1.2 raeburn 89: $output .= ' <foil name="foil'.$k.'" value="'.$qparms{$prefix.'value'.$iter}.'"';
90: $output .= ' location="'.$qparms{$prefix.'position'.$iter}.'" ';
91: $output .= '><startouttext />'.$qparms{$prefix.'text'.$iter}.'<endouttext /></foil>'."\n";
1.1 raeburn 92: }
1.2 raeburn 93: chomp($output);
94: $output .= qq|
1.1 raeburn 95: </foilgroup>
96: |;
97: if ($hint) {
1.2 raeburn 98: $output .= '
1.1 raeburn 99: <hintgroup>
100: <hintpart on="default">
101: <startouttext />'.$hint.'<endouttext/>
102: </hintpart>
103: </hintgroup>';
104: }
1.2 raeburn 105: $output .= qq|
1.1 raeburn 106: </radiobuttonresponse>
107: </problem>
108: |;
109: }
110: } elsif ($qtype eq 'stringanswer') {
111: my $stringanswer = $qparms{$prefix.'stringanswer'};
112: my $stringtype=$qparms{$prefix.'stringtype'};
1.2 raeburn 113: $output .= qq|
1.1 raeburn 114: <problem>
115: <stringresponse answer="$stringanswer" type="$stringtype">
116: <textline>
117: </textline>
118: |;
119: if ($hint) {
1.2 raeburn 120: $output .= '
1.1 raeburn 121: <hintgroup>
122: <hintpart on="default">
123: <startouttext />'.$hint.'<endouttext/>
124: </hintpart>
125: </hintgroup>';
126: }
1.2 raeburn 127: $output .= qq|
1.1 raeburn 128: </stringresponse>
129: </problem>
130: |;
131: } else {
1.2 raeburn 132: $output .= qq|
1.1 raeburn 133: <problem>
134: <startouttext />$qtext<endouttext />
135: <essayresponse>
136: <textfield></textfield>
137: </essayresponse>
138: </problem>
139: |;
140: }
141: }
1.2 raeburn 142: return $output;
1.1 raeburn 143: }
144:
145: sub evaloptionhash {
146: my $options=shift;
147: $options=~s/^\(\'//;
148: $options=~s/\'\)$//;
149: my %returnhash=();
150: foreach (split(/\'\,\'/,$options)) {
151: $returnhash{$_}=$_;
152: }
153: return %returnhash;
154: }
155:
156: sub external {
157: my ($symb,$title) = @_;
158: my $output;
1.2 raeburn 159: if ($symb =~ m-\.sequence___\d+___ext(.+)$-) {
1.4 www 160: my $exturl = &unescape($1);
1.1 raeburn 161: $output = qq|
162: <html>
163: <head><title>$title</title>
164: </head>
165: <frameset rows="0,*" border="0">
1.2 raeburn 166: <frame src='' />
167: <frame src="http://$exturl" name="external" />
1.1 raeburn 168: </frameset>
169: </html>
170: |;
171: }
172: return $output;
173: }
174:
175: sub templatedpage {
176: my ($content_type,$timestamp,$count,$uploads,$udom,$uname) = @_;
1.3 albertel 177: my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
178: my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
1.1 raeburn 179: my $output = '
180: <'.$content_type.'>';
181: my %syllabusdata=();
182: my %syllabusfields=();
183: if ($content_type eq 'syllabus') {
184: %syllabusfields=&Apache::lonlocal::texthash(
185: 'aaa_instructorinfo' => 'Instructor Information',
186: 'bbb_description' => 'Course Description',
187: 'ccc_prereq' => 'Prerequisites',
188: 'cdc_classhours' => 'Class Hours',
189: 'ddd_officehours' => 'Office Hours',
190: 'eee_helproom' => 'Helproom Hours',
191: 'efe_projectinfo' => 'Project Information',
192: 'fff_examinfo' => 'Exam Information',
193: 'fgf_deadlines' => 'Deadlines',
194: 'ggg_grading' => 'Grading Information',
195: 'hhh_readings' => 'Readings',
196: 'iii_coursepack' => 'Coursepack',
197: 'jjj_weblinks' => 'Web Links',
198: 'kkk_textbook' => 'Textbook',
199: 'lll_includeurl' => 'URLs To Include in Syllabus'
200: );
201: %syllabusdata = &Apache::lonnet::dump('syllabus',$cdom,$cnum);
202:
203: } elsif ($content_type eq 'simplepage') {
204: %syllabusfields=&Apache::lonlocal::texthash(
205: 'aaa_title' => 'Page Title',
206: 'bbb_content' => 'Content',
207: 'ccc_webreferences' => 'Web References'
208: );
209: %syllabusdata = &Apache::lonnet::dump('smppage_'.$timestamp,$cdom,$cnum);
210: } elsif ($content_type eq 'bulletinboard') {
211: %syllabusfields=&Apache::lonlocal::texthash(
212: 'aaa_title' => 'Topic',
213: 'bbb_content' => 'Task',
214: 'ccc_webreferences' => 'Web References'
215: );
216: %syllabusdata = &Apache::lonnet::dump('bulletinpage_'.$timestamp,$cdom,$cnum);
217: } elsif ($content_type eq 'aboutme') {
218: %syllabusdata=&Apache::lonnet::dump('aboutme',$udom,$uname);
219: %syllabusfields=&Apache::lonlocal::texthash(
220: 'aaa_contactinfo' => 'Contact Information',
1.6 weissno 221: 'bbb_aboutme' => 'Personal Information',
1.1 raeburn 222: 'ccc_webreferences' => 'Web References'
223: );
224: $output .= qq|
225: <username>$uname</username>
226: <domain>$udom</domain>
227: |;
228: }
229: foreach (sort keys %syllabusfields) {
230: $output .= qq|
231: <$_>
232: <name>$syllabusfields{$_}</name>
233: <value>$syllabusdata{$_}</value>
234: </$_>|;
235: }
236: if (defined($syllabusdata{'uploaded.photourl'})) {
1.2 raeburn 237: if ($syllabusdata{'uploaded.photourl'} =~ m-/([^/]+)$-) {
238: push @$uploads, $syllabusdata{'uploaded.photourl'};
1.1 raeburn 239: }
240: $output .= '
241: <photo>
242: <filename>'.$count.'/'.$1.'</filename>
243: </photo>';
244: }
245: $output .= '
246: </'.$content_type.'>';
247: return $output;
248: }
249:
250: 1;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>