Diff for /loncom/publisher/lonpubdir.pm between versions 1.160.2.5.2.3 and 1.161

version 1.160.2.5.2.3, 2024/02/28 04:58:02 version 1.161, 2014/10/13 14:50:42
Line 80  sub handler { Line 80  sub handler {
         }          }
     }      }
     $thisdisfn=~s/^\Q$docroot\E\/priv//;      $thisdisfn=~s/^\Q$docroot\E\/priv//;
       
     my $resdir=$docroot.'/res'.$thisdisfn; # Resource directory      my $resdir=$docroot.'/res'.$thisdisfn; # Resource directory
     my $targetdir='/res'.$thisdisfn; # Publication target directory.      my $targetdir='/res'.$thisdisfn; # Publication target directory.
     my $linkdir='/priv'.$thisdisfn;      # Full URL name of constr space.      my $linkdir='/priv'.$thisdisfn;      # Full URL name of constr space.
   
     my %bombs=&Apache::lonmsg::all_url_author_res_msg($uname,$udom);      my %bombs=&Apache::lonmsg::all_url_author_res_msg($uname,$udom);
   
     my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};      &startpage($r, $uname, $udom, $thisdisfn);  # Put out the start of page.
     my $current_disk_usage = &Apache::lonnet::diskusage($udom,$uname,  
                                 "$londocroot/priv/$udom/$uname"); # expressed in kB  
     my $disk_quota = &Apache::loncommon::get_user_quota($uname,$udom,  
                                                  'author'); # expressed in MB  
   
     # Put out the start of page.  
     &startpage($r, $uname, $udom, $thisdisfn, $current_disk_usage, $disk_quota);  
   
     if (!-d $fn) {      if (!-d $fn) {
         if (-e $fn) {          if (-e $fn) {
Line 115  sub handler { Line 108  sub handler {
         return OK;          return OK;
     }      }
   
     # Put out actions for directory, browse/upload + new file page.      &dircontrols($r,$uname,$udom,$thisdisfn);   # Put out actions for directory, 
     &dircontrols($r,$uname,$udom,$thisdisfn, $current_disk_usage, $disk_quota);                                                  # browse/upload + new file page.
     &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;
Line 194  sub handler { Line 187  sub handler {
         } else { $idx = 2; } # No arrow if column is not sorted          } else { $idx = 2; } # No arrow if column is not sorted
         $output .= (($columns{$key}{order}) ?          $output .= (($columns{$key}{order}) ?
             '<th'.($columns{$key}{colspan} ? ' colspan="'.$columns{$key}{colspan}.'"' : '')              '<th'.($columns{$key}{colspan} ? ' colspan="'.$columns{$key}{colspan}.'"' : '')
             .'><a href="'.$linkdir.'/?sortby='.$key.'&amp;sortorder='              .'><a href="'.$linkdir.'/?sortby='.$key.'&sortorder='
             .((($sortby eq $key) && ($sortorder ne 'rev')) ? 'rev' : '').'">'              .((($sortby eq $key) && ($sortorder ne 'rev')) ? 'rev' : '').'">'
             .$columns{$key}{text}.$arrows[$idx].'</a></th>' :              .$columns{$key}{text}.$arrows[$idx].'</a></th>' :
             '<th>'.$columns{$key}{text}.'</th>');              '<th>'.$columns{$key}{text}.'</th>');
     }      }
     $r->print(&Apache::loncommon::start_data_table()  
   my $result = "<script>
       sessionStorage.setItem('CSTRcache','".&prepareJsonData($uname,$udom,$thisdisfn)."');
       localStorage.setItem('CSTRtrans', '".&prepareJsonTranslations()."');
   </script>";
       $r->print($result);
   
       $r->print('<div id="currentFolder">'.&Apache::loncommon::start_data_table()
           .'<th colspan=8 id="searchtitle" style="display:none"></th>'
         .&Apache::loncommon::start_data_table_header_row() . $output          .&Apache::loncommon::start_data_table_header_row() . $output
         .&Apache::loncommon::end_data_table_header_row()          .&Apache::loncommon::end_data_table_header_row()
     );      );
Line 290  sub handler { Line 291  sub handler {
     }      }
   
     # 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, 
Line 303  sub handler { Line 303  sub handler {
                 $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);  
         }          }
     }      }
   
     $r->print( &Apache::loncommon::end_data_table()    $r->print(&Apache::loncommon::end_data_table()
         .&Apache::loncommon::end_page() );             .'</div><div id="otherplaces" style="display:none">'
              .&Apache::loncommon::start_data_table()
     return OK;             .'<th colspan=7>'.&mt('Results in other directories:').'</th>'
              .'<tr class="LC_header_row" id="otherplacestable">'
              .'<th>'.&mt('Type').'</th>'
              .'<th>'.&mt('Directory').'</th>'
              .'<th>'.&mt('Name').'</th>'
              .'<th>'.&mt('Title').'</th>'
              .'<th colspan="2">'.&mt('Status').'</th>'
              .'<th>'.&mt('Last Modified').'</th>'
              .'</tr>'
              .'</div>'
              .&Apache::loncommon::end_page()
     );
     return OK;  
 }  }
   
   
