<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">
<eval>
return $helper->{DATA}->{FIRST_RUN} ?
'This Helper will set up your new LON-CAPA course and choose '.
'which features will be active. You can '.
're-visit it later to change settings in your course.' .
'<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.'
:
&mt('This helper will set up your LON-CAPA course and choose which features will be active.');
</eval>
<message nextstate="COURSE_DESCRIPTION">
<p>All settings which you can change with this Helper can also be changed
by going to the PARM screen and clicking on the "Set
course environment" button.</p>
<p>If you do not have experience coordinating LON-CAPA courses or if you
prefer the Helper interface, please click <nobr><b>Next -></b></nobr>.</p>
</message>
</state>
<state name="COURSE_DESCRIPTION" title="Course Title">
<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
<nobr>"<b>Next -></b>"</nobr> to continue.<br />
</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 live chatroom.';
$denied = ucfirst($denied);
} else {
$denied = 'Everyone can participate in live chatroom.';
}
return $denied;
} else {
return '';
}
</finalcode>
</choices>
</state>
<state name="FORBID_DISCUSSION" title="Discussion Participation">
<message nextstate="DISCUSSION_HTML">
LON-CAPA hosts discussions on all resources in a course. By default,
all users are allowed to participate in these discussions.
<p>If you do not wish certain types of users to be able to use the
discussion features, select those types below. Note your class
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>Types of users not allowed to participate in discussion can
still view any discussion that other users post.</p>
</message>
<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="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>
<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>
</state>
<state name="DISCUSSION_HTML" title="HTML in Discussions">
<message nextstate="FEEDBACK_ADDRESSES">
<p>HTML can be allowed or banned inside of course discussion.</p>
</message>
<choices variable="HTML_ALLOWED">
<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>
<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>
</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 &mt('<p>Your current LON-CAPA domain is "<b>[_1]</b>".</p>',"$helper->{DATA}->{DOM}");
</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 parameters (automatically advancing any date parameters by six months).<br /><br />
Names 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>Finish Course
Initialization</b> button to re-intialize the course with your chosen
settings.
<p>Remember that all of these settings can be modified in the <b>PARMS</b>
screen, by pushing the <b>Course Environment</b> button.</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>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>