version 1.1, 2003/05/08 19:53:11
|
version 1.29, 2010/02/11 01:30:52
|
Line 1
|
Line 1
|
<helper title="Course Initialization Helper"> |
<helper title="Course Initialization Helper" requiredpriv='opa'> |
|
|
|
<exec> |
|
my $courseid = $env{'request.course.id'}; |
|
my $crsdom = $env{'course.'.$courseid.'.domain'}; |
|
my $crsnum = $env{'course.'.$courseid.'.num'}; |
|
$helper->{DATA}->{DOM} = $crsdom; |
|
$helper->{DATA}->{CRS} = $crsnum; |
|
|
|
$helper->{DATA}->{FIRST_RUN} = $env{'course.'.$crsnum. |
|
'.course.intialization.not.run'}; |
|
# Delete the 'course.initialization.not.run' course environment |
|
Apache::lonnet::put('environment', {'course.helper.not.run' => 0}, |
|
$crsdom, $crsnum); |
|
Apache::lonnet::coursedescription($env{'request.course.id'}); |
|
|
|
$helper->{DATA}->{GETVAL} = sub { |
|
my @resultlist = &Apache::lonnet::get('environment', [shift()], |
|
$helper->{DATA}->{DOM}, |
|
$helper->{DATA}->{CRS}); |
|
return $resultlist[1]; }; |
|
$helper->{DATA}->{SETVAL} = sub { |
|
my $name = shift; |
|
my $val = shift; |
|
if (&{$helper->{DATA}->{GETVAL}}($name) ne $val) { |
|
&Apache::lonnet::put('environment', {$name=>$val}, |
|
$helper->{DATA}->{DOM}, |
|
$helper->{DATA}->{CRS}); |
|
# Try to fix bug 1757 |
|
Apache::lonnet::coursedescription($env{'request.course.id'}); |
|
return 1; |
|
} else { |
|
return 0; |
|
} |
|
} |
|
</exec> |
|
|
<state name="START" title="Welcome to Your New LON-CAPA Course"> |
<state name="START" title="Welcome to Your New LON-CAPA Course"> |
<message nextstate="FORBID_DISCUSSION"> |
<eval> |
<p>This helper will help you set up your new LON-CAPA course and choose |
return $helper->{DATA}->{FIRST_RUN} ? |
which LON-CAPA features will be active in your course. You can |
'This Helper will set up your new LON-CAPA course and choose '. |
re-visit it later to change settings in your course.</p> |
'which features will be active. You can '. |
|
're-visit it later to change settings in your course.' . |
<p><b>FIXME:</b> Figure out some way to detect whether this has been |
|
run, and change that paragraph appropriatly.</p> |
'<p>If you have previous experience with coordinating LON-CAPA courses and '. |
|
'prefer not to use the helper, <a href="/adm/menu">click here</a> to leave.' |
<p>If you have previous experience with coordinating LON-CAPA courses and |
: |
prefer to use the in-course interface to change these settings, |
&mt('This helper will set up your LON-CAPA course and choose which features will be active.'); |
<a href="/adm/navmaps">click here</a> to leave this helper.</p> |
</eval> |
|
<message nextstate="COURSE_DESCRIPTION"> |
<p>All settings you can change with this helper can also be changed while the |
<p>All settings which you can change with this Helper can also be changed |
course is running by going to the PARM screen and clicking on the "Set |
by going to the "Modify parameter settings" screen and clicking on the "Course Configuration" button.</p> |
course environment" button.</p> |
|
|
<p>If you do not have experience coordinating LON-CAPA courses or if you |
|
prefer the Helper interface, please click "Next".</p> |
|
</message> |
|
</state> |
|
|
<p>If you do not have experience coordinating LON-CAPA courses, or if you |
<state name="COURSE_DESCRIPTION" title="Course Title"> |
prefer the helper interface, please click <b>Next -></b>.</p> |
<message nextstate="FORBID_CHAT"> |
|
The "Course Title" is the name of the course that will be |
|
seen by the students. You may now modify the description and hit |
|
"Next" to continue.<br /> |
</message> |
</message> |
|
<string variable='description' size='60' > |
|
<defaultvalue> |
|
return &{$helper->{DATA}->{GETVAL}}('description'); |
|
</defaultvalue> |
|
<finalcode> |
|
if (&{$helper->{DATA}->{SETVAL}}('description', $element->getValue())) { |
|
return 'Course description changed to <b>' . $element->getValue() . |
|
'</b>.'; |
|
} |
|
</finalcode> |
|
</string> |
|
</state> |
|
|
|
<state name="FORBID_CHAT" title="Chat Room Participation"> |
|
<message nextstate="FORBID_DISCUSSION"> |
|
<p>LON-CAPA has chat room functionality. This course will receive |
|
its own chat room. You may deny students, TAs, or instructors |
|
the right to access the chat room.</p> |
|
</message> |
|
<choices variable="BANNED_CHAT_ROLES" multichoice="1" allowempty='1'> |
|
<choice computer="st"><b>Students</b> - students will not be able to use or view the chat room.</choice> |
|
<choice computer="ta"><b>Teaching Assistants</b> - teaching assistants will not be able use or view the chat room</choice> |
|
<choice computer="in"><b>Instructor</b> - instructors will not be able to use or view the chat room</choice> |
|
<defaultvalue> |
|
my $denied = &{$helper->{DATA}->{GETVAL}}('plc.roles.denied'); |
|
$denied =~ s/,/\|\|\|/g; |
|
return $denied; |
|
</defaultvalue> |
|
<finalcode> |
|
my $denied = $element->getValue(); |
|
$denied =~ s/\|\|\|/,/g; |
|
if (&{$helper->{DATA}->{SETVAL}}('plc.roles.denied', $denied)) { |
|
$denied =~ s/st/ students/; |
|
$denied =~ s/in/ instructors/; |
|
$denied =~ s/ta/ teaching assistants/; |
|
$denied =~ s/ep/ exam proctors/; |
|
if ($denied =~ /^[^,]*,[^,]*$/) { # only one comma |
|
$denied =~ s/,/ and/g; |
|
} else { # add "and" to last comma |
|
$denied =~ s/,([^,]*)$/, and\1/; |
|
} |
|
if ($denied) { |
|
$denied = substr($denied, 1) . ' not allowed to participate in chat room.'; |
|
$denied = ucfirst($denied); |
|
} else { |
|
$denied = 'Everyone can participate in chat room.'; |
|
} |
|
return $denied; |
|
} else { |
|
return ''; |
|
} |
|
</finalcode> |
|
</choices> |
</state> |
</state> |
|
|
<state name="FORBID_DISCUSSION" title="Discussion Participation"> |
<state name="FORBID_DISCUSSION" title="Discussion Participation"> |
<message nextstate="DISCUSSION_HTML"> |
<message nextstate="DISCUSSION_HTML"> |
<p>LON-CAPA hosts discussions on all resources in a course. By default, |
LON-CAPA hosts discussions on all resources in a course. By default, |
all users are allowed to participate in these discussions.</p> |
all users are allowed to participate in these discussions. |
|
|
<p>For more information about discussion and the abilities available |
<p>If you do not wish certain types of users to be able to use the |
to you as a course coordinator, such as banning abusive users or |
discussion features, select those types below. Note your class |
hiding discussion postings, please see <b>link</b>.</p> |
may not have all of these roles; you may safely ignore roles you |
|
do not intend to use. (For instance, "Exam Proctor" is |
|
generally useful only for large courses.)</p> |
|
|
<p>If you do not wish certain classes of users to be able to use the |
<p>Types of users not allowed to participate in discussion can |
discussion features, select those classes below.</p> |
still view any discussion that other users post.</p> |
|
|
<p><b>Question: Does inability to use discussion mean they simply can't |
|
post, or that they can't see the discussion at all?</b></p> |
|
</message> |
</message> |
<choices variable="BANNED_DISCUSSION_ROLES" multichoice="1"> |
<choices variable="BANNED_DISCUSSION_ROLES" multichoice="1" allowempty='1'> |
<choice computer="st"><b>Students</b> - students will not be able to participate in discussions</choice> |
<choice computer="st"><b>Students</b> - students will not be able to participate in discussions</choice> |
<choice computer="ta"><b>Teaching Assistants</b> - teaching assistants will not be able to participate in discussions</choice> |
<choice computer="ta"><b>Teaching Assistants</b> - teaching assistants will not be able to participate in discussions</choice> |
<choice computer="in"><b>Instructor</b> - instructors will not be able to participate in discussions</choice> |
<choice computer="in"><b>Instructor</b> - instructors will not be able to participate in discussions</choice> |
|
<defaultvalue> |
|
my $denied = &{$helper->{DATA}->{GETVAL}}('pch.roles.denied'); |
|
$denied =~ s/,/\|\|\|/g; |
|
return $denied; |
|
</defaultvalue> |
|
<finalcode> |
|
my $denied = $element->getValue(); |
|
$denied =~ s/\|\|\|/,/g; |
|
if (&{$helper->{DATA}->{SETVAL}}('pch.roles.denied', $denied)) { |
|
$denied =~ s/st/ students/; |
|
$denied =~ s/in/ instructors/; |
|
$denied =~ s/ta/ teaching assistants/; |
|
$denied =~ s/ep/ exam proctors/; |
|
if ($denied =~ /^[^,]*,[^,]*$/) { # only one comma |
|
$denied =~ s/,/ and/g; |
|
} else { # add "and" to last comma |
|
$denied =~ s/,([^,]*)$/, and\1/; |
|
} |
|
if ($denied) { |
|
$denied = substr($denied, 1) . ' not allowed to participate in discussion.'; |
|
$denied = ucfirst($denied); |
|
} else { |
|
$denied = 'Everyone can participate in discussion.'; |
|
} |
|
return $denied; |
|
} else { |
|
return ''; |
|
} |
|
</finalcode> |
</choices> |
</choices> |
</state> |
</state> |
|
|
<state name="DISCUSSION_HTML" title="HTML in Discussions"> |
<state name="DISCUSSION_HTML" title="HTML in Discussions"> |
<message nextstate="FEEDBACK_ADDRESSES"> |
<message nextstate="FEEDBACK_ADDRESSES"> |
<p>If you like, limited HTML can be allowed in the course discussions.</p> |
<p>HTML can be allowed or banned inside of course discussion.</p> |
</message> |
</message> |
<choices variable="HTML_ALLOWED"> |
<choices variable="HTML_ALLOWED"> |
<choice computer=""><b>HTML banned</b>: HTML will not be allowed in discussion postings.</choice> |
<choice computer=""><b>HTML banned</b>: HTML will not be allowed in discussion postings.</choice> |
<choice computer="yes"><b>HTML allowed</b>: Discussion participants can use limited HTML in their postings.</choice> |
<choice computer="yes"><b>HTML allowed</b>: Discussion participants can use limited HTML in their postings.</choice> |
|
<defaultvalue> |
|
return &{$helper->{DATA}->{GETVAL}}('allow_limited_html_in_feedback'); |
|
</defaultvalue> |
|
<finalcode> |
|
if (&{$helper->{DATA}->{SETVAL}}('allow_limited_html_in_feedback', $element->getValue())) { |
|
if ($element->getValue() eq 'yes') { |
|
return 'Limited HTML allowed in feedback.'; |
|
} else { |
|
return 'HTML not allowed in feedback.'; |
|
} |
|
} |
|
</finalcode> |
</choices> |
</choices> |
</state> |
</state> |
|
|
|
<state name="FEEDBACK_ADDRESSES" title="Feedback Addresses for Course Content"> |
|
<message nextstate="USERS_ALLOWED_TO_CLONE"> |
|
Course members can provide feedback about the course. You can choose |
|
who will receive the feedback, such as a different instructor or a |
|
TA. Please enter their LON-CAPA address below, in the |
|
form <b>user:domain</b>, where "user" and "domain" |
|
are both the LON-CAPA username and LON-CAPA domain, not an e-mail |
|
address.</p> |
|
</message> |
|
<eval>return '<p>'.&mt('Your current LON-CAPA domain is [_1].','"<b>'.$helper->{DATA}->{DOM}.'</b>"').'</p>'; |
|
</eval> |
|
<string variable='feedback_addresses' size='60' > |
|
<defaultvalue> |
|
return &{$helper->{DATA}->{GETVAL}}('comment.email'); |
|
</defaultvalue> |
|
<finalcode> |
|
if (&{$helper->{DATA}->{SETVAL}}('comment.email', $element->getValue())) { |
|
return 'Comment address(es) updated to <b>' . $element->getValue() . |
|
'</b>.'; |
|
} |
|
</finalcode> |
|
</string> |
|
<message> |
|
<p><b>Advanced</b>: You can send the feedback from different sections |
|
to different people, by doing the following:</p> |
|
|
|
<ul><li>Separate each entry with a comma.</li> |
|
<li>To send feedback to a certain address for different sections, |
|
append the section name or names (separated by semi-colons) |
|
in a parenthesized list after the <b>user:domain</b>.</li></ul> |
|
|
|
<p>For example,</p> |
|
|
|
<p><b>john102:msu(001;002;003),bob293:msu(004;005;006),madeupname:here(007;008;009)</b></p> |
|
|
|
<p>will route course feedback to "john102" for sections 1, 2, and 3, to |
|
"bob293" for 4, 5, and 6, and to "madeupname:here" for |
|
7, 8, and 9. Note there is no requirement that the addresses be in any |
|
particular domain.</p> |
|
</message> |
|
</state> |
|
|
|
<state name="USERS_ALLOWED_TO_CLONE" title="Granting permission to clone course"> |
|
<message nextstate="FINAL"> |
|
Existing courses can be cloned when creating new courses.<br /> |
|
Cloning will copy the course structure, contents, and most settings. For dates (open dates, due dates etc.) a choice is provided to: (a) omit, (b) copy as-is or (c) shift by a specified number of days.<br /><br /> |
|
Usernames of owners of other courses permitted to clone this course:<br /> |
|
</message> |
|
<string variable='can_clone' size='60' > |
|
<defaultvalue> |
|
return &{$helper->{DATA}->{GETVAL}}('cloners'); |
|
</defaultvalue> |
|
<validator> |
|
my ($output,@cloners,%disallowed); |
|
my $match_dom = $LONCAPA::match_domain; |
|
my $match_uname = $LONCAPA::match_username; |
|
if ($val =~ /,/) { |
|
@cloners = split(/,/,$val); |
|
} else { |
|
$cloners[0] = $val; |
|
} |
|
foreach my $item (@cloners) { |
|
next if ($item =~ /^\s*$/); |
|
next if ($item eq '*'); |
|
|
|
my ($clname,$cldom) = split(/:/,$item); |
|
if ($clname eq '*') { |
|
if ($cldom =~ /^$match_dom$/) { |
|
if (!&Apache::lonnet::domain($cldom)) { |
|
$disallowed{'domain'} .= $item.','; |
|
} |
|
} else { |
|
$disallowed{'format'} .= $item.','; |
|
} |
|
} elsif ($item !~/^($match_uname)\:($match_dom)$/) { |
|
$disallowed{'format'} .= $item.','; |
|
} else { |
|
if (!&Apache::lonnet::domain($cldom)) { |
|
$disallowed{'domain'} .= $item.','; |
|
} elsif (&Apache::lonnet::homeserver($clname,$cldom) eq 'no_host') { |
|
$disallowed{'newuser'} .= $item.','; |
|
} |
|
} |
|
} |
|
foreach my $key (keys(%disallowed)) { |
|
$disallowed{$key} =~ s/,$//; |
|
} |
|
if (keys(%disallowed) > 0) { |
|
$output.= 'Your input contained the following errors:<ul>'; |
|
if (defined($disallowed{'format'})) { |
|
$output .= '<li>Invalid format: '. |
|
'<b>'.$disallowed{'format'}.'</b></li>'; |
|
} |
|
if (defined($disallowed{'domain'})) { |
|
$output .= '<li>Domain(s) do(es) not exist: '. |
|
'<b>'.$disallowed{'domain'}.'</b></li>'; |
|
} |
|
if (defined($disallowed{'newuser'})) { |
|
$output .= '<li>LON-CAPA user(s) do(es) not exist: '. |
|
'<b>'.$disallowed{'newuser'}.'</b></li>'; |
|
} |
|
$output .= '</ul>'; |
|
} |
|
return $output; |
|
</validator> |
|
<finalcode> |
|
if (&{$helper->{DATA}->{SETVAL}}('cloners', $element->getValue())) { |
|
|
|
|
|
return 'Users allowed to clone course updated to <b>' . $element->getValue() . |
|
'</b>.'; |
|
} |
|
</finalcode> |
|
</string> |
|
<message> |
|
<br />(Course Coordinators automatically have the right to clone their own courses.) |
|
<ul> |
|
<li>Format: <b>user:domain</b>, where "user" and "domain" |
|
are the LON-CAPA username and domain of the user.</li> |
|
<li>Separate different users with a comma.</li> |
|
<li>Use *:domain to allow course to be cloned by any course owner in the specified domain.</li> |
|
<li>Use * to allow unrestricted cloning by all course owners in all domains.</li> |
|
</ul> |
|
</message> |
|
</state> |
|
<state name="FINAL" title="Completed"> |
|
<message>Your course is now set up. Please select the <b>Save</b> |
|
button to re-intialize the course with your chosen |
|
settings. |
|
|
|
<p>Remember that all of these settings can be modified in the <b>Modify parameter settings</b> |
|
screen (<b>Course Configuration</b>).</p> |
|
</message> |
|
<condition> |
|
<clause>$env{'course.'.$env{'request.course.id'}.'.clonedfrom'}</clause> |
|
<message>After you select <b>Finish Course Initialization</b>, |
|
you will be taken to the Parameter Overview screen to |
|
update the dates for this cloned course.</message> |
|
</condition> |
|
<final restartCourse='1' /> |
|
</state> |
</helper> |
</helper> |