Line 320  sub handler { Line 331  sub handler {
 #   - 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);
 #      $r     - The apache request object.  #      $r     - The apache request object.
 #      $uname - User name.  #      $uname - User name.
 #      $udom  - Domain name the user is logged in under.  #      $udom  - Domain name the user is logged in under.
 #      $thisdisfn - Displayable version of the filename.  #      $thisdisfn - Displayable version of the filename.
 #      $current_disk_usage - User's current disk usage (in kB).  
 #      $disk_quota - Disk quota for user's authoring space (in MB).  
 #      $crstype - Course type, if this is for "course author"  
   
 sub startpage {  sub startpage {
     my ($r, $uname, $udom, $thisdisfn, $current_disk_usage, $disk_quota) = @_;      my ($r, $uname, $udom, $thisdisfn) = @_;
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
   
Line 352  sub startpage { Line 360  sub startpage {
     my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};      my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};
     my $current_disk_usage = &Apache::lonnet::diskusage($udom,$uname,"$londocroot/priv/$udom/$uname");      my $current_disk_usage = &Apache::lonnet::diskusage($udom,$uname,"$londocroot/priv/$udom/$uname");
     my $disk_quota = &Apache::loncommon::get_user_quota($uname,$udom,'author'); #expressed in MB      my $disk_quota = &Apache::loncommon::get_user_quota($uname,$udom,'author'); #expressed in MB
     $disk_quota = 1024 * $disk_quota; # convert from MB to kB      $disk_quota = 1000 * $disk_quota; # convert from MB to kB
   
     $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)
                                                            $disk_quota,'authoring')  
                     .'</div>'                      .'</div>'
                     .&Apache::loncommon::CSTR_pageheader()));                      .&Apache::loncommon::CSTR_pageheader()));
   
