Diff for /loncom/interface/londocs.pm between versions 1.550 and 1.565

version 1.550, 2013/05/21 19:30:11 version 1.565, 2013/09/23 17:35:07
Line 56  my $hashtied; Line 56  my $hashtied;
 my %alreadyseen=();  my %alreadyseen=();
   
 my $hadchanges;  my $hadchanges;
   my $suppchanges;
   
   
 my %help=();  my %help=();
Line 79  sub storemap { Line 80  sub storemap {
       $map,1,$report);        $map,1,$report);
     if ($errtext) { return ($errtext,2); }      if ($errtext) { return ($errtext,2); }
   
     $hadchanges=1;      if ($map =~ /^default/) {
           $hadchanges=1;
       } else {
           $suppchanges=1;
       }
     return ($errtext,0);      return ($errtext,0);
 }  }
   
Line 402  END Line 407  END
     }      }
     my ($errtext,$fatal) =      my ($errtext,$fatal) =
         &storemap($coursenum, $coursedom, $folder.'.'.$container,1);          &storemap($coursenum, $coursedom, $folder.'.'.$container,1);
       unless ($fatal) {
           if ($folder =~ /^supplemental/) {
               &Apache::lonnet::get_numsuppfiles($coursenum,$coursedom,1);
               my ($errtext,$fatal) = &mapread($coursenum,$coursedom,
                                               $folder.'.'.$container);
           }
       }
     return ($errtext,$fatal,$fixuperrors);      return ($errtext,$fatal,$fixuperrors);
 }  }
   
Line 700  sub update_paste_buffer { Line 712  sub update_paste_buffer {
              my $url = $env{'docs.markedcopy_url_'.$suffix};               my $url = $env{'docs.markedcopy_url_'.$suffix};
              if (($cid =~ /^$match_domain(?:_)$match_courseid$/) &&               if (($cid =~ /^$match_domain(?:_)$match_courseid$/) &&
                  ($url ne '')) {                   ($url ne '')) {
                  $pasteurls{$cid.'_'.$url};                   $pasteurls{$cid.'_'.$url} = 1;
              }               }
         }          }
     }      }
