/[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.51 by dpavlin, Mon Dec 17 10:00:51 2001 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-dev";
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            } else {
188                    $url_title="relogin";
189            }
190    ?>
191    <small> [<a href="<?= $url ?>"><?= $url_title ?></a>]</small>
192  </B>  </B>
193  <BR>ANYPORTAL(php) Site Manager  <BR><small>
194  <br><small>  Document Manager <?= $gblVersion ?>, based on ANYPORTAL(php) Site Manager
195    <br>
196  &copy; 1999 by <A HREF="http://www.anyportal.com">ANYPORTAL</A>,  &copy; 1999 by <A HREF="http://www.anyportal.com">ANYPORTAL</A>,
197  &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>,
198  &copy; 2000 by <A HREF="http://www.rot13.org/~dpavlin/">DbP</A>  &copy; 2000 by <A HREF="http://www.rot13.org/~dpavlin/">DbP</A>
# Line 229  A:HOVER { color:red; } Line 234  A:HOVER { color:red; }
234    
235  function DetailPage($fsRoot,$relDir,$fn) {  function DetailPage($fsRoot,$relDir,$fn) {
236                    
237          global $gblEditable, $gblImages ;          global $gblEditable, $gblImages, $webRoot ;
238          $self = $GLOBALS["PHP_SELF"] ;          $self = $GLOBALS["PHP_SELF"] ;
239    
240          $relPath  = $relDir . "/" . $fn ;          $relPath  = $relDir . "/" . $fn ;
# Line 248  function DetailPage($fsRoot,$relDir,$fn) Line 253  function DetailPage($fsRoot,$relDir,$fn)
253                  Error("Creation denied",$relDir) ;                  Error("Creation denied",$relDir) ;
254    
255          $text  = "Use this page to view, modify or " ;          $text  = "Use this page to view, modify or " ;
256          $text .= "delete a single document on this " ;          if (is_dir($fsPath)) {
257                    $text .="delete a directory on this " ;
258            } else {
259                    $text .= "delete a single document on this " ;
260            };
261          $text .= "web site." ;            $text .= "web site." ;  
262          $title = "(Detail Page)" ;          $title = "(Detail Page)" ;
263          StartHTML($title, $text) ;          StartHTML($title, $text) ;
# Line 258  function DetailPage($fsRoot,$relDir,$fn) Line 267  function DetailPage($fsRoot,$relDir,$fn)
267                  $fsize = filesize($fsPath) ;                  $fsize = filesize($fsPath) ;
268                  $fmodified = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", filemtime($fsPath)) ;                  $fmodified = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", filemtime($fsPath)) ;
269                  $faccessed = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", fileatime($fsPath)) ;                  $faccessed = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", fileatime($fsPath)) ;
270                  echo "<PRE>    file size: " . $fsize . " Bytes<BR>" ;                  $fuid=fileowner($fsPath);
271                    $fgid=filegroup($fsPath);
272                    $userinfo = posix_getpwuid($fuid);
273                    $grpinfo = posix_getgrgid($fgid);
274                    echo "<PRE>";
275                    if (!is_dir($fsPath)) echo "    file size: " . $fsize . " Bytes<BR>" ;
276                  echo "last modified: <B>" . $fmodified . "</B><BR>" ;                  echo "last modified: <B>" . $fmodified . "</B><BR>" ;
277                  echo "last accessed: <B>" . $faccessed . "</B><BR>" ;                  echo "last accessed: <B>" . $faccessed . "</B><BR>" ;
278                  echo "        owner: <B>" . fileowner($fsPath) . "</B><BR>" ;                  echo "        owner: <B>" . $userinfo["name"] . " [$fuid]</B><BR>" ;
279                  echo "        group: <B>" . filegroup($fsPath) . "</B><BR>" ;                  echo "        group: <B>" . $grpinfo["name"] . " [$fgid]</B><BR>" ;
280                  echo "  permissions: <B>" ;                  echo "  permissions: <B>" ;
281                  echo printf( "%o", fileperms($fsPath) ) . "</B>" ;                  echo printf( "%o", fileperms($fsPath) ) . "</B>" ;
282                  echo "</PRE>" ;                  echo "</PRE>" ;
283    
284          }          }
285    
286          if ( $editable && ($writable || !$exists) && !$file_lock ) {          if ( !is_dir($fsPath) && $editable && ($writable || !$exists) && !$file_lock ) {
287                  $fh = fopen($fsPath,"a+") ;                  $fh = fopen($fsPath,"a+") ;
288                  rewind($fh) ;                  rewind($fh) ;
289                  $fstr = fread($fh,filesize($fsPath)) ;                  $fstr = fread($fh,filesize($fsPath)) ;
# Line 295  echo($fstr) ; ?></TEXTAREA> Line 309  echo($fstr) ; ?></TEXTAREA>
309    
310  <?php  <?php
311          }          }
312          if ( !$file_lock && strstr(join(" ",$gblImages),$ext) ) {            if ( !$file_lock && $ext!="" && strstr(join(' ',$gblImages),$ext) ) {  
313                  $info  = getimagesize($fsPath) ;                  $info  = getimagesize($fsPath) ;
314                  $tstr = "<IMG SRC=\"".urlpath($relPath)."\" BORDER=0 " ;                  $tstr = "<IMG SRC=\"$webRoot".urlpath($relPath)."\" BORDER=0 " ;
315                  $tstr .= $info[3] . " ALT=\"" . $fn . " - " ;                  $tstr .= $info[3] . " ALT=\"" . $fn . " - " ;
316                  $tstr .= (int)(($fsize+1023)/1024) . "Kb\">" ;                  $tstr .= (int)(($fsize+1023)/1024) . "Kb\">" ;
317  //              echo htmlentities($tstr) . "<BR><BR>" . $tstr ;  //              echo htmlentities($tstr) . "<BR><BR>" . $tstr ;
# Line 363  echo($fstr) ; ?></TEXTAREA> Line 377  echo($fstr) ; ?></TEXTAREA>
377  </FORM>  </FORM>
378    
379  <?php  <?php
380            
381          $name=basename("$fsDir/$fn");          $name=basename("$fsDir/$fn");
382          $logname=dirname("$fsDir/$fn")."/.log/$name";          $logname=dirname("$fsDir/$fn")."/.log/$name";
383          $bakdir=dirname("$fsDir/$fn")."/.bak";          $bakdir=dirname("$fsDir/$fn")."/.bak";
384          if (file_exists($logname)) {          if (file_exists($logname)) {
385                  $log=fopen($logname,"r");                  $log=fopen($logname,"r");
386                  $cl1=" class=lst"; $cl2="";                  $cl1=" class=LST"; $cl2="";
387                  $logarr = array();                  $logarr = array();
388                  while($line = fgetcsv($log,255,"\t")) {                  while($line = fgetcsv($log,512,"\t")) {
389                          $cl=$cl1; $cl1=$cl2; $cl2=$cl;                          $cl=$cl1; $cl1=$cl2; $cl2=$cl;
390                          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]));
391                  }                  }
392                  fclose($log);                  fclose($log);
393                  print "<hr><br><b>CHANGES TO THIS FILE</b><br><table border=0 width=100%>\n";                  if (is_dir("$fsDir/$fn")) {
394                            $whatis="DIRECTORY";
395                    } else {
396                            $whatis="FILE";
397                    }
398                    print "<hr><br><b>CHANGES TO THIS $whatis</b><br><table border=0 width=100%>\n";
399                  $bakcount = 0;  // start from 0, skip fist backup (it's current)                  $bakcount = 0;  // start from 0, skip fist backup (it's current)
400                  while ($e = array_shift($logarr)) {                  while ($e = array_shift($logarr)) {
401                          if (strstr($e[4],"upload")) {                          if (strstr($e[4],"upload")) {
402                                  if (file_exists("$bakdir/$bakcount/$name")) {                                  if (file_exists("$bakdir/$bakcount/$name")) {
403                                          $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>";
404                                  }                                  }
405                                  $bakcount++;                                  $bakcount++;
406                          }                          }
# Line 642  function GifIcon($txt) { Line 661  function GifIcon($txt) {
661    
662  function Navigate($fsRoot,$relDir) {  function Navigate($fsRoot,$relDir) {
663    
664          global $gblEditable, $gblIcon ;          global $gblEditable, $gblIcon, $gblModDays, $webRoot, $gblHide ;
665    
666          $self     = $GLOBALS["PHP_SELF"] ;          $self     = $GLOBALS["PHP_SELF"] ;
667          if (isset($GLOBALS["HTTPS"]) && $GLOBALS["HTTPS"] == "on") {  
668                  $webRoot  = "https://" . $GLOBALS["SERVER_NAME"] ;          $fsDir = $fsRoot . $relDir . "/" ; // current directory
         } else {  
                 $webRoot  = "http://" . $GLOBALS["SERVER_NAME"] ;  
         }  
         $fsDir    = $fsRoot . $relDir . "/" ; // current directory  
669    
670          if (!is_dir($fsDir)) Error("Dir not found",$relDir) ;          if (!is_dir($fsDir)) Error("Dir not found",$relDir) ;
671    
672            $hide_items=",$gblHide,";
673    
674          // read directory contents          // read directory contents
675          if ( !($dir = @opendir($fsDir)) )          if ( !($dir = @opendir($fsDir)) )
676                  Error("Read Access denied",$relDir) ;                  Error("Read Access denied",$relDir) ;
677          while ($item = readdir($dir)) {          while ($item = readdir($dir)) {
678                  if ( $item == ".." || $item == "." || substr($item,0,1) == "." ) continue ;                  if ( substr($item,0,1) == "." || strstr($hide_items,",$item,") ) continue ;
679                  if ( is_dir($fsDir . $item) ) {                  if ( is_dir($fsDir . $item) ) {
680                          $dirList[] = $item ;                          $dirList[] = $item ;
681                  } else if ( is_file($fsDir . $item) ) {                  } else if ( is_file($fsDir . $item) ) {
# Line 677  function Navigate($fsRoot,$relDir) { Line 694  function Navigate($fsRoot,$relDir) {
694          // scan deleted files          // scan deleted files
695          if ( $GLOBALS[show_deleted] == 1 && ($dir = @opendir("$fsDir/.del")) ) {          if ( $GLOBALS[show_deleted] == 1 && ($dir = @opendir("$fsDir/.del")) ) {
696                  while ($item = readdir($dir)) {                  while ($item = readdir($dir)) {
697                          if ( substr($item,0,1) == "." ) continue ;                          if ( substr($item,0,1) == "." || strstr($hide_items,",$item,") ) continue ;
698                          $fileList[] = ".del/$item" ;                                      $fileList[] = ".del/$item" ;            
699                  }                  }
700                  closedir($dir) ;                  closedir($dir) ;
# Line 691  function Navigate($fsRoot,$relDir) { Line 708  function Navigate($fsRoot,$relDir) {
708                  $text .= ", <a href=$self?D=".urlencode($relDir)."&show_deleted=1>undelete</a>";                  $text .= ", <a href=$self?D=".urlencode($relDir)."&show_deleted=1>undelete</a>";
709          }          }
710          $text .= " or revise files on this web site." ;          $text .= " or revise files on this web site." ;
711            $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>.";
712          StartHTML("(Navigate)",$text) ;          StartHTML("(Navigate)",$text) ;
713    
714          echo "<TABLE BORDER=0 CELLPADDING=2          echo "<TABLE BORDER=0 CELLPADDING=2
715                  CELLSPACING=3 WIDTH=\"100%\">" ;                  CELLSPACING=3 WIDTH=\"100%\">" ;
716    
717          // updir bar              // updir bar    
718          if ($fsDir != $fsRoot) {          if (chopsl($fsDir) != chopsl($fsRoot)) {
719                  $parent = dirname($relDir) ;                  $parent = dirname($relDir) ;
720                  if ($parent == "") $parent = "/" ;                  if ($parent == "") $parent = "/" ;
721  ?>  ?>
# Line 709  function Navigate($fsRoot,$relDir) { Line 727  function Navigate($fsRoot,$relDir) {
727  <?php  <?php
728          }          }
729    
730    function plural($name,$count) {
731            $out="$count $name";
732            if ($count > 1) {
733                    $out.="s";
734            }
735            return $out;
736    }
737    
738          // output subdirs          // output subdirs
739          if (sizeof($dirList) > 0) {          if (sizeof($dirList) > 0) {
740                  sort($dirList) ;                  sort($dirList) ;
741  ?>  ?>
742    
743  <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>
744    
745  <?php  <?php
746                  while (list($key,$dir) = each($dirList)) {                  while (list($key,$dir) = each($dirList)) {
747    
748                            $info_url=$self."?A=E&F=".urlencode($dir)."&D=".urlencode($relDir);
749                          $tstr = "<A HREF=\"" . $self . "?D=" ;                          $tstr = "<A HREF=\"" . $self . "?D=" ;
750                          $tstr .= urlencode($relDir."/".$dir) ;                          $tstr .= urlencode($relDir."/".$dir) ;
751                          $tstr .= "\">" . $dir . "/</A>" ;                          $tstr .= "\">" . $dir . "/</A>" ;
752                            $note_html="<a href=\"$info_url#note\">".$gblIcon("note")."</a>".ReadNote($fsDir.$dir);
753  ?>  ?>
754    
755  <TR><TD><?= $gblIcon("fldr") ?></TD>  <TR><TD>
756  <TD COLSPAN=5 CLASS=LST><?= $tstr ?></TD></TR>  <A HREF="<?= $info_url ?>" TITLE="View/Edit">
757    <?= $gblIcon("fldr") ?></A></TD>
758    <TD COLSPAN=2 CLASS=LST><?= $tstr ?></TD>
759    <TD COLSPAN=3 CLASS=LST><?= $note_html ?></TD></TR>
760    
761  <?php  <?php
762                  }  // iterate over dirs                  }  // iterate over dirs
# Line 734  function Navigate($fsRoot,$relDir) { Line 765  function Navigate($fsRoot,$relDir) {
765    
766  <TR><TD></TD><TD COLSPAN=5><HR><B><?= $webRoot . $relDir ?>  <TR><TD></TD><TD COLSPAN=5><HR><B><?= $webRoot . $relDir ?>
767  </B></TD></TR>  </B></TD></TR>
768  <TR><TD></TD><TD CLASS=TOP>DOCUMENT NAME</TD>  <TR><TD></TD><TD CLASS=TOP>DOCUMENT NAME (<?= plural("file",sizeof($fileList)) ?>)</TD>
769  <TD><?= $gblIcon("blank").$gblIcon("blank") ?></TD>  <TD><?= $gblIcon("blank").$gblIcon("blank") ?></TD>
770  <TD CLASS=TOP>NOTE</TD>  <TD CLASS=TOP>NOTE</TD>
771  <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 788  function Navigate($fsRoot,$relDir) {
788    
789                  $info_url=$self."?A=E&F=".urlencode($file)."&D=".urlencode($relDir);                  $info_url=$self."?A=E&F=".urlencode($file)."&D=".urlencode($relDir);
790    
791                  if ( ($mod + 30*86400) > time() ) {                  if ( ($mod + $gblModDays*86400) > time() ) {
792                          $a  = "<SPAN CLASS=RED TITLE=\"Newer" ;                          $a  = "<SPAN CLASS=RED TITLE=\"Newer" ;
793                          $a .= " than 30 days\"> * </SPAN>" ;                          $a .= " than $gblModDays days\"> * </SPAN>" ;
794                  }                  }
795    
796                  $file_lock=CheckLock($path);                  $file_lock=CheckLock($path);
# Line 824  function Navigate($fsRoot,$relDir) { Line 855  function Navigate($fsRoot,$relDir) {
855    
856  <?php  <?php
857            }  // iterate over files            }  // iterate over files
858          }  // end if no files          } else {  // end if no files
859    ?>
860     <TR><TD></TD><TD COLSPAN=5 CLASS=LST>
861      No files in this directory
862     </TD></TR>
863    <?
864            }
865    
866          if ($emptyDir) {          if ($emptyDir && $relDir != "") {
867  ?>  ?>
868    
869  <FORM METHOD="POST" ACTION="<?= $self ?>">  <FORM METHOD="POST" ACTION="<?= $self ?>">
# Line 844  function Navigate($fsRoot,$relDir) { Line 881  function Navigate($fsRoot,$relDir) {
881    
882  <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>  <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>
883    
 <TR><TD></TD><TD COLSPAN=5>  
884  <?  <?
885  if (file_exists(".info.inc")) {  if (file_exists(".info.inc")) {
886            print "<TR><TD></TD><TD COLSPAN=5>";
887          include(".info.inc");          include(".info.inc");
888            print "</TD></TR>
889            <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>";
890  }  }
891  ?>  ?>
 </TD></TR>  
   
 <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>  
892    
893  <FORM METHOD="POST" ACTION="<?= $self ?>">  <FORM METHOD="POST" ACTION="<?= $self ?>">
894  <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 897  if (file_exists(".info.inc")) {
897   <NOBR>NAME <INPUT TYPE="TEXT" NAME="FN" SIZE=14>   <NOBR>NAME <INPUT TYPE="TEXT" NAME="FN" SIZE=14>
898   <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="CREATE">   <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="CREATE">
899   <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>">   <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>">
900   <INPUT TYPE="SUBMIT" VALUE="CREATE"></NOBR>   <INPUT TYPE="SUBMIT" VALUE="CREATE" NAME="CREATE">
901     </NOBR>
902   <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
903   </NOBR>   </NOBR>
904  </TD></TR>  </TD></TR>
# Line 874  if (file_exists(".info.inc")) { Line 911  if (file_exists(".info.inc")) {
911    
912  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
913    
914  function UploadPage($fsRoot, $relDir, $filename) {  function UploadPage($fsRoot, $relDir, $filename="") {
915    
916          $self = $GLOBALS["PHP_SELF"] ;          $self = $GLOBALS["PHP_SELF"] ;
917          if ($relDir == "") $relDir = "/" ;          if ($relDir == "") $relDir = "/" ;
# Line 884  function UploadPage($fsRoot, $relDir, $f Line 921  function UploadPage($fsRoot, $relDir, $f
921  <FORM ENCTYPE="multipart/form-data" METHOD="POST"  <FORM ENCTYPE="multipart/form-data" METHOD="POST"
922   ACTION="<?= $self ?>">   ACTION="<?= $self ?>">
923  DESTINATION DIRECTORY:<B><?= " " . $relDir ?></B>  DESTINATION DIRECTORY:<B><?= " " . $relDir ?></B>
924  <? if (isset($filename)) { ?>  <? if (isset($filename) && $filename!="") { ?>
925  <br>DESTINATION FILE:<B><?= " " . $filename ?></B>  <br>DESTINATION FILE:<B><?= " " . $filename ?></B>
926  <INPUT TYPE="HIDDEN" NAME="FILENAME" VALUE="<?= $filename ?>">  <INPUT TYPE="HIDDEN" NAME="FILENAME" VALUE="<?= $filename ?>">
927  <? } ?>  <? } ?>
# Line 919  function Error($title,$text="") { Line 956  function Error($title,$text="") {
956    
957  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
958    
 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  
   
 //////////////////////////////////////////////////////////////////  
   
959  function NoEntry() {  function NoEntry() {
960    
961          $user = $GLOBALS["PHP_AUTH_USER"] ;          $user = $GLOBALS["PHP_AUTH_USER"] ;
# Line 950  function NoEntry() { Line 964  function NoEntry() {
964    
965          $title = "(401 Unauthorized)" ;          $title = "(401 Unauthorized)" ;
966          $text  = "No trespassing !" ;          $text  = "No trespassing !" ;
         StartHTML($title,$text) ;  
 ?>  
967    
968  <FORM ACTION="<?= $self ?>?HASH=create" METHOD="POST">          global $PHP_AUTH_USER,$PHP_AUTH_PW,$gblPw,$relogin;
969  <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>  
970    
 <?php  
971          EndHTML() ;          EndHTML() ;
972          exit ;          exit ;
973  }  }
974    
975  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
976    
977  function Logit($target,$msg) {  function LogIt($target,$msg) {
978    
979          $dir=dirname($target);          $dir=dirname($target);
980          if (! file_exists($dir."/.log")) {          if (! file_exists($dir."/.log")) {
# Line 991  function Logit($target,$msg) { Line 994  function Logit($target,$msg) {
994    
995  function WriteNote($target,$msg) {  function WriteNote($target,$msg) {
996    
997            $target=stripSlashes($target);
998          $dir=dirname($target);          $dir=dirname($target);
999          if (! file_exists($dir."/.note")) {          if (! file_exists($dir."/.note")) {
1000                  mkdir($dir."/.note",0700);                  mkdir($dir."/.note",0700);
# Line 1007  function WriteNote($target,$msg) { Line 1011  function WriteNote($target,$msg) {
1011    
1012  function ReadNote($target) {  function ReadNote($target) {
1013    
1014            $target=stripSlashes($target);
1015          $dir=dirname($target);          $dir=dirname($target);
1016          $file=basename($target);          $file=basename($target);
1017          $msg="";          $msg="";
# Line 1015  function ReadNote($target) { Line 1020  function ReadNote($target) {
1020                  $msg=fgets($note,4096);                  $msg=fgets($note,4096);
1021                  fclose($note);                  fclose($note);
1022          }          }
1023          return StripSlashes($msg);          return HtmlSpecialChars(StripSlashes($msg));
1024    
1025  }  }
1026    
# Line 1023  function ReadNote($target) { Line 1028  function ReadNote($target) {
1028    
1029  function MoveTo($source,$folder) {  function MoveTo($source,$folder) {
1030    
1031            $source=stripSlashes($source);
1032          $file=basename($source);          $file=basename($source);
1033          if (! file_exists($folder)) {          if (! file_exists($folder)) {
1034                  mkdir($folder,0700);                  mkdir($folder,0700);
# Line 1036  function MoveTo($source,$folder) { Line 1042  function MoveTo($source,$folder) {
1042    
1043  function Lock($target) {  function Lock($target) {
1044    
1045            $target=stripSlashes($target);
1046          $dir=dirname($target);          $dir=dirname($target);
1047          if (! file_exists($dir."/.lock")) {          if (! file_exists($dir."/.lock")) {
1048                  mkdir($dir."/.lock",0700);                  mkdir($dir."/.lock",0700);
# Line 1056  function Lock($target) { Line 1063  function Lock($target) {
1063    
1064  function CheckLock($target) {  function CheckLock($target) {
1065    
1066            $target=stripSlashes($target);
1067          $dir=dirname($target);          $dir=dirname($target);
1068          $file=basename($target);          $file=basename($target);
1069          $msg=0;          $msg=0;
# Line 1070  function CheckLock($target) { Line 1078  function CheckLock($target) {
1078    
1079  function Unlock($target) {  function Unlock($target) {
1080    
1081            $target=stripSlashes($target);
1082          $dir=dirname($target);          $dir=dirname($target);
1083          $file=basename($target);          $file=basename($target);
1084          if (file_exists($dir."/.lock/$file")) {          if (file_exists($dir."/.lock/$file")) {
# Line 1092  function urlpath($url) { Line 1101  function urlpath($url) {
1101    
1102  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
1103    
1104  function safe_rename($from,$to) {  function safe_rename($fromdir,$fromfile,$tofile) {
1105          if (file_exists($from) && is_writable(dirname($to))) {          function try_rename($from,$to) {
1106                  rename($from,$to);  #               print "$from -> $to\n";
1107                    if (file_exists($from) && is_writeable(dirname($to))) {
1108                            rename($from,$to);
1109                    }
1110            }
1111    
1112            function try_dir($todir) {
1113                    if (! file_exists($todir)) {
1114                            mkdir($todir,0700);
1115                    }
1116            }
1117    
1118            $to="$fromdir/$tofile";
1119            $todir=dirname($to);
1120            $tofile=basename($to);
1121    
1122    #       print "<pre>$fromdir / $fromfile -> $todir / $tofile\n\n";
1123    
1124            try_rename("$fromdir/$fromfile","$todir/$tofile");
1125            try_dir("$todir/.log");
1126            try_rename("$fromdir/.log/$fromfile","$todir/.log/$tofile");
1127            try_dir("$todir/.note");
1128            try_rename("$fromdir/.note/$fromfile","$todir/.note/$tofile");
1129            try_dir("$todir/.lock");
1130            try_rename("$fromdir/.lock/$fromfile","$todir/.lock/$tofile");
1131            try_dir("$todir/.bak");
1132            for($i=0;$i<=$GLOBALS[gblNumBackups];$i++) {
1133                    try_rename("$fromdir/.bak/$i/$fromfile","$todir/.bak/$i/$tofile");
1134          }          }
1135  }  }
1136    
1137    
1138  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
1139    
1140    // recursivly delete directory
1141    
1142    function rrmdir($dir) {
1143            $handle=opendir($dir);
1144            while ($file = readdir($handle)) {
1145                    if ($file != "." && $file != "..") {
1146                            if (is_dir("$dir/$file"))
1147                                    rrmdir("$dir/$file");
1148                            else
1149                                    if (! @unlink("$dir/$file")) return(0);
1150                    }
1151            }
1152            closedir($handle);
1153            return @rmdir($dir);
1154    }
1155    
1156    //////////////////////////////////////////////////////////////////
1157    
1158    function ChangeLog($target,$msg) {
1159    
1160            global $gblFsRoot;
1161            $log=fopen("$gblFsRoot/.changelog","a+");
1162            if (substr($target,0,strlen($gblFsRoot)) == $gblFsRoot)
1163                    $target=substr($target,strlen($gblFsRoot),strlen($target)-strlen($gblFsRoot));
1164            $msg=str_replace("\t"," ",$msg);
1165            fputs($log,time()."\t$target\t$GLOBALS[gblUserName]\t$msg\n");
1166            fclose($log);
1167    
1168    }
1169    
1170    function DisplayChangeLog($day) {
1171    
1172            global $gblFsRoot;
1173            if (!file_exists("$gblFsRoot/.changelog")) return;
1174            $log=fopen("$gblFsRoot/.changelog","r");
1175            $logarr = array();
1176            while($line = fgetcsv($log,512,"\t")) {
1177                    $line[0] .= sizeof($line);
1178                    while (sizeof($line) > 4) {
1179                            $tmp = array_pop($line);
1180                            $line.=" $tmp";
1181                    }
1182                    if ($day!=1 || ($day==1 && (time()-$line[0] < 24*60*60))) {
1183                            array_unshift($logarr,array($line[0],$line[1],$line[2],$line[3]));
1184                    }
1185            }
1186            fclose($log);
1187            $cl1=" class=LST"; $cl2="";
1188            print "<table border=0 width=100%>\n";
1189            while ($e = array_shift($logarr)) {
1190                    $cl=$cl1; $cl1=$cl2; $cl2=$cl;
1191                    $date = date("$GLOBALS[gblDateFmt]", $e[0]);
1192                    $time = date("$GLOBALS[gblTimeFmt]", $e[0]);
1193                    $dir = dirname($e[1]);
1194                    $file = basename($e[1]);
1195                    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";
1196            }
1197            print "</table>";
1198            print "<p>".GifIcon(up)." Back to <a href=$GLOBALS[PHP_SELF]>front page</a>.</p>";
1199    }
1200    
1201    //////////////////////////////////////////////////////////////////
1202    
1203    function Download($path) {
1204            global $HTTP_USER_AGENT;
1205            $file=basename($path);
1206            $size = filesize($path);
1207            //header("Content-Type: application/octet-stream");
1208            header("Content-Type: application/force-download");
1209            header("Content-Length: $size");
1210            // IE5.5 just downloads index.php if we don't do this
1211            if(preg_match("/MSIE 5.5/", $HTTP_USER_AGENT)) {
1212                    header("Content-Disposition: filename=$file");
1213            } else {
1214                    header("Content-Disposition: attachment; filename=$file");
1215            }
1216            header("Content-Transfer-Encoding: binary");
1217            $fh = fopen($path, "r");
1218            fpassthru($fh);
1219    }
1220    
1221    
1222    //////////////////////////////////////////////////////////////////
1223    
1224    function chopsl($path) {
1225            if (substr($path,strlen($path)-1,1) == "/") $path=substr($path,0,strlen($path)-1);
1226            $path=str_replace("//","/",$path);
1227            return $path;
1228    }
1229    
1230    //////////////////////////////////////////////////////////////////
1231  // MAIN PROGRAM  // MAIN PROGRAM
1232  // ============  // ============
1233  // query parameters: capital letters  // query parameters: capital letters
# Line 1115  function safe_rename($from,$to) { Line 1243  function safe_rename($from,$to) {
1243          // forks before authentication: style sheet and hash          // forks before authentication: style sheet and hash
1244          // creation if password not yet set.          // creation if password not yet set.
1245          if ($STYLE == "get") { CSS() ; exit ; }          if ($STYLE == "get") { CSS() ; exit ; }
1246          if ($HASH != "") {  
1247                  CreateHash($USER, $PW) ;          $fsScriptDir  = dirname($SCRIPT_FILENAME) ;    
1248                  exit ;          // i.e. /home/httpd/html/docman
1249    
1250            // read user-defined configuration
1251            if (file_exists("$fsScriptDir/.docman.conf")) {
1252                    include("$fsScriptDir/.docman.conf");
1253            }
1254    
1255            // where do we get users from?
1256            if (file_exists("$gblIncDir/$gblUsers.php")) {
1257                    include("$gblIncDir/$gblUsers.php");
1258            } else {
1259                    Error("Configuration error","Can't find user handling module at <tt>$gblIncDir/$gblUsers.php</tt> ! Please fix <tt>$fsScriptDir/.docman.conf</tt>");
1260            }
1261    
1262            // if no password, or empty password logout
1263            if (
1264                    isset($PHP_AUTH_USER) && (
1265                            !isset($relogin) || (
1266                                    isset($relogin) && $relogin != md5($PHP_AUTH_USER.$PHP_AUTH_PW)
1267                            )
1268                    ) && (
1269                            $PHP_AUTH_PW == "" || !isset($PHP_AUTH_PW)
1270                    )
1271               ) {
1272                    StartHTML("Logout completed","Your login credentials has been erased") ;
1273                    EndHTML() ;
1274                    exit ;
1275          }          }
1276    
1277          // authentication if $gblAuth == true          // authentication failure
1278          if ( $gblAuth && $gblHash($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ||          if ( md5($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ||
1279                  isset($relogin) && $gblPw == $relogin ) {                  isset($relogin) && $gblPw == $relogin) {
1280                  header("WWW-authenticate: basic realm=\"$SERVER_NAME\"") ;                  header("WWW-authenticate: basic realm=\"$HTTP_HOST\"") ;
1281                  header("HTTP/1.0 401 Unauthorized") ;                  header("HTTP/1.0 401 Unauthorized") ;
1282                  NoEntry() ;                  NoEntry() ;
1283                  exit ;                  exit ;
# Line 1135  function safe_rename($from,$to) { Line 1289  function safe_rename($from,$to) {
1289                  $relDir = urldecode($D) ;  // then use GET                  $relDir = urldecode($D) ;  // then use GET
1290          }                }      
1291    
1292            $relDir=stripSlashes($relDir);
1293    
1294          if ($relDir == "/") $relDir = "" ;                if ($relDir == "/") $relDir = "" ;      
1295          // default : website root = ""          // default : website root = ""
1296    
# Line 1146  function safe_rename($from,$to) { Line 1302  function safe_rename($from,$to) {
1302          // i.e. below $gblFsRoot.          // i.e. below $gblFsRoot.
1303    
1304          $relScriptDir = dirname($SCRIPT_NAME) ;                  $relScriptDir = dirname($SCRIPT_NAME) ;        
1305          // i.e. /siteman          // i.e. /docman
   
         $fsScriptDir  = dirname($SCRIPT_FILENAME) ;      
         // i.e. /home/httpd/html/siteman  
1306    
1307          $gblFsRoot = substr($fsScriptDir,0,          // start on server root
1308            strlen($fsScriptDir)-strlen($relScriptDir)) ;  //      $gblFsRoot = substr($fsScriptDir,0, strlen($fsScriptDir)-strlen($relScriptDir)) ;
1309            // or on script root
1310            $gblFsRoot = $fsScriptDir;
1311          // i.e. /home/httpd/html          // i.e. /home/httpd/html
1312    
1313          $fsDir = $gblFsRoot . $relDir ; // current directory          $fsDir = $gblFsRoot . $relDir ; // current directory
1314          if ( !is_dir($fsDir) ) Error("Dir not found",$relDir) ;          if ( !is_dir($fsDir) ) Error("Dir not found",$relDir) ;
1315            
1316            if (isset($GLOBALS["HTTPS"]) && $GLOBALS["HTTPS"] == "on") {
1317                    $webRoot  = "https://";
1318            } else {
1319                    $webRoot  = "http://";
1320            }
1321            $webRoot .= $GLOBALS["HTTP_HOST"] . $relScriptDir;
1322    
1323            $FN=stripSlashes($FN);
1324    
1325    
1326          switch ($POSTACTION) {          switch ($POSTACTION) {
1327          case "UPLOAD" :          case "UPLOAD" :
1328                  if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;                  if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;
# Line 1166  function safe_rename($from,$to) { Line 1331  function safe_rename($from,$to) {
1331                  // TODO : should rather check for escapeshellcmds                  // TODO : should rather check for escapeshellcmds
1332                  // but maybe RFC 18xx asserts safe filenames ....                  // but maybe RFC 18xx asserts safe filenames ....
1333                  $source = $FN ;                  $source = $FN ;
1334                    if (! file_exists($source)) {
1335                            Error("You must select file with browse to upload it!");
1336                    }
1337                  if (! isset($FILENAME)) {       // from update file                  if (! isset($FILENAME)) {       // from update file
1338                          $target = "$fsDir/$FN_name" ;                          $target = "$fsDir/$FN_name" ;
1339                  } else {                  } else {
# Line 1193  function safe_rename($from,$to) { Line 1361  function safe_rename($from,$to) {
1361                  if (isset($FILENAME)) {                  if (isset($FILENAME)) {
1362                          Unlock($target);                          Unlock($target);
1363                  }                  }
1364                    ChangeLog($target,"updated");
1365                  break ;                  break ;
1366    
1367          case "SAVE" :          case "SAVE" :
1368                  $path = $gblFsRoot . escapeshellcmd($RELPATH) ;                  $path = $gblFsRoot . $RELPATH ;
1369                    $path=stripSlashes($path);
1370                  $writable = is_writeable($path) ;                  $writable = is_writeable($path) ;
1371                  $legaldir = is_writeable(dirname($path)) ;                  $legaldir = is_writeable(dirname($path)) ;
1372                  $exists   = (file_exists($path)) ? 1 : 0 ;                  $exists   = (file_exists($path)) ? 1 : 0 ;
# Line 1204  function safe_rename($from,$to) { Line 1374  function safe_rename($from,$to) {
1374                  if (!($writable || (!$exists && $legaldir)))                  if (!($writable || (!$exists && $legaldir)))
1375                          Error("Write denied",$RELPATH) ;                          Error("Write denied",$RELPATH) ;
1376                  $fh = fopen($path, "w") ;                  $fh = fopen($path, "w") ;
1377                    $FILEDATA=stripSlashes($FILEDATA);
1378                  fwrite($fh,$FILEDATA) ;                  fwrite($fh,$FILEDATA) ;
1379                  fclose($fh) ;                  fclose($fh) ;
1380                  clearstatcache() ;                  clearstatcache() ;
1381                  Logit($path,"saved changes");                  Logit($path,"saved changes");
1382                    ChangeLog($path,"saved changes");
1383                  break ;                  break ;
1384    
1385          case "CREATE" :          case "CREATE" :
# Line 1226  function safe_rename($from,$to) { Line 1398  function safe_rename($from,$to) {
1398  // this functionality is doubled in DetailView().  // this functionality is doubled in DetailView().
1399  // better keep it here altogether  // better keep it here altogether
1400  // chmod perms to $gblFilePerms  // chmod perms to $gblFilePerms
1401                          if ( file_exists($path) && !is_writable($path) )                          if ( file_exists($path) && !is_writeable($path) )
1402                                  Error("File not writable", $relPath) ;                                  Error("File not writable", $relPath) ;
1403                          $fh = fopen($path, "w+") ;                          $fh = fopen($path, "w+") ;
1404                          if ($fh) {                          if ($fh) {
# Line 1238  function safe_rename($from,$to) { Line 1410  function safe_rename($from,$to) {
1410                          }                          }
1411                          $tstr = "$PHP_SELF?A=E&D=".urlencode($relDir)."&F=".urlencode($FN) ;                          $tstr = "$PHP_SELF?A=E&D=".urlencode($relDir)."&F=".urlencode($FN) ;
1412                          header("Location: " . $tstr) ;                          header("Location: " . $tstr) ;
1413                            ChangeLog($target,"created");
1414                          exit ;                          exit ;
1415                  }                  }
1416                  break ;                  break ;
# Line 1270  function safe_rename($from,$to) { Line 1443  function safe_rename($from,$to) {
1443                          }                          }
1444                  }                  }
1445                  else {  // delete directory                  else {  // delete directory
1446                    if ( ! @rmdir($fsDir) ) {                    if ( ! @rrmdir($fsDir) ) {
1447                      Error("Rmdir failed", $tstr . $fsDir) ;                      Error("Rmdir failed", $tstr . $fsDir) ;
1448                    }                    }
1449                    else {                    else {
# Line 1297  function safe_rename($from,$to) { Line 1470  function safe_rename($from,$to) {
1470                  if ( $CONFIRM != "on" ) break ;                  if ( $CONFIRM != "on" ) break ;
1471    
1472                  Logit("$fsDir/$FN","renamed $FN to $NEWNAME");                  Logit("$fsDir/$FN","renamed $FN to $NEWNAME");
1473                  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");  
                 }  
   
1474                  break ;                  break ;
1475    
1476          case "NOTE" :            case "NOTE" :  
# Line 1334  function safe_rename($from,$to) { Line 1500  function safe_rename($from,$to) {
1500          // $A=Co : checkout file $D/$F          // $A=Co : checkout file $D/$F
1501          // $A=Ci : checkin file $D/$F          // $A=Ci : checkin file $D/$F
1502          // $A=V : view file (do nothing except log)          // $A=V : view file (do nothing except log)
1503            // $A=I : include file .$F.php from $gblFsRoot
1504          // default : display directory $D          // default : display directory $D
1505            
1506          switch ($A) {          switch ($A) {
1507          case "U" :          case "U" :
1508                  // upload to $relDir                  // upload to $relDir
1509                  if (!is_writeable($gblFsRoot . $relDir))                  if (!is_writeable($gblFsRoot . $relDir))
1510                          Error("Write access denied",$relDir) ;                          Error("Write access denied",$relDir) ;
1511                  $text  = "Use this page to upload a single " ;                  $text  = "Use this page to upload a single " ;
1512                  $text .= "file to <B>$SERVER_NAME</B>." ;                  $text .= "file to <B>$HTTP_HOST</B>." ;
1513                  StartHTML("(Upload Page)", $text) ;                  StartHTML("(Upload Page)", $text) ;
1514                  UploadPage($gblFsRoot, $relDir) ;                  UploadPage($gblFsRoot, $relDir) ;
1515                  EndHTML() ;                  EndHTML() ;
1516                  exit ;                  exit ;
1517          case "E" :          case "E" :
1518                    $F=stripSlashes($F);
1519                  // detail of $relDir/$F                  // detail of $relDir/$F
1520                  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) ;
1521                  exit ;                  exit ;
1522          case "C" :          case "C" :
1523                    $F=stripSlashes($F);
1524                  // listing of $relDir/$F                  // listing of $relDir/$F
1525                  DisplayCode($gblFsRoot, $relDir, $F) ;                  DisplayCode($gblFsRoot, $relDir, $F) ;
1526                  exit ;                  exit ;
1527          case "Co" :          case "Co" :
1528                  // checkout                  // checkout
1529                  Lock("$gblFsRoot/$relDir/$F");                  Lock("$gblFsRoot/$relDir/$F");
1530                  header("Content-Disposition: attachment; filename=$F" );                  Download("$gblFsRoot/$relDir/$F");
                 Header("Location: ".urlpath("$relDir/$F"));  
1531                  exit;                  exit;
1532          case "Ci" :          case "Ci" :
1533                    $F=stripSlashes($F);
1534                  // upload && update to $relDir                  // upload && update to $relDir
1535                  if (!is_writeable($gblFsRoot . $relDir))                  if (!is_writeable($gblFsRoot . $relDir))
1536                          Error("Write access denied",$relDir) ;                          Error("Write access denied",$relDir) ;
1537                  $text  = "Use this page to update a single " ;                  $text  = "Use this page to update a single " ;
1538                  $text .= "file to <B>$SERVER_NAME</B>." ;                  $text .= "file to <B>$HTTP_HOST</B>." ;
1539                  StartHTML("(Update file Page)", $text) ;                  StartHTML("(Update file Page)", $text) ;
1540                  UploadPage($gblFsRoot, $relDir, $F) ;                  UploadPage($gblFsRoot, $relDir, $F) ;
1541                  EndHTML() ;                  EndHTML() ;
# Line 1374  function safe_rename($from,$to) { Line 1543  function safe_rename($from,$to) {
1543          case "V" :          case "V" :
1544                  // view                  // view
1545                  LogIt("$gblFsRoot/$relDir/$F","viewed");                  LogIt("$gblFsRoot/$relDir/$F","viewed");
1546                  header("Content-Disposition: attachment; filename=$F" );                  if ($gblForceDownload) {
1547                  Header("Location: ".urlpath("$relDir/$F"));                          Download("$gblFsRoot/$relDir/$F");
1548                    } else {
1549                            header("Content-Disposition: attachment; filename=$F" );
1550                            Header("Location: $webRoot".urlpath("$relDir/$F"));
1551                    }
1552                    exit;
1553            case "Ch" :
1554                    StartHTML("(File changes)","All changes chronologicaly...");
1555                    DisplayChangeLog(0);    // all
1556                    EndHTML() ;
1557                  exit;                  exit;
1558            case "Ch1" :
1559                    StartHTML("(File changes)","Changes to files in last day...");
1560                    DisplayChangeLog(1);
1561                    EndHTML() ;
1562                    exit;
1563            case "I" :
1564                    $F=stripSlashes($F);
1565                    $inc_file="${gblFsRoot}/.${F}.php";
1566                    if (!isset($F) || $F == "" || !file_exists($inc_file)) Error("Fatal error $inc_file"); // can't find file to include
1567                    if (!is_readable($inc_file))
1568                            Error("Read access to include file denied",".${F}.php");
1569                    $text  = "Your include file should define \$text variable which holds this text and \$title variable which is page title";
1570                    $title = "You should define \$title variable with page title";
1571                    include($inc_file);
1572                    StartHTML($title, $text) ;
1573                    print "<p>".GifIcon(up)." Back to <a href=$GLOBALS[PHP_SELF]>front page</a>.</p>";
1574                    EndHTML() ;
1575                    exit ;
1576          }          }
1577    
1578          // default: display directory $relDir          // default: display directory $relDir

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

  ViewVC Help
Powered by ViewVC 1.1.26