Line 475  ENDPUBDIRSCRIPT Line 482  ENDPUBDIRSCRIPT
 }  }
   
 sub dircontrols {  sub dircontrols {
     my ($r,$uname,$udom,$thisdisfn, $current_disk_usage, $disk_quota) = @_;      my ($r,$uname,$udom,$thisdisfn) = @_;
     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',
Line 506  sub dircontrols { Line 513  sub dircontrols {
                                        go   => 'Go',                                         go   => 'Go',
                                        prnt => 'Print contents of directory',                                         prnt => 'Print contents of directory',
                                        crea => 'Create a new directory or LON-CAPA document',                                         crea => 'Create a new directory or LON-CAPA document',
                                          qs   => 'Quick Search',
                                          cs   => 'Case Sensitive',
                                          re   => 'Regular Expression',
        acti => 'Actions for current directory',         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',
                                       );                                        );
     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.      $r->printf(<<END,&Apache::loncommon::help_open_topic('Quicksearch'));
     # $disk_quota is in MB and $current_disk_usage is in kB  
     my $free_space = 1024 * ((1024 * $disk_quota) - $current_disk_usage);  
     $r->print(<<END);  
 <div class="LC_columnSection">  <div class="LC_columnSection">
   <div>    <div>
     <form name="curractions" method="post" action="">      <form name="curractions" method="post" action="">
Line 530  sub dircontrols { Line 537  sub dircontrols {
         <input type="hidden" name="filename" value="/priv$thisdisfn/" />          <input type="hidden" name="filename" value="/priv$thisdisfn/" />
       </fieldset>        </fieldset>
     </form>      </form>
     <form name="publishdir" method="post" action="/adm/publish">      <form name="publishdir" method="post" action="/adm/publish" target="_parent">
       <input type="hidden" name="pubrec" value="" />        <input type="hidden" name="pubrec" value="" />
       <input type="hidden" name="filename" value="" />        <input type="hidden" name="filename" value="" />
     </form>      </form>
     <form name="printdir" method="post" action="/adm/printout">      <form name="printdir" method="post" action="/adm/printout" target="_parent">
       <input type="hidden" name="postdata" value="" />        <input type="hidden" name="postdata" value="" />
     </form>      </form>
   </div>    </div>
   
   <div style="padding-bottom: 2px">    <div>
     <form name="upublisher" enctype="multipart/form-data" method="post" action="/adm/upload">      <form name="upublisher" enctype="multipart/form-data" method="post" action="/adm/upload" target="_parent">
       <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" size="20" />
         <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">      <form name="fileaction" method="post" action="/adm/cfile" target="_parent">
       <fieldset>        <fieldset>
               <legend>$lt{'crea'}</legend>                <legend>$lt{'crea'}</legend>
       <span class="LC_nobreak">        <span class="LC_nobreak">
Line 579  sub dircontrols { Line 585  sub dircontrols {
                     <option value="newtaskfile">$lt{'nbt'}:</option>                      <option value="newtaskfile">$lt{'nbt'}:</option>
                     <option value="newlibraryfile">$lt{'nlib'}:</option>                      <option value="newlibraryfile">$lt{'nlib'}:</option>
             <option value="newdir">$lt{'nsub'}:</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();" />    </select>&nbsp;<input type="text" name="newfilename" value="$lt{'type'}" onfocus="if (this.value == '$mytype') this.value=''" />&nbsp;<input type="button" value="Go" onclick="validate_go();" />
                 <br />  
                 <span>Quickactions:  
                  <input type="hidden" name="mode"/>  
                  <a href="javascript:void(0)" onclick="javascript:validate_action('blank')">  
                     <img src="/adm/lonIcons/unknown.gif" title="Create blank problem file"></a>  
                  <a href="javascript:void(0)" onclick="javascript:validate_action('problemtempl')">  
                     <img src="/adm/lonIcons/problem.gif" title="Create new problem from template"></a>  
                  <a href="javascript:void(0)" onclick="javascript:validate_action('blankhtml')">  
                     <img src="/adm/lonIcons/html.gif" title="Create new blank HTML file"></a>  
                  <a href="javascript:void(0)" onclick="javascript:validate_action('folder')">  
                     <img src="/adm/lonIcons/navmap.folder.closed.gif" title="Create new subdirectory"></a>  
                 </span>  
                  <script type="text/javascript">  
                      function validate_action(action){  
   
                          if (document.getElementsByName(\'newfilename\')[0].value != \'\'){  
                              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(\'Please specify file name.\');  
                              // TODO: ask for filename? if so, do some refactoring  
   
                          }  
                      }  
                  </script>  
  </span>   </span>
       </fieldset>        </fieldset>
     </form>      </form>
       </div>
       <div>
           <form>
             <fieldset style="display:inline">
                   <legend>$lt{'qs'}</legend>
                       <script 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>
           </form>
   </div>    </div>
 </div>  </div>
 END  END
Line 628  END Line 611  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" method="post">         <form name="moveresource" action="/adm/cfile" target="_parent" 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" method="post">         <form name="delresource" action="/adm/cfile" target="_parent" 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" method="post">         <form name="pubresource" action="/adm/publish" target="_parent" 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" method="post">         <form name="printresource" action="/adm/printout" target="_parent" method="post">
            <input type="hidden" name="postdata" value="" />             <input type="hidden" name="postdata" value="" />
        </form>         </form>
        <form name="retrieveres" action="/adm/retrieve" method="post">         <form name="retrieveres" action="/adm/retrieve" target="_parent" method="post">
            <input type="hidden" name="filename" value="" />             <input type="hidden" name="filename" value="" />
        </form>         </form>
        <form name="cleanup" action="/adm/cleanup" method="post">         <form name="cleanup" action="/adm/cleanup" target="_parent" method="post">
            <input type="hidden" name="filename" value="" />             <input type="hidden" name="filename" value="" />
        </form>         </form>
 END  END
Line 725  sub putdirectory { Line 708  sub putdirectory {
         } else {          } else {
             $actionitem =               $actionitem = 
                     '<form name="dirselect_'.$$numdir.                      '<form name="dirselect_'.$$numdir.
                     '" action="/adm/publish">'.                      '" action="/adm/publish" target="_parent">'.
                     '<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 744  sub putdirectory { Line 727  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,'<>&"').'/">'.    '<td><span class="LC_filename"><a href="'.&HTML::Entities::encode($here.'/'.$dirname,'<>&"').'/" target="_parent">'.
   $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 870  sub getStatus { Line 853  sub getStatus {
 sub putresource {  sub putresource {
     my ($r, $udom, $uname, $filename, $thisdisfn, $resdir, $targetdir,       my ($r, $udom, $uname, $filename, $thisdisfn, $resdir, $targetdir, 
             $linkdir, $cmtime, $size, $numres, $linkfilename, $title,               $linkdir, $cmtime, $size, $numres, $linkfilename, $title, 
             $status, $pubstatus, $editors) = @_;              $status, $pubstatus) = @_;
     &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|txt|css|js)$/) {      if ($filename=~/\.(xml|html|htm|xhtml|xhtm|sty)$/) {
  $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/) {
         if ($editors->{'xml'}) {   $editlink=' (<a href="'.$linkdir.'/'.$filename.'?editmode=Edit&amp;problemmode=editxml">'.&mt('EditXML').'</a>)';
     $editlink=' (<a href="'.$linkdir.'/'.$filename.'?editmode=Edit&amp;problemmode=editxml">'.&mt('EditXML').'</a>)';   $editlink2=' <br />(<a href="'.$linkdir.'/'.$filename.'?editmode=Edit&amp;problemmode=edit">'.&mt('Edit').'</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 (($editors->{'daxe'}) &&  
             ($env{'browser.type'} ne 'explorer' || $env{'browser.version'} > 9)) {  
             my $daxeurl = '/daxepage'.$linkdir.'/'.$filename;  
             $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.'">'.&mt('Clean Up').')</a>';   $editlink.=' (<a href="/adm/cleanup?filename='.$linkfilename.'" target="_parent">'.&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 href="/adm/cfile?decompress='.$linkfilename.'">'.&mt('Decompress').'</a>)';   $editlink=' (<a target="_parent" 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 = '';
Line 907  sub putresource { Line 879  sub putresource {
       '<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.'">'.        '<a href="'.$linkdir.'/'.$filename.'" target="_parent">'.
                $filename.'</a></span>'.$editlink2.$editlink.                 $filename.'</a></span>'.$editlink2.$editlink.
       '</td>'.        '</td>'.
       '<td>'.$title.'</td>'.        '<td>'.$title.'</td>'.
Line 974  sub check_for_versions { Line 946  sub check_for_versions {
     return $versions;      return $versions;
 }  }
   
   sub prepareJsonTranslations {
       my $json = 
           '{"translations":{'.
               '"edit":"'.&mt('Edit').'",'.
               '"editxml":"'.&mt('EditXML').'",'.
               '"editmeta":"'.&mt('Edit Metadata').'",'.
               '"obsolete":"'.&mt('Obsolete').'",'.
               '"modified":"'.&mt('Modified').'",'.
               '"published":"'.&mt('Published').'",'.
               '"unpublished":"'.&mt('Unpublished').'",'.
               '"diff":"'.&mt('Diff').'",'.
               '"retrieve":"'.&mt('Retrieve').'",'.
               '"directory":"'.&mt('Directory').'",'.
               '"results":"'.&mt('Show results for keyword:').'"'.
           '}}';
   }
   
   # gathers all files in the working directory except the ones that are already on screen
   sub prepareJsonData {
       my ($uname, $udom, $pathToSkip) = @_;
       my $path = "/home/httpd/html/priv/$udom/$uname/";
   
       # maximum number of entries, to limit workload and required storage space
       my $entries = 100;
       my $firstfile = 1;
       my $firstdir = 1;
   
       my $json = '{"resources":[';
       $json .= &prepareJsonData_rec($path, \$entries, \$firstfile, \$firstdir, $pathToSkip);
       $json .= ']}';
   
       # if the json string is invalid the whole search breaks.
       # so we want to make sure that the string is valid in any case.
       $json =~ s/,\s*,/,/g;
       $json =~ s/\}\s*\{/\},\{/g;
       $json =~ s/\}\s*,\s*\]/\}\]/g;
       return $json;
   }
   
   # recursive part of json file gathering
   sub prepareJsonData_rec {
       my ($path, $entries, $firstfile, $firstdir, $pathToSkip) = @_;
       my $json;
       my $skipThisFolder = $path =~ m/$pathToSkip\/$/?1:0;
   
       my @dirs;
       my @resources;
       my @ignored = qw(bak log meta save . ..);
   
   # Phase 1: Gathering
       opendir(DIR,$path);
       my @files=sort {uc($a) cmp uc($b)} (readdir(DIR));
       foreach my $filename (@files) {
           next if ($filename eq '.DS_Store');
   
           # gather all resources
           if ($filename !~ /\./) {
               # its a folder
               push(@dirs, $filename);
           } else {
               # only push files we dont want to ignore
               next if ($skipThisFolder);
   
               $filename =~ /\.(\w+?)$/;
               unless (grep /$1/, @ignored) {
                   push(@resources, $filename);
               }
           }
       }
       closedir(DIR);
       # nothing to do here if both lists are empty
       return unless ( @dirs || @resources );
       
   # Phase 2: Working
       $$firstfile = 1;
   
       foreach (@dirs) {
           $json .= '{"name":"'.$_.'",'.
                     '"path":"'.$path.$_.'",'.
                     '"title":"",'.
                     '"status":"",'.
                     '"cmtime":""},';
       }
   
       foreach (@resources) {
           last if ($$entries < 1);
           my $title = &getTitleString($path.$_);
   
           my $privpath = $path.$_;
           my $respath = $privpath;
           $respath =~ s/httpd\/html\/priv\//httpd\/html\/res\//;
   
           my $cmtime = (stat($privpath))[9];
           my $rmtime = (stat($respath))[9];
   
           unless ($$firstfile) { $json .= ','; } else { $$firstfile = 0; }
   
           my $status = 'unpublished';
   
           # if a resource is published, the published version (/html/res/filepath) gets its own modification time
           # this is newer or equal then the version in your authoring space (/html/priv/filepath)
           if ($rmtime >= $cmtime) {
               # obsolete
               if (&Apache::lonnet::metadata($respath, 'obsolete')) {
                   $status = 'obsolete';
               }else{
                   $status = 'published';
               }
           } else {
               $status = 'modified';
           }
   
           $json .= '{"name":"'.$_.'",'.
                     '"path":"'.$path.'",'.
                     '"title":"'.$title.'",'.
                     '"status":"'.$status.'",'.
                     '"cmtime":"'.&Apache::lonlocal::locallocaltime($cmtime).'"}';
           $$entries--;
       }
   
       foreach(@dirs) {
           next if ($$entries < 1);
           $json .= ',';
           $json .= &prepareJsonData_rec
                       ($path.$_.'/', $entries, $firstfile, $firstdir, $pathToSkip);
       }
       return $json;
   }
 1;  1;
 __END__  __END__
   

Removed from v.1.160.2.5.2.3  
changed lines
  Added in v.1.161


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