/[docman]/docman.php
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /docman.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.13 by dpavlin, Wed Sep 6 10:49:15 2000 UTC revision 1.54 by dpavlin, Fri Jan 11 16:02:06 2002 UTC
# Line 35  Line 35 
35  /*             existent address after file modifications.       */  /*             existent address after file modifications.       */
36    
37  /*  /*
         2000-07-25 Dobrica Pavlinusic <dpavlin@rot13.org>  
38    
39          nuked exec calls (unsecure)          This project is now called Directory Manager.
         nuked writeable function (replaced by php is_writeable)  
         added support for https (tested with apache+mod_ssl)  
         added users file  
         date format user-selectable  
         cycle backup files in bak directory  
         support links as directoryes (for now)  
         support of file history logging  
         undelete capabilities (delete moves to .del directory)  
40    
41          2000-07-26 DbP          For more info, please see web pages at
42            http://www.rot13.org/~dpavlin/docman.html
43    
44          added more checking on entered filename (when creating file/dir)          It's relased under GPL by
45          added rename option          Dobrica Pavlinusic <dpavlin@rot13.org>
46    
47    
48  IMPORTANT INSTALLATION NOTE:  IMPORTANT INSTALLATION NOTE:
# Line 59  IMPORTANT INSTALLATION NOTE: Line 51  IMPORTANT INSTALLATION NOTE:
51          deleted files!          deleted files!
52    
53          .htusers is in form:          .htusers is in form:
54          login:Real Name:md5(loginpassword)          login:Real Name:[md5(loginpassword)|auth_*]:email@host.dom
55    
56    
57  TODO:  TODO:
58          mixed file/directory output (add type to each entry,          mixed file/directory output (add type to each entry,
59                  real support for links)                  real support for links)
60          retrieve old versions of files (overwritten)          access controll
61          show last lock date  
           
62  */  */
63    
64  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
# Line 80  TODO: Line 71  TODO:
71    
72  // GLOBAL PARAMETERS  // GLOBAL PARAMETERS
73  // =================  // =================
74  // Make modifications here to suit siteman to your needs  // Make modifications here to suit docman to your needs
75    
76  //      error_reporting(4) ;            // how verbose ?  //      error_reporting(4) ;            // how verbose ?
77    
78          // username/password should not be system          // from where to include auth_*.php modules?
79          // usernames/passwords !!          $gblIncDir = "/home/httpd/docman";
80    
81  //      $gblPw    = "hash_of_your_username_and_password" ;          // do we want to force download? (default is 0 for backward
82            // compatibility, but it's defined as 1 in docman.conf for all
83            // future applications!
84            $gblForceDownload = 0;
85    
86  //      $gblAuth  = false ;             // use builtin authentication          // username/password should not be system
87          $gblAuth  = true ;             // use builtin authentication          // usernames/passwords !!
         $gblHash  = "md5" ;             // hash function to use  
88    
89          $gblPw    = "";          $gblPw    = "";
90    
91          if ($gblAuth) {          // date format
                 $htusers_file=dirname($SCRIPT_FILENAME)."/.htusers";  
                 if (! file_exists($htusers_file)) {  
                         $htusers=fopen($htusers_file,"a+");  
                         fputs($htusers,"# Change owner of $htusers_file to root !!\n");  
                         fputs($htusers,"demo:full name:md5_hash\n");  
                         fclose($htusers);  
                 }  
                 $htusers=fopen($htusers_file,"r");  
                 while($user = fgetcsv($htusers,255,":")) {  
                         if ($user[0] == $GLOBALS["PHP_AUTH_USER"]) {  
                                 $gblUserName=$user[1];  
                                 $gblPw=$user[2];  
                                 continue ;  
                         }  
                 }  
                 fclose($htusers);  
         }  
   
92  //      $gblDateFmt="D, F d, Y";  //      $gblDateFmt="D, F d, Y";
 //      $gblTimeFmt="g:i:sA";  
   
