Diff for /loncom/interface/lonpopulate.pm between versions 1.43 and 1.46

version 1.43, 2006/05/18 01:08:51 version 1.46, 2006/08/08 19:02:04
Line 46  sub header { Line 46  sub header {
   
 sub choose_header {  sub choose_header {
     my ($action) = @_;      my ($action) = @_;
       my $notify_check = '/^note_[0-9]+$/';
     my $scripttag = qq|      my $scripttag = qq|
 <script language='javascript' type='text/javascript'>  <script language='javascript' type='text/javascript'>
 <!--  <!--
Line 111  function process(calling,numauto,nummanu Line 111  function process(calling,numauto,nummanu
          checker = 0           checker = 0
      }       }
  }   }
    if (calling == "notify") {
        var totalnote = 0;
        if (formName.notify[1].checked = true) {
            for (var i=0; i<formName.elements.length; i++) {
                var elementname = formName.elements[i].name;
                var check_name = elementname.match($notify_check);
                if (check_name != null) {
                    if (formName.elements[i].checked) {
                        totalnote ++;
                    }
                } 
            }
            if (totalnote > 0) {
                if (formName.notify[1].checked = true) {
                    if (confirm("You have indicated that you do not want notification of roster changes messages to be sent, but "+totalnote+" have been checked as recipients.\\nClick 'OK' to erase all recipients, or 'Cancel'.")) {
                        checker  = 1;
                    } else {
                        checker = 0;
                    }
                }
            } else {
                if (formName.notify[0].checked = true) {
                    alert("You have indicated that you want notification of roster changes messages to be sent, but you have not selected any recipients.");
                    checker = 0;
                }
            }
        }
    }
  if (calling == "viewclass") {   if (calling == "viewclass") {
      var totcheck = 0       var totcheck = 0
      var numchk = 0       var numchk = 0
Line 479  ENDTWO Line 507  ENDTWO
   } elsif ($action eq "notify") {    } elsif ($action eq "notify") {
       my $notifycount = 0;        my $notifycount = 0;
       my @notified = split(/,/,$enrollvar{notifylist});        my @notified = split(/,/,$enrollvar{notifylist});
         my @domcoord;
         my @showdom;
       for (my $i=0; $i<@notified; $i++) {        for (my $i=0; $i<@notified; $i++) {
           if ($notified[$i] !~ /:/) {            if ($notified[$i] !~ /:/) {
               $notified[$i] =~ s/\@/:/;                $notified[$i] =~ s/\@/:/;
Line 491  ENDTWO Line 521  ENDTWO
       } else {        } else {
           $noteset = "OFF";            $noteset = "OFF";
       }        }
             my %dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc']);
         foreach my $server (keys(%dompersonnel)) {
             foreach my $user (sort(keys(%{$dompersonnel{$server}}))) {
                 my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,$user);
                 if (!grep(/^$uname:$udom$/,@domcoord)) {
                     push(@domcoord,$uname.':'.$udom);
                 }
             }
         }
       $r->print("        $r->print("
                   <form name=\"enter\" method=\"post\"><br/>                    <form name=\"enter\" method=\"post\"><br/>
                    <table width=\"100%\" border=\"0\" cellpadding=\"6\" cellspacing=\"0\">                     <table width=\"100%\" border=\"0\" cellpadding=\"6\" cellspacing=\"0\">
Line 521  ENDTWO Line 559  ENDTWO
               </td>                </td>
              </tr>               </tr>
       ");        ");
       my @coursepersonnel = &Apache::lonnet::getkeys('nohist_userroles',$dom,$crs);        my %coursepersonnel = &Apache::lonnet::dump('nohist_userroles',$dom,$crs);
       my @ccs = ();        my @ccs;
       my @oldccs = ();        my %pname;
       my %pname = ();        my %notifystate;
       my %notifystate = ();        my %status;
       foreach (@coursepersonnel) {        my $now = time;
           my @roleinfo = split/:/,$_;        foreach my $person (sort(keys(%coursepersonnel))) {
           if ($roleinfo[0] eq 'cc')  {            my $match = 0;
               unless (grep/^$roleinfo[1]\:$roleinfo[2]/,@ccs) {            my ($role,$user,$usec) = ($person =~ /^([^:]+):([^:]+:[^:]+):([^:]*)/);
                   my $active_cc = &Apache::loncommon::check_user_status($roleinfo[2],$roleinfo[1],$dom,$crs,'cc');            $user =~ s/:$//;
                   if ($active_cc eq 'active') {            my ($end,$start) = split(/:/,$coursepersonnel{$person});
                       push @ccs, $roleinfo[1].':'.$roleinfo[2];            if ($end == -1 || $start == -1) {
                       $pname{$roleinfo[1].':'.$roleinfo[2]} = &Apache::loncommon::plainname($roleinfo[1],$roleinfo[2]);                next;
                       if (grep/^$roleinfo[1]\:$roleinfo[2]$/,@notified) {            }
                           $notifystate{$roleinfo[1].':'.$roleinfo[2]} = 1;            if ($role eq 'cc')  {
                       } else {                unless (grep(/^$user$/,@ccs)) {
                           $notifystate{$roleinfo[1].':'.$roleinfo[2]} = 0;                    if ($end && $end < $now) {
                       }                        $status{$user} = 'previous';
                     } elsif ($start > $now) {
                         $status{$user} = 'future';
                   } else {                    } else {
                       push @oldccs, $roleinfo[1].':'.$roleinfo[2];                        $status{$user} = 'active';
                     }
                     push(@ccs,$user);
                     my ($uname,$udom) = split(/:/,$user);
                     $pname{$user} = 
                              &Apache::loncommon::plainname($uname,$udom);
                     if (grep(/^$user$/,@notified)) {
                         $notifystate{$user} = 1;
                     } else {
                         $notifystate{$user} = 0;
                   }                    }
               }                }
           }            }
       }        }
       if ($notifycount > 0) {        my $notifyshow = 0; 
           foreach my $person (@notified) {        my %lt = &Apache::lonlocal::texthash(
               unless ( (grep/^$person$/,@ccs) || ($person eq '') || (grep/^$person$/,@oldccs) ) {                                    name => 'Name',
                   push @ccs, $person;                                    usnm => 'username:domain',
                   my ($puname,$pdom) = split/:/,$person;                                    coac => 'Course Access',
                   $pname{$person} =  &Apache::loncommon::plainname($puname,$pdom);                                    curn => 'Current notification status',
                   $notifystate{$person} = 1;                                    notf => 'Notification?',
               }                                    ntac => 'Notification active',
           }                                    ntin => 'Notification inactive',
       }        );
       my $viewer = $env{'user.name'}.':'.$env{'user.domain'};  
       unless ( (grep/^$viewer$/,@ccs) || ($viewer eq '') )  {  
           push @ccs,$viewer;  
           $pname{$viewer} =  &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'});  
           $notifystate{$viewer} = 0;  
       }  
   
       my $notifyshow = @ccs;  
   
       if (@ccs > 0) {        if (@ccs > 0) {
           @ccs = sort @ccs;            @ccs = sort @ccs;
           $r->print("            $r->print("
              <tr>               <tr>
                <td>The table below contains a list of course coordinators in this course. Uncheck the 'Notification?' checkbox for each person who is to be removed from the list of recipients who are currently informed of roster changes whenever any adds or drops occur during the nightly enrollment check. To include individuals who are not currently recipients, simply check the 'Notification?' checkbox. Click 'Go' to store your changes.                 <td>".&mt('The table below contains a list of [_1]s in this course.',&Apache::lonnet::plaintext('cc'))."
               </td>                </td>
              </tr>               </tr>
              <tr>               <tr>
               <td>");                <td>");
           $r->print(&Apache::loncommon::start_data_table());            $r->print(&notifier_tables('cc',\%lt,\@ccs,\%status,\%notifystate,
           $r->print(&Apache::loncommon::start_data_table_row());                                       \%pname,\$notifyshow));
             $r->print("</td></tr>");
         } else {
           $r->print("            $r->print("
                  <th>Name</th>               <tr>
                  <th>username:domain</th>                <td>".
                  <th>Current status</th>               &mt('No [_1]s found.',&Apache::lonnet::plaintext('cc'))."
                  <th>Notification?</th>              </td>
           ");             </tr>");
           $r->print(&Apache::loncommon::end_data_table_row());        }
           for (my $i=0; $i<@ccs; $i++) {        my $viewer = $env{'user.name'}.':'.$env{'user.domain'};
               $r->print(&Apache::loncommon::start_data_table_row());        my $showalldc = 0;
               $r->print("        if (grep(/^$viewer$/,@domcoord)) {
                  <td>$pname{$ccs[$i]}</td>            $showalldc = 1;
                  <td><input type=\"hidden\" name=\"notifyname_$i\" value=\"$ccs[$i]\" />$ccs[$i]</td>        }
                  <td>        foreach my $dc (@domcoord) {
               ");            if (!grep(/^$dc$/,@ccs)) {
               if ($notifystate{$ccs[$i]} == 1) {                if (grep(/^$dc$/,@notified)) {
                   $r->print("Notification active");                    $notifystate{$dc} = 1;
               } else {  
                   $r->print("Notification inactive");  
               }  
               if ($notifystate{$ccs[$i]} == 1) {  
                   $r->print("</td><td><input type=\"checkbox\" name=\"note_$i\" checked=\"true\" /></td>");  
               } else {                } else {
                   $r->print("</td><td><input type=\"checkbox\" name=\"note_$i\" /></td>");                    $notifystate{$dc} = 0;
                     if (!$showalldc) {
                         next;
                     }
               }                }
               $r->print(&Apache::loncommon::end_data_table_row());                my ($dcuname,$dcdom) = split(/:/,$dc);
                 $pname{$dc} =  &Apache::loncommon::plainname($dcuname,$dcdom);
                 push(@showdom,$dc);
           }            }
           $r->print(&Apache::loncommon::end_data_table());        }
         my $showdomnum = scalar(@showdom);
         if ($showdomnum) {
           $r->print("            $r->print("
                <br/>               <tr>
                <table width=\"100%\" border=\"0\" cellspadding=\"2\" cellspacing=\"2\">                <td>&nbsp;</td>
                 <tr>               </tr><tr>
                  <td align=\"right\">                <td>");
                   <input type=\"button\" name=\"notifyset\" value=\"Go\" onclick=\"process('notify')\" />            if ($showalldc) {
                  </td>                $r->print(&mt("The table below contains a list of [_1]s from this course's domain who are not also [_2]s.",&Apache::lonnet::plaintext('dc'),&Apache::lonnet::plaintext('cc')));
                 </tr>            } else {
                </table>                $r->print(&mt("The table below contains a list of [_1] from this course's domain who currently receive notification, and are not also [_2]s.",&Apache::lonnet::plaintext('dc'),&Apache::lonnet::plaintext('cc')));
             }
             $r->print(" 
               </td>                </td>
              </tr>               </tr>
           ");  
       } else {  
           $r->print("  
              <tr>               <tr>
               <td>                <td>");
              No course coordinators found.            $r->print(&notifier_tables('dc',\%lt,\@showdom,\%status,\%notifystate,
             </td>                                       \%pname,\$notifyshow));
            </tr>");            $r->print("
                </td>
             </tr>");
         }
         if (@ccs > 0 || @showdom > 0) {
             $r->print("<tr><td>&nbsp;</td></tr><tr><td>");
             if ($notifycount) {
                 $r->print(&mt("Uncheck the checkbox(es) to terminate notification for people currently informed of roster changes from the nightly enrollment update.<br />"));
            }
            if ((@ccs + @showdom) > $notifycount) {
                $r->print(&mt("Check the checkbox(es) to initiate notification for people not currently informed of roster changes from the nightly enrollment update.<br />"));
            }
            $r->print(&mt("Click 'Go' to store your changes.")."
              <br/>
              <table width=\"100%\" border=\"0\" cellspadding=\"2\" cellspacing=\"2\">
               <tr>
                <td align=\"right\">
                 <input type=\"button\" name=\"notifyset\" value=\"Go\" onclick=\"process('notify')\" />
                </td>
               </tr>
              </table>
             </td>
            </tr>
         ");
       }        }
       $r->print("        $r->print("
           </table>        </table>
           <input type=\"hidden\" name=\"notifyshow\" value=\"$notifyshow\" />        <input type=\"hidden\" name=\"notifyshow\" value=\"$notifyshow\" />
           <input type=\"hidden\" name=\"action\" value=\"$action\" />        <input type=\"hidden\" name=\"action\" value=\"$action\" />
           <input type=\"hidden\" name=\"state\" value=\"process\" />        <input type=\"hidden\" name=\"state\" value=\"process\" />
           </form>        </form>
       ");        ");
   } elsif ($action eq "crosslist") {    } elsif ($action eq "crosslist") {
       my @xlists;        my @xlists;
Line 881  your changes.</td> Line 947  your changes.</td>
       my ($result,$perm_reqd)=&Apache::lonnet::auto_photo_permission($crs,$dom);        my ($result,$perm_reqd)=&Apache::lonnet::auto_photo_permission($crs,$dom);
       my $can_enable = 1;        my $can_enable = 1;
       my $institution = $Apache::lonnet::domaindescription{$dom};        my $institution = $Apache::lonnet::domaindescription{$dom};
         my $user;
         if ($enrollvar{'courseowner'} =~ /^[^:]+:[^:]+$/) {
             $user = $env{'user.name'}.':'.$env{'user.domain'};
         } else {
             $user = $env{'user.name'};
         }
       if ($result eq 'ok') {        if ($result eq 'ok') {
           if ($perm_reqd eq 'yes') {            if ($perm_reqd eq 'yes') {
               if (!($enrollvar{'photopermission'} eq 'yes')) {                if (!($enrollvar{'photopermission'} eq 'yes')) {
                   $can_enable = 0;                    $can_enable = 0;
               } else {                } else {
                   if ($env{'user.name'} eq $enrollvar{'courseowner'}) {                    if ($user eq $enrollvar{'courseowner'}) {
                       $r->print('                        $r->print('
                     <tr>                      <tr>
                      <td>'.                       <td>'.
 &mt('Previously the owner of this course agreed to the conditions of use of digital student photos required by [_1].', $institution).'<br />'.&mt('As a result Course Coordinators can choose to automatically import student photos into this course.').'<br /><nobr><label>'.&mt('[_1] owner acceptance of these conditions of use?','<b>Cancel</b>').'&nbsp;<input type="checkbox" name="cancel_agreement" value="1" /></label></nobr>  &mt('Previously the owner of this course agreed to the conditions of use of digital student photos required by [_1].', $institution).'<br />'.&mt('As a result [_1]s can choose to automatically import student photos into this course.',&Apache::lonnet::plaintext('cc')).'<br /><nobr><label>'.&mt('[_1] owner acceptance of these conditions of use?','<b>Cancel</b>').'&nbsp;<input type="checkbox" name="cancel_agreement" value="1" /></label></nobr>
                      </td>                       </td>
                     </tr>                      </tr>
                       ');                        ');
Line 919  your changes.</td> Line 991  your changes.</td>
                     </tr>                      </tr>
 ');  ');
       } else {        } else {
           if ($env{'user.name'} eq $enrollvar{'courseowner'}) {            if ($user eq $enrollvar{'courseowner'}) {
               $r->print('                $r->print('
                     <tr>                      <tr>
                      <td>'.                       <td>'.
Line 937  your changes.</td> Line 1009  your changes.</td>
               $r->print('                $r->print('
                     <tr>                      <tr>
                      <td>'.                       <td>'.
 &mt('The policies of your institution [_1] require that the course owner [_2] must indicate acceptance of the conditions of use of digital photos of registered students, before they may be made available for use in a course.',$institution,$ownername).'<br /><br />'.&mt('Please direct the course owner [_1] to visit the "Student photos" page in the Automated Enrollment Manager to indicate acceptance of these conditions of use.',$emailstr).'<br /><br /><input type="button" name="mainmenu" value="Go back" onclick="javascript:history.go(-1);" />  &mt('The policies of your institution ([_1]) require that the course owner ([_2]) must indicate acceptance of the conditions of use of digital photos of registered students, before they may be made available for use in a course.',$institution,$ownername).'<br /><br />'.&mt('Please direct the course owner [_1] to visit the "Student photos" page in the Automated Enrollment Manager to indicate acceptance of these conditions of use.',$emailstr).'<br /><br /><input type="button" name="mainmenu" value="Go back" onclick="javascript:history.go(-1);" />
                     </td>                      </td>
                    </tr>                     </tr>
                   </form>                    </form>
Line 1053  onclick="javascript:document.photoupdate Line 1125  onclick="javascript:document.photoupdate
       if (! exists($env{'form.sortby'})) {        if (! exists($env{'form.sortby'})) {
           $env{'form.sortby'} = 'username';            $env{'form.sortby'} = 'username';
       }        }
       if ($env{'form.Status'} !~ /^(Any|Expired|Active)$/) {        if ($env{'form.Status'} !~ /^(Any|Expired|Active|Future)$/) {
           $env{'form.Status'} = 'Active';            $env{'form.Status'} = 'Active';
       }        }
       my $status_select = &Apache::lonhtmlcommon::StatusOptions($env{'form.Status'});        my $status_select = &Apache::lonhtmlcommon::StatusOptions($env{'form.Status'});
Line 1133  END Line 1205  END
   }    }
 }  }
   
   sub notifier_tables {
       my ($role,$lt,$users,$status,$notifystate,$pname,$notifyshow) = @_;
       my $output = &Apache::loncommon::start_data_table();
       $output .= &Apache::loncommon::start_data_table_header_row();
       $output .= "<th>$$lt{name}</th>
                   <th>$$lt{usnm}</th>";
       if ($role eq 'cc') {
           $output .= "<th>$$lt{coac}</th>";
       } 
       $output .=  "<th>$$lt{curn}</th>
                    <th>$$lt{notf}</th>";
       $output .= &Apache::loncommon::end_data_table_header_row();
       for (my $i=0; $i<@{$users}; $i++) {
           $output .= &Apache::loncommon::start_data_table_row();
           $output .= '<td>'.$$pname{$$users[$i]}.'</td>'.
                      '<td><input type="hidden" name="notifyname_'.$$notifyshow.
                      '" value="'.$$users[$i].'" />'.$$users[$i].'</td>';
           if ($role eq 'cc') {
               $output .= '<td>'.$$status{$$users[$i]}.'</td>';
           }
           $output .= '<td>';
           if ($$notifystate{$$users[$i]} == 1) {
               $output .= $$lt{ntac};
           } else {
               $output .= $$lt{ntin};
           }
           $output .= '</td><td><input type="checkbox" name="note_'.$$notifyshow.'"'; 
           if ($$notifystate{$$users[$i]} == 1) {
               $output .= ' checked="checked"';
           }
           $output .= ' /></td>';
           $output .= &Apache::loncommon::end_data_table_row();
           $$notifyshow ++;
       }
       $output .= &Apache::loncommon::end_data_table();
       return $output;
   }
   
 sub print_accessdate_table {  sub print_accessdate_table {
     my ($r,$enrollvar,$tasktitleref,$action) = @_;      my ($r,$enrollvar,$tasktitleref,$action) = @_;
     my ($start_table,$end_table) = &date_setting_table($$enrollvar{'default_enrollment_start_date'},$$enrollvar{'default_enrollment_end_date'},$action);      my ($start_table,$end_table) = &date_setting_table($$enrollvar{'default_enrollment_start_date'},$$enrollvar{'default_enrollment_end_date'},$action);
Line 1612  sub print_notify_response { Line 1722  sub print_notify_response {
     }      }
     $response .= "</ul>\n";      $response .= "</ul>\n";
  } else {   } else {
     $response = "Notification of enrollment changes was <b> not enabled</b> as no course coordinators were selected as recipients.<br/>";      $response = &mt('Notification of enrollment changes was <b> not enabled</b> as no [_1]s were selected as recipients.<br/>',&Apache::lonnet::plaintext('cc'));
  }   }
     } else {      } else {
  if ($currcount) {   if ($currcount) {
Line 1685  sub print_crosslistings_menu () { Line 1795  sub print_crosslistings_menu () {
  if ($numcross > 0) {   if ($numcross > 0) {
     my @bgcolors=("#eeeeee","#cccccc");      my @bgcolors=("#eeeeee","#cccccc");
     $response .= qq(You indicated that you wish to add an additional $numcross crosslisting(s).  For each new crosslisting enter the insititutional course section code (e.g., fs03zol101001, for section 001 of zol101 for fs03 semester), and the LON-CAPA section ID you wish to assign to students who will be enrolled in your LON-CAPA class as a result of their registration in the crosslisted course section. The LON-CAPA section ID can be left blank, if you do not wish to tie a section ID to this crosslisting.  The institutional course section code should only contain letters and/or numbers, and must be consistent with the scheme adopted by your Domain Coordinator to map course codes (and section numbers) to your institution's student information system.<br/><br/>      $response .= qq(You indicated that you wish to add an additional $numcross crosslisting(s).  For each new crosslisting enter the insititutional course section code (e.g., fs03zol101001, for section 001 of zol101 for fs03 semester), and the LON-CAPA section ID you wish to assign to students who will be enrolled in your LON-CAPA class as a result of their registration in the crosslisted course section. The LON-CAPA section ID can be left blank, if you do not wish to tie a section ID to this crosslisting.  The institutional course section code should only contain letters and/or numbers, and must be consistent with the scheme adopted by your Domain Coordinator to map course codes (and section numbers) to your institution's student information system.<br/><br/>
            <form name="enter" method="post">);             <form name="enter" method="post">); #' stupid emacs
            $response .= &Apache::loncommon::start_data_table();             $response .= &Apache::loncommon::start_data_table();
            $response .= &Apache::loncommon::start_data_table_row();             $response .= &Apache::loncommon::start_data_table_row();
            $response .= qq(             $response .= qq(
Line 2287  function agreement_result(caller) { Line 2397  function agreement_result(caller) {
   </form>    </form>
 ';  ';
     } else {      } else {
         my ($ownername,$owneremail) = &get_oenerinfo($dom,$courseowner);          my ($ownername,$owneremail) = &get_ownerinfo($dom,$courseowner);
         $response = &mt('The policies of your institution [_1] require that the course owner [_2] must indicate acceptance of the conditions of use of digital photos of registered students, before they may be made available for use in a course.',$institution,$ownername).'<br /><br />'.&mt('Please direct the course owner (e-mail: [_1]) to visit the "Student photos" page in the Automated Enrollment Manager to indicate acceptance of these conditions of use',$owneremail);          my $emailstr;
           if ($owneremail) {
               $emailstr = "(e-mail: $owneremail)";
           }
           $response = &mt('The policies of your institution [_1] require that the course owner [_2] must indicate acceptance of the conditions of use of digital photos of registered students, before they may be made available for use in a course.',$institution,$ownername).'<br /><br />'.&mt('Please direct the course owner [_1] to visit the "Student photos" page in the Automated Enrollment Manager to indicate acceptance of these conditions of use',$emailstr);
     }      }
     &print_reply($r,$response,$$tasktitleref{$action});      &print_reply($r,$response,$$tasktitleref{$action});
 }  }
Line 2426  function photowindow(photolink) { Line 2540  function photowindow(photolink) {
   
 sub get_ownerinfo {  sub get_ownerinfo {
     my ($dom,$owner) = @_;       my ($dom,$owner) = @_; 
     my ($ownername,$owneremail);      my ($ownername,$owneremail,$own_uname,$own_udom);
     if ($owner) {      if ($owner) {
         $ownername=&Apache::loncommon::plainname($owner,$dom,'firstname');          if ($owner =~ /^([^:]+):([^:]+)$/) {
               $own_uname = $1;
               $own_udom = $2; 
           } else {
               $own_uname = $owner;
               $own_udom = $dom; 
           }
           $ownername=&Apache::loncommon::plainname($own_uname,$own_udom,
                                                    'firstname');
         my %ownerinfo = &Apache::lonnet::get('environment',['permanentemail'],          my %ownerinfo = &Apache::lonnet::get('environment',['permanentemail'],
      $dom,$owner);       $own_udom,$own_uname);
         $owneremail = $ownerinfo{'permanentemail'};          $owneremail = $ownerinfo{'permanentemail'};
     }      }
     return ($ownername,$owneremail);      return ($ownername,$owneremail);

Removed from v.1.43  
changed lines
  Added in v.1.46


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