Diff for /loncom/interface/portfolio.pm between versions 1.170 and 1.187

version 1.170, 2006/11/05 21:08:53 version 1.187, 2008/01/21 11:36:07
Line 99  sub display_common { Line 99  sub display_common {
  my $help_createdir = &Apache::loncommon::help_open_topic('Portfolio CreateDirectory');   my $help_createdir = &Apache::loncommon::help_open_topic('Portfolio CreateDirectory');
   
  # FIXME: This line should be deleted once Portfolio uses breadcrumbs   # FIXME: This line should be deleted once Portfolio uses breadcrumbs
  $r->print(&Apache::loncommon::help_open_topic('Portfolio About', 'Help on the portfolio'));   $r->print(&Apache::loncommon::help_open_topic('Portfolio About', &mt('Help on the portfolio')));
   
   
         $r->print(<<"TABLE");           $r->print(<<"TABLE"); 
 <table id="LC_portfolio_actions">  <table id="LC_portfolio_actions">
   <tr id="LC_portfolio_upload">    <tr id="LC_portfolio_upload">
Line 148  TABLE Line 147  TABLE
     );      );
     $r->print('<span class="LC_current_location">'.&make_anchor($url,\%anchor_fields,$port_path).'/');      $r->print('<span class="LC_current_location">'.&make_anchor($url,\%anchor_fields,$port_path).'/');
     if (@tree > 1){      if (@tree > 1){
         my $newCurrentPath = '';          my $newCurrentPath = '/';
         for (my $i = 1; $i< @tree; $i++){          for (my $i = 1; $i< @tree; $i++){
             $newCurrentPath .= $tree[$i].'/';              $newCurrentPath .= $tree[$i].'/';
             my %anchor_fields = (              my %anchor_fields = (
                 'selectfile' => $tree[$i],                  'selectfile' => $tree[$i],
                 'currentpath' => '/',                  'currentpath' => $newCurrentPath,
                 'mode' => $env{"form.mode"},                  'mode' => $env{"form.mode"},
                 'fieldname' => $env{"form.fieldname"},                  'fieldname' => $env{"form.fieldname"},
                 'continue' => $env{"form.continue"}                  'continue' => $env{"form.continue"}
Line 268  sub display_directory { Line 267  sub display_directory {
     } else {      } else {
         $r->print('<form method="post" action="'.$url.'">');          $r->print('<form method="post" action="'.$url.'">');
  $r->print(&Apache::loncommon::help_open_topic('Portfolio FileList',   $r->print(&Apache::loncommon::help_open_topic('Portfolio FileList',
       'Using the portfolio file list'));        &mt('Using the portfolio file list')));
         $r->print('<table id="LC_browser">'.          $r->print('<table id="LC_browser">'.
   '<tr><th colspan="2">Actions</th><th>&nbsp;</th><th>&nbsp;</th><th>Name'.                    '<tr>'
   &Apache::loncommon::help_open_topic('Portfolio OpenFile').                   .'<th colspan="2">'.&mt('Actions'). &Apache::loncommon::help_open_topic('Portfolio FileAction').'</th>'
   '</th><th>Size</th><th>Last Modified</th><th>Current Access Status'.                   .'<th>&nbsp;</th><th>&nbsp;</th>'
   &Apache::loncommon::help_open_topic('Portfolio ShareFile').                   .'<th>'.&mt('Name').&Apache::loncommon::help_open_topic('Portfolio OpenFile').'</th>'
   '</th></tr>');                   .'<th>'.&mt('Size').'</th>'
                    .'<th>'.&mt('Last Modified').'</th>'
                    .'<th>'.&mt('Current Access Status').&Apache::loncommon::help_open_topic('Portfolio ShareFile').'</th>'
                    .'</tr>');
     }      }
     $r->print("\n".&group_form_data()."\n");      $r->print("\n".&group_form_data()."\n");
   
Line 288  sub display_directory { Line 290  sub display_directory {
   my ($bfile)=split('&',$b,2);    my ($bfile)=split('&',$b,2);
   return (lc($afile) cmp lc($bfile));    return (lc($afile) cmp lc($bfile));
       } (@$dir_list)) {        } (@$dir_list)) {
     #$strip holds directory/file name  
     #$dom   
     my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$dir_line,16);       my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$dir_line,16); 
     $filename =~ s/\s+$//;      $filename =~ s/\s+$//;
     my ($fname,$version,$extension) = &Apache::grades::file_name_version_ext($filename);      my ($fname,$version,$extension) = &Apache::grades::file_name_version_ext($filename);
Line 450  sub display_directory { Line 450  sub display_directory {
         $r->print('</table>');          $r->print('</table>');
         if ($can_delete) {          if ($can_delete) {
             $r->print('              $r->print('
         <input type="submit" name="doit" value="Delete Checked Files" />'.          <input type="submit" name="doit" value="'.&mt('Delete Checked Files').'" />'.
  &Apache::loncommon::help_open_topic('Portfolio DeleteFile').'   &Apache::loncommon::help_open_topic('Portfolio DeleteFile').'
         <input type="hidden" name="action" value="delete" />          <input type="hidden" name="action" value="delete" />
         <input type="hidden" name="currentpath" value="'.$current_path.'" />          <input type="hidden" name="currentpath" value="'.$current_path.'" />
Line 565  sub delete_confirmed { Line 565  sub delete_confirmed {
        $env{'form.currentpath'}.         $env{'form.currentpath'}.
        $delete_file);         $delete_file);
         if ($result ne 'ok') {          if ($result ne 'ok') {
     $r->print('<span class="LC_error">'.      $r->print('<span class="LC_error">'
                      &mt('An error occured ([_1]) while trying to delete                         .&mt('An error occurred ([_1]) while trying to delete [_2].'
                          [_2].',$result,&display_file(undef, $delete_file)).                           ,$result,&display_file(undef, $delete_file))
                       '</span><br /><br />');                        .'</span><br /><br />');
         } else {          } else {
             $r->print(&mt('File: [_1] deleted.',              $r->print(&mt('File: [_1] deleted.',
                           &display_file(undef,$delete_file)));                            &display_file(undef,$delete_file)));
Line 587  sub delete_confirmed { Line 587  sub delete_confirmed {
                     &Apache::lonnet::modify_access_controls($file_name,\%changes,                      &Apache::lonnet::modify_access_controls($file_name,\%changes,
                                                             $udom,$uname);                                                              $udom,$uname);
                     if ($outcome ne 'ok') {                      if ($outcome ne 'ok') {
                            $r->print('<br />'.&mt("An error occured ([_1]) while ".                             $r->print('<br />'.&mt("An error occurred ([_1]) while ".
                                "trying to delete access controls for the file.",$outcome).                                 "trying to delete access controls for the file.",$outcome).
                                '</span><br /><br />');                                 '</span><br /><br />');
                     } else {                      } else {
Line 595  sub delete_confirmed { Line 595  sub delete_confirmed {
                             $r->print('<br />'.&mt('Access controls also deleted for the file.').'<br /><br />');                              $r->print('<br />'.&mt('Access controls also deleted for the file.').'<br /><br />');
                         } else {                          } else {
                             $r->print('<span class="LC_error">'.'<br />'.                              $r->print('<span class="LC_error">'.'<br />'.
                                &mt("An error occured ([_1]) while ".                                 &mt("An error occurred ([_1]) while ".
                                    "trying to delete access controls for the file.",$deloutcome).                                     "trying to delete access controls for the file.",$deloutcome).
                                    '</span><br /><br />');                                     '</span><br /><br />');
                         }                          }
Line 625  sub delete_dir_confirmed { Line 625  sub delete_dir_confirmed {
        $directory_name);         $directory_name);
                 
     if ($result ne 'ok') {      if ($result ne 'ok') {
  $r->print('<span class="LC_error"> An error occured (dir) ('.$result.   $r->print('<span class="LC_error"> An error occurred (dir) ('.$result.
   ') while trying to delete '.$directory_name.'</span><br />');    ') while trying to delete '.$directory_name.'</span><br />');
     } else {      } else {
         # now remove from recent          # now remove from recent
 #        $r->print('<br /> removing '.$directory_name.'<br /');  
         &Apache::lonhtmlcommon::remove_recent($namespace,[$directory_name.'/']);          &Apache::lonhtmlcommon::remove_recent($namespace,[$directory_name.'/']);
         my @dirs = split m!/!, $directory_name;          my @dirs = split m!/!, $directory_name;
           
 #        $directory_name =~ m/^(\/*\/)(\/*.)$/;  
         $directory_name='/';          $directory_name='/';
         for (my $i=1; $i < (@dirs - 1); $i ++){          for (my $i=1; $i < (@dirs - 1); $i ++){
             $directory_name .= $dirs[$i].'/';              $directory_name .= $dirs[$i].'/';
Line 680  sub rename_confirmed { Line 677  sub rename_confirmed {
         $chg_access = &access_for_renamed($filenewname,$group,$udom,$uname);          $chg_access = &access_for_renamed($filenewname,$group,$udom,$uname);
     } else {            } else {      
  $r->print('<span class="LC_error">'.   $r->print('<span class="LC_error">'.
   &mt('An error occured ([_1]) while trying to rename [_2]'    &mt('An error occurred ([_1]) while trying to rename [_2]'
       .' to [_3]',$result,&display_file(),        .' to [_3]',$result,&display_file(),
       &display_file('',$filenewname)).'</span><br />');        &display_file('',$filenewname)).'</span><br />');
         return;          return;
Line 717  sub access_for_renamed { Line 714  sub access_for_renamed {
             &Apache::lonnet::modify_access_controls($oldfile,\%change_old,              &Apache::lonnet::modify_access_controls($oldfile,\%change_old,
     $udom,$uname);      $udom,$uname);
         if ($outcome ne 'ok') {          if ($outcome ne 'ok') {
             $chg_text ='<br /><br />'.&mt("An error occured ([_1]) while ".              $chg_text ='<br /><br />'.&mt("An error occurred ([_1]) while ".
                 "trying to delete access control records for the old name.",$outcome).                  "trying to delete access control records for the old name.",$outcome).
                 '</span><br />';                  '</span><br />';
         } else {          } else {
             if ($deloutcome ne 'ok') {              if ($deloutcome ne 'ok') {
                 $chg_text = '<br /><br /><span class="LC_error"><br />'.                  $chg_text = '<br /><br /><span class="LC_error"><br />'.
     &mt("An error occured ([_1]) while ".      &mt("An error occurred ([_1]) while ".
  "trying to delete access control records for the old name.",$deloutcome).   "trying to delete access control records for the old name.",$deloutcome).
  '</span><br />';   '</span><br />';
             }              }
Line 733  sub access_for_renamed { Line 730  sub access_for_renamed {
                                                     $udom,$uname);                                                      $udom,$uname);
         if ($outcome ne 'ok') {          if ($outcome ne 'ok') {
             $chg_text .= '<br /><br />'.              $chg_text .= '<br /><br />'.
  &mt("An error occured ([_1]) while ".   &mt("An error occurred ([_1]) while ".
                 "trying to update access control records for the new name.",$outcome).                  "trying to update access control records for the new name.",$outcome).
                 '</span><br />';                  '</span><br />';
         }          }
Line 760  sub display_access { Line 757  sub display_access {
         $info .= '<br /><ul><li>'.&mt('Public files are available to anyone without the need for login.');          $info .= '<br /><ul><li>'.&mt('Public files are available to anyone without the need for login.');
         $info .= '</li><li>'.&mt('Passphrase-protected files do not require log-in, but will require the viewer to enter the passphrase you set.');          $info .= '</li><li>'.&mt('Passphrase-protected files do not require log-in, but will require the viewer to enter the passphrase you set.');
         $info .= '</li><li>'.&explain_conditionals();          $info .= '</li><li>'.&explain_conditionals();
         $info .= '</li></ul>';          $info .= '</li></ul>'.
                     &mt('A listing of files viewable without log-in is available at: ')."<a href=\"/adm/$udom/$uname/aboutme/portfolio\">http://$ENV{'SERVER_NAME'}/adm/$udom/$uname/aboutme/portfolio</a>.<br />";
         if ($group eq '') {          if ($group eq '') {
             $info .= (&mt("A listing of files viewable without log-in is available at: <a href='/adm/$udom/$uname/aboutme/portfolio'>http://$ENV{'SERVER_NAME'}/adm/$udom/$uname/aboutme/portfolio</a>.<br />For logged in users a 'Display file listing' link will also appear (when there are viewable files) on your personal information page:<br /><a href='/adm/$udom/$uname/aboutme'>http://$ENV{'SERVER_NAME'}/adm/$udom/$uname/aboutme</a><br />"));              $info .= &mt("For logged in users a 'Display file listing' link will also appear (when there are viewable files) on your personal information page:");
           } else {
               $info .= &mt("For logged in users a 'Display file listing' link will also appear (when there are viewable files) on the course information page:");
           }
           $info .= "<br /><a href=\"/adm/$udom/$uname/aboutme\">http://$ENV{'SERVER_NAME'}/adm/$udom/$uname/aboutme</a><br />";
           if ($group ne '') {
               $info .= &mt("Users with privileges to edit course contents may add a course information page to a course using the 'Course Info' button in DOCS").'<br />';
         }          }
     } else {      } else {
         $header = '<h3>'.&mt('Conditional access controls for file: [_1]',$port_path.$env{'form.currentpath'}.$env{'form.access'}).'</h3>'.          $header = '<h3>'.&mt('Conditional access controls for file: [_1]',$port_path.$env{'form.currentpath'}.$env{'form.access'}).'</h3>'.
Line 771  sub display_access { Line 775  sub display_access {
     if ($can_setacl) {      if ($can_setacl) {
         &open_form($r,$url);          &open_form($r,$url);
         $r->print($header.$info);          $r->print($header.$info);
  $r->print('<br />'.&Apache::loncommon::help_open_topic('Portfolio ShareFile SetAccess', 'Help on setting up share access'));   $r->print('<br />'.&Apache::loncommon::help_open_topic('Portfolio ShareFile SetAccess', &mt('Help on setting up share access')));
  $r->print(&Apache::loncommon::help_open_topic('Portfolio ShareFile ChangeSetting', 'Help on changing settings'));   $r->print(&Apache::loncommon::help_open_topic('Portfolio ShareFile ChangeSetting', &mt('Help on changing settings')));
  $r->print(&Apache::loncommon::help_open_topic('Portfolio ShareFile StopAccess', 'Help on removing share access'));   $r->print(&Apache::loncommon::help_open_topic('Portfolio ShareFile StopAccess', &mt('Help on removing share access')));
         &access_setting_table($r,$url,$file_name,$access_controls{$file_name},          &access_setting_table($r,$url,$file_name,$access_controls{$file_name},
                               $action);                                $action);
         my $button_text = {          my $button_text = {
                         'continue' => &mt('Proceed'),                          'continue' => &mt('Proceed'),
                         'cancel' => &mt('Back to directory listing'),                          'cancel' => &mt('Back to Directory'),
                       };                        };
         &close_form($r,$url,$button_text);          &close_form($r,$url,$button_text);
     } else {      } else {
Line 872  sub build_access_summary { Line 876  sub build_access_summary {
                 if ($scope eq 'guest') {                  if ($scope eq 'guest') {
                     $r->print(&mt('Passphrase').': '.$content->{'password'});                      $r->print(&mt('Passphrase').': '.$content->{'password'});
                 } elsif ($scope eq 'course') {                  } elsif ($scope eq 'course') {
                     $r->print('<table><tr>');                      $r->print('<table width="100%"><tr>');
                     $r->print('<th>'.&mt('Roles').'</th><th>'.                      $r->print('<th>'.&mt('Roles').'</th><th>'.
                           &mt('Access').'</th><th>'.                            &mt('Access').'</th><th>'.
                                           &mt('Sections').'</th>');                                            &mt('Sections').'</th>');
Line 1006  sub update_access { Line 1010  sub update_access {
         } else {          } else {
             if ((@{$processing{'activate'}} > 0) || (@{$processing{'update'}} > 0)) {              if ((@{$processing{'activate'}} > 0) || (@{$processing{'update'}} > 0)) {
                 $errors .= '<span class="LC_error">'.                  $errors .= '<span class="LC_error">'.
     &mt('A problem occurred storing access control settings: [_1]',$outcome).      &mt('A problem occurred saving access control settings: [_1]',$outcome).
     '</span>';      '</span>';
             }              }
         }          }
Line 1195  sub access_setting_table { Line 1199  sub access_setting_table {
 sub standard_settings {  sub standard_settings {
     my ($r,$now,$then,$url,$filename,$acl_count,$start,$end,$public,$publicnum,      my ($r,$now,$then,$url,$filename,$acl_count,$start,$end,$public,$publicnum,
       $publictext,$guest,$guestnum,$guesttext,$access_controls,%conditionals)=@_;        $publictext,$guest,$guestnum,$guesttext,$access_controls,%conditionals)=@_;
     $r->print('<h3>'.&mt('Public access: [_1]',$publictext).'</h3>');      $r->print('<h3>'.&mt('Public access: [_1]',&mt($publictext)).'</h3>');
     $r->print(&Apache::loncommon::start_data_table());      $r->print(&Apache::loncommon::start_data_table());
     $r->print(&Apache::loncommon::start_data_table_header_row());      $r->print(&Apache::loncommon::start_data_table_header_row());
     $r->print('<th>'.&mt('Action').'</th><th>'.&mt('Dates available').'</th>');      $r->print('<th>'.&mt('Action').'</th><th>'.&mt('Dates available').'</th>');
Line 1211  sub standard_settings { Line 1215  sub standard_settings {
     $r->print(&Apache::loncommon::end_data_table_row());      $r->print(&Apache::loncommon::end_data_table_row());
     $r->print(&Apache::loncommon::end_data_table());      $r->print(&Apache::loncommon::end_data_table());
     $r->print('</td><td width="40">&nbsp;</td><td valign="top">');      $r->print('</td><td width="40">&nbsp;</td><td valign="top">');
     $r->print('<h3>'.&mt('Passphrase-protected access: [_1]',$guesttext).'</h3>');      $r->print('<h3>'.&mt('Passphrase-protected access: [_1]',&mt($guesttext)).'</h3>');
     $r->print(&Apache::loncommon::start_data_table());      $r->print(&Apache::loncommon::start_data_table());
     $r->print(&Apache::loncommon::start_data_table_header_row());      $r->print(&Apache::loncommon::start_data_table_header_row());
     $r->print('<th>'.&mt('Action').'</th><th>'.&mt('Dates available').      $r->print('<th>'.&mt('Action').'</th><th>'.&mt('Dates available').
Line 1257  sub standard_settings { Line 1261  sub standard_settings {
             'action' => 'chgconditions',              'action' => 'chgconditions',
             'currentpath' => $env{'form.currentpath'},              'currentpath' => $env{'form.currentpath'},
         );          );
     $r->print('<h3>'.&mt('Conditional access: [_1]',$conditionstext).'</h3>');      $r->print('<h3>'.&mt('Conditional access: [_1]',&mt($conditionstext)).'</h3>');
     if ($numconditionals > 0) {      if ($numconditionals > 0) {
         my $count = 1;          my $count = 1;
         my $chg = 'none';          my $chg = 'none';
Line 1334  sub display_access_row { Line 1338  sub display_access_row {
         $r->print(&Apache::loncommon::start_data_table_header_row());          $r->print(&Apache::loncommon::start_data_table_header_row());
         $r->print('<th>'.&mt('Action?').'</th><th>'.&mt($uctype).'</th><th>'.          $r->print('<th>'.&mt('Action?').'</th><th>'.&mt($uctype).'</th><th>'.
               &mt('Dates available').'</th>');                &mt('Dates available').'</th>');
         if ($type eq 'course') {          if ($type eq 'course' && $status eq 'old') {
             $r->print('<th>'.&mt('Allowed [_1] member affiliations',$type).              $r->print('<th>'.&mt('Allowed [_1] member affiliations',$type).
                       '</th>');                        '</th>');
             $colspan ++;              $colspan ++;
         } elsif ($type eq 'domains') {          } elsif ($type eq 'domains') {
             @all_doms = &Apache::loncommon::get_domains();              @all_doms = sort(&Apache::lonnet::all_domains());
         }          }
         $r->print(&Apache::loncommon::end_data_table_header_row());          $r->print(&Apache::loncommon::end_data_table_header_row());
         foreach my $key (@{$items}) {          foreach my $key (@{$items}) {
Line 1362  sub display_access_row { Line 1366  sub display_access_row {
         }          }
         $r->print(&Apache::loncommon::end_data_table());          $r->print(&Apache::loncommon::end_data_table());
     } else {      } else {
         $r->print(&mt('No [_1]-based conditions defined.<br />',$type).          $r->print(&mt('No [_1]-based conditions defined.',$type).'<br />'
                   &additional_item($type));                    .&additional_item($type));
     }      }
     return;      return;
 }  }
Line 1371  sub display_access_row { Line 1375  sub display_access_row {
 sub course_js {  sub course_js {
     return qq|      return qq|
 <script type="text/javascript">  <script type="text/javascript">
 function setRoleOptions(caller,num,cdom,cnum,type) {  function setRoleOptions(num,roleid,cdom,cnum,type) {
     addIndexnum = getCallerIndex(caller);      updateIndexNum = getIndexByValue('update',num);
     updateIndexnum = getIndex('update',num);      var addItem = 'add_role_'+num;
     if (caller.checked) {      var addIndexNum = getIndexByName(addItem);
         document.portform.elements[updateIndexnum].checked = true;      if (document.portform.elements[addItem].checked) {
         var url = '/adm/portfolio?action=rolepicker&setroles='+addIndexnum+'&cnum='+cnum+'&cdom='+cdom+'&type='+type;          document.portform.elements[updateIndexNum].checked = true;
           var url = '/adm/portfolio?action=rolepicker&setroles='+num+'_'+roleid+'&cnum='+cnum+'&cdom='+cdom+'&type='+type;
         var title = 'Roles_Chooser';          var title = 'Roles_Chooser';
         var options = 'scrollbars=1,resizable=1,menubar=0';          var options = 'scrollbars=1,resizable=1,menubar=0';
         options += ',width=700,height=600';          options += ',width=700,height=600';
         rolebrowser = open(url,title,options,'1');          rolebrowser = open(url,title,options,'1');
         rolebrowser.focus();          rolebrowser.focus();
     } else {      } else {
         for (var j=0;j<5;j++) {          addArray = new Array ('role','access','section','group');
             document.portform.elements[addIndexnum+j].value = '';          for (var j=0;j<addArray.length;j++) {
               var itemIndex = getIndexByName(addArray[j]+'_'+num+'_'+roleid);
               document.portform.elements[itemIndex].value = '';
         }          }
     }      }
 }  }
   
 function getCallerIndex(caller) {  function getIndexByName(item) {
     for (var i=0;i<document.portform.elements.length;i++) {      for (var i=0;i<document.portform.elements.length;i++) {
         if (document.portform.elements[i] == caller) {          if (document.portform.elements[i].name == item) {
             return i;              return i;
         }          }
     }      }
     return -1;      return -1;
 }  }
   
 function getIndex(name,value) {  function getIndexByValue(name,value) {
     for (var i=0;i<document.portform.elements.length;i++) {      for (var i=0;i<document.portform.elements.length;i++) {
         if (document.portform.elements[i].name == name && document.portform.elements[i].value == value) {          if (document.portform.elements[i].name == name && document.portform.elements[i].value == value) {
             return i;              return i;
Line 1431  sub course_row { Line 1438  sub course_row {
         my %course_description = &Apache::lonnet::coursedescription($cid);          my %course_description = &Apache::lonnet::coursedescription($cid);
         $r->print('<td><input type="hidden" name="crsdom_'.$num.'" value="'.$content->{'domain'}.'" /><input type="hidden" name="crsnum_'.$num.'" value="'.$content->{'number'}.'" />'.$course_description{'description'}.'</td>');          $r->print('<td><input type="hidden" name="crsdom_'.$num.'" value="'.$content->{'domain'}.'" /><input type="hidden" name="crsnum_'.$num.'" value="'.$content->{'number'}.'" />'.$course_description{'description'}.'</td>');
     } elsif ($status eq 'new') {      } elsif ($status eq 'new') {
         $r->print('<td>'.&Apache::loncommon::selectcourse_link('portform','crsnum_'.$num,'crsdom_'.$num,'description_'.$num,undef,undef,$uctype).'&nbsp;&nbsp;<input type="text" name="description_'.$num.'" size="30" /><input type="hidden" name="crsdom_'.$num.'" /><input type="hidden" name="crsnum_'.$num.'" /></td>');          $r->print('<td>'.&Apache::loncommon::selectcourse_link('portform','crsnum_'.$num,'crsdom_'.$num,'description_'.$num,$num.'_1',undef,$uctype).'&nbsp;&nbsp;<input type="text" name="description_'.$num.'" size="30" /><input type="hidden" name="crsdom_'.$num.'" /><input type="hidden" name="crsnum_'.$num.'" /></td>');
     }      }
     $r->print('<td>'.&dateboxes($num,$start,$end).'</td>');      $r->print('<td>'.&dateboxes($num,$start,$end));
     $r->print('<td><table><tr>');      my $newrole_id = 1;
     $r->print('<th>'.&mt('Action').'</th><th>'.&mt('Roles').'</th><th>'.  
               &mt('Access').'</th><th>'.&mt('Sections').'</th><th>'.  
               &mt('Groups').'</th></tr>');  
     if ($status eq 'old') {      if ($status eq 'old') {
           $r->print('</td><td>');
         my $max_id = 0;          my $max_id = 0;
         foreach my $role_id (sort(keys(%{$content->{'roles'}}))) {          if (keys(%{$content->{'roles'}}) > 0) {
             if ($role_id > $max_id) {              $r->print('<table><tr><th>'.&mt('Action').'</th>'.
                 $max_id = $role_id;                        '<th>'.&mt('Roles').'</th>'.
             }                        '<th>'.&mt('Access').'</th>'.
             $max_id ++;                        '<th>'.&mt('Sections').'</th>'.
             my $role_selects = &role_selectors($num,$role_id,$status,$type,$content,'display');                        '<th>'.&mt('Groups').'</th></tr>');
             $r->print('<tr><td><span style="white-space: nowrap"><label><input type="checkbox" name="delete_role_'.$num.'" value="'.$role_id.'" />'.&mt('Delete').'</label></span><br /><input type="hidden" name="preserve_role_'.$num.'" value="'.$role_id.'" /></td>'.$role_selects.'</tr>');              foreach my $role_id (sort(keys(%{$content->{'roles'}}))) {
         }                  if ($role_id > $max_id) {
         $r->print('</table><br />'.&mt('Add a roles-based condition').'&nbsp;<input type="checkbox" name ="add_role_'.$num.'" onClick="javascript:setRoleOptions(this,'."'$num','$content->{'domain'}','$content->{'number'}','$uctype'".')" value="'.$max_id.'" /><input type="hidden" name="role_'.$num.'_'.$max_id.'" /><input type="hidden" name="access_'.$num.'_'.$max_id.'" /><input type="hidden" name="section_'.$num.'_'.$max_id.'" /><input type="hidden" name="group_'.$num.'_'.$max_id.'" /></td>');                      $max_id = $role_id;
     } elsif ($status eq 'new') {                  }
         my $role_id = 1;                  $max_id ++;
         my $role_selects = &role_selectors($num,$role_id,$status,$type,undef,'display');                  my $role_selects = &role_selectors($num,$role_id,$type,$content,'display');
         $r->print('<tr><td><input type="checkbox" name="add_role_'.$num.'" value="'.$role_id.'" checked="checked" />'.&mt('Add').'<input type="hidden" name="grplist_'.$num.'_'.$role_id.'" /></td>'.$role_selects);                  $r->print('<tr><td><span style="white-space: nowrap"><label><input type="checkbox" name="delete_role_'.$num.'" value="'.$role_id.'" />'.&mt('Delete').'</label></span><br /><input type="hidden" name="preserve_role_'.$num.'" value="'.$role_id.'" /></td>'.$role_selects.'</tr>');
         $r->print('</tr></table></td>');              }
               $r->print('</table>');
           }
           $r->print('<br />'.&mt('Add a roles-based condition').
                     '&nbsp;<input type="checkbox" name ="add_role_'.
                     $num.'" onClick="javascript:setRoleOptions('."'$num',
                     '$max_id','$content->{'domain'}','$content->{'number'}',
                     '$uctype'".')" value="" />');
           $newrole_id = $max_id;
       } else {
           $r->print('<input type="hidden" name ="add_role_'.$num.'" value="" />');
     }      }
       $r->print(&add_course_role($num,$newrole_id));
       $r->print('</td>');
     return;      return;
 }  }
   
   sub add_course_role {
       my ($num,$max_id) = @_;
       my $output;
       $output .='<input type="hidden" name="role_'.$num.'_'.$max_id.'" />'.
                 '<input type="hidden" name="access_'.$num.'_'.$max_id.'" />'.
                 '<input type="hidden" name="section_'.$num.'_'.$max_id.'" />'.
                 '<input type="hidden" name="group_'.$num.'_'.$max_id.'" />';
       return $output;
   }
   
 sub domains_row {  sub domains_row {
     my ($r,$status,$item,$all_doms,$access_controls,$now,$then) = @_;      my ($r,$status,$item,$all_doms,$access_controls,$now,$then) = @_;
     my ($num,$scope,$end,$start) = &set_identifiers($status,$item,$now,$then,      my ($num,$scope,$end,$start) = &set_identifiers($status,$item,$now,$then,
Line 1560  sub set_identifiers { Line 1587  sub set_identifiers {
 }   } 
   
 sub role_selectors {  sub role_selectors {
     my ($num,$role_id,$status,$type,$content,$caller) = @_;      my ($num,$role_id,$type,$content,$caller) = @_;
     my ($output,$cdom,$cnum,$longid);      my ($output,$cdom,$cnum,$longid);
     if ($caller eq 'display') {      if ($caller eq 'display') {
         $longid = '_'.$num.'_'.$role_id;          $longid = '_'.$num.'_'.$role_id;
         if ($status eq 'new') {          $cdom = $$content{'domain'};
             foreach my $item ('role','access','section','group') {          $cnum = $$content{'number'};
                 $output .= '<td><select name="'.$item.$longid.'">'.  
                            '<option value="">'.&mt('Pick [_1] first',$type).  
                            '</option></select></td>';  
             }  
             return $output;  
         } else {  
             $cdom = $$content{'domain'};  
             $cnum = $$content{'number'};  
         }  
     } elsif ($caller eq 'rolepicker') {      } elsif ($caller eq 'rolepicker') {
          $cdom = $env{'form.cdom'};           $cdom = $env{'form.cdom'};
          $cnum = $env{'form.cnum'};           $cnum = $env{'form.cnum'};
Line 1612  sub role_selectors { Line 1630  sub role_selectors {
                     'role' => $allroles,                      'role' => $allroles,
                     'access' => \@allaccesses,                      'access' => \@allaccesses,
                     'section' => $sections,                      'section' => $sections,
                     'group' => $groups,                       'group' => $groups,
                    );                     );
     foreach my $item ('role','access','section','group') {      foreach my $item ('role','access','section','group') {
         $output .= '<td><select name="'.$item.$longid.'" multiple="true" size="4">'."\n";          $output .= '<td><select name="'.$item.$longid.'" multiple="true" size="4">'."\n";
Line 1636  sub role_selectors { Line 1654  sub role_selectors {
   
 sub role_options_window {  sub role_options_window {
     my ($r) = @_;      my ($r) = @_;
     my $cdom = $env{'form.cdom'};  
     my $cnum = $env{'form.cnum'};  
     my $type = $env{'form.type'};      my $type = $env{'form.type'};
     my $addindex = $env{'form.setroles'};      my $rolenum = $env{'form.setroles'};
     my $role_selects = &role_selectors(1,1,'new',$type,undef,'rolepicker');      my ($num,$role_id) = ($rolenum =~ /^([\d_]+)_(\d+)$/);
       my $role_elements;
       foreach my $item ('role','access','section','group') {
           $role_elements .= "'".$item.'_'.$rolenum."',";
       }
       $role_elements =~ s/,$//; 
       my $role_selects = &role_selectors($num,$role_id,$type,undef,
                                          'rolepicker');
     $r->print(<<"END_SCRIPT");      $r->print(<<"END_SCRIPT");
 <script type="text/javascript">  <script type="text/javascript">
 function setRoles() {  function setRoles() {
     var addidx = $addindex+1;      var role_elements = new Array($role_elements);
     for (var i=0; i<4; i++) {      for (var i=0; i<role_elements.length; i++) {
         var copylist = '';          var copylist = '';
         for (var j=0; j<document.rolepicker.elements[i].length; j++) {          for (var j=0; j<document.rolepicker.elements[i].length; j++) {
             if (document.rolepicker.elements[i].options[j].selected) {              if (document.rolepicker.elements[i].options[j].selected) {
Line 1653  function setRoles() { Line 1676  function setRoles() {
             }              }
         }          }
         copylist = copylist.substr(0,copylist.length-1);          copylist = copylist.substr(0,copylist.length-1);
         opener.document.portform.elements[addidx+i].value = copylist;          var openerItem = getIndexByName(role_elements[i]);
           opener.document.portform.elements[openerItem].value = copylist; 
     }      }
       var roleAdder = getIndexByName('add_role_$num');
       opener.document.portform.elements[roleAdder].value = '$role_id';
     self.close();      self.close();
 }  }
   
   function getIndexByName(item) {
       for (var i=0;i<opener.document.portform.elements.length;i++) {
           if (opener.document.portform.elements[i].name == item) {
               return i;
           }
       }
       return -1;
   }
   
 </script>  </script>
 END_SCRIPT  END_SCRIPT
     $r->print(&mt('Select roles, course status, section(s) and group(s) for users who will be able to access the portfolio file.'));      $r->print(&mt('Select roles, course status, section(s) and group(s) for users who will be able to access the portfolio file.'));
Line 1693  ENDSMP Line 1729  ENDSMP
                     fileList = fileList + document.forms.checkselect.currentpath.value + document.forms.checkselect[i].value + "," ;                      fileList = fileList + document.forms.checkselect.currentpath.value + document.forms.checkselect[i].value + "," ;
                 }                  }
             }              }
             opener.document.forms.lonhomework.$env{'form.fieldname'}.value=fileList;              var hwfield = opener.document.getElementsByName('$env{'form.fieldname'}');
               hwfield[0].value = fileList;
             self.close();              self.close();
         }          }
         </script>          </script>
 ENDSMP  ENDSMP
     $r->print($javascript);      $r->print($javascript);
     $r->print("<h1>Select portfolio files</h1>      $r->print("<h1>".&mt('Select portfolio files')."</h1>".
                 Check as many as you wish in response to the problem.<br />");                  &mt('Check as many as you wish in response to the problem.')."<br />");
     my @otherfiles=&Apache::lonnet::files_not_in_path($env{'user.name'}, $env{'form.currentpath'});      my @otherfiles=&Apache::lonnet::files_not_in_path($env{'user.name'}, $env{'form.currentpath'});
     if (@otherfiles) {      if (@otherfiles) {
  $r->print("<strong>Files selected from other directories:</strong><br />");   $r->print("<strong>".&mt('Files selected from other directories:')."</strong><br />");
  foreach my $file (@otherfiles) {   foreach my $file (@otherfiles) {
     $r->print($file."<br />");      $r->print($file."<br />");
  }   }
     }      }
 }  }
   
 sub upload {  
     my ($r,$url,$group)=@_;  
     my $fname=$env{'form.uploaddoc.filename'};  
     my $filesize = (length($env{'form.uploaddoc'})) / 1000; #express in k (1024?)  
     my $disk_quota = 20000; # expressed in k  
     if (defined($group)) {  
         my $grp_quota = &get_group_quota($group); # quota expressed in k   
         if ($grp_quota ne '') {  
             $disk_quota = $grp_quota;  
         } else {  
             $disk_quota = 0;  
         }  
     }  
     $fname=&Apache::lonnet::clean_filename($fname);  
   
     my $portfolio_root=&get_portfolio_root();  sub check_for_upload {
     my ($uname,$udom) = &get_name_dom();      my ($path,$fname,$group,$element) = @_;
       my $disk_quota = &get_quota($group);
       my $filesize = (length($env{'form.'.$element})) / 1000; #express in k (1024?)
   
       my $portfolio_root = &get_portfolio_root();
     my $port_path = &get_port_path();      my $port_path = &get_port_path();
       my ($uname,$udom) = &get_name_dom();
     # Fixme --- Move the checking for existing file to LOND error return      # Fixme --- Move the checking for existing file to LOND error return
     my @dir_list=&get_dir_list($portfolio_root);      my @dir_list=&get_dir_list($portfolio_root,$path);
     my $found_file = 0;      my $found_file = 0;
     my $locked_file = 0;      my $locked_file = 0;
     foreach my $line (@dir_list) {      foreach my $line (@dir_list) {
         my ($file_name)=split(/\&/,$line,2);          my ($file_name)=split(/\&/,$line,2);
         if ($file_name eq $fname){          if ($file_name eq $fname){
             $file_name = $env{'form.currentpath'}.$file_name;              $file_name = $path.$file_name;
             $file_name = &prepend_group($file_name);              $file_name = &prepend_group($file_name);
             $found_file = 1;              $found_file = 1;
             if (&Apache::lonnet::is_locked($file_name,$udom,$uname) eq 'true') {              if (&Apache::lonnet::is_locked($file_name,$udom,$uname) eq 'true') {
Line 1744  sub upload { Line 1772  sub upload {
         }          }
     }      }
     my $current_disk_usage = &Apache::lonnet::diskusage($udom,$uname,$portfolio_root);      my $current_disk_usage = &Apache::lonnet::diskusage($udom,$uname,$portfolio_root);
   
     if (($current_disk_usage + $filesize) > $disk_quota){      if (($current_disk_usage + $filesize) > $disk_quota){
         $r->print('<span class="LC_error">Unable to upload <strong>'.$fname.' (size = '.$filesize.' kilobytes)</strong>. Disk quota will be exceeded.</span>'.          my $msg = '<span class="LC_error">'.
                   '<br />Disk quota is '.$disk_quota.' kilobytes. Your current disk usage is '.$current_disk_usage.' kilobytes.');                  &mt('Unable to upload [_1]. (size = [_2] kilobytes). Disk quota will be exceeded.','<span class="LC_filename">'.$fname.'</span>',$filesize).'</span>'.
         $r->print(&done('Back',$url));                    '<br />'.&mt('Disk quota is [_1] kilobytes. Your current disk usage is [_2] kilobytes.',$disk_quota,$current_disk_usage);
     }    return ('will_exceed_quota',$msg);
     elsif ($found_file){      } elsif ($found_file) {
         if ($locked_file){          if ($locked_file) {
             $r->print('<span class="LC_error">'.'Unable to upload <strong>'.$fname.'</strong>, a <strong>locked</strong> file by that name was found in <strong>'.$port_path.$env{'form.currentpath'}.'</strong></span>'.              my $msg = '<span class="LC_error">';
                   '<br />You will be able to rename or delete existing '.$fname.' after a grade has been assigned.');              $msg .= &mt('Unable to upload [_1] a locked file by that name was found in [_2].','<span class="LC_filename">'.$fname.'</span>','<span class="LC_filename">'.$port_path.$env{'form.currentpath'}.'</span>');
             $r->print(&done('Back',$url));                    $msg .= '</span><br />';
         } else {                 $msg .= &mt('You will be able to rename or delete existing [_1] after a grade has been assigned.','<span class="LC_filename">'.$fname.'</span>');
             $r->print('<span class="LC_error">'.'Unable to upload <strong>'.$fname.'</strong>, a file by that name was found in <strong>'.$port_path.$env{'form.currentpath'}.'</strong></span>'.      return ('file_locked',$msg);
                   '<br />To upload, rename or delete existing '.$fname.' in '.$port_path.$env{'form.currentpath'});   } else {
             $r->print(&done('Back',$url));              my $msg = '<span class="LC_error">';
         }              $msg .= &mt('Unable to upload [_1]. A file by that name was found in [_2].','<span class="LC_filename">'.$fname.'</span>',$port_path.$env{'form.currentpath'});
     } else {              $msg .= '</span>';
         my $result=&Apache::lonnet::userfileupload('uploaddoc','',              $msg .= '<br />';
          $port_path.$env{'form.currentpath'});              $msg .= &mt('To upload, rename or delete existing [_1] in [_2].','<span class="LC_filename">'.$fname.'</span>', $port_path.$env{'form.currentpath'});
         if ($result !~ m|^/uploaded/|) {      return ('file_exists',$msg);
             $r->print('<span class="LC_error">'.'An errror occured ('.$result.   }
               ') while trying to upload '.&display_file().'</span><br />');      }
     $r->print(&done('Back',$url));  }
         } else {  
             $r->print(&done(undef,$url));  sub upload {
         }      my ($r,$url,$group)=@_;
       my $fname=&Apache::lonnet::clean_filename($env{'form.uploaddoc.filename'});
   
       my ($state,$msg) = &check_for_upload($env{'form.currentpath'},
    $fname,$group,'uploaddoc');
   
       if ($state eq 'will_exceed_quota'
    || $state eq 'file_locked'
    || $state eq 'file_exists' ) {
    $r->print($msg.&done('Back',$url));
    return;
       }
   
       my $port_path = &get_port_path();
       my (%allfiles,%codebase,$mode);
       if ($env{'form.uploaddoc.filename'} =~ m/(\.htm|\.html|\.shtml)$/i) {
    $mode = 'parse';
   
       }
       my $result=
    &Apache::lonnet::userfileupload('uploaddoc','',
    $port_path.$env{'form.currentpath'},
    $mode,\%allfiles,\%codebase);
       if ($result !~ m|^/uploaded/|) {
    $r->print('<span class="LC_error">'.'An error occurred ('.$result.
     ') while trying to upload '.&display_file().'</span><br />');
    $r->print(&done('Back',$url));
       } else {
    if (%allfiles) {
       my $state = <<STATE;
       <input type="hidden" name="action"      value="upload_embedded" />
       <input type="hidden" name="currentpath" value="$env{'form.currentpath'}" />
       <input type="hidden" name="fieldname"   value="$env{'form.fieldname'}" />
       <input type="hidden" name="mode"        value="$env{'form.mode'}" />
   STATE
               $r->print("<h2>".&mt("Reference Warning")."</h2>");
               $r->print("<p>".&mt("Completed upload of the file. This file contained references to other files. You must upload the referenced files or else the uploaded file may not work properly.")."</p>");
               $r->print("<p>".&mt("Please select the locations from which the referenced files are to be uploaded.")."</p>");
       $r->print(&Apache::londocs::ask_for_embedded_content('/adm/portfolio',$state,\%allfiles,\%codebase,
         {'error_on_invalid_names'   => 1,
          'ignore_remote_references' => 1,}));
       $r->print('<p>Or '.&done('Return to directory listing',$url).'</p>');
    } else {
       $r->print(&done(undef,$url));
    }
       }
   }
   
   sub upload_embedded {
       my ($r,$url,$group)=@_;
       for (my $i=0; $i<$env{'form.number_embedded_items'}; $i++) {
    next if (!exists($env{'form.embedded_item_'.$i.'.filename'}));
    my $orig_uploaded_filename = 
       $env{'form.embedded_item_'.$i.'.filename'};
   
    $env{'form.embedded_orig_'.$i} = 
       &unescape($env{'form.embedded_orig_'.$i});
    my ($path,$fname) = 
       ($env{'form.embedded_orig_'.$i} =~ m{(.*/)([^/]*)});
    # no path, whole string is fname
    if (!$fname) { $fname = $env{'form.embedded_orig_'.$i} };
   
    $path = $env{'form.currentpath'}.$path;
    $fname = &Apache::lonnet::clean_filename($fname);
   
    my ($state,$msg) = &check_for_upload($path,$fname,$group,
        'embedded_item_'.$i);
   
    if ($state eq 'will_exceed_quota'
       || $state eq 'file_locked'
       || $state eq 'file_exists' ) {
       $r->print($msg);
       next;
    }
   
    my $port_path = &get_port_path();
    my $src_path = $env{'form.embedded_orig_'.$i};
    $env{'form.embedded_item_'.$i.'.filename'}=$fname;
   
    my $result=
       &Apache::lonnet::userfileupload('embedded_item_'.$i,'',
       $port_path.$path);
    if ($result !~ m|^/uploaded/|) {
       $r->print('<span class="LC_error">'.'An error occurred ('.$result.
         ') while trying to upload '.$orig_uploaded_filename.' for embedded element '.$env{'form.embedded_orig_'.$i}.'</span><br />');
       next;
    } else {
       $r->print("<p> Uploaded ".
         &display_file($port_path.$path,$fname).'</p>');
    }
     }      }
       $r->print(&done(undef,$url));
 }  }
   
 sub lock_info {  sub lock_info {
Line 1812  sub lock_info { Line 1931  sub lock_info {
     }      }
         }          }
     }      }
     $r->print(&done('Back',$url));      $r->print(&done(&mt('Back'),$url));
     return 'ok';      return 'ok';
 }  }
   
Line 1836  sub createdir { Line 1955  sub createdir {
         }          }
     }      }
     if ($found_file){      if ($found_file){
        $r->print('<span class="LC_error">'.'Unable to create a directory named <strong>'.$newdir.         $r->print('<span class="LC_error">'.&mt('Unable to create a directory named').' <strong>'.$newdir.
                ' </strong>a file or directory by that name already exists.</span><br />');                 '</strong>. '.&mt('A file or directory by that name already exists.').'</span><br />');
     } else {      } else {
         my ($uname,$udom) = &get_name_dom();          my ($uname,$udom) = &get_name_dom();
         my $port_path = &get_port_path();          my $port_path = &get_port_path();
         my $result=&Apache::lonnet::mkdiruserfile($uname,$udom,          my $result=&Apache::lonnet::mkdiruserfile($uname,$udom,
          $port_path.$env{'form.currentpath'}.$newdir);           $port_path.$env{'form.currentpath'}.$newdir);
         if ($result ne 'ok') {          if ($result ne 'ok') {
        $r->print('<span class="LC_error">'.'An errror occured ('.$result.         $r->print('<span class="LC_error">'.'An error occurred ('.$result.
           ') while trying to create a new directory '.&display_file().'</span><br />');            ') while trying to create a new directory '.&display_file().'</span><br />');
         }          }
     }      }
     if ($newdir ne $env{'form.newdir'}) {      if ($newdir ne $env{'form.newdir'}) {
         $r->print("The new directory name was changed from:<br /><strong>".$env{'form.newdir'}."</strong> to <strong>$newdir </strong>");            $r->print(&mt("The new directory name was changed from:")."<br /><strong>".$env{'form.newdir'}."</strong> ".&mt('to')." <strong>$newdir </strong>");  
     }      }
     $r->print(&done(undef,$url));      $r->print(&done(undef,$url));
 }  }
Line 1889  sub get_group_quota { Line 2008  sub get_group_quota {
 }   } 
   
 sub get_dir_list {  sub get_dir_list {
     my ($portfolio_root) = @_;      my ($portfolio_root,$path) = @_;
       $path ||= $env{'form.currentpath'};
     my ($uname,$udom) = &get_name_dom();      my ($uname,$udom) = &get_name_dom();
     return &Apache::lonnet::dirlist($env{'form.currentpath'},      return &Apache::lonnet::dirlist($path,$udom,$uname,$portfolio_root);
                                           $udom,$uname,$portfolio_root);  
 }  }
   
 sub get_name_dom {  sub get_name_dom {
Line 1988  sub coursegrp_portfolio_header { Line 2107  sub coursegrp_portfolio_header {
     return $output;      return $output;
 }  }
   
   sub get_quota {
       my ($group) = @_;
       my $disk_quota;
       if (defined($group)) {
           my $grp_quota = &get_group_quota($group); # quota expressed in k
           if ($grp_quota ne '') {
               $disk_quota = $grp_quota;
           } else {
               $disk_quota = 0;
           }
       } else {
           $disk_quota = &Apache::loncommon::get_user_quota($env{'user.name'},
                                       $env{'user.domain'}); #expressed in Mb
           $disk_quota = 1000 * $disk_quota; # convert from Mb to kb
       }
       return $disk_quota;
   }
   
 sub handler {  sub handler {
     # this handles file management      # this handles file management
Line 2027  sub handler { Line 2163  sub handler {
                                       $env{'request.course.id'}.'/'.$group))) {                                        $env{'request.course.id'}.'/'.$group))) {
                     $portfolio_root = &get_portfolio_root();                      $portfolio_root = &get_portfolio_root();
                 } else {                  } else {
                     $r->print('You do not have the privileges required to access the shared files space for this group.');                      $r->print(&mt('You do not have the privileges required to access the shared files space for this group.'));
                     $earlyout = 1;                      $earlyout = 1;
                 }                  }
             } else {              } else {
                 $r->print('Not a valid group for this course');                  $r->print(&mt('Not a valid group for this course'));
                 $earlyout = 1;                  $earlyout = 1;
             }              }
             $title = &mt('Group files').' for '.$group;               $title = &mt('Group files').' for '.$group; 
         } else {          } else {
             $r->print('Invalid group');              $r->print(&mt('Invalid group'));
             $earlyout = 1;              $earlyout = 1;
         }          }
         if ($earlyout) { return OK; }          if ($earlyout) { return OK; }
Line 2084  sub handler { Line 2220  sub handler {
         $r->print(&Apache::loncommon::start_page($title));          $r->print(&Apache::loncommon::start_page($title));
     }      }
     $r->rflush();      $r->rflush();
       my ($blocked,$blocktext) = 
           &Apache::loncommon::blocking_status('port',$uname,$udom);
       if ($blocked) {
            $r->print($blocktext);
            $r->print(&Apache::loncommon::end_page());
            return OK;
       }
  if (($env{'form.storeupl'}) & (!$env{'form.uploaddoc.filename'})){   if (($env{'form.storeupl'}) & (!$env{'form.uploaddoc.filename'})){
        $r->print('<span class="LC_error">'.         $r->print('<span class="LC_error">');
       'No file was selected to upload.'.         $r->print(&mt('No file was selected to upload. '));
       'To upload a file, click <strong>Browse...</strong>'.      $r->print(&mt('To upload a file, click <strong>Browse...</strong> select a file, then click <strong>Upload</strong>.'));
       ', select a file, then click <strong>Upload</strong>.'.      $r->print('</span>');
       '</span>');  
  }   }
     if ($env{'form.meta'}) {      if ($env{'form.meta'}) {
         &open_form($r,$url);          &open_form($r,$url);
 #        $r->print(&edit_meta_data($r, $env{'form.currentpath'}.$env{'form.selectfile'}));          $r->print(&mt('Edit the meta data').'<br />');
         $r->print('Edit the meta data<br />');  
         &close_form($r,$url);          &close_form($r,$url);
     }      }
     if ($env{'form.store'}) {      if ($env{'form.store'}) {
Line 2106  sub handler { Line 2247  sub handler {
         } else {          } else {
             &missing_priv($r,$url,'upload');              &missing_priv($r,$url,'upload');
         }          }
       } elsif ($env{'form.action'} eq 'upload_embedded') {
    if ($can_upload) {
       &upload_embedded($r,$url,$group);
           } else {
               &missing_priv($r,$url,'upload');
           }
     } elsif ($env{'form.action'} eq 'delete' && $env{'form.confirmed'}) {      } elsif ($env{'form.action'} eq 'delete' && $env{'form.confirmed'}) {
         if ($can_delete) {          if ($can_delete) {
     &delete_confirmed($r,$url,$group);      &delete_confirmed($r,$url,$group);

Removed from v.1.170  
changed lines
  Added in v.1.187


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