Diff for /loncom/publisher/lonpubdir.pm between versions 1.171 and 1.180

version 1.171, 2019/08/07 16:08:13 version 1.180, 2023/07/14 18:01:23
Line 48  sub handler { Line 48  sub handler {
   
     # Validate access to the construction space and get username:domain.      # Validate access to the construction space and get username:domain.
   
     my ($uname,$udom)=&Apache::lonnet::constructaccess($r->uri);       my ($uname,$udom)=&Apache::lonnet::constructaccess($r->uri);
     unless (($uname) && ($udom)) {      unless (($uname) && ($udom)) {
         return HTTP_NOT_ACCEPTABLE;          return HTTP_NOT_ACCEPTABLE;
     }      }
Line 67  sub handler { Line 67  sub handler {
             $r->send_http_header;              $r->send_http_header;
   
             &Apache::lonhtmlcommon::clear_breadcrumbs();              &Apache::lonhtmlcommon::clear_breadcrumbs();
             my $js = '<script type="text/javascript"               $r->print(&Apache::loncommon::start_page('Authoring Space').
                         src="/res/adm/includes/file_upload.js"></script>';  
             $r->print(&Apache::loncommon::start_page('Authoring Space', $js).  
                       '<div class="LC_error">'.                        '<div class="LC_error">'.
                       '<br /><p>'.                        '<br /><p>'.
                       &mt('Your Authoring Space is currently in the location used by LON-CAPA version 2.10 and older, but your domain is using a newer LON-CAPA version ([_1]).',$version).'</p>'.                        &mt('Your Authoring Space is currently in the location used by LON-CAPA version 2.10 and older, but your domain is using a newer LON-CAPA version ([_1]).',$version).'</p>'.
Line 106  sub handler { Line 104  sub handler {
                                 "$londocroot/priv/$udom/$uname"); # expressed in kB                                  "$londocroot/priv/$udom/$uname"); # expressed in kB
     my $disk_quota = &Apache::loncommon::get_user_quota($uname,$udom,      my $disk_quota = &Apache::loncommon::get_user_quota($uname,$udom,
                                                  $cstr,$crstype); # expressed in MB                                                   $cstr,$crstype); # expressed in MB
   
     # Put out the start of page.      # Put out the start of page.
     &startpage($r, $uname, $udom, $thisdisfn, $current_disk_usage, $disk_quota, $crsauthor);   
       &startpage($r, $uname, $udom, $thisdisfn, $current_disk_usage, $disk_quota, $crsauthor);
   
     if (!-d $fn) {      if (!-d $fn) {
         if (-e $fn) {          if (-e $fn) {
Line 130  sub handler { Line 128  sub handler {
     }      }
   
     # Put out actions for directory, browse/upload + new file page.      # Put out actions for directory, browse/upload + new file page.
     &dircontrols($r,$uname,$udom,$thisdisfn, $current_disk_usage, $disk_quota);      &dircontrols($r,$uname,$udom,$thisdisfn,$current_disk_usage,$disk_quota,$crsauthor);
     &resourceactions($r,$uname,$udom,$thisdisfn); # Put out form used for printing/deletion etc.      &resourceactions($r,$uname,$udom,$thisdisfn); # Put out form used for printing/deletion etc.
   
     my $numdir = 0;      my $numdir = 0;
     my $numres = 0;      my $numres = 0;
     
     if ((@files == 0) && ($thisdisfn =~ m{^/$match_domain/$match_username})) {      if ((@files == 0) && ($thisdisfn =~ m{^/$match_domain/$match_username})) {
         if ($thisdisfn =~ m{^/$match_domain/$match_username$}) {          if ($thisdisfn =~ m{^/$match_domain/$match_username$}) {
             $r->print('<p class="LC_info">'.&mt('This Authoring Space is currently empty.').'</p>');              $r->print('<p class="LC_info">'.&mt('This Authoring Space is currently empty.').'</p>');
Line 194  sub handler { Line 192  sub handler {
                             order => 'ascending',                              order => 'ascending',
                             text  => &mt('Size').' (kB)',                              text  => &mt('Size').' (kB)',
                         },                          },
     );       );
   
     # Print column headers      # Print column headers
     my $output = '';      my $output = '';
Line 239  my $result = "<script type=\"text/javasc Line 237  my $result = "<script type=\"text/javasc
         my ($cmode,$csize,$cmtime)=(stat($fn.'/'.$filename))[2,7,9];          my ($cmode,$csize,$cmtime)=(stat($fn.'/'.$filename))[2,7,9];
         my $linkfilename = &HTML::Entities::encode('/priv'.$thisdisfn.'/'.$filename,'<>&"');          my $linkfilename = &HTML::Entities::encode('/priv'.$thisdisfn.'/'.$filename,'<>&"');
         # Identify type of file according to icon used          # Identify type of file according to icon used
         my ($filetype) = (&Apache::loncommon::icon($filename) =~ m{/(\w+).gif$});           my ($filetype) = (&Apache::loncommon::icon($filename) =~ m{/(\w+).gif$});
         my $cstr_dir = $r->dir_config('lonDocRoot').'/priv'.$thisdisfn;          my $cstr_dir = $r->dir_config('lonDocRoot').'/priv'.$thisdisfn;
         my $meta_same = &isMetaSame($cstr_dir, $resdir, $filename);          my $meta_same = &isMetaSame($cstr_dir, $resdir, $filename);
           
         # Store size, title, and status for files but not directories          # Store size, title, and status for files but not directories
         my $size = (!($cmode&$dirptr)) ? $csize/1024. : 0;          my $size = (!($cmode&$dirptr)) ? $csize/1024. : 0;
         my ($status, $pubstatus, $title, $fulltitle);          my ($status, $pubstatus, $title, $fulltitle);
         if (!($cmode&$dirptr)) {          if (!($cmode&$dirptr)) {
             ($status, $pubstatus) = &getStatus($resdir, $targetdir, $cstr_dir,               ($status, $pubstatus) = &getStatus($resdir, $targetdir, $cstr_dir,
                 $filename, $linkfilename, $cmtime, $meta_same);                  $filename, $linkfilename, $cmtime, $meta_same);
             ($fulltitle, $title) = &getTitle($resdir, $targetdir, $filename,               if (($crsauthor) && ($extension eq 'rights')) {
                                         $linkfilename, $meta_same, \%bombs);                  $title = &getTitleString($targetdir.'/'.$filename);
                   $fulltitle = $title;
               } else {
                   ($fulltitle, $title) = &getTitle($resdir, $targetdir, $filename,
                                                    $linkfilename, $meta_same, \%bombs);
               }
         } else {          } else {
             ($status, $pubstatus) = ('','');              ($status, $pubstatus) = ('','');
             ($fulltitle, $title) = ('','');              ($fulltitle, $title) = ('','');
Line 269  my $result = "<script type=\"text/javasc Line 272  my $result = "<script type=\"text/javasc
             "linkfilename"      => $linkfilename,              "linkfilename"      => $linkfilename,
         }          }
     }      }
      
     my @sorted_files;      my @sorted_files;
     # Sorting by something other than "Name".  Name is the secondary key.      # Sorting by something other than "Name".  Name is the secondary key.
     if ($sortby =~ m{cmtime|size}) {    # Numeric fields      if ($sortby =~ m{cmtime|size}) {    # Numeric fields
Line 303  my $result = "<script type=\"text/javasc Line 306  my $result = "<script type=\"text/javasc
         }          }
   
     # Sort by "Name" is the default      # Sort by "Name" is the default
     } else {       } else {
         if ($sortorder eq "rev") {          if ($sortorder eq "rev") {
             @sorted_files = sort {uc($b) cmp uc($a)} (keys(%{$filehash}));              @sorted_files = sort {uc($b) cmp uc($a)} (keys(%{$filehash}));
         } else {          } else {
Line 314  my $result = "<script type=\"text/javasc Line 317  my $result = "<script type=\"text/javasc
     # Print the sorted resources      # Print the sorted resources
     foreach my $filename (@sorted_files) {      foreach my $filename (@sorted_files) {
         if ($filehash->{$filename}->{"cmode"}&$dirptr) {        # Directories          if ($filehash->{$filename}->{"cmode"}&$dirptr) {        # Directories
             &putdirectory($r, $thisdisfn, $linkdir, $filename,               &putdirectory($r, $thisdisfn, $linkdir, $filename,
                 $filehash->{$filename}->{"cmtime"},                   $filehash->{$filename}->{"cmtime"},
                 $targetdir, \%bombs, \$numdir);                  $targetdir, \%bombs, \$numdir);
         } else {                                                # Files          } else {                                                # Files
             &putresource($r, $udom, $uname, $filename, $thisdisfn, $resdir,              &putresource($r, $udom, $uname, $filename, $thisdisfn, $resdir,
                 $targetdir, $linkdir, $filehash->{$filename}->{"cmtime"},                   $targetdir, $linkdir, $crsauthor,
                 $filehash->{$filename}->{"size"}, \$numres,                   $filehash->{$filename}->{"cmtime"},
                   $filehash->{$filename}->{"size"}, \$numres,
                 $filehash->{$filename}->{"linkfilename"},                  $filehash->{$filename}->{"linkfilename"},
                 $filehash->{$filename}->{"fulltitle"},                  $filehash->{$filename}->{"fulltitle"},
                 $filehash->{$filename}->{"status"},                  $filehash->{$filename}->{"status"},
Line 344  my $result = "<script type=\"text/javasc Line 348  my $result = "<script type=\"text/javasc
            .'</div>'             .'</div>'
            .&Apache::loncommon::end_page()             .&Apache::loncommon::end_page()
   );    );
   return OK;      return OK;
 }  }
   
   
   
 #   Output the header of the page.  This includes:  #   Output the header of the page.  This includes:
 #   - The HTML header   #   - The HTML header
 #   - The H1/H3  stuff which includes the directory.  #   - The H1/H3  stuff which includes the directory.
 #  #
 #     startpage($r, $uame, $udom, $thisdisfn, $current_disk_usage, $disk_quota);  #     startpage($r, $uame, $udom, $thisdisfn, $current_disk_usage, $disk_quota);
Line 383  sub startpage { Line 387  sub startpage {
         'text'  => $title,          'text'  => $title,
         'href'  => &Apache::loncommon::authorspace($formaction),          'href'  => &Apache::loncommon::authorspace($formaction),
     });      });
     # breadcrumbs (and tools) will be created       # breadcrumbs (and tools) will be created
     # in start_page->bodytag->innerregister      # in start_page->bodytag->innerregister
   
     $env{'request.noversionuri'}=$formaction;      $env{'request.noversionuri'}=$formaction;
     my $js = '<script type="text/javascript"       my $js = '<script type="text/javascript"
                 src="/res/adm/includes/file_upload.js"></script>';                  src="/res/adm/includes/file_upload.js"></script>';
     $r->print(&Apache::loncommon::start_page($title, $js));      $r->print(&Apache::loncommon::start_page($title, $js));
   
     $disk_quota = 1024 * $disk_quota; # convert from MB to kB      $disk_quota = 1024 * $disk_quota; # convert from MB to kB
   
       my $headertext = &mt('Directory');
       if ($crsauthor) {
           $headertext = &mt('Course Authoring Directory');
       }
     $r->print(&Apache::loncommon::head_subbox(      $r->print(&Apache::loncommon::head_subbox(
                      '<div style="float:right;padding-top:0;margin-top;0">'                       '<div style="float:right;padding-top:0;margin-top;0">'
                     .&Apache::lonhtmlcommon::display_usage($current_disk_usage,                      .&Apache::lonhtmlcommon::display_usage($current_disk_usage,
                                                            $disk_quota,'authoring')                                                             $disk_quota,'authoring')
                     .'</div>'                      .'</div>'
                     .&Apache::loncommon::CSTR_pageheader()));                      .&Apache::loncommon::CSTR_pageheader('','',$headertext)));
   
     my $esc_thisdisfn = &Apache::loncommon::escape_single($thisdisfn);      my $esc_thisdisfn = &Apache::loncommon::escape_single($thisdisfn);
     my $doctitle = 'LON-CAPA '.&mt($title);      my $doctitle = 'LON-CAPA '.&mt($title);
Line 412  parent.lastknownpriv='/priv$esc_thisdisf Line 420  parent.lastknownpriv='/priv$esc_thisdisf
   
 // Confirmation dialogues  // Confirmation dialogues
   
     function currdiract(theform) {  
         if (theform.dirtask.options[theform.dirtask.selectedIndex].value == 'publish') {  
             document.publishdir.filename.value = theform.filename.value;  
     document.publishdir.submit();  
         }  
         if (theform.dirtask.options[theform.dirtask.selectedIndex].value == 'editmeta') {  
             top.location=theform.filename.value+'default.meta'  
         }  
         if (theform.dirtask.options[theform.dirtask.selectedIndex].value == 'printdir' ) {  
             document.printdir.postdata.value=theform.filename.value  
             document.printdir.submit();  
         }  
         if (theform.dirtask.options[theform.dirtask.selectedIndex].value == "delete") {  
               var delform = document.delresource  
               delform.filename.value = theform.filename.value  
               delform.submit()  
         }  
     }  
     
     function checkUpload(theform) {      function checkUpload(theform) {
         if (theform.file == '') {          if (theform.file == '') {
             alert("Please use 'Browse..' to choose a file first, before uploading")              alert("Please use 'Browse..' to choose a file first, before uploading")
             return               return
         }          }
         theform.submit()            theform.submit()
     }      }
   
     function SetPubDir(theform,printForm) {      function SetPubDir(theform,printForm) {
Line 514  ENDPUBDIRSCRIPT Line 503  ENDPUBDIRSCRIPT
 }  }
   
 sub dircontrols {  sub dircontrols {
     my ($r,$uname,$udom,$thisdisfn, $current_disk_usage, $disk_quota) = @_;      my ($r,$uname,$udom,$thisdisfn,$current_disk_usage,$disk_quota,$crsauthor) = @_;
     my %lt=&Apache::lonlocal::texthash(      my %lt=&Apache::lonlocal::texthash(
                                        cnpd => 'Cannot publish directory',                                         cnpd => 'Cannot publish directory',
                                        cnrd => 'Cannot retrieve directory',                                         cnrd => 'Cannot retrieve directory',
                                        mcdi => 'Must create new subdirectory inside a directory',                                         mcdi => 'Must create new subdirectory inside a directory',
                                        pubr => 'Publish this Resource',                                         pubr => 'Publish this Resource',
                                        pubd => 'Publish this Directory',  
                                        dedr => 'Delete Directory',  
                                        rtrv => 'Retrieve Old Version',                                         rtrv => 'Retrieve Old Version',
                                        list => 'List Directory',                                         list => 'List Directory',
                                        uplo => 'Upload file',                                           uplo => 'Upload file',
                                        dele => 'Delete',                                         dele => 'Delete',
                                        edit => 'Edit Metadata',   
                                        sela => 'Select Action',                                         sela => 'Select Action',
                                        nfil => 'New file',                                         nfil => 'New file',
                                        nhtm => 'New HTML file',                                         nhtm => 'New HTML file',
Line 543  sub dircontrols { Line 529  sub dircontrols {
                                        copy => 'Copy current file to',                                         copy => 'Copy current file to',
                                        type => 'Type Name Here',                                         type => 'Type Name Here',
                                        go   => 'Go',                                         go   => 'Go',
                                        prnt => 'Print contents of directory',                                         crea => 'Create a new subdirectory or document',
                                        crea => 'Create a new directory or LON-CAPA document',                                         qs   => 'Quick name search',
                                        qs   => 'Quick Search',  
                                        cs   => 'Case Sensitive',                                         cs   => 'Case Sensitive',
                                        re   => 'Regular Expression',                                         re   => 'Regular Expression',
        acti => 'Actions for current directory',  
        updc => 'Upload a new document',         updc => 'Upload a new document',
        pick => 'Please select an action to perform using the new filename',         pick => 'Please select an action to perform using the new filename',
                                          shcu => 'Shortcuts',
                                       );                                        );
       my %js_lt = &Apache::lonlocal::texthash(
                                          nanf => 'Name of New File',
                                          nans => 'Name of New Subdirectory',
                                          psfn => 'Please specify file name',
       );
       &js_escape(\%js_lt);
     my $mytype = $lt{'type'}; # avoid conflict with " and ' in javascript      my $mytype = $lt{'type'}; # avoid conflict with " and ' in javascript
     # Calculate free space in bytes.      # Calculate free space in bytes.
     # $disk_quota is in MB and $current_disk_usage is in kB      # $disk_quota is in MB and $current_disk_usage is in kB
     my $free_space = 1024 * ((1024 * $disk_quota) - $current_disk_usage);      my $free_space = 1024 * ((1024 * $disk_quota) - $current_disk_usage);
     $r->printf(<<END,&Apache::loncommon::help_open_topic('Quicksearch'));      $r->printf(<<END,&Apache::loncommon::help_open_topic('Quicksearch'));
 <div class="LC_columnSection">  <div class="LC_columnSection">
   <div>      <div>
     <form name="curractions" method="post" action="">        <fieldset style="display:inline">
       <fieldset>              <legend>$lt{'qs'}</legend>
         <legend>$lt{'acti'}</legend>                  <script type="text/javascript" src="/adm/quicksearch/quicksearch.js"></script>
         <select name="dirtask" onchange="currdiract(this.form)">                  <input type="text" id="quickfilter" placeholder="Enter search term" onkeyup="applyFilter()"/>
             <option>$lt{'sela'}</option>                  <input type="button" value="Clear" onclick="document.getElementById(\'quickfilter\').value=\'\'; applyFilter()" />
             <option value="publish">$lt{'pubd'}</option>                  %s
             <option value="editmeta">$lt{'edit'}</option>                  <br />
             <option value="printdir">$lt{'prnt'}</option>                  <label><input type="checkbox" id="casesens" onchange="applyFilter()"/>$lt{'cs'}&nbsp;&nbsp;</label>
             <option value="delete">$lt{'dedr'}</option>                  <label><input type="checkbox" id="regex" onchange="applyFilter()"/>$lt{'re'}&nbsp;&nbsp;</label>
         </select>          </fieldset>
         <input type="hidden" name="filename" value="/priv$thisdisfn/" />  
       </fieldset>  
     </form>  
     <form name="publishdir" method="post" action="/adm/publish" target="_parent">  
       <input type="hidden" name="pubrec" value="" />  
       <input type="hidden" name="filename" value="" />  
     </form>  
     <form name="printdir" method="post" action="/adm/printout" target="_parent">  
       <input type="hidden" name="postdata" value="" />  
     </form>  
   </div>    </div>
   END
       my %fileoptions = (
                            none => "$lt{'sela'}:",
                            newfile => "$lt{'nfil'}:",
                            newhtmlfile => "$lt{'nhtm'}:",
                            newproblemfile => "$lt{'nprb'}:",
                            newdir => "$lt{'nsub'}:",
                         );
       $fileoptions{'select_form_order'} = ['none','newfile','newhtmlfile','newproblemfile'];
       if ($crsauthor) {
           push(@{$fileoptions{'select_form_order'}},'newdir');
       } else {
           my %extraoptions = (
                                 newpagefile => "$lt{'npag'}:",
                                 newsequencefile => "$lt{'nseq'}:",
                                 newrightsfile => "$lt{'ncrf'}:",
                                 newstyfile => "$lt{'nsty'}:",
                                 newtaskfile => "$lt{'nbt'}:",
                                 newlibraryfile => "$lt{'nlib'}:",
           );
           %fileoptions = (%fileoptions,%extraoptions);
           push(@{$fileoptions{'select_form_order'}},('newpagefile','newsequencefile',
                                                      'newrightsfile','newstyfile',
                                                      'newtaskfile','newlibraryfile',
                                                      'newdir'));
       }
       my $selectbox = &Apache::loncommon::select_form('none','action',\%fileoptions);
       $r->print(<<END);
   <div style="padding-bottom: 2px">    <div style="padding-bottom: 2px">
     <form name="upublisher" enctype="multipart/form-data" method="post" action="/adm/upload" target="_parent">      <form name="upublisher" enctype="multipart/form-data" method="post" action="/adm/upload">
       <fieldset>        <fieldset>
         <legend>$lt{'updc'}</legend>          <legend>$lt{'updc'}</legend>
         <input type="hidden" name="filename" value="/priv$thisdisfn/" />          <input type="hidden" name="filename" value="/priv$thisdisfn/" />
         <input type="file" name="upfile" class="LC_flUpload testclass" size="20" />          <input type="file" name="upfile" class="LC_flUpload" />
         <input type="hidden" id="free_space" value=$free_space />          <input type="hidden" id="LC_free_space" value="$free_space" />
         <input type="button" value="$lt{'uplo'}"  onclick="checkUpload(this.form)" />          <input type="button" value="$lt{'uplo'}"  onclick="checkUpload(this.form)" />
       </fieldset>        </fieldset>
     </form>      </form>
   </div>    </div>
   
   <div>    <div>
     <form name="fileaction" method="post" action="/adm/cfile" target="_parent">      <form name="fileaction" method="post" action="/adm/cfile">
       <fieldset>        <fieldset>
               <legend>$lt{'crea'}</legend>                <legend>$lt{'crea'}</legend>
       <span class="LC_nobreak">        <span class="LC_nobreak">
Line 609  sub dircontrols { Line 617  sub dircontrols {
                         }                          }
                     }                      }
                   </script>                    </script>
   <select name="action">    $selectbox&nbsp;<input type="text" id="newnameid" name="newfilename" placeholder="$lt{'type'}" value="" onfocus="if (this.value == is.empty()) this.value=''" />&nbsp;<input type="button" value="Go" onclick="validate_go();" />
     <option value="none">$lt{'sela'}</option>  
     <option value="newfile">$lt{'nfil'}:</option>  
     <option value="newhtmlfile">$lt{'nhtm'}:</option>  
     <option value="newproblemfile">$lt{'nprb'}:</option>  
                     <option value="newpagefile">$lt{'npag'}:</option>  
                     <option value="newsequencefile">$lt{'nseq'}:</option>  
                     <option value="newrightsfile">$lt{'ncrf'}:</option>  
                     <option value="newstyfile">$lt{'nsty'}:</option>  
                     <option value="newtaskfile">$lt{'nbt'}:</option>  
                     <option value="newlibraryfile">$lt{'nlib'}:</option>  
             <option value="newdir">$lt{'nsub'}:</option>  
   </select>&nbsp;<input type="text" name="newfilename" placeholder="$lt{'type'}" value="" onfocus="if (this.value == is.empty()) this.value=''" />&nbsp;<input type="button" value="Go" onclick="validate_go();" />  
  <br />   <br />
                 <span>Quickactions:                  <span>$lt{'shcu'}:
                  <input type="hidden" name="mode"/>                   <input type="hidden" name="mode"/>
                  <a href="javascript:void(0)" onclick="javascript:validate_action('blank')">                   <a href="javascript:void(0)" onclick="javascript:validate_action('blank')">
     <img src="/adm/lonIcons/unknown.gif" title="Create blank problem file"></a>      <img src="/adm/lonIcons/unknown.gif" title="Create blank problem file" alt="file icon" /></a>
                  <a href="javascript:void(0)" onclick="javascript:validate_action('problemtempl')">                    <a href="javascript:void(0)" onclick="javascript:validate_action('problemtempl')"> 
                     <img src="/adm/lonIcons/problem.gif" title="Create new problem from template"></a>                      <img src="/adm/lonIcons/problem.gif" title="Create new problem from template" alt="problem icon" /></a>
                  <a href="javascript:void(0)" onclick="javascript:validate_action('blankhtml')">                    <a href="javascript:void(0)" onclick="javascript:validate_action('blankhtml')"> 
                     <img src="/adm/lonIcons/html.gif" title="Create new blank HTML file"></a>                      <img src="/adm/lonIcons/html.gif" title="Create new blank HTML file" alt="web page icon" /></a>
                  <a href="javascript:void(0)" onclick="javascript:validate_action('folder')">                    <a href="javascript:void(0)" onclick="javascript:validate_action('folder')"> 
     <img src="/adm/lonIcons/navmap.folder.closed.gif" title="Create new subdirectory"></a>      <img src="/adm/lonIcons/navmap.folder.closed.gif" title="Create new subdirectory" alt="folder icon" /></a>
                 </span>                  </span>
                  <script type="text/javascript">                   <script type="text/javascript">
                      function validate_action(action){                       function validate_action(action){
                            if (document.getElementById('newnameid')) {
                          if (document.getElementsByName(\'newfilename\')[0].value != \'\'){                               if (document.getElementById('newnameid').value == '') {
                              if (action == "blank") {                                   var newname;
  document.fileaction.action.value=\'newproblemfile\';                                   var prompttext = "$js_lt{'nanf'}";
  document.fileaction.mode.value=\'blank\';                                   if (action == 'folder') {
  } else if (action == "problemtempl") {                                       prompttext = "$js_lt{'nans'}";
  document.fileaction.action.value=\'newproblemfile\';                                   }
                                  validate_go();                                   newname=prompt(prompttext);
                              } else if (action == "blankhtml") {                                   if (newname != '') {
                                  document.fileaction.action.value=\'newhtmlfile\';                                       document.getElementById('newnameid').value = newname;
                                  validate_go();                                   }
                              } else if (action == "folder") {                               }
                                  document.fileaction.action.value=\'newdir\';                               if (document.getElementById('newnameid').value != '') {
                                  document.fileaction.mode.value=\'folder\';                                   if (action == 'blank') {
        document.fileaction.action.value='newproblemfile';
        document.fileaction.mode.value='blank';
            } else if (action == 'problemtempl') {
        document.fileaction.action.value='newproblemfile';
                                        validate_go();
                                    } else if (action == 'blankhtml') {
                                        document.fileaction.action.value='newhtmlfile';
                                        validate_go();
                                    } else if (action == 'folder') {
                                        document.fileaction.action.value='newdir';
                                        document.fileaction.mode.value='folder';
                                    }
                                    fileaction.submit();
                                } else {
                                    alert("$js_lt{'psfn'}");
                              }                               }
                              fileaction.submit();  
                          } else {  
                              alert(\'Please specify file name.\');  
                              // TODO: ask for filename? if so, do some refactoring  
   
                          }                           }
                      }                       }
                  </script>                   </script>
Line 663  sub dircontrols { Line 669  sub dircontrols {
       </fieldset>        </fieldset>
     </form>      </form>
     </div>      </div>
     <div>  
       <fieldset style="display:inline">  
             <legend>$lt{'qs'}</legend>  
                 <script type="text/javascript" src="/adm/quicksearch/quicksearch.js"></script>  
                 <input type="text" id="quickfilter" placeholder="Enter search term" onkeyup="applyFilter()"/>  
                 <input type="button" value="Clear" onclick="document.getElementById(\'quickfilter\').value=\'\'; applyFilter()" />  
                 %s  
                 <br />  
                 <label><input type="checkbox" id="casesens" onchange="applyFilter()"/>$lt{'cs'}&nbsp;&nbsp;</label>  
                 <label><input type="checkbox" id="regex" onchange="applyFilter()"/>$lt{'re'}&nbsp;&nbsp;</label>  
         </fieldset>  
   </div>  
 </div>  </div>
 END  END
 }  }
Line 682  END Line 676  END
 sub resourceactions {  sub resourceactions {
     my ($r,$uname,$udom,$thisdisfn) = @_;      my ($r,$uname,$udom,$thisdisfn) = @_;
     $r->print(<<END);      $r->print(<<END);
        <form name="moveresource" action="/adm/cfile" target="_parent" method="post">         <form name="moveresource" action="/adm/cfile" method="post">
          <input type="hidden" name="filename" value="" />           <input type="hidden" name="filename" value="" />
          <input type="hidden" name="newfilename" value="" />           <input type="hidden" name="newfilename" value="" />
          <input type="hidden" name="action" value="" />           <input type="hidden" name="action" value="" />
        </form>         </form>
        <form name="delresource" action="/adm/cfile" target="_parent" method="post">         <form name="delresource" action="/adm/cfile" method="post">
          <input type="hidden" name="filename" value="" />           <input type="hidden" name="filename" value="" />
          <input type="hidden" name="action" value="delete" />           <input type="hidden" name="action" value="delete" />
        </form>         </form>
        <form name="pubresource" action="/adm/publish" target="_parent" method="post">         <form name="pubresource" action="/adm/publish" method="post">
          <input type="hidden" name="filename" value="" />           <input type="hidden" name="filename" value="" />
          <input type="hidden" name="makeobsolete" value="0" />           <input type="hidden" name="makeobsolete" value="0" />
        </form>         </form>
        <form name="printresource" action="/adm/printout" target="_parent" method="post">         <form name="printresource" action="/adm/printout" method="post">
            <input type="hidden" name="postdata" value="" />             <input type="hidden" name="postdata" value="" />
        </form>         </form>
        <form name="retrieveres" action="/adm/retrieve" target="_parent" method="post">         <form name="retrieveres" action="/adm/retrieve" method="post">
            <input type="hidden" name="filename" value="" />             <input type="hidden" name="filename" value="" />
        </form>         </form>
        <form name="cleanup" action="/adm/cleanup" target="_parent" method="post">         <form name="cleanup" action="/adm/cleanup" method="post">
            <input type="hidden" name="filename" value="" />             <input type="hidden" name="filename" value="" />
        </form>         </form>
 END  END
Line 752  sub putdirectory { Line 746  sub putdirectory {
     my ($r, $reqfile, $here, $dirname, $modtime, $targetdir, $bombs, $numdir) = @_;      my ($r, $reqfile, $here, $dirname, $modtime, $targetdir, $bombs, $numdir) = @_;
   
 # construct the display filename: the directory name unless ..:  # construct the display filename: the directory name unless ..:
      
     my $actionitem;      my $actionitem;
    
     my $disfilename = $dirname;      my $disfilename = $dirname;
 # Don't display directory itself, and there is no way up from root directory  # Don't display directory itself, and there is no way up from root directory
     unless ((($dirname eq '..') && ($reqfile=~/^\/[^\/]+\/[^\/]+$/)) || ($dirname eq '.')) {      unless ((($dirname eq '..') && ($reqfile=~/^\/[^\/]+\/[^\/]+$/)) || ($dirname eq '.')) {
Line 777  sub putdirectory { Line 771  sub putdirectory {
             $actionitem = &mt('Go to ...');              $actionitem = &mt('Go to ...');
             $disfilename = '<i>'.&mt('Parent Directory').'</i>';              $disfilename = '<i>'.&mt('Parent Directory').'</i>';
         } else {          } else {
             $actionitem =               $actionitem =
                     '<form name="dirselect_'.$$numdir.                      '<form name="dirselect_'.$$numdir.
                     '" action="/adm/publish" target="_parent">'.                      '" action="/adm/publish">'.
                     '<select name="diraction" onchange="SetPubDir(this.form,document)">'.                      '<select name="diraction" onchange="SetPubDir(this.form,document)">'.
                       '<option selected="selected">'.&mt('Select action').'</option>'.                        '<option selected="selected">'.&mt('Select action').'</option>'.
                       '<option value="open">'.&mt('Open').'</option>'.                        '<option value="open">'.&mt('Open').'</option>'.
Line 798  sub putdirectory { Line 792  sub putdirectory {
   '<td><img src="'.    '<td><img src="'.
   $Apache::lonnet::perlvar{'lonIconsURL'}.'/navmap.folder.closed.gif" alt="folder" /></td>'.    $Apache::lonnet::perlvar{'lonIconsURL'}.'/navmap.folder.closed.gif" alt="folder" /></td>'.
   '<td>'.$actionitem.'</td>'.    '<td>'.$actionitem.'</td>'.
   '<td><span class="LC_filename"><a href="'.&HTML::Entities::encode($here.'/'.$dirname,'<>&"').'/" target="_parent">'.    '<td><span class="LC_filename"><a href="'.&HTML::Entities::encode($here.'/'.$dirname,'<>&"').'/">'.
   $disfilename.'</a></span></td>'.    $disfilename.'</a></span></td>'.
         '<td colspan="3">'.($kaputt?&Apache::lonhtmlcommon::authorbombs($targetdir.'/'.$disfilename.'/'):'').$Apache::lonpublisher::metadatafields{'title'});          '<td colspan="3">'.($kaputt?&Apache::lonhtmlcommon::authorbombs($targetdir.'/'.$disfilename.'/'):'').$Apache::lonpublisher::metadatafields{'title'});
  if ($Apache::lonpublisher::metadatafields{'subject'} ne '') {   if ($Apache::lonpublisher::metadatafields{'subject'} ne '') {
Line 831  sub getTitle { Line 825  sub getTitle {
                 &Apache::loncommon::modal_link(                  &Apache::loncommon::modal_link(
                     '/adm/retrieve?filename='.$linkfilename.'.meta&amp;inhibitmenu=yes&amp;add_modal=yes',                      '/adm/retrieve?filename='.$linkfilename.'.meta&amp;inhibitmenu=yes&amp;add_modal=yes',
                     &mt('Retrieve Metadata'),600,500);                      &mt('Retrieve Metadata'),600,500);
         }           }
     }      }
     # Allow editing metadata of published and unpublished resources      # Allow editing metadata of published and unpublished resources
     $title .= "\n".'<br />' if ($title);      $title .= "\n".'<br />' if ($title);
Line 850  sub isMetaSame { Line 844  sub isMetaSame {
     my $meta_cmtime = (stat($cstr_dir.'/'.$filename.'.meta'))[9];      my $meta_cmtime = (stat($cstr_dir.'/'.$filename.'.meta'))[9];
     my $meta_rmtime = (stat($resdir.'/'.$filename.'.meta'))[9];      my $meta_rmtime = (stat($resdir.'/'.$filename.'.meta'))[9];
     return (&Apache::londiff::are_different_files($resdir.'/'.$filename.'.meta',      return (&Apache::londiff::are_different_files($resdir.'/'.$filename.'.meta',
             $cstr_dir.'/'.$filename.'.meta') && $meta_rmtime < $meta_cmtime)               $cstr_dir.'/'.$filename.'.meta') && $meta_rmtime < $meta_cmtime)
         ? 0 : 1;          ? 0 : 1;
 }  }
       
   
 sub getStatus {      sub getStatus {
     my ($resdir, $targetdir, $cstr_dir, $filename,        my ($resdir, $targetdir, $cstr_dir, $filename,
             $linkfilename, $cmtime, $meta_same) = @_;          $linkfilename, $crsauthor, $cmtime, $meta_same) = @_;
     my $pubstatus = 'unpublished';      my $pubstatus = 'unpublished';
     my $status = &mt('Unpublished');      my $status = &mt('Unpublished');
   
Line 883  sub getStatus { Line 876  sub getStatus {
         );          );
         $rights_status .=          $rights_status .=
             $lt_SourceRight{&getSourceRightString($targetdir.'/'.$filename)};              $lt_SourceRight{&getSourceRightString($targetdir.'/'.$filename)};
           if (($crsauthor) && ($filename =~ /\.rights$/)) {
               $rights_status =~ s/,\s+$//;
           }
  if ($same) {   if ($same) {
     if (&Apache::lonnet::metadata($targetdir.'/'.$filename,'obsolete')) {      if (&Apache::lonnet::metadata($targetdir.'/'.$filename,'obsolete')) {
                 $pubstatus = 'obsolete';                  $pubstatus = 'obsolete';
Line 901  sub getStatus { Line 896  sub getStatus {
             $pubstatus = 'modified';              $pubstatus = 'modified';
     $status=&mt('Modified').      $status=&mt('Modified').
  '<br />'. $rights_status;   '<br />'. $rights_status;
     if (&Apache::loncommon::fileembstyle(($filename=~/\.(\w+)$/)) eq 'ssi') {              unless (($crsauthor) && ($filename =~ /\.rights$/)) {
  $status.='<br />'.          if (&Apache::loncommon::fileembstyle(($filename=~/\.(\w+)$/)) eq 'ssi') {
                          &Apache::loncommon::modal_link(      $status.='<br />'.
                              '/adm/diff?filename='.$linkfilename.'&amp;versiontwo=priv',                               &Apache::loncommon::modal_link(
                              &mt('Diffs'),600,500);                                   '/adm/diff?filename='.$linkfilename.'&amp;versiontwo=priv',
                                    &mt('Diffs'),600,500);
           }
     }      }
  }    }
   
  $status.="\n".'<br />'.          unless (($crsauthor) && ($filename =~ /\.rights$/)) {
              &Apache::loncommon::modal_link(      $status.="\n".'<br />'.
                  '/adm/retrieve?filename='.$linkfilename.'&amp;inhibitmenu=yes&amp;add_modal=yes',&mt('Retrieve'),600,500);                   &Apache::loncommon::modal_link(
                        '/adm/retrieve?filename='.$linkfilename.'&amp;inhibitmenu=yes&amp;add_modal=yes',&mt('Retrieve'),600,500);
           }
     }      }
   
     return ($status, $pubstatus);      return ($status, $pubstatus);
Line 922  sub getStatus { Line 921  sub getStatus {
 #   Put a table row for a file resource.  #   Put a table row for a file resource.
 #  #
 sub putresource {  sub putresource {
     my ($r, $udom, $uname, $filename, $thisdisfn, $resdir, $targetdir,       my ($r, $udom, $uname, $filename, $thisdisfn, $resdir,
             $linkdir, $cmtime, $size, $numres, $linkfilename, $title,           $targetdir, $linkdir, $crsauthor, $cmtime, $size,
             $status, $pubstatus) = @_;          $numres, $linkfilename, $title, $status, $pubstatus) = @_;
     &Apache::lonnet::devalidate_cache_new('meta',$targetdir.'/'.$filename);      &Apache::lonnet::devalidate_cache_new('meta',$targetdir.'/'.$filename);
   
     my $editlink='';      my $editlink='';
Line 943  sub putresource { Line 942  sub putresource {
         }          }
     }      }
     if ($filename=~/\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm|sty)$/) {      if ($filename=~/\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm|sty)$/) {
  $editlink.=' (<a href="/adm/cleanup?filename='.$linkfilename.'" target="_parent">'.&mt('Clean Up').')</a>';   $editlink.=' (<a href="/adm/cleanup?filename='.$linkfilename.'">'.&mt('Clean Up').')</a>';
     }      }
     if ($filename=~/\.(zip|tar|bz2|gz|tar.gz|tar.bz2|tgz)$/) {      if ($filename=~/\.(zip|tar|bz2|gz|tar.gz|tar.bz2|tgz)$/) {
  $editlink=' (<a target="_parent" href="/adm/cfile?decompress='.$linkfilename.'">'.&mt('Decompress').'</a>)';   $editlink=' (<a href="/adm/cfile?decompress='.$linkfilename.'">'.&mt('Decompress').'</a>)';
     }      }
     my $publish_button = (-e $resdir.'/'.$filename) ? &mt('Re-publish') : &mt('Publish');      my $publish_button = (-e $resdir.'/'.$filename) ? &mt('Re-publish') : &mt('Publish');
     my $pub_select = '';      my $pub_select = '';
     &create_pubselect($r,\$pub_select,$udom,$uname,$thisdisfn,$filename,$resdir,$pubstatus,$publish_button,$numres);      unless (($crsauthor) && ($filename=~ /\.rights$/)) {
           &create_pubselect($r,\$pub_select,$udom,$uname,$thisdisfn,$filename,$resdir,$pubstatus,$publish_button,$numres);
       }
     $r->print(&Apache::loncommon::start_data_table_row().      $r->print(&Apache::loncommon::start_data_table_row().
       '<td>'.($filename=~/[\#\~]$/?'&nbsp;':        '<td>'.($filename=~/[\#\~]$/?'&nbsp;':
       '<img src="'.&Apache::loncommon::icon($filename).'" alt="" />').'</td>'.        '<img src="'.&Apache::loncommon::icon($filename).'" alt="" />').'</td>'.
               '<td>'.$pub_select.'</td>'.                '<td>'.$pub_select.'</td>'.
       '<td><span class="LC_filename">'.        '<td><span class="LC_filename">'.
       '<a href="'.$linkdir.'/'.$filename.'" target="_parent">'.        '<a href="'.$linkdir.'/'.$filename.'">'.
                $filename.'</a></span>'.$editlink2.$editlink.                 $filename.'</a></span>'.$editlink2.$editlink.
       '</td>'.        '</td>'.
       '<td>'.$title.'</td>'.        '<td>'.$title.'</td>'.
Line 977  sub create_pubselect { Line 978  sub create_pubselect {
 <option>'.&mt('Select action').'</option>'.  <option>'.&mt('Select action').'</option>'.
 '<option value="copy">'.&mt('Copy').'</option>';  '<option value="copy">'.&mt('Copy').'</option>';
     if ($pubstatus eq 'obsolete' || $pubstatus eq 'unpublished') {      if ($pubstatus eq 'obsolete' || $pubstatus eq 'unpublished') {
         $$pub_select .=           $$pub_select .=
 '<option value="rename">'.&mt('Rename').'</option>'.  '<option value="rename">'.&mt('Rename').'</option>'.
 '<option value="move">'.&mt('Move').'</option>'.  '<option value="move">'.&mt('Move').'</option>'.
 '<option value="delete">'.&mt('Delete').'</option>';  '<option value="delete">'.&mt('Delete').'</option>';
Line 1016  sub check_for_versions { Line 1017  sub check_for_versions {
     opendir(DIR,$resdir);      opendir(DIR,$resdir);
     while (my $filename=readdir(DIR)) {      while (my $filename=readdir(DIR)) {
         if ($filename=~/^\Q$main\E\.(\d+)\.\Q$suffix\E$/) {          if ($filename=~/^\Q$main\E\.(\d+)\.\Q$suffix\E$/) {
             $versions ++;                      $versions ++;
         }          }
     }      }
     closedir(DIR);      closedir(DIR);
Line 1024  sub check_for_versions { Line 1025  sub check_for_versions {
 }  }
   
 sub prepareJsonTranslations {  sub prepareJsonTranslations {
     my $json =       my $json =
         '{"translations":{'.          '{"translations":{'.
             '"edit":"'.&mt('Edit').'",'.              '"edit":"'.&mt('Edit').'",'.
             '"editxml":"'.&mt('EditXML').'",'.              '"editxml":"'.&mt('EditXML').'",'.
Line 1095  sub prepareJsonData_rec { Line 1096  sub prepareJsonData_rec {
     closedir(DIR);      closedir(DIR);
     # nothing to do here if both lists are empty      # nothing to do here if both lists are empty
     return unless ( @dirs || @resources );      return unless ( @dirs || @resources );
       
 # Phase 2: Working  # Phase 2: Working
     $$firstfile = 1;      $$firstfile = 1;
   
Line 1217  run through list of files and attempt to Line 1218  run through list of files and attempt to
 =item startpage($r, $uame, $udom, $thisdisfn)  =item startpage($r, $uame, $udom, $thisdisfn)
   
 Output the header of the page.  This includes:  Output the header of the page.  This includes:
  - The HTML header    - The HTML header
  - The H1/H3  stuff which includes the directory.   - The H1/H3  stuff which includes the directory.
    
     startpage($r, $uame, $udom, $thisdisfn);      startpage($r, $uame, $udom, $thisdisfn);
         $r     - The apache request object.          $r     - The apache request object.
         $uname - User name.          $uname - User name.
Line 1232  Output the header of the page.  This inc Line 1233  Output the header of the page.  This inc
     Without the latter substitution, it's impossible to examine metadata for      Without the latter substitution, it's impossible to examine metadata for
     untitled resources.  Resources may be legitimately untitled, to prevent      untitled resources.  Resources may be legitimately untitled, to prevent
     searches from locating them.      searches from locating them.
       
     $str = getTitleString($fullname);      $str = getTitleString($fullname);
         $fullname - Fully qualified filename to check.          $fullname - Fully qualified filename to check.
   
Line 1240  Output the header of the page.  This inc Line 1241  Output the header of the page.  This inc
                    $numdir)                     $numdir)
   
     Put out a directory table row:      Put out a directory table row:
       
         $r        - Apache request object.          $r        - Apache request object.
         $reqfile  - File in request.          $reqfile  - File in request.
         $here     - Where we are in directory tree.          $here     - Where we are in directory tree.

Removed from v.1.171  
changed lines
  Added in v.1.180


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