Diff for /loncom/html/adm/helper/course.initialization.helper between versions 1.1 and 1.21

version 1.1, 2003/05/08 19:53:11 version 1.21, 2007/10/29 19:26:48
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 to use the in-course interface to change these settings,   
          <a href="/adm/navmaps">click here</a> to leave this helper.</p>  
   
       <p>All settings you can change with this helper can also be changed while the          '<p>If you have previous experience with coordinating LON-CAPA courses and '.
          course is running by going to the PARM screen and clicking on the &quot;Set          '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 &quot;Set
          course environment&quot; button.</p>           course environment&quot; button.</p>
   
       <p>If you do not have experience coordinating LON-CAPA courses, or if you        <p>If you do not have experience coordinating LON-CAPA courses or if you
          prefer the helper interface, please click <b>Next -&gt;</b>.</p>           prefer the Helper interface, please click <nobr><b>Next -&gt;</b></nobr>.</p>
         </message>
       </state>
   
     <state name="COURSE_DESCRIPTION" title="Course Description">
       <message nextstate="FORBID_CHAT">
         The &quot;Course Description&quot; is the name of the course that will be
         seen by the students.  You may now modify the description and hit 
         <nobr>&quot;<b>Next -&gt;</b>&quot;</nobr> 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 Participation">
       <message nextstate="FORBID_DISCUSSION">
         <p>LON-CAPA has live chat 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>
   
   <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, &quot;Exam Proctor&quot; 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 &quot;user&quot; and &quot;domain&quot;
         are both the LON-CAPA username and LON-CAPA domain, not an email
         address.</p> 
         </message>
       <eval>return &mt('<p>Your current LON-CAPA domain is &quot;<b>[_1]</b>&quot;.</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 &quot;john102&quot; for sections 1, 2, and 3, to
            &quot;bob293&quot; for 4, 5, and 6, and to &quot;madeupname:here&quot; 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 &quot;user&quot; and &quot;domain&quot;
         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>    </helper>

Removed from v.1.1  
changed lines
  Added in v.1.21


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>