Diff for /loncom/publisher/lonpubdir.pm between versions 1.173 and 1.182

version 1.173, 2019/08/13 16:59:12 version 1.182, 2023/11/28 22:28:05
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 104  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) {
Line 128  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 192  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 237  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 267  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 301  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 310  my $result = "<script type=\"text/javasc Line 315  my $result = "<script type=\"text/javasc
     }      }
   
     # Print the sorted resources      # Print the sorted resources
       my %editors = &Apache::loncommon::permitted_editors();
     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"},
                 $filehash->{$filename}->{"pubstatus"});                  $filehash->{$filename}->{"pubstatus"},
                   \%editors);
         }          }
     }      }
   
Line 342  my $result = "<script type=\"text/javasc Line 350  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 381  sub startpage { Line 389  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 410  parent.lastknownpriv='/priv$esc_thisdisf Line 422  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 512  ENDPUBDIRSCRIPT Line 505  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 541  sub dircontrols { Line 531  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" size="20" />          <input type="file" name="upfile" class="LC_flUpload" />
         <input type="hidden" id="LC_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>
Line 592  sub dircontrols { Line 604  sub dircontrols {
   </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 607  sub dircontrols { Line 619  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 661  sub dircontrols { Line 671  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 680  END Line 678  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 750  sub putdirectory { Line 748  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 775  sub putdirectory { Line 773  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 796  sub putdirectory { Line 794  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 829  sub getTitle { Line 827  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 848  sub isMetaSame { Line 846  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 881  sub getStatus { Line 878  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 899  sub getStatus { Line 898  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 920  sub getStatus { Line 923  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,
           $editors) = @_;
     &Apache::lonnet::devalidate_cache_new('meta',$targetdir.'/'.$filename);      &Apache::lonnet::devalidate_cache_new('meta',$targetdir.'/'.$filename);
   
     my $editlink='';      my $editlink='';
     my $editlink2='';      my $editlink2='';
     if ($filename=~/\.(xml|html|htm|xhtml|xhtm|sty)$/) {      if ($filename=~/\.(xml|html|htm|xhtml|xhtm|sty|txt|css|js)$/) {
  $editlink=' <br />(<a href="'.$linkdir.'/'.$filename.'?editmode=Edit&amp;problemmode=edit">'.&mt('Edit').'</a>)';   $editlink=' <br />(<a href="'.$linkdir.'/'.$filename.'?editmode=Edit&amp;problemmode=edit">'.&mt('Edit').'</a>)';
     }      }
     if ($filename=~/$LONCAPA::assess_re/) {      if ($filename=~/$LONCAPA::assess_re/) {
  $editlink=' (<a href="'.$linkdir.'/'.$filename.'?editmode=Edit&amp;problemmode=editxml">'.&mt('EditXML').'</a>)';          if ($editors->{'xml'}) { 
  $editlink2=' <br />(<a href="'.$linkdir.'/'.$filename.'?editmode=Edit&amp;problemmode=edit">'.&mt('Edit').'</a>)';      $editlink=' (<a href="'.$linkdir.'/'.$filename.'?editmode=Edit&amp;problemmode=editxml">'.&mt('EditXML').'</a>)';
           }
           if ($editors->{'edit'}) {
       $editlink2=' <br />(<a href="'.$linkdir.'/'.$filename.'?editmode=Edit&amp;problemmode=edit">'.&mt('Edit').'</a>)';
           }
     }      }
     if ($filename=~/\.(xml|html|htm|xhtml|xhtm)$/ || $filename=~/$LONCAPA::assess_re/) {      if ($filename=~/\.(xml|html|htm|xhtml|xhtm)$/ || $filename=~/$LONCAPA::assess_re/) {
         if ($env{'browser.type'} ne 'explorer' || $env{'browser.version'} > 9) {          if (($editors->{'daxe'}) &&
               ($env{'browser.type'} ne 'explorer' || $env{'browser.version'} > 9)) {
             my $daxeurl = '/daxepage'.$linkdir.'/'.$filename;              my $daxeurl = '/daxepage'.$linkdir.'/'.$filename;
             $editlink .= ' (<a href="'.$daxeurl.'" target="_blank">Daxe</a>)';              $editlink .= ' (<a href="'.$daxeurl.'">Daxe</a>)';
         }          }
     }      }
     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 975  sub create_pubselect { Line 986  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 1014  sub check_for_versions { Line 1025  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 1022  sub check_for_versions { Line 1033  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 1093  sub prepareJsonData_rec { Line 1104  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 1215  run through list of files and attempt to Line 1226  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 1230  Output the header of the page.  This inc Line 1241  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 1238  Output the header of the page.  This inc Line 1249  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.173  
changed lines
  Added in v.1.182


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