93          $gblDateFmt="Y-m-d";          $gblDateFmt="Y-m-d";
94    
95            // time format
96    //      $gblTimeFmt="g:i:sA";
97          $gblTimeFmt="H:i:s";          $gblTimeFmt="H:i:s";
98    
99  // Number of backup files to keep          // Number of backup files to keep
100          $gblNumBackups=5;          $gblNumBackups=3;
101    
102            // show red star if newer than ... days
103            $gblModDays=1;
104    
105          // choose GifIcon below unless you have the M$          // choose GifIcon below unless you have the M$
106          // WingDings font installed on your system          // WingDings font installed on your system
107    
108          $gblIcon = "GifIcon" ;          // MockIcon or GifIcon          $gblIcon="GifIcon";             // MockIcon or GifIcon
109    
110          // the directory below should be /icons/ or /icons/small/          // the directory below should be /icons/ or /icons/small/
111          // on Apache; a set of icons is included in the distribution          // on Apache; a set of icons is included in the distribution
112    
113          $gblIconLocation = "/icons/" ;          $gblIconLocation="/icons/";
114    
115          // files you want to be able to edit in text mode          // files you want to be able to edit in text mode
116          // and view with (primitive) syntax highlighting          // and view with (primitive) syntax highlighting
# Line 146  TODO: Line 125  TODO:
125          $gblImages   = array( ".jpg",".jpeg",".gif",".png",".ico",          $gblImages   = array( ".jpg",".jpeg",".gif",".png",".ico",
126                                ".bmp",".xbm") ;                                ".bmp",".xbm") ;
127    
128            // which files to hide (separated by ,)
129            $gblHide = "";
130    
131            // Where are users? (by default in .htusers file)
132            $gblUsers = "htusers_file";
133    
134  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
135    
136            $gblVersion = "1.8";
137    
138  function StartHTML($title,$text="") {  function StartHTML($title,$text="") {
139    
140          $title = "Site Manager " . $title ;          $title = "Document Manager " . $title ;
141          $host  = $GLOBALS["HTTP_HOST"] ;          $host  = $GLOBALS["HTTP_HOST"] ;
142          $self  = $GLOBALS["PHP_SELF"] ;          $self  = $GLOBALS["PHP_SELF"] ;
143  ?>  ?>
# Line 158  function StartHTML($title,$text="") { Line 145  function StartHTML($title,$text="") {
145  <HTML>  <HTML>
146  <HEAD>  <HEAD>
147   <TITLE><?= $host . " " . $title ?></TITLE>   <TITLE><?= $host . " " . $title ?></TITLE>
148   <META NAME="description" CONTENT="PHP port of AnyPortal Site Manager">   <META NAME="description" CONTENT="Document Manager">
149   <META NAME="keywords" CONTENT="site manager, web site maintenance">   <META NAME="keywords" CONTENT="site manager, web site maintenance">
150   <META NAME="robots" CONTENT="noindex">   <META NAME="robots" CONTENT="noindex">
151   <META HTTP-EQUIV="expires" CONTENT="0">   <META HTTP-EQUIV="expires" CONTENT="0">
# Line 177  function StartHTML($title,$text="") { Line 164  function StartHTML($title,$text="") {
164  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
165    
166  function EndHTML() {  function EndHTML() {
167    
168    global $gblDateFmt, $gblTimeFmt, $gblUserName, $PHP_SELF, $gblPw, $gblVersion;
169    
170  ?>  ?>
171    
172  <HR>  <HR>
173  <P CLASS=FTR>  <P CLASS=FTR>
174  <B><?= date($GLOBALS[gblDateFmt]) ?> -  <B><?= date($gblDateFmt) ?> -
175  <?= date($GLOBALS[gblTimeFmt]) ?> -  <?= date($gblTimeFmt) ?> -
176  <?= $GLOBALS[gblUserName] ?>  <?= $gblUserName ?>
177  <small> [<a href="<?= $GLOBALS["PHP_SELF"] ?>?relogin=<?= $GLOBALS[gblPw] ?>">logout</a>]</small>  <?php
178            global $PHP_AUTH_USER,$PHP_AUTH_PW;
179            $url = $PHP_SELF."?relogin=";
180            if (isset($gblPw) && $gblPw != "") {
181                    $url .= $gblPw;
182            } else {
183                    $url .= md5($PHP_AUTH_USER.$PHP_AUTH_PW);
184            }
185            if (isset($PHP_AUTH_USER) && $PHP_AUTH_USER != "" && ($PHP_AUTH_PW == "" || !isset($PHP_AUTH_PW))) {
186                    $url_title="login";
187                    $url .= "&force_login=1";
188            } else {
189                    $url_title="relogin";
190            }
191    ?>
192    <small> [<a href="<?= $url ?>"><?= $url_title ?></a>]</small>
193  </B>  </B>
194  <BR>ANYPORTAL(php) Site Manager  <BR><small>
195  <br><small>  Document Manager <?= $gblVersion ?>, based on ANYPORTAL(php) Site Manager
196    <br>
197  &copy; 1999 by <A HREF="http://www.anyportal.com">ANYPORTAL</A>,  &copy; 1999 by <A HREF="http://www.anyportal.com">ANYPORTAL</A>,
198  &copy; 2000 by <A HREF="http://da.nger.org">d@nger.org</A>,  &copy; 2000 by <A HREF="http://da.nger.org">d@nger.org</A>,
199  &copy; 2000 by <A HREF="http://www.rot13.org/~dpavlin/">DbP</A>  &copy; 2000-2002 by <A HREF="http://www.rot13.org/~dpavlin/">DbP</A>
200  </small>  </small>
201  </P>  </P>
202  <BR>  <BR>
# Line 229  A:HOVER { color:red; } Line 235  A:HOVER { color:red; }
235    
236  function DetailPage($fsRoot,$relDir,$fn) {  function DetailPage($fsRoot,$relDir,$fn) {
237                    
238          global $gblEditable, $gblImages ;          global $gblEditable, $gblImages, $webRoot ;
239          $self = $GLOBALS["PHP_SELF"] ;          $self = $GLOBALS["PHP_SELF"] ;
240    
241          $relPath  = $relDir . "/" . $fn ;          $relPath  = $relDir . "/" . $fn ;
# Line 248  function DetailPage($fsRoot,$relDir,$fn) Line 254  function DetailPage($fsRoot,$relDir,$fn)
254                  Error("Creation denied",$relDir) ;                  Error("Creation denied",$relDir) ;
255    
256          $text  = "Use this page to view, modify or " ;          $text  = "Use this page to view, modify or " ;
257          $text .= "delete a single document on this " ;          if (is_dir($fsPath)) {
258                    $text .="delete a directory on this " ;
259            } else {
260                    $text .= "delete a single document on this " ;
261            };
262          $text .= "web site." ;            $text .= "web site." ;  
263          $title = "(Detail Page)" ;          $title = "(Detail Page)" ;
264          StartHTML($title, $text) ;          StartHTML($title, $text) ;
# Line 258  function DetailPage($fsRoot,$relDir,$fn) Line 268  function DetailPage($fsRoot,$relDir,$fn)
268                  $fsize = filesize($fsPath) ;                  $fsize = filesize($fsPath) ;
269                  $fmodified = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", filemtime($fsPath)) ;                  $fmodified = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", filemtime($fsPath)) ;
270                  $faccessed = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", fileatime($fsPath)) ;                  $faccessed = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", fileatime($fsPath)) ;
271                  echo "<PRE>    file size: " . $fsize . " Bytes<BR>" ;                  $fuid=fileowner($fsPath);
272                    $fgid=filegroup($fsPath);
273                    $userinfo = posix_getpwuid($fuid);
274                    $grpinfo = posix_getgrgid($fgid);
275                    echo "<PRE>";
276                    if (!is_dir($fsPath)) echo "    file size: " . $fsize . " Bytes<BR>" ;
277                  echo "last modified: <B>" . $fmodified . "</B><BR>" ;                  echo "last modified: <B>" . $fmodified . "</B><BR>" ;
278                  echo "last accessed: <B>" . $faccessed . "</B><BR>" ;                  echo "last accessed: <B>" . $faccessed . "</B><BR>" ;
279                  echo "        owner: <B>" . fileowner($fsPath) . "</B><BR>" ;                  echo "        owner: <B>" . $userinfo["name"] . " [$fuid]</B><BR>" ;
280                  echo "        group: <B>" . filegroup($fsPath) . "</B><BR>" ;                  echo "        group: <B>" . $grpinfo["name"] . " [$fgid]</B><BR>" ;
281                  echo "  permissions: <B>" ;                  echo "  permissions: <B>" ;
282                  echo printf( "%o", fileperms($fsPath) ) . "</B>" ;                  echo printf( "%o", fileperms($fsPath) ) . "</B>" ;
283                  echo "</PRE>" ;                  echo "</PRE>" ;
284    
285          }          }
286    
287          if ( $editable && ($writable || !$exists) && !$file_lock ) {          if ( !is_dir($fsPath) && $editable && ($writable || !$exists) && !$file_lock ) {
288                  $fh = fopen($fsPath,"a+") ;                  $fh = fopen($fsPath,"a+") ;
289                  rewind($fh) ;                  rewind($fh) ;
290                  $fstr = fread($fh,filesize($fsPath)) ;                  $fstr = fread($fh,filesize($fsPath)) ;
# Line 295  echo($fstr) ; ?></TEXTAREA> Line 310  echo($fstr) ; ?></TEXTAREA>
310    
311  <?php  <?php
312          }          }
313          if ( !$file_lock && strstr(join(" ",$gblImages),$ext) ) {            if ( !$file_lock && $ext!="" && strstr(join(' ',$gblImages),$ext) ) {  
314                  $info  = getimagesize($fsPath) ;                  $info  = getimagesize($fsPath) ;
315                  $tstr = "<IMG SRC=\"".urlpath($relPath)."\" BORDER=0 " ;                  $tstr = "<IMG SRC=\"$webRoot".urlpath($relPath)."\" BORDER=0 " ;
316                  $tstr .= $info[3] . " ALT=\"" . $fn . " - " ;                  $tstr .= $info[3] . " ALT=\"" . $fn . " - " ;
317                  $tstr .= (int)(($fsize+1023)/1024) . "Kb\">" ;                  $tstr .= (int)(($fsize+1023)/1024) . "Kb\">" ;
318  //              echo htmlentities($tstr) . "<BR><BR>" . $tstr ;  //              echo htmlentities($tstr) . "<BR><BR>" . $tstr ;
# Line 363  echo($fstr) ; ?></TEXTAREA> Line 378  echo($fstr) ; ?></TEXTAREA>
378  </FORM>  </FORM>
379    
380  <?php  <?php
381            
382          $name=basename("$fsDir/$fn");          $name=basename("$fsDir/$fn");
383          $logname=dirname("$fsDir/$fn")."/.log/$name";          $logname=dirname("$fsDir/$fn")."/.log/$name";
384          $bakdir=dirname("$fsDir/$fn")."/.bak";          $bakdir=dirname("$fsDir/$fn")."/.bak";
385          if (file_exists($logname)) {          if (file_exists($logname)) {
386                  $log=fopen($logname,"r");                  $log=fopen($logname,"r");
387                  $cl1=" class=lst"; $cl2="";                  $cl1=" class=LST"; $cl2="";
388                  $logarr = array();                  $logarr = array();
389                  while($line = fgetcsv($log,255,"\t")) {                  while($line = fgetcsv($log,512,"\t")) {
390                          $cl=$cl1; $cl1=$cl2; $cl2=$cl;                          $cl=$cl1; $cl1=$cl2; $cl2=$cl;
391                          array_unshift($logarr,array($cl,$line[0],$line[1],$line[2],$line[3]));                          array_unshift($logarr,array($cl,$line[0],$line[1],$line[2],$line[3]));
392                  }                  }
393                  fclose($log);                  fclose($log);
394                  print "<hr><br><b>CHANGES TO THIS FILE</b><br><table border=0 width=100%>\n";                  if (is_dir("$fsDir/$fn")) {
395                            $whatis="DIRECTORY";
396                    } else {
397                            $whatis="FILE";
398                    }
399                    print "<hr><br><b>CHANGES TO THIS $whatis</b><br><table border=0 width=100%>\n";
400                  $bakcount = 0;  // start from 0, skip fist backup (it's current)                  $bakcount = 0;  // start from 0, skip fist backup (it's current)
401                  while ($e = array_shift($logarr)) {                  while ($e = array_shift($logarr)) {
402                          if (strstr($e[4],"upload")) {                          if (strstr($e[4],"upload")) {
403                                  if (file_exists("$bakdir/$bakcount/$name")) {                                  if (file_exists("$bakdir/$bakcount/$name")) {
404                                          $e[4]="<a href=\"".dirname($relPath)."/.bak/$bakcount/$name\">$e[4]</a>";                                          $e[4]="<a href=\"$webRoot".urlpath(dirname($relPath)."/.bak/$bakcount/$name")."\">$e[4]</a>";
405                                  }                                  }
406                                  $bakcount++;                                  $bakcount++;
407                          }                          }
# Line 642  function GifIcon($txt) { Line 662  function GifIcon($txt) {
662    
663  function Navigate($fsRoot,$relDir) {  function Navigate($fsRoot,$relDir) {
664    
665          global $gblEditable, $gblIcon ;          global $gblEditable, $gblIcon, $gblModDays, $webRoot, $gblHide ;
666    
667          $self     = $GLOBALS["PHP_SELF"] ;          $self     = $GLOBALS["PHP_SELF"] ;
668          if (isset($GLOBALS["HTTPS"]) && $GLOBALS["HTTPS"] == "on") {  
669                  $webRoot  = "https://" . $GLOBALS["SERVER_NAME"] ;          $fsDir = $fsRoot . $relDir . "/" ; // current directory
         } else {  
                 $webRoot  = "http://" . $GLOBALS["SERVER_NAME"] ;  
         }  
         $fsDir    = $fsRoot . $relDir . "/" ; // current directory  
670    
671          if (!is_dir($fsDir)) Error("Dir not found",$relDir) ;          if (!is_dir($fsDir)) Error("Dir not found",$relDir) ;
672    
673            $hide_items=",$gblHide,";
674    
675          // read directory contents          // read directory contents
676          if ( !($dir = @opendir($fsDir)) )          if ( !($dir = @opendir($fsDir)) )
677                  Error("Read Access denied",$relDir) ;                  Error("Read Access denied",$relDir) ;
678          while ($item = readdir($dir)) {          while ($item = readdir($dir)) {
679                  if ( $item == ".." || $item == "." || substr($item,0,1) == "." ) continue ;                  if ( substr($item,0,1) == "." || strstr($hide_items,",$item,") ) continue ;
680                  if ( is_dir($fsDir . $item) ) {                  if ( is_dir($fsDir . $item) ) {
681                          $dirList[] = $item ;                          $dirList[] = $item ;
682                  } else if ( is_file($fsDir . $item) ) {                  } else if ( is_file($fsDir . $item) ) {
# Line 677  function Navigate($fsRoot,$relDir) { Line 695  function Navigate($fsRoot,$relDir) {
695          // scan deleted files          // scan deleted files
696          if ( $GLOBALS[show_deleted] == 1 && ($dir = @opendir("$fsDir/.del")) ) {          if ( $GLOBALS[show_deleted] == 1 && ($dir = @opendir("$fsDir/.del")) ) {
697                  while ($item = readdir($dir)) {                  while ($item = readdir($dir)) {
698                          if ( substr($item,0,1) == "." ) continue ;                          if ( substr($item,0,1) == "." || strstr($hide_items,",$item,") ) continue ;
699                          $fileList[] = ".del/$item" ;                                      $fileList[] = ".del/$item" ;            
700                  }                  }
701                  closedir($dir) ;                  closedir($dir) ;
# Line 691  function Navigate($fsRoot,$relDir) { Line 709  function Navigate($fsRoot,$relDir) {
709                  $text .= ", <a href=$self?D=".urlencode($relDir)."&show_deleted=1>undelete</a>";                  $text .= ", <a href=$self?D=".urlencode($relDir)."&show_deleted=1>undelete</a>";
710          }          }
711          $text .= " or revise files on this web site." ;          $text .= " or revise files on this web site." ;
712            $text .= "<br>Examine list of files <a href=\"$self?A=Ch1\">changed in last day</a> or <a href=\"$self?A=Ch\">all changes</a>.";
713          StartHTML("(Navigate)",$text) ;          StartHTML("(Navigate)",$text) ;
714    
715          echo "<TABLE BORDER=0 CELLPADDING=2          echo "<TABLE BORDER=0 CELLPADDING=2
716                  CELLSPACING=3 WIDTH=\"100%\">" ;                  CELLSPACING=3 WIDTH=\"100%\">" ;
717    
718          // updir bar              // updir bar    
719          if ($fsDir != $fsRoot) {          if (chopsl($fsDir) != chopsl($fsRoot)) {
720                  $parent = dirname($relDir) ;                  $parent = dirname($relDir) ;
721                  if ($parent == "") $parent = "/" ;                  if ($parent == "") $parent = "/" ;
722  ?>  ?>
# Line 709  function Navigate($fsRoot,$relDir) { Line 728  function Navigate($fsRoot,$relDir) {
728  <?php  <?php
729          }          }
730    
731    function plural($name,$count) {
732            $out="$count $name";
733            if ($count > 1) {
734                    $out.="s";
735            }
736            return $out;
737    }
738    
739          // output subdirs          // output subdirs
740          if (sizeof($dirList) > 0) {          if (sizeof($dirList) > 0) {
741                  sort($dirList) ;                  sort($dirList) ;
742  ?>  ?>
743    
744  <TR><TD></TD><TD COLSPAN=5 CLASS=TOP><HR>DIRECTORY NAME</TD></TR>  <TR><TD></TD><TD COLSPAN=2 CLASS=TOP>DIRECTORY NAME (<?= plural("dir",sizeof($dirList)) ?>)</TD><TD COLSPAN=3 CLASS=TOP>DIRECTORY NOTE</TR>
745    
746  <?php  <?php
747                  while (list($key,$dir) = each($dirList)) {                  while (list($key,$dir) = each($dirList)) {
748    
749                            $info_url=$self."?A=E&F=".urlencode($dir)."&D=".urlencode($relDir);
750                          $tstr = "<A HREF=\"" . $self . "?D=" ;                          $tstr = "<A HREF=\"" . $self . "?D=" ;
751                          $tstr .= urlencode($relDir."/".$dir) ;                          $tstr .= urlencode($relDir."/".$dir) ;
752                          $tstr .= "\">" . $dir . "/</A>" ;                          $tstr .= "\">" . $dir . "/</A>" ;
753                            $note_html="<a href=\"$info_url#note\">".$gblIcon("note")."</a>".ReadNote($fsDir.$dir);
754  ?>  ?>
755    
756  <TR><TD><?= $gblIcon("fldr") ?></TD>  <TR><TD>
757  <TD COLSPAN=5 CLASS=LST><?= $tstr ?></TD></TR>  <A HREF="<?= $info_url ?>" TITLE="View/Edit">
758    <?= $gblIcon("fldr") ?></A></TD>
759    <TD COLSPAN=2 CLASS=LST><?= $tstr ?></TD>
760    <TD COLSPAN=3 CLASS=LST><?= $note_html ?></TD></TR>
761    
762  <?php  <?php
763                  }  // iterate over dirs                  }  // iterate over dirs
# Line 734  function Navigate($fsRoot,$relDir) { Line 766  function Navigate($fsRoot,$relDir) {
766    
767  <TR><TD></TD><TD COLSPAN=5><HR><B><?= $webRoot . $relDir ?>  <TR><TD></TD><TD COLSPAN=5><HR><B><?= $webRoot . $relDir ?>
768  </B></TD></TR>  </B></TD></TR>
769  <TR><TD></TD><TD CLASS=TOP>DOCUMENT NAME</TD>  <TR><TD></TD><TD CLASS=TOP>DOCUMENT NAME (<?= plural("file",sizeof($fileList)) ?>)</TD>
770  <TD><?= $gblIcon("blank").$gblIcon("blank") ?></TD>  <TD><?= $gblIcon("blank").$gblIcon("blank") ?></TD>
771  <TD CLASS=TOP>NOTE</TD>  <TD CLASS=TOP>NOTE</TD>
772  <TD CLASS=TOP>LAST UPDATE</TD><TD CLASS=TOP>FILE SIZE</TD></TR>  <TD CLASS=TOP>LAST UPDATE</TD><TD CLASS=TOP>FILE SIZE</TD></TR>
# Line 757  function Navigate($fsRoot,$relDir) { Line 789  function Navigate($fsRoot,$relDir) {
789    
790                  $info_url=$self."?A=E&F=".urlencode($file)."&D=".urlencode($relDir);                  $info_url=$self."?A=E&F=".urlencode($file)."&D=".urlencode($relDir);
791    
792                  if ( ($mod + 30*86400) > time() ) {                  if ( ($mod + $gblModDays*86400) > time() ) {
793                          $a  = "<SPAN CLASS=RED TITLE=\"Newer" ;                          $a  = "<SPAN CLASS=RED TITLE=\"Newer" ;
794                          $a .= " than 30 days\"> * </SPAN>" ;                          $a .= " than $gblModDays days\"> * </SPAN>" ;
795                  }                  }
796    
797                  $file_lock=CheckLock($path);                  $file_lock=CheckLock($path);
# Line 824  function Navigate($fsRoot,$relDir) { Line 856  function Navigate($fsRoot,$relDir) {
856    
857  <?php  <?php
858            }  // iterate over files            }  // iterate over files
859          }  // end if no files          } else {  // end if no files
860    ?>
861     <TR><TD></TD><TD COLSPAN=5 CLASS=LST>
862      No files in this directory
863     </TD></TR>
864    <?
865            }
866    
867          if ($emptyDir) {          if ($emptyDir && $relDir != "") {
868  ?>  ?>
869    
870  <FORM METHOD="POST" ACTION="<?= $self ?>">  <FORM METHOD="POST" ACTION="<?= $self ?>">
# Line 844  function Navigate($fsRoot,$relDir) { Line 882  function Navigate($fsRoot,$relDir) {
882    
883  <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>  <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>
884    
 <TR><TD></TD><TD COLSPAN=5>  
885  <?  <?
886  if (file_exists(".info.inc")) {  if (file_exists(".info.inc")) {
887            print "<TR><TD></TD><TD COLSPAN=5>";
888          include(".info.inc");          include(".info.inc");
889            print "</TD></TR>
890            <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>";
891  }  }
892  ?>  ?>
 </TD></TR>  
   
 <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>  
893    
894  <FORM METHOD="POST" ACTION="<?= $self ?>">  <FORM METHOD="POST" ACTION="<?= $self ?>">
895  <TR><TD></TD><TD COLSPAN=5 CLASS=BAR>CREATE NEW  <TR><TD></TD><TD COLSPAN=5 CLASS=BAR>CREATE NEW
# Line 861  if (file_exists(".info.inc")) { Line 898  if (file_exists(".info.inc")) {
898   <NOBR>NAME <INPUT TYPE="TEXT" NAME="FN" SIZE=14>   <NOBR>NAME <INPUT TYPE="TEXT" NAME="FN" SIZE=14>
899   <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="CREATE">   <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="CREATE">
900   <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>">   <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>">
901   <INPUT TYPE="SUBMIT" VALUE="CREATE"></NOBR>   <INPUT TYPE="SUBMIT" VALUE="CREATE" NAME="CREATE">
902     </NOBR>
903   <NOBR>OR <A HREF="<?= $self ?>?A=U&D=<?= urlencode($relDir) ?>">UPLOAD</A> A FILE   <NOBR>OR <A HREF="<?= $self ?>?A=U&D=<?= urlencode($relDir) ?>">UPLOAD</A> A FILE
904   </NOBR>   </NOBR>
905  </TD></TR>  </TD></TR>
# Line 874  if (file_exists(".info.inc")) { Line 912  if (file_exists(".info.inc")) {
912    
913  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
914    
915  function UploadPage($fsRoot, $relDir, $filename) {  function UploadPage($fsRoot, $relDir, $filename="") {
916    
917          $self = $GLOBALS["PHP_SELF"] ;          $self = $GLOBALS["PHP_SELF"] ;
918          if ($relDir == "") $relDir = "/" ;          if ($relDir == "") $relDir = "/" ;
# Line 884  function UploadPage($fsRoot, $relDir, $f Line 922  function UploadPage($fsRoot, $relDir, $f
922  <FORM ENCTYPE="multipart/form-data" METHOD="POST"  <FORM ENCTYPE="multipart/form-data" METHOD="POST"
923   ACTION="<?= $self ?>">   ACTION="<?= $self ?>">
924  DESTINATION DIRECTORY:<B><?= " " . $relDir ?></B>  DESTINATION DIRECTORY:<B><?= " " . $relDir ?></B>
925  <? if (isset($filename)) { ?>  <? if (isset($filename) && $filename!="") { ?>
926  <br>DESTINATION FILE:<B><?= " " . $filename ?></B>  <br>DESTINATION FILE:<B><?= " " . $filename ?></B>
927  <INPUT TYPE="HIDDEN" NAME="FILENAME" VALUE="<?= $filename ?>">  <INPUT TYPE="HIDDEN" NAME="FILENAME" VALUE="<?= $filename ?>">
928  <? } ?>  <? } ?>
# Line 919  function Error($title,$text="") { Line 957  function Error($title,$text="") {
957    
958  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
959    
 function CreateHash($user, $pw) {  
   
         global $gblHash ;  // hash function to use  
   
         if ($user == "" || $pw == "") {  
                 $text = "either no password or no username supplied" ;  
                 Error("Create Hash",$text) ;  
         }  
         $title = "(Create Hash)" ;  
         StartHTML($title) ;  
         echo "<P ALIGN=center>" ;  
         echo "<BLOCKQUOTE>Copy the value below and paste it " ;  
         echo "into the<BR>value for \$gblPw in the source of " ;  
         echo "this file<BR><BR><B>" . $gblHash($user.$pw) ;  
         echo "</B><BR><BR>Hash function: " . $gblHash ;  
         echo "</BLOCKQUOTE></P>" ;  
         EndHTML() ;  
         exit ;  
   
 } // end function CreateHash  
   
 //////////////////////////////////////////////////////////////////  
   
960  function NoEntry() {  function NoEntry() {
961    
962          $user = $GLOBALS["PHP_AUTH_USER"] ;          $user = $GLOBALS["PHP_AUTH_USER"] ;
# Line 950  function NoEntry() { Line 965  function NoEntry() {
965    
966          $title = "(401 Unauthorized)" ;          $title = "(401 Unauthorized)" ;
967          $text  = "No trespassing !" ;          $text  = "No trespassing !" ;
         StartHTML($title,$text) ;  
 ?>  
968    
969  <FORM ACTION="<?= $self ?>?HASH=create" METHOD="POST">          global $PHP_AUTH_USER,$PHP_AUTH_PW,$gblPw,$relogin;
970  <INPUT TYPE="HIDDEN" NAME="USER" VALUE="<?= $user ?>">          StartHTML($title,$text) ;
 <INPUT TYPE="HIDDEN" NAME="PW" VALUE="<?= $pw ?>">  
   
 <BLOCKQUOTE><B>If you are a site administrator:</B><BR><BR>  
 Click below to <B>generate a password hash</B><BR>from  
 the username-password pair you just<BR>entered. Then include the hash in  
 the source<BR>of this file.<BR><BR>  
 <INPUT TYPE="SUBMIT" VALUE="CREATE HASH">  
 </BLOCKQUOTE></FORM>  
971    
 <?php  
972          EndHTML() ;          EndHTML() ;
973          exit ;          exit ;
974  }  }
975    
976  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
977    
978  function Logit($target,$msg) {  function LogIt($target,$msg) {
979    
980          $dir=dirname($target);          $dir=dirname($target);
981          if (! file_exists($dir."/.log")) {          if (! file_exists($dir."/.log")) {
# Line 991  function Logit($target,$msg) { Line 995  function Logit($target,$msg) {
995    
996  function WriteNote($target,$msg) {  function WriteNote($target,$msg) {
997    
998            $target=stripSlashes($target);
999          $dir=dirname($target);          $dir=dirname($target);
1000          if (! file_exists($dir."/.note")) {          if (! file_exists($dir."/.note")) {
1001                  mkdir($dir."/.note",0700);                  mkdir($dir."/.note",0700);
# Line 1007  function WriteNote($target,$msg) { Line 1012  function WriteNote($target,$msg) {
1012    
1013  function ReadNote($target) {  function ReadNote($target) {
1014    
1015            $target=stripSlashes($target);
1016          $dir=dirname($target);          $dir=dirname($target);
1017          $file=basename($target);          $file=basename($target);
1018          $msg="";          $msg="";
# Line 1015  function ReadNote($target) { Line 1021  function ReadNote($target) {
1021                  $msg=fgets($note,4096);                  $msg=fgets($note,4096);
1022                  fclose($note);                  fclose($note);
1023          }          }
1024          return StripSlashes($msg);          return HtmlSpecialChars(StripSlashes($msg));
1025    
1026  }  }
1027    
# Line 1023  function ReadNote($target) { Line 1029  function ReadNote($target) {
1029    
1030  function MoveTo($source,$folder) {  function MoveTo($source,$folder) {
1031    
1032            $source=stripSlashes($source);
1033          $file=basename($source);          $file=basename($source);
1034          if (! file_exists($folder)) {          if (! file_exists($folder)) {
1035                  mkdir($folder,0700);                  mkdir($folder,0700);
# Line 1036  function MoveTo($source,$folder) { Line 1043  function MoveTo($source,$folder) {
1043    
1044  function Lock($target) {  function Lock($target) {
1045    
1046            $target=stripSlashes($target);
1047          $dir=dirname($target);          $dir=dirname($target);
1048          if (! file_exists($dir."/.lock")) {          if (! file_exists($dir."/.lock")) {
1049                  mkdir($dir."/.lock",0700);                  mkdir($dir."/.lock",0700);
# Line 1056  function Lock($target) { Line 1064  function Lock($target) {
1064    
1065  function CheckLock($target) {  function CheckLock($target) {
1066    
1067            $target=stripSlashes($target);
1068          $dir=dirname($target);          $dir=dirname($target);
1069          $file=basename($target);          $file=basename($target);
1070          $msg=0;          $msg=0;
# Line 1070  function CheckLock($target) { Line 1079  function CheckLock($target) {
1079    
1080  function Unlock($target) {  function Unlock($target) {
1081    
1082            $target=stripSlashes($target);
1083          $dir=dirname($target);          $dir=dirname($target);
1084          $file=basename($target);          $file=basename($target);
1085          if (file_exists($dir."/.lock/$file")) {          if (file_exists($dir."/.lock/$file")) {
# Line 1092  function urlpath($url) { Line 1102  function urlpath($url) {
1102    
1103  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
1104    
1105  function safe_rename($from,$to) {  function safe_rename($fromdir,$fromfile,$tofile) {
1106          if (file_exists($from) && is_writable(dirname($to))) {          function try_rename($from,$to) {
1107                  rename($from,$to);  #               print "$from -> $to\n";
1108                    if (file_exists($from) && is_writeable(dirname($to))) {
1109                            rename($from,$to);
1110                    }
1111            }
1112    
1113            function try_dir($todir) {
1114                    if (! file_exists($todir)) {
1115                            mkdir($todir,0700);
1116                    }
1117            }
1118    
1119            $to="$fromdir/$tofile";
1120            $todir=dirname($to);
1121            $tofile=basename($to);
1122    
1123    #       print "<pre>$fromdir / $fromfile -> $todir / $tofile\n\n";
1124    
1125            try_rename("$fromdir/$fromfile","$todir/$tofile");
1126            try_dir("$todir/.log");
1127            try_rename("$fromdir/.log/$fromfile","$todir/.log/$tofile");
1128            try_dir("$todir/.note");
1129            try_rename("$fromdir/.note/$fromfile","$todir/.note/$tofile");
1130            try_dir("$todir/.lock");
1131            try_rename("$fromdir/.lock/$fromfile","$todir/.lock/$tofile");
1132            try_dir("$todir/.bak");
1133            for($i=0;$i<=$GLOBALS[gblNumBackups];$i++) {
1134                    try_rename("$fromdir/.bak/$i/$fromfile","$todir/.bak/$i/$tofile");
1135          }          }
1136  }  }
1137    
1138    
1139  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
1140    
1141    // recursivly delete directory
1142    
1143    function rrmdir($dir) {
1144            $handle=opendir($dir);
1145            while ($file = readdir($handle)) {
1146                    if ($file != "." && $file != "..") {
1147                            if (is_dir("$dir/$file"))
1148                                    rrmdir("$dir/$file");
1149                            else
1150                                    if (! @unlink("$dir/$file")) return(0);
1151                    }
1152            }
1153            closedir($handle);
1154            return @rmdir($dir);
1155    }
1156    
1157    //////////////////////////////////////////////////////////////////
1158    
1159    function ChangeLog($target,$msg) {
1160    
1161            global $gblFsRoot;
1162            $log=fopen("$gblFsRoot/.changelog","a+");
1163            if (substr($target,0,strlen($gblFsRoot)) == $gblFsRoot)
1164                    $target=substr($target,strlen($gblFsRoot),strlen($target)-strlen($gblFsRoot));
1165            $msg=str_replace("\t"," ",$msg);
1166            fputs($log,time()."\t$target\t$GLOBALS[gblUserName]\t$msg\n");
1167            fclose($log);
1168    
1169    }
1170    
1171    function DisplayChangeLog($day) {
1172    
1173            global $gblFsRoot;
1174            if (!file_exists("$gblFsRoot/.changelog")) return;
1175            $log=fopen("$gblFsRoot/.changelog","r");
1176            $logarr = array();
1177            while($line = fgetcsv($log,512,"\t")) {
1178                    $line[0] .= sizeof($line);
1179                    while (sizeof($line) > 4) {
1180                            $tmp = array_pop($line);
1181                            $line.=" $tmp";
1182                    }
1183                    if ($day!=1 || ($day==1 && (time()-$line[0] < 24*60*60))) {
1184                            array_unshift($logarr,array($line[0],$line[1],$line[2],$line[3]));
1185                    }
1186            }
1187            fclose($log);
1188            $cl1=" class=LST"; $cl2="";
1189            print "<table border=0 width=100%>\n";
1190            while ($e = array_shift($logarr)) {
1191                    $cl=$cl1; $cl1=$cl2; $cl2=$cl;
1192                    $date = date("$GLOBALS[gblDateFmt]", $e[0]);
1193                    $time = date("$GLOBALS[gblTimeFmt]", $e[0]);
1194                    $dir = dirname($e[1]);
1195                    $file = basename($e[1]);
1196                    print "<tr><td$cl>$date</td><td$cl>$time</td><td$cl><a href=\"$GLOBALS[PHP_SELF]?D=".urlencode($dir)."\">$dir</a>/$file</td><td$cl>$e[2]</td><td$cl>$e[3]</td></tr>\n";
1197            }
1198            print "</table>";
1199            print "<p>".GifIcon(up)." Back to <a href=$GLOBALS[PHP_SELF]>front page</a>.</p>";
1200    }
1201    
1202    //////////////////////////////////////////////////////////////////
1203    
1204    function Download($path) {
1205            global $HTTP_USER_AGENT;
1206            $file=basename($path);
1207            $size = filesize($path);
1208            //header("Content-Type: application/octet-stream");
1209            header("Content-Type: application/force-download");
1210            header("Content-Length: $size");
1211            // IE5.5 just downloads index.php if we don't do this
1212            if(preg_match("/MSIE 5.5/", $HTTP_USER_AGENT)) {
1213                    header("Content-Disposition: filename=$file");
1214            } else {
1215                    header("Content-Disposition: attachment; filename=$file");
1216            }
1217            header("Content-Transfer-Encoding: binary");
1218            $fh = fopen($path, "r");
1219            fpassthru($fh);
1220    }
1221    
1222    
1223    //////////////////////////////////////////////////////////////////
1224    
1225    function chopsl($path) {
1226            if (substr($path,strlen($path)-1,1) == "/") $path=substr($path,0,strlen($path)-1);
1227            $path=str_replace("//","/",$path);
1228            return $path;
1229    }
1230    
1231    //////////////////////////////////////////////////////////////////
1232  // MAIN PROGRAM  // MAIN PROGRAM
1233  // ============  // ============
1234  // query parameters: capital letters  // query parameters: capital letters
# Line 1114  function safe_rename($from,$to) { Line 1243  function safe_rename($from,$to) {
1243    
1244          // forks before authentication: style sheet and hash          // forks before authentication: style sheet and hash
1245          // creation if password not yet set.          // creation if password not yet set.
1246          if ($STYLE == "get") { CSS() ; exit ; }          if (isset($STYLE) && $STYLE == "get") { CSS() ; exit ; }
1247          if ($HASH != "") {  
1248                  CreateHash($USER, $PW) ;          $fsScriptDir  = dirname($SCRIPT_FILENAME) ;    
1249                  exit ;          // i.e. /home/httpd/html/docman
1250    
1251            // read user-defined configuration
1252            if (file_exists("$fsScriptDir/.docman.conf")) {
1253                    include("$fsScriptDir/.docman.conf");
1254            }
1255    
1256            // where do we get users from?
1257            if (file_exists("$gblIncDir/$gblUsers.php")) {
1258                    include("$gblIncDir/$gblUsers.php");
1259            } else {
1260                    Error("Configuration error","Can't find user handling module at <tt>$gblIncDir/$gblUsers.php</tt> ! Please fix <tt>$fsScriptDir/.docman.conf</tt>");
1261            }
1262    
1263            // if no password, or empty password logout
1264            if (
1265                    isset($PHP_AUTH_USER) && (
1266                            !isset($relogin) || (
1267                                    isset($relogin) && $relogin != md5($PHP_AUTH_USER.$PHP_AUTH_PW)
1268                            )
1269                    ) && (
1270                            $PHP_AUTH_PW == "" || !isset($PHP_AUTH_PW)
1271                    ) && !isset($force_login)
1272               ) {
1273                    StartHTML("Logout completed","Your login credentials has been erased") ;
1274                    EndHTML() ;
1275                    exit ;
1276          }          }
1277    
1278          // authentication if $gblAuth == true          // authentication failure
1279          if ( $gblAuth && $gblHash($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ||          if ( md5($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ||
1280                  isset($relogin) && $gblPw == $relogin ) {                  isset($relogin) && $gblPw == $relogin) {
1281                  header("WWW-authenticate: basic realm=\"$SERVER_NAME\"") ;                  $realm="$HTTP_HOST";
1282                    header("WWW-authenticate: basic realm=\"$realm\"") ;
1283                  header("HTTP/1.0 401 Unauthorized") ;                  header("HTTP/1.0 401 Unauthorized") ;
1284                  NoEntry() ;                  NoEntry() ;
1285                  exit ;                  exit ;
# Line 1135  function safe_rename($from,$to) { Line 1291  function safe_rename($from,$to) {
1291                  $relDir = urldecode($D) ;  // then use GET                  $relDir = urldecode($D) ;  // then use GET
1292          }                }      
1293    
1294            $relDir=stripSlashes($relDir);
1295    
1296          if ($relDir == "/") $relDir = "" ;                if ($relDir == "/") $relDir = "" ;      
1297          // default : website root = ""          // default : website root = ""
1298    
# Line 1146  function safe_rename($from,$to) { Line 1304  function safe_rename($from,$to) {
1304          // i.e. below $gblFsRoot.          // i.e. below $gblFsRoot.
1305    
1306          $relScriptDir = dirname($SCRIPT_NAME) ;                  $relScriptDir = dirname($SCRIPT_NAME) ;        
1307          // i.e. /siteman          // i.e. /docman
   
         $fsScriptDir  = dirname($SCRIPT_FILENAME) ;      
         // i.e. /home/httpd/html/siteman  
1308    
1309          $gblFsRoot = substr($fsScriptDir,0,          // start on server root
1310            strlen($fsScriptDir)-strlen($relScriptDir)) ;  //      $gblFsRoot = substr($fsScriptDir,0, strlen($fsScriptDir)-strlen($relScriptDir)) ;
1311            // or on script root
1312            $gblFsRoot = $fsScriptDir;
1313          // i.e. /home/httpd/html          // i.e. /home/httpd/html
1314    
1315          $fsDir = $gblFsRoot . $relDir ; // current directory          $fsDir = $gblFsRoot . $relDir ; // current directory
1316          if ( !is_dir($fsDir) ) Error("Dir not found",$relDir) ;          if ( !is_dir($fsDir) ) Error("Dir not found",$relDir) ;
1317            
1318            if (isset($GLOBALS["HTTPS"]) && $GLOBALS["HTTPS"] == "on") {
1319                    $webRoot  = "https://";
1320            } else {
1321                    $webRoot  = "http://";
1322            }
1323            $webRoot .= $GLOBALS["HTTP_HOST"] . $relScriptDir;
1324    
1325            $FN=stripSlashes($FN);
1326    
1327    
1328          switch ($POSTACTION) {          switch ($POSTACTION) {
1329          case "UPLOAD" :          case "UPLOAD" :
1330                  if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;                  if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;
# Line 1166  function safe_rename($from,$to) { Line 1333  function safe_rename($from,$to) {
1333                  // TODO : should rather check for escapeshellcmds                  // TODO : should rather check for escapeshellcmds
1334                  // but maybe RFC 18xx asserts safe filenames ....                  // but maybe RFC 18xx asserts safe filenames ....
1335                  $source = $FN ;                  $source = $FN ;
1336                    if (! file_exists($source)) {
1337                            Error("You must select file with browse to upload it!");
1338                    }
1339                  if (! isset($FILENAME)) {       // from update file                  if (! isset($FILENAME)) {       // from update file
1340                          $target = "$fsDir/$FN_name" ;                          $target = "$fsDir/$FN_name" ;
1341                  } else {                  } else {
# Line 1193  function safe_rename($from,$to) { Line 1363  function safe_rename($from,$to) {
1363                  if (isset($FILENAME)) {                  if (isset($FILENAME)) {
1364                          Unlock($target);                          Unlock($target);
1365                  }                  }
1366                    ChangeLog($target,"updated");
1367                  break ;                  break ;
1368    
1369          case "SAVE" :          case "SAVE" :
1370                  $path = $gblFsRoot . escapeshellcmd($RELPATH) ;                  $path = $gblFsRoot . $RELPATH ;
1371                    $path=stripSlashes($path);
1372                  $writable = is_writeable($path) ;                  $writable = is_writeable($path) ;
1373                  $legaldir = is_writeable(dirname($path)) ;                  $legaldir = is_writeable(dirname($path)) ;
1374                  $exists   = (file_exists($path)) ? 1 : 0 ;                  $exists   = (file_exists($path)) ? 1 : 0 ;
# Line 1204  function safe_rename($from,$to) { Line 1376  function safe_rename($from,$to) {
1376                  if (!($writable || (!$exists && $legaldir)))                  if (!($writable || (!$exists && $legaldir)))
1377                          Error("Write denied",$RELPATH) ;                          Error("Write denied",$RELPATH) ;
1378                  $fh = fopen($path, "w") ;                  $fh = fopen($path, "w") ;
1379                    $FILEDATA=stripSlashes($FILEDATA);
1380                  fwrite($fh,$FILEDATA) ;                  fwrite($fh,$FILEDATA) ;
1381                  fclose($fh) ;                  fclose($fh) ;
1382                  clearstatcache() ;                  clearstatcache() ;
1383                  Logit($path,"saved changes");                  Logit($path,"saved changes");
1384                    ChangeLog($path,"saved changes");
1385                  break ;                  break ;
1386    
1387          case "CREATE" :          case "CREATE" :
# Line 1226  function safe_rename($from,$to) { Line 1400  function safe_rename($from,$to) {
1400  // this functionality is doubled in DetailView().  // this functionality is doubled in DetailView().
1401  // better keep it here altogether  // better keep it here altogether
1402  // chmod perms to $gblFilePerms  // chmod perms to $gblFilePerms
1403                          if ( file_exists($path) && !is_writable($path) )                          if ( file_exists($path) && !is_writeable($path) )
1404                                  Error("File not writable", $relPath) ;                                  Error("File not writable", $relPath) ;
1405                          $fh = fopen($path, "w+") ;                          $fh = fopen($path, "w+") ;
1406                          if ($fh) {                          if ($fh) {
# Line 1238  function safe_rename($from,$to) { Line 1412  function safe_rename($from,$to) {
1412                          }                          }
1413                          $tstr = "$PHP_SELF?A=E&D=".urlencode($relDir)."&F=".urlencode($FN) ;                          $tstr = "$PHP_SELF?A=E&D=".urlencode($relDir)."&F=".urlencode($FN) ;
1414                          header("Location: " . $tstr) ;                          header("Location: " . $tstr) ;
1415                            ChangeLog($target,"created");
1416                          exit ;                          exit ;
1417                  }                  }
1418                  break ;                  break ;
# Line 1270  function safe_rename($from,$to) { Line 1445  function safe_rename($from,$to) {
1445                          }                          }
1446                  }                  }
1447                  else {  // delete directory                  else {  // delete directory
1448                    if ( ! @rmdir($fsDir) ) {                    if ( ! @rrmdir($fsDir) ) {
1449                      Error("Rmdir failed", $tstr . $fsDir) ;                      Error("Rmdir failed", $tstr . $fsDir) ;
1450                    }                    }
1451                    else {                    else {
# Line 1297  function safe_rename($from,$to) { Line 1472  function safe_rename($from,$to) {
1472                  if ( $CONFIRM != "on" ) break ;                  if ( $CONFIRM != "on" ) break ;
1473    
1474                  Logit("$fsDir/$FN","renamed $FN to $NEWNAME");                  Logit("$fsDir/$FN","renamed $FN to $NEWNAME");
1475                  safe_rename("$fsDir/$FN","$fsDir/$NEWNAME");                  safe_rename($fsDir,$FN,$NEWNAME);
                 safe_rename("$fsDir/.log/$FN","$fsDir/.log/$NEWNAME");  
                 safe_rename("$fsDir/.note/$FN","$fsDir/.note/$NEWNAME");  
                 safe_rename("$fsDir/.lock/$FN","$fsDir/.lock/$NEWNAME");  
                 for($i=0;$i<=$GLOBALS[gblNumBackups];$i++) {  
                         safe_rename("$fsDir/.bak/$i/$FN","$fsDir/.bak/$i/$NEWNAME");  
                 }  
   
1476                  break ;                  break ;
1477    
1478          case "NOTE" :            case "NOTE" :  
# Line 1334  function safe_rename($from,$to) { Line 1502  function safe_rename($from,$to) {
1502          // $A=Co : checkout file $D/$F          // $A=Co : checkout file $D/$F
1503          // $A=Ci : checkin file $D/$F          // $A=Ci : checkin file $D/$F
1504          // $A=V : view file (do nothing except log)          // $A=V : view file (do nothing except log)
1505            // $A=I : include file .$F.php from $gblFsRoot
1506          // default : display directory $D          // default : display directory $D
1507            
1508          switch ($A) {          switch ($A) {
1509          case "U" :          case "U" :
1510                  // upload to $relDir                  // upload to $relDir
1511                  if (!is_writeable($gblFsRoot . $relDir))                  if (!is_writeable($gblFsRoot . $relDir))
1512                          Error("Write access denied",$relDir) ;                          Error("Write access denied",$relDir) ;
1513                  $text  = "Use this page to upload a single " ;                  $text  = "Use this page to upload a single " ;
1514                  $text .= "file to <B>$SERVER_NAME</B>." ;                  $text .= "file to <B>$HTTP_HOST</B>." ;
1515                  StartHTML("(Upload Page)", $text) ;                  StartHTML("(Upload Page)", $text) ;
1516                  UploadPage($gblFsRoot, $relDir) ;                  UploadPage($gblFsRoot, $relDir) ;
1517                  EndHTML() ;                  EndHTML() ;
1518                  exit ;                  exit ;
1519          case "E" :          case "E" :
1520                    $F=stripSlashes($F);
1521                  // detail of $relDir/$F                  // detail of $relDir/$F
1522                  if (is_file("$gblFsRoot/$relDir/$F")) DetailPage($gblFsRoot, $relDir, $F) ;                  if (is_file("$gblFsRoot/$relDir/$F") || is_dir("$gblFsRoot/$relDir/$F")) DetailPage($gblFsRoot, $relDir, $F) ;
1523                  exit ;                  exit ;
1524          case "C" :          case "C" :
1525                    $F=stripSlashes($F);
1526                  // listing of $relDir/$F                  // listing of $relDir/$F
1527                  DisplayCode($gblFsRoot, $relDir, $F) ;                  DisplayCode($gblFsRoot, $relDir, $F) ;
1528                  exit ;                  exit ;
1529          case "Co" :          case "Co" :
1530                  // checkout                  // checkout
1531                  Lock("$gblFsRoot/$relDir/$F");                  Lock("$gblFsRoot/$relDir/$F");
1532                  header("Content-Disposition: attachment; filename=$F" );                  Download("$gblFsRoot/$relDir/$F");
                 Header("Location: ".urlpath("$relDir/$F"));  
1533                  exit;                  exit;
1534          case "Ci" :          case "Ci" :
1535                    $F=stripSlashes($F);
1536                  // upload && update to $relDir                  // upload && update to $relDir
1537                  if (!is_writeable($gblFsRoot . $relDir))                  if (!is_writeable($gblFsRoot . $relDir))
1538                          Error("Write access denied",$relDir) ;                          Error("Write access denied",$relDir) ;
1539                  $text  = "Use this page to update a single " ;                  $text  = "Use this page to update a single " ;
1540                  $text .= "file to <B>$SERVER_NAME</B>." ;                  $text .= "file to <B>$HTTP_HOST</B>." ;
1541                  StartHTML("(Update file Page)", $text) ;                  StartHTML("(Update file Page)", $text) ;
1542                  UploadPage($gblFsRoot, $relDir, $F) ;                  UploadPage($gblFsRoot, $relDir, $F) ;
1543                  EndHTML() ;                  EndHTML() ;
# Line 1374  function safe_rename($from,$to) { Line 1545  function safe_rename($from,$to) {
1545          case "V" :          case "V" :
1546                  // view                  // view
1547                  LogIt("$gblFsRoot/$relDir/$F","viewed");                  LogIt("$gblFsRoot/$relDir/$F","viewed");
1548                  header("Content-Disposition: attachment; filename=$F" );                  if ($gblForceDownload) {
1549                  Header("Location: ".urlpath("$relDir/$F"));                          Download("$gblFsRoot/$relDir/$F");
1550                    } else {
1551                            header("Content-Disposition: attachment; filename=$F" );
1552                            Header("Location: $webRoot".urlpath("$relDir/$F"));
1553                    }
1554                    exit;
1555            case "Ch" :
1556                    StartHTML("(File changes)","All changes chronologicaly...");
1557                    DisplayChangeLog(0);    // all
1558                    EndHTML() ;
1559                  exit;                  exit;
1560            case "Ch1" :
1561                    StartHTML("(File changes)","Changes to files in last day...");
1562                    DisplayChangeLog(1);
1563                    EndHTML() ;
1564                    exit;
1565            case "I" :
1566                    $F=stripSlashes($F);
1567                    $inc_file="${gblFsRoot}/.${F}.php";
1568                    if (!isset($F) || $F == "" || !file_exists($inc_file)) Error("Fatal error $inc_file"); // can't find file to include
1569                    if (!is_readable($inc_file))
1570                            Error("Read access to include file denied",".${F}.php");
1571                    $text  = "Your include file should define \$text variable which holds this text and \$title variable which is page title";
1572                    $title = "You should define \$title variable with page title";
1573                    include($inc_file);
1574                    StartHTML($title, $text) ;
1575                    print "<p>".GifIcon(up)." Back to <a href=$GLOBALS[PHP_SELF]>front page</a>.</p>";
1576                    EndHTML() ;
1577                    exit ;
1578          }          }
1579    
1580          // default: display directory $relDir          // default: display directory $relDir

Legend:
Removed from v.1.13  
changed lines
  Added in v.1.54

  ViewVC Help
Powered by ViewVC 1.1.26