File:  [LON-CAPA] / loncom / html / adm / helper / course.initialization.helper
Revision 1.29: download - view: text, annotated - select for diffs
Thu Feb 11 01:30:52 2010 UTC (14 years, 9 months ago) by raeburn
Branches: MAIN
CVS tags: version_2_9_99_0, HEAD
- Update informaton about options for date shift when cloning a course.

<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 &quot;Modify parameter settings&quot; screen and clicking on the &quot;Course Configuration&quot; button.</p>

      <p>If you do not have experience coordinating LON-CAPA courses or if you
         prefer the Helper interface, please click &quot;Next&quot;.</p>
      </message>
    </state>

  <state name="COURSE_DESCRIPTION" title="Course Title">
    <message nextstate="FORBID_CHAT">
      The &quot;Course Title&quot; is the name of the course that will be
      seen by the students.  You may now modify the description and hit 
      &quot;Next&quot; 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 chat room.';
                $denied = ucfirst($denied);
            } else {
                $denied = 'Everyone can participate in chat room.';
            }
            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, &quot;Exam Proctor&quot; 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 &quot;user&quot; and &quot;domain&quot;
      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].','&quot;<b>'.$helper->{DATA}->{DOM}.'</b>&quot;').'</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 &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 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 &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>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>

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