Line 1097  sub do_paste_from_buffer { Line 1109  sub do_paste_from_buffer {
     }      }
   
     my (%msgs,%before,%after,@dopaste,%is_map,%notinsupp,%notincrs,%duplicate,      my (%msgs,%before,%after,@dopaste,%is_map,%notinsupp,%notincrs,%duplicate,
         %prefixchg,%srcdom,%srcnum,%marktomove,$save_err,$lockerrors,$allresult,          %prefixchg,%srcdom,%srcnum,%marktomove,$save_err,$lockerrors,$allresult);
         %msgs);  
   
     foreach my $suffix (@topaste) {      foreach my $suffix (@topaste) {
         my $url=&LONCAPA::map::qtescape($env{'docs.markedcopy_url_'.$suffix});          my $url=&LONCAPA::map::qtescape($env{'docs.markedcopy_url_'.$suffix});
Line 1299  sub do_paste_from_buffer { Line 1310  sub do_paste_from_buffer {
                     if ($prefix eq 'smppg') {                      if ($prefix eq 'smppg') {
                         $msg = &mt('Paste failed: An error occurred when copying the simple page.').' '.$errtext;                          $msg = &mt('Paste failed: An error occurred when copying the simple page.').' '.$errtext;
                     } elsif ($prefix eq 'bulletinboard') {                      } elsif ($prefix eq 'bulletinboard') {
                         $msg = &mt('Paste failed: An error occurred when copying the bulletin board.').' '.$errtext;                          $msg = &mt('Paste failed: An error occurred when copying the discussion board.').' '.$errtext;
                     }                      }
                     $results{$suffix} = $result;                      $results{$suffix} = $result;
                     $msgerrs{$suffix} = $msg;                      $msgerrs{$suffix} = $msg;
Line 1549  sub get_newmap_url { Line 1560  sub get_newmap_url {
 sub dbcopy {  sub dbcopy {
     my ($dbref,$coursedom,$coursenum,$lockerrorsref) = @_;      my ($dbref,$coursedom,$coursenum,$lockerrorsref) = @_;
     my ($url,$result,$errtext);      my ($url,$result,$errtext);
     my $url = $dbref->{'src'};      $url = $dbref->{'src'};
     if (ref($dbref) eq 'HASH') {      if (ref($dbref) eq 'HASH') {
         if ($url =~ m{/(smppg|bulletinboard)$}) {          if ($url =~ m{/(smppg|bulletinboard)$}) {
             my $prefix = $1;              my $prefix = $1;
Line 1574  sub dbcopy { Line 1585  sub dbcopy {
                     if ($prefix eq 'smppg') {                      if ($prefix eq 'smppg') {
                         $errtext = &mt('Failed to acquire a unique timestamp-based suffix when copying a simple page [_1].',$url);                          $errtext = &mt('Failed to acquire a unique timestamp-based suffix when copying a simple page [_1].',$url);
                     } else {                      } else {
                         $errtext = &mt('Failed to acquire a unique timestamp-based suffix when copying a bulletin board [_1].',$url);                          $errtext = &mt('Failed to acquire a unique timestamp-based suffix when copying a discussion board [_1].',$url);
                     }                      }
                     if ($error) {                      if ($error) {
                         $errtext .= '<br />'.$error;                          $errtext .= '<br />'.$error;
Line 1610  sub dbcopy { Line 1621  sub dbcopy {
                     }                      }
                 }                  }
                 if (($freedlock ne 'ok') && (ref($lockerrorsref) eq 'HASH')) {                  if (($freedlock ne 'ok') && (ref($lockerrorsref) eq 'HASH')) {
                     $lockerrorsref->{$prefix} =                       $lockerrorsref->{$prefix} =
                         '<div class="LC_error">'.                          '<div class="LC_error">'.
                         &mt('There was a problem removing a lockfile.');                          &mt('There was a problem removing a lockfile.');
                     if ($prefix eq 'smppg') {                      if ($prefix eq 'smppg') {
                         $lockerrorsref->{$prefix} .=                           $lockerrorsref->{$prefix} .=
                             &mt('This will prevent creation of additional simple pages in this course.');                              ' '.&mt('This will prevent creation of additional simple pages in this course.');
                     } else {                      } else {
                         $lockerrorsref->{$prefix} .= &mt('This will prevent creation of additional bulletin boards in this course.');                          $lockerrorsref->{$prefix} .= ' '.&mt('This will prevent creation of additional discussion boards in this course.');
                     }                      }
                     $lockerrorsref->{$prefix} .= &mt('Please contact the domain coordinator for your LON-CAPA domain.').'</div>';                      $lockerrorsref->{$prefix} .= ' '.&mt('Please contact the [_1]helpdesk[_2] for assistance.',
                                                        '<a href="/adm/helpdesk" target="_helpdesk">','</a>').
                                                    '</div>';
                 }                  }
             }              }
         } elsif ($url =~ m{/syllabus$}) {          } elsif ($url =~ m{/syllabus$}) {
Line 2802  sub multiple_check_form { Line 2815  sub multiple_check_form {
 }  }
   
 sub process_file_upload {  sub process_file_upload {
     my ($upload_output,$coursenum,$coursedom,$allfiles,$codebase,$uploadcmd) = @_;      my ($upload_output,$coursenum,$coursedom,$allfiles,$codebase,$uploadcmd,$crstype) = @_;
 # upload a file, if present  # upload a file, if present
       my $filesize = length($env{'form.uploaddoc'});
       if (!$filesize) {
           $$upload_output = '<div class="LC_error">'.
                              &mt('Unable to upload [_1]. (size = [_2] bytes)',
                             '<span class="LC_filename">'.$env{'form.uploaddoc.filename'}.'</span>',
                             $filesize).'<br />'.
                             &mt('Either the file you attempted to upload was empty, or your web browser was unable to read its contents.').'<br />'.
                             '</div>';
           return;
       }
       my $quotatype = 'unofficial';
       if ($crstype eq 'Community') {
           $quotatype = 'community';    
       } elsif ($env{'course.'.$coursedom.'_'.$coursenum.'.internal.instcode'}) {
           $quotatype = 'official';
       }
       if (&Apache::loncommon::get_user_quota($coursenum,$coursedom,'course',$quotatype)) {
           $filesize = int($filesize/1000); #expressed in kb
           $$upload_output = &Apache::loncommon::excess_filesize_warning($coursenum,$coursedom,'course',
                                                                         $env{'form.uploaddoc.filename'},$filesize,'upload');
           return if ($$upload_output);
       }
     my ($parseaction,$showupload,$nextphase,$mimetype);      my ($parseaction,$showupload,$nextphase,$mimetype);
     if ($env{'form.parserflag'}) {      if ($env{'form.parserflag'}) {
         $parseaction = 'parse';          $parseaction = 'parse';
Line 3123  ENDREM Line 3158  ENDREM
                 push(@{$filtersref->{'canremove'}},$orderidx);                  push(@{$filtersref->{'canremove'}},$orderidx);
             }              }
         }          }
         unless ($isexternal) {          $renamelink=(<<ENDREN);
             $renamelink=(<<ENDREN);  
 <a href='javascript:changename("$esc_path","$index","$renametitle");' class="LC_docs_rename">$lt{'rn'}</a>  <a href='javascript:changename("$esc_path","$index","$renametitle");' class="LC_docs_rename">$lt{'rn'}</a>
 ENDREN  ENDREN
         }  
  $line.=(<<END);   $line.=(<<END);
 <td>  <td>
 <div class="LC_docs_entry_move">  <div class="LC_docs_entry_move">
Line 3260  $form_common."\n". Line 3293  $form_common."\n".
                     push(@{$filtersref->{'randomorder'}},$orderidx);                      push(@{$filtersref->{'randomorder'}},$orderidx);
                 }                  }
             }              }
             my $formname = 'edit_rorder_'.$orderidx;              $formname = 'edit_rorder_'.$orderidx;
     $rand_order_text =       $rand_order_text = 
 '<form action="/adm/coursedocs" method="post" name="'.$formname.'">'."\n".  '<form action="/adm/coursedocs" method="post" name="'.$formname.'">'."\n".
 $form_param."\n".  $form_param."\n".
Line 3463  sub new_timebased_suffix { Line 3496  sub new_timebased_suffix {
         } elsif ($type eq 'smppg') {          } elsif ($type eq 'smppg') {
             $errtext = &mt('Failed to acquire a unique timestamp-based suffix for the new simple page.');              $errtext = &mt('Failed to acquire a unique timestamp-based suffix for the new simple page.');
         } else {          } else {
             $errtext = &mt('Failed to acquire a unique timestamp-based suffix for the new bulletin board.');              $errtext = &mt('Failed to acquire a unique timestamp-based suffix for the new discussion board.');
         }          }
         if ($error) {          if ($error) {
             $errtext .= '<br />'.$error;              $errtext .= '<br />'.$error;
Line 3482  sub new_timebased_suffix { Line 3515  sub new_timebased_suffix {
                 &mt('This will prevent creation of additional simple pages in this course.');                  &mt('This will prevent creation of additional simple pages in this course.');
         } else {          } else {
             $locknotfreed .=              $locknotfreed .=
                 &mt('This will prevent creation of additional bulletin boards in this course.');                  &mt('This will prevent creation of additional discussion boards in this course.');
         }          }
         unless ($type eq 'paste') {          unless ($type eq 'paste') {
             $locknotfreed .=              $locknotfreed .=
                 ' '.&mt('Please contact the domain coordinator for your LON-CAPA domain.');                  ' '.&mt('Please contact the [_1]helpdesk[_2] for assistance.',
                           '<a href="/adm/helpdesk" target="_helpdesk">','</a>');
         }          }
         $locknotfreed .= '</div>';          $locknotfreed .= '</div>';
     }      }
Line 4078  sub handler { Line 4112  sub handler {
                'Supplemental','Score_Upload_Form','Adding_Pages',                 'Supplemental','Score_Upload_Form','Adding_Pages',
                'Importing_LON-CAPA_Resource','Importing_IMS_Course',                 'Importing_LON-CAPA_Resource','Importing_IMS_Course',
                        'Uploading_From_Harddrive',                         'Uploading_From_Harddrive',
                'Check_Resource_Versions','Verify_Content') {                 'Check_Resource_Versions','Verify_Content',
                          'Course_Roster','Web_Page','Dropbox') {
  $help{$topic}=&Apache::loncommon::help_open_topic('Docs_'.$topic);   $help{$topic}=&Apache::loncommon::help_open_topic('Docs_'.$topic);
     }      }
     # Composite help files      # Composite help files
Line 4094  sub handler { Line 4129  sub handler {
   'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages');    'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages');
     $help{'Group Portfolio'} = &Apache::loncommon::help_open_topic('Docs_About_Group_Files');      $help{'Group Portfolio'} = &Apache::loncommon::help_open_topic('Docs_About_Group_Files');
     $help{'Caching'} = &Apache::loncommon::help_open_topic('Caching');      $help{'Caching'} = &Apache::loncommon::help_open_topic('Caching');
     $help{'Course Roster'} = &Apache::loncommon::help_open_topic('Docs_Course_Roster');  
     $help{'Web Page'} =  &Apache::loncommon::help_open_topic('Docs_Web_Page');  
     
     my $allowed;      my $allowed;
 # URI is /adm/supplemental when viewing supplemental docs in non-edit mode.  # URI is /adm/supplemental when viewing supplemental docs in non-edit mode.
Line 4152  sub handler { Line 4185  sub handler {
 # supplementalflag=0: show standard documents  # supplementalflag=0: show standard documents
 # toolsflag=1: show utilities  # toolsflag=1: show utilities
   
     $env{'form.folderpath'} = &unescape($env{'form.folderpath'});      my $unesc_folderpath = &unescape($env{'form.folderpath'});
     my $supplementalflag=($env{'form.folderpath'}=~/^supplemental/);      my $supplementalflag=($unesc_folderpath=~/^supplemental/);
     if (($env{'form.folderpath'}=~/^default/) || ($env{'form.folderpath'} eq "")) {      if (($unesc_folderpath=~/^default/) || ($unesc_folderpath eq "")) {
        $supplementalflag=0;         $supplementalflag=0;
     }      }
     if ($env{'form.forcesupplement'}) { $supplementalflag=1; }      if ($env{'form.forcesupplement'}) { $supplementalflag=1; }
Line 4360  sub handler { Line 4393  sub handler {
           # Process file upload - phase one - upload and parse primary file.            # Process file upload - phase one - upload and parse primary file.
   undef($hadchanges);    undef($hadchanges);
           $uploadphase = &process_file_upload(\$upload_output,$coursenum,$coursedom,            $uploadphase = &process_file_upload(\$upload_output,$coursenum,$coursedom,
                                               \%allfiles,\%codebase,$context);                                                \%allfiles,\%codebase,$context,$crstype);
   if ($hadchanges) {    if ($hadchanges) {
       &mark_hash_old();        &mark_hash_old();
   }    }
Line 4412  sub handler { Line 4445  sub handler {
        my %lt=&Apache::lonlocal::texthash(         my %lt=&Apache::lonlocal::texthash(
  'copm' => 'All documents out of a published map into this folder',   'copm' => 'All documents out of a published map into this folder',
                 'upfi' => 'Upload File',                  'upfi' => 'Upload File',
                 'upld' => 'Import Content',                  'upld' => 'Upload Content',
                 'srch' => 'Search',                  'srch' => 'Search',
                 'impo' => 'Import',                  'impo' => 'Import',
  'lnks' => 'Import from Stored Links',   'lnks' => 'Import from Stored Links',
Line 4433  sub handler { Line 4466  sub handler {
                 'grpo' => 'Group Portfolio',                  'grpo' => 'Group Portfolio',
                 'rost' => 'Course Roster',                  'rost' => 'Course Roster',
                 'abou' => 'Personal Information Page for a User',                  'abou' => 'Personal Information Page for a User',
                 'imsf' => 'IMS Import',                  'imsf' => 'IMS Upload',
                 'imsl' => 'Import IMS package',                  'imsl' => 'Upload IMS package',
                 'cms'  => 'Origin of IMS package',                  'cms'  => 'Origin of IMS package',
                 'se'   => 'Select',                  'se'   => 'Select',
                 'file' =>  'File',                  'file' =>  'File',
Line 4638  NSPROBFORM Line 4671  NSPROBFORM
  $pathitem   $pathitem
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <a class="LC_menubuttons_link" href="javascript:makedropbox();">$lt{'drbx'}</a>   <a class="LC_menubuttons_link" href="javascript:makedropbox();">$lt{'drbx'}</a>
           $help{'Dropbox'}
  </form>   </form>
 NDBFORM  NDBFORM
   
Line 4688  NASOFORM Line 4722  NASOFORM
  <input type="hidden" name="importdetail"    <input type="hidden" name="importdetail" 
  value="$lt{'rost'}=/adm/viewclasslist" />   value="$lt{'rost'}=/adm/viewclasslist" />
  <a class="LC_menubuttons_link" href="javascript:document.newroster.submit()">$lt{'rost'}</a>   <a class="LC_menubuttons_link" href="javascript:document.newroster.submit()">$lt{'rost'}</a>
  $help{'Course Roster'}   $help{'Course_Roster'}
  </form>   </form>
 NROSTFORM  NROSTFORM
   
Line 4708  NROSTFORM Line 4742  NROSTFORM
         $pathitem          $pathitem
         <input type="hidden" name="importdetail" value="$newwebpage" />          <input type="hidden" name="importdetail" value="$newwebpage" />
         <a class="LC_menubuttons_link" href="javascript:makewebpage();">$lt{'webp'}</a>          <a class="LC_menubuttons_link" href="javascript:makewebpage();">$lt{'webp'}</a>
         $help{'Web Page'}          $help{'Web_Page'}
         </form>          </form>
 NWEBFORM  NWEBFORM
     
Line 4785  NGFFORM Line 4819  NGFFORM
             );              );
         }          }
         push(@importdoc,          push(@importdoc,
             {'<img class="LC_noBorder_LC_middle" src="/res/adm/pages/pdfupload.png" alt="'.$lt{upl}.'" onclick="javascript:toggleUpload(\'doc\');" />'=>$fileuploadform}              {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/pdfupload.png" alt="'.$lt{upl}.'" onclick="javascript:toggleUpload(\'doc\');" />'=>$fileuploadform}
         );          );
         $fileuploadform =  &create_form_ul(&create_list_elements(@importdoc));          $fileuploadform =  &create_form_ul(&create_list_elements(@importdoc));
   
Line 4807  NGFFORM Line 4841  NGFFORM
         $communityform = &create_form_ul(&create_list_elements(@communityforma));          $communityform = &create_form_ul(&create_list_elements(@communityforma));
   
 my %orderhash = (  my %orderhash = (
                 'aa' => ['Import Content',$fileuploadform],                  'aa' => ['Upload',$fileuploadform],
                 'bb' => ['Published Content',$importpubform],                  'bb' => ['Import',$importpubform],
                 'cc' => ['Grading Resources',$gradingform],                  'cc' => ['Grading',$gradingform],
                 );                  );
 unless ($container eq 'page') {  unless ($container eq 'page') {
     $orderhash{'00'} = ['Newfolder',$newfolderform];      $orderhash{'00'} = ['Newfolder',$newfolderform];
     $orderhash{'dd'} = ['Collaboration',$communityform];      $orderhash{'dd'} = ['Collaboration',$communityform];
     $orderhash{'ee'} = ['Special Pages',$specialdocumentsform];      $orderhash{'ee'} = ['Other',$specialdocumentsform];
 }  }
   
  $hadchanges=0;   $hadchanges=0;
Line 4925  SNAMFORM Line 4959  SNAMFORM
         $pathitem          $pathitem
         <input type="hidden" name="importdetail" value="$supwebpage" />          <input type="hidden" name="importdetail" value="$supwebpage" />
         <a class="LC_menubuttons_link" href="javascript:makewebpage('supp');">$lt{'webp'}</a>          <a class="LC_menubuttons_link" href="javascript:makewebpage('supp');">$lt{'webp'}</a>
         $help{'Web Page'}          $help{'Web_Page'}
         </form>          </form>
 SWEBFORM  SWEBFORM
   
Line 4948  my @supimportdoc = ( Line 4982  my @supimportdoc = (
 $supupdocform =  &create_form_ul(&create_list_elements(@supimportdoc));  $supupdocform =  &create_form_ul(&create_list_elements(@supimportdoc));
 my %suporderhash = (  my %suporderhash = (
  '00' => ['Supnewfolder', $supnewfolderform],   '00' => ['Supnewfolder', $supnewfolderform],
                 'ee' => ['Import Content',$supupdocform],                  'ee' => ['Upload',$supupdocform],
                 'ff' => ['Special Pages',&create_form_ul(&create_list_elements(@specialdocs))]                  'ff' => ['Other',&create_form_ul(&create_list_elements(@specialdocs))]
                 );                  );
         if ($supplementalflag) {          if ($supplementalflag) {
            my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,             my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,
                                $supplementalflag,\%suporderhash,$iconpath,$pathitem);                                 $supplementalflag,\%suporderhash,$iconpath,$pathitem);
            if ($error) {             if ($error) {
               $r->print('<p><span class="LC_error">'.$error.'</span></p>');                $r->print('<p><span class="LC_error">'.$error.'</span></p>');
            }             } else {
                  if ($suppchanges) {
                      my %servers = &Apache::lonnet::internet_dom_servers($coursedom);
                      my @ids=&Apache::lonnet::current_machine_ids();
                      foreach my $server (keys(%servers)) {
                          next if (grep(/^\Q$server\E$/,@ids));
                          my $hashid=$coursenum.':'.$coursedom;
                          &Apache::lonnet::remote_devalidate_cache($server,'suppcount',$hashid);
                      }
                      &Apache::lonnet::get_numsuppfiles($coursenum,$coursedom,1);
                      undef($suppchanges);
                  }  
              } 
         }          }
     } elsif ($supplementalflag) {      } elsif ($supplementalflag) {
         my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,          my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,
Line 5103  sub remove_archive { Line 5149  sub remove_archive {
     } else {      } else {
         my $currcmd = $env{'form.cmd'};          my $currcmd = $env{'form.cmd'};
         my $position = $env{'form.position'};          my $position = $env{'form.position'};
         if ($position > 0) {           if ($position > 0) {
             $env{'form.cmd'} = 'del_'.$position;              $env{'form.cmd'} = 'remove_'.$position;
             my ($title,$url,@rrest) =               my ($title,$url,@rrest) = 
                 split(/:/,$LONCAPA::map::resources[$LONCAPA::map::order[$position]]);                  split(/:/,$LONCAPA::map::resources[$LONCAPA::map::order[$position]]);
             if (&handle_edit_cmd($docuname,$docudom)) {              if (&handle_edit_cmd($docuname,$docudom)) {
Line 5139  sub generate_admin_menu { Line 5185  sub generate_admin_menu {
     my ($crstype) = @_;      my ($crstype) = @_;
     my $lc_crstype = lc($crstype);      my $lc_crstype = lc($crstype);
     my ($home,$other,%outhash)=&authorhosts();      my ($home,$other,%outhash)=&authorhosts();
     my %lt=&Apache::lonlocal::texthash (      my %lt= ( # do not translate here
                                          'vc'   => 'Verify Content',                                           'vc'   => 'Verify Content',
                                          'cv'   => 'Check/Set Resource Versions',                                           'cv'   => 'Check/Set Resource Versions',
                                          'ls'   => 'List Resource Identifiers',                                           'ls'   => 'List Resource Identifiers',
                                          'imse' => 'Export contents to IMS Archive',                                           'imse' => 'Export contents to IMS Archive',
                                          'dcd'  => "Dump $crstype Content to Authoring Space",                                           'dcd'  => "Dump $crstype Content to Authoring Space",
                                        );              );
     my ($candump,$dumpurl);      my ($candump,$dumpurl);
     if ($home + $other > 0) {      if ($home + $other > 0) {
         $candump = 'F';          $candump = 'F';

Removed from v.1.550  
changed lines
  Added in v.1.565


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