/[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.1.1.1 by dpavlin, Fri May 12 12:01:08 2000 UTC revision 1.8 by dpavlin, Fri Aug 4 10:20:22 2000 UTC
# Line 34  Line 34 
34  /*             PHP3. Fixed bug which would send you to a non-   */  /*             PHP3. Fixed bug which would send you to a non-   */
35  /*             existent address after file modifications.       */  /*             existent address after file modifications.       */
36    
37    /*
38            2000-07-25 Dobrica Pavlinusic <dpavlin@rot13.org>
39    
40            nuked exec calls (unsecure)
41            nuked writeable function (replaced by php is_writeable)
42            added support for https (tested with apache+mod_ssl)
43            added users file
44            date format user-selectable
45            cycle backup files in bak directory
46            support links as directoryes (for now)
47            support of file history logging
48            undelete capabilities (delete moves to .del directory)
49    
50            2000-07-26 DbP
51    
52            added more checking on entered filename (when creating file/dir)
53            added rename option
54    
55    
56    IMPORTANT INSTALLATION NOTE:
57            deny serving of .* (dot-something) files in web server!
58            Otherwise, uses can access your log files, users and/or
59            deleted files!
60    
61            .htusers is in form:
62            login:Real Name:md5(loginpassword)
63    
64    
65    TODO:
66            mixed file/directory output (add type to each entry,
67                    real support for links)
68            add more content-management (like cms.sourceforge.net):
69                    check-out/check-in/reserve
70                    comments to files
71    */
72    
73  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
74    
75  // TODO : Don't let the file be modified itself. Create a hash of  // TODO : Don't let the file be modified itself. Create a hash of
# Line 51  Line 87 
87          // username/password should not be system          // username/password should not be system
88          // usernames/passwords !!          // usernames/passwords !!
89    
90          // your (hashed) username/password here  //      $gblPw    = "hash_of_your_username_and_password" ;
91          $gblPw    = "hash_of_your_username_and_password" ;                
92            //      $gblAuth  = false ;             // use builtin authentication
93          $gblAuth  = false ;             // use builtin authentication          $gblAuth  = true ;             // use builtin authentication
94          $gblHash  = "md5" ;             // hash function to use          $gblHash  = "md5" ;             // hash function to use
95    
96            $gblPw    = "";
97    
98            if ($gblAuth) {
99                    $htusers_file=dirname($SCRIPT_FILENAME)."/.htusers";
100                    if (! file_exists($htusers_file)) {
101                            $htusers=fopen($htusers_file,"a+");
102                            fputs($htusers,"# Change owner of $htusers_file to root !!\n");
103                            fputs($htusers,"demo:full name:md5_hash\n");
104                            fclose($htusers);
105                    }
106                    $htusers=fopen($htusers_file,"r");
107                    while($user = fgetcsv($htusers,255,":")) {
108                            if ($user[0] == $GLOBALS["PHP_AUTH_USER"]) {
109                                    $gblUserName=$user[1];
110                                    $gblPw=$user[2];
111                                    continue ;
112                            }
113                    }
114                    fclose($htusers);
115            }
116    
117    //      $gblDateFmt="D, F d, Y";
118    //      $gblTimeFmt="g:i:sA";
119    
120            $gblDateFmt="Y-m-d";
121            $gblTimeFmt="H:i:s";
122    
123    // Number of backup files to keep
124            $gblNumBackups=5;
125    
126          // choose GifIcon below unless you have the M$          // choose GifIcon below unless you have the M$
127          // WingDings font installed on your system          // WingDings font installed on your system
128    
# Line 65  Line 131 
131          // the directory below should be /icons/ or /icons/small/          // the directory below should be /icons/ or /icons/small/
132          // on Apache; a set of icons is included in the distribution          // on Apache; a set of icons is included in the distribution
133    
134          $gblIconLocation = "icons/" ;          $gblIconLocation = "/icons/" ;
135    
136          // files you want to be able to edit in text mode          // files you want to be able to edit in text mode
137          // and view with (primitive) syntax highlighting          // and view with (primitive) syntax highlighting
# Line 91  function StartHTML($title,$text="") { Line 157  function StartHTML($title,$text="") {
157    
158  <HTML>  <HTML>
159  <HEAD>  <HEAD>
160   <TITLE><?php echo $host . " " . $title ?></TITLE>   <TITLE><?= $host . " " . $title ?></TITLE>
161   <META NAME="description" CONTENT="PHP port of AnyPortal Site Manager">   <META NAME="description" CONTENT="PHP port of AnyPortal Site Manager">
162   <META NAME="keywords" CONTENT="site manager, web site maintenance">   <META NAME="keywords" CONTENT="site manager, web site maintenance">
163   <META NAME="robots" CONTENT="noindex">   <META NAME="robots" CONTENT="noindex">
164   <META HTTP-EQUIV="expires" CONTENT="0">   <META HTTP-EQUIV="expires" CONTENT="0">
165   <LINK REL="stylesheet" TYPE="text/css"   <LINK REL="stylesheet" TYPE="text/css"
166          HREF="<?php echo $self ?>?STYLE=get">          HREF="<?= $self ?>?STYLE=get">
167  </HEAD>  </HEAD>
168  <BODY BGCOLOR="#FFFFFF">  <BODY BGCOLOR="#FFFFFF">
169   <H3 ALIGN="RIGHT"><?php echo $host ?></H3>   <H3 ALIGN="RIGHT"><?= $host ?></H3>
170  <TABLE BORDER=0 WIDTH="100%"><TR>  <TABLE BORDER=0 WIDTH="100%"><TR>
171   <TD CLASS=INV><?php echo $title ?></TD></TR></TABLE>   <TD CLASS=INV><?= $title ?></TD></TR></TABLE>
172   <P><?php echo $text ?></P>   <P><?= $text ?></P>
173    
174  <?php  <?php
175  } // end function StartHTML  } // end function StartHTML
# Line 115  function EndHTML() { Line 181  function EndHTML() {
181    
182  <HR>  <HR>
183  <P CLASS=FTR>  <P CLASS=FTR>
184  <B><?php echo date("D, F d, Y") ?> -  <B><?= date($GLOBALS[gblDateFmt]) ?> -
185  <?php echo date("g:i:sA") ?></B><BR>ANYPORTAL(php) Site Manager  <?= date($GLOBALS[gblTimeFmt]) ?> -
186  - &copy; 1999 by <A HREF="http://www.anyportal.com">ANYPORTAL</A>  <?= $GLOBALS[gblUserName] ?>
187  - &copy; 2000 by <A HREF="http://da.nger.org">d@nger.org</A>  <small> [<a href="<?= $GLOBALS["PHP_SELF"] ?>?relogin=<?= $GLOBALS[gblPw] ?>">logout</a>]</small>
188    </B>
189    <BR>ANYPORTAL(php) Site Manager
190    <br><small>
191    &copy; 1999 by <A HREF="http://www.anyportal.com">ANYPORTAL</A>,
192    &copy; 2000 by <A HREF="http://da.nger.org">d@nger.org</A>,
193    &copy; 2000 by <A HREF="http://www.rot13.org/~dpavlin/">DbP</A>
194    </small>
195  </P>  </P>
196  <BR><BR><BR></BODY></HTML>  <BR>
197    <? include(".debug.inc") ?>
198    <BR><BR></BODY></HTML>
199    
200  <?php  <?php
201  } // end function EndHTML  } // end function EndHTML
# Line 130  function EndHTML() { Line 205  function EndHTML() {
205  function CSS() {  function CSS() {
206  ?>  ?>
207    
208  BODY,TD,P,H1,H2,H3 { font-family:Helvetica,Arial,sans-serif; }  BODY,TD,P,H1,H2,H3 { font-family:Verdana,Helvetica,Arial,sans-serif; }
209  .BLK { color:black; }  .BLK { color:black; }
210  .RED { color:red; }  .RED { color:red; }
211  .TOP { color:red; font-size:70%; } /* table headings */  .TOP { color:red; font-size:70%; } /* table headings */
# Line 164  function DetailPage($fsRoot,$relDir,$fn) Line 239  function DetailPage($fsRoot,$relDir,$fn)
239          $exists   = file_exists($fsPath) ;          $exists   = file_exists($fsPath) ;
240          $ext      = strtolower(strrchr($relPath,".")) ;          $ext      = strtolower(strrchr($relPath,".")) ;
241          $editable = ( $ext=="" || strstr(join(" ",$gblEditable),$ext)) ;          $editable = ( $ext=="" || strstr(join(" ",$gblEditable),$ext)) ;
242          $writable = Writeable($fsPath) ;          $writable = is_writeable($fsPath) ;
243            $file_lock = CheckLock($fsPath);
244    
245          if (!$editable && !$exists)          if (!$editable && !$exists)
246                  Error("Creation unsupported for type",$relPath) ;                  Error("Creation unsupported for type",$relPath) ;
247          if (!exists && !Writeable($fsDir) )          if (!exists && !is_writeable($fsDir) )
248                  Error("Creation denied",$relDir) ;                  Error("Creation denied",$relDir) ;
249    
250          $text  = "Use this page to view, modify or " ;          $text  = "Use this page to view, modify or " ;
# Line 179  function DetailPage($fsRoot,$relDir,$fn) Line 255  function DetailPage($fsRoot,$relDir,$fn)
255    
256          echo "<H3>" . $relDir . "/" . $fn . "</H3>" ;          echo "<H3>" . $relDir . "/" . $fn . "</H3>" ;
257          if ($exists) {  // get file info          if ($exists) {  // get file info
258            $fsize = filesize($fsPath) ;                  $fsize = filesize($fsPath) ;
259            $fmodified = date("d/M/y G:i:s", filemtime($fsPath)) ;                  $fmodified = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", filemtime($fsPath)) ;
260            $faccessed = date("d/M/y G:i:s", fileatime($fsPath)) ;                  $faccessed = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", fileatime($fsPath)) ;
261            echo "<PRE>    file size: " . $fsize . " Bytes<BR>" ;                  echo "<PRE>    file size: " . $fsize . " Bytes<BR>" ;
262            echo "last modified: <B>" . $fmodified . "</B><BR>" ;                  echo "last modified: <B>" . $fmodified . "</B><BR>" ;
263            echo "last accessed: <B>" . $faccessed . "</B><BR>" ;                  echo "last accessed: <B>" . $faccessed . "</B><BR>" ;
264            echo "        owner: <B>" . fileowner($fsPath) . "</B><BR>" ;                  echo "        owner: <B>" . fileowner($fsPath) . "</B><BR>" ;
265            echo "        group: <B>" . filegroup($fsPath) . "</B><BR>" ;                  echo "        group: <B>" . filegroup($fsPath) . "</B><BR>" ;
266            echo "  permissions: <B>" ;                  echo "  permissions: <B>" ;
267            echo printf( "%o", fileperms($fsPath) ) . "</B>" ;                  echo printf( "%o", fileperms($fsPath) ) . "</B>" ;
268            echo "</PRE>" ;                  echo "</PRE>" ;
269    
270          }          }
271    
272          if ( $editable && ($writable || !$exists) ) {          if ( $editable && ($writable || !$exists) && !$file_lock ) {
273                  $fh = fopen($fsPath,"a+") ;                  $fh = fopen($fsPath,"a+") ;
274                  rewind($fh) ;                  rewind($fh) ;
275                  $fstr = fread($fh,filesize($fsPath)) ;                  $fstr = fread($fh,filesize($fsPath)) ;
# Line 200  function DetailPage($fsRoot,$relDir,$fn) Line 277  function DetailPage($fsRoot,$relDir,$fn)
277                  $fstr = htmlentities( $fstr ) ;                  $fstr = htmlentities( $fstr ) ;
278  ?>  ?>
279    
280  <FORM ACTION="<?php echo $self ; ?>" METHOD="POST">  <FORM ACTION="<?= $self ; ?>" METHOD="POST">
281  <SPAN TITLE="Click [SAVE] to store updated contents.">  <SPAN TITLE="Click [SAVE] to store updated contents.">
282          <B>DOCUMENT CONTENTS</B>          <B>DOCUMENT CONTENTS</B>
283  </SPAN><BR>  </SPAN><BR>
284  <TEXTAREA NAME="FILEDATA" ROWS=18 COLS=70 WRAP="OFF"><?php  <TEXTAREA NAME="FILEDATA" ROWS=18 COLS=70 WRAP="OFF"><?php
285  echo($fstr) ; ?></TEXTAREA>  echo($fstr) ; ?></TEXTAREA>
286  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ; ?>">  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ; ?>">
287  <INPUT TYPE="HIDDEN" NAME="FN" VALUE="<?php echo $fn ; ?>">  <INPUT TYPE="HIDDEN" NAME="FN" VALUE="<?= $fn ; ?>">
288  <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="SAVE">  <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="SAVE">
289  <INPUT TYPE="TEXT" SIZE=48 MAXLENGTH=255 NAME="RELPATH"  <INPUT TYPE="HIDDEN" SIZE=48 MAXLENGTH=255 NAME="RELPATH"
290          VALUE="<?php echo $relPath ; ?>">          VALUE="<?= $relPath ; ?>">
291  <INPUT TYPE="RESET" VALUE="RESET">  <br>
292    <INPUT TYPE="RESET" VALUE="UNDO ALL CHANGES">
293  <INPUT TYPE="SUBMIT" VALUE="SAVE">  <INPUT TYPE="SUBMIT" VALUE="SAVE">
294  </FORM>  </FORM>
295    
296  <?php  <?php
297            } else if ( strstr( join(" ",$gblImages), $ext ) ) {  
298                    $info  = getimagesize($fsPath) ;
299                    $tstr  = "<IMG SRC=\"". $relPath . "\" BORDER=0 " ;
300                    $tstr .= $info[3] . " ALT=\"" . $fn . " - " ;
301                    $tstr .= (int)(($fsize+1023)/1024) . "Kb\">" ;
302                    echo htmlentities($tstr) . "<BR><BR>" . $tstr ;
303          }          }
304          else if ( strstr( join(" ",$gblImages), $ext ) ) {    
           $info  = getimagesize($fsPath) ;  
           $tstr  = "<IMG SRC=\"". $relPath . "\" BORDER=0 " ;  
           $tstr .= $info[3] . " ALT=\"" . $fn . " - " ;  
           $tstr .= (int)(($fsize+1023)/1024) . "Kb\">" ;  
           echo htmlentities($tstr) . "<BR><BR>" . $tstr ;  
         }  
305  ?>  ?>
306    
307  <FORM ACTION="<?php echo $self ; ?>" METHOD="POST">  <FORM ACTION="<?= $self ; ?>" METHOD="POST">
308  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ; ?>">  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ; ?>">
309  <INPUT TYPE="HIDDEN" NAME="FN" VALUE="<?php echo $fn ; ?>">  <INPUT TYPE="HIDDEN" NAME="FN" VALUE="<?= $fn ; ?>">
310  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="CANCEL"><BR>  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="CANCEL"><BR>
311    
312  <?php  <?php
313    
314            if ($file_lock) {
315    ?>
316    <hr>
317    <SPAN TITLE="Check OK and click UNLOCK to remove lock on file.">
318    <B>OK TO FORCE LOCK REMOVAL ON "<?= $fn ; ?>" HELD BY <?= $file_lock ?>? </B></SPAN>
319    <INPUT TYPE="CHECKBOX" NAME="CONFIRM">
320    <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="UNLOCK">
321    <?
322            } // file_lock
323    
324            if (substr($fn,0,4) == ".del") {
325                    $action="UNDELETE";
326                    $desc="undelete previously deleted file";
327            } else {
328                    $action="DELETE";
329                    $desc="delete";
330            }
331    
332          if ($exists && $writable) {          if ($exists && $writable) {
333  ?>  ?>
334    
335  <HR><SPAN TITLE="Check OK and click [DELETE] to delete.">  <HR>
336  <B>OK TO DELETE "<?php echo $fn ; ?>"? </B></SPAN>  <a name="undelete">
337    <SPAN TITLE="Check OK and click [<?= $action ?>] to <?= $desc ?>.">
338    <B>OK TO <?= $action ?> "<?= $fn ; ?>"? </B></SPAN>
339    <INPUT TYPE="CHECKBOX" NAME="CONFIRM">
340    <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="<?= $action ?>">
341    
342    <HR>
343    <a name="rename">
344    <SPAN TITLE="Check OK and click [RENAME] to rename.">
345    <B>OK TO RENAME "<?= $fn ; ?>" TO
346    <INPUT TYPE="TEXT" SIZE=24 MAXLENGTH=255 NAME="NEWNAME" VALUE="<?= $fn ?>">
347    ? </B></SPAN>
348  <INPUT TYPE="CHECKBOX" NAME="CONFIRM">  <INPUT TYPE="CHECKBOX" NAME="CONFIRM">
349  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="DELETE">  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="RENAME">
350    
351  <?php  <?php
352            }       // exists && writable
353    ?>
354    <HR>
355    <a name="note">
356    <B>NOTE FOR "<?= $fn ; ?>":
357    <INPUT TYPE="TEXT" SIZE=50 MAXLENGTH=255 NAME="NOTE" VALUE="<?= ReadNote($fsPath) ?>">
358    </B></SPAN>
359    <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="NOTE">
360    
361    </FORM>
362    
363    <?php
364            
365    
366            $logname=dirname("$fsDir/$fn")."/.log/".basename("$fsDir/$fn");
367            if (file_exists($logname)) {
368                    print "<hr><br><b>CHANGES TO THIS FILE</b><br><table border=0 width=100%>\n";
369                    $log=fopen($logname,"r");
370                    $cl1=" class=lst"; $cl2="";
371                    while($line = fgetcsv($log,255,"\t")) {
372                            $cl=$cl1; $cl1=$cl2; $cl2=$cl;
373                            print "<tr><td$cl>$line[0]</td><td$cl>$line[1]</td><td$cl>$line[2]</td><td$cl>$line[3]</td></tr>\n";
374                    }
375                    fclose($log);
376                    print "</table>";
377          }          }
378          echo "</FORM>" ;  
379          EndHTML() ;          EndHTML() ;
380    
381  } // end function DetailPage  } // end function DetailPage
# Line 472  function GifIcon($txt) { Line 605  function GifIcon($txt) {
605          case "blank" :          case "blank" :
606                  $d = "blank.gif" ;                  $d = "blank.gif" ;
607                  break ;                  break ;
608            case "checkout":
609                    $d = "box2.gif";
610                    break;
611            case "checkin":
612                    $d = "hand.up.gif";
613                    break;
614            case "locked":
615                    $d = "screw2.gif";
616                    break;
617            case "note":
618                    $d = "quill.gif";
619                    break;
620          default :          default :
621                  $d = "generic.gif" ;                  $d = "generic.gif" ;
622          }          }
# Line 486  function Navigate($fsRoot,$relDir) { Line 631  function Navigate($fsRoot,$relDir) {
631          global $gblEditable, $gblIcon ;          global $gblEditable, $gblIcon ;
632    
633          $self     = $GLOBALS["PHP_SELF"] ;          $self     = $GLOBALS["PHP_SELF"] ;
634          $webRoot  = "http://" . $GLOBALS["SERVER_NAME"] ;          if (isset($GLOBALS["HTTPS"]) && $GLOBALS["HTTPS"] == "on") {
635                    $webRoot  = "https://" . $GLOBALS["SERVER_NAME"] ;
636            } else {
637                    $webRoot  = "http://" . $GLOBALS["SERVER_NAME"] ;
638            }
639          $fsDir    = $fsRoot . $relDir . "/" ; // current directory          $fsDir    = $fsRoot . $relDir . "/" ; // current directory
640    
641          if (!is_dir($fsDir)) Error("Dir not found",$relDir) ;          if (!is_dir($fsDir)) Error("Dir not found",$relDir) ;
# Line 495  function Navigate($fsRoot,$relDir) { Line 644  function Navigate($fsRoot,$relDir) {
644          if ( !($dir = @opendir($fsDir)) )          if ( !($dir = @opendir($fsDir)) )
645                  Error("Read Access denied",$relDir) ;                  Error("Read Access denied",$relDir) ;
646          while ($item = readdir($dir)) {          while ($item = readdir($dir)) {
647                  if ( $item == ".." || $item == "." ) continue ;                  if ( $item == ".." || $item == "." || substr($item,0,1) == "." ) continue ;
648                  if ( is_dir($fsDir . $item) ) {                  if ( is_dir($fsDir . $item) ) {
649                          $dirList[] = $item ;                          $dirList[] = $item ;
650                  }                  } else if ( is_file($fsDir . $item) ) {
                 else if ( is_file($fsDir . $item) ) {  
651                          $fileList[] = $item ;                                    $fileList[] = $item ;          
652                  }                  } else if ( is_link($fsDir . $item) ) {
653                  else {                          $dirList[] = $item ;
654                    } else {
655                    // unknown file type                    // unknown file type
656                    // $text = "Could not determine file type of " ;                    // $text = "Could not determine file type of " ;
657                    // Error("File Error", $text.$relDir."/".$item) ;                    // Error("File Error", $text.$relDir."/".$item) ;
# Line 510  function Navigate($fsRoot,$relDir) { Line 659  function Navigate($fsRoot,$relDir) {
659                  }                  }
660          }          }
661          closedir($dir) ;          closedir($dir) ;
662    
663            // scan deleted files
664            if ( $GLOBALS[show_deleted] == 1 && ($dir = @opendir("$fsDir/.del")) ) {
665                    while ($item = readdir($dir)) {
666                            if ( substr($item,0,1) == "." ) continue ;
667                            $fileList[] = ".del/$item" ;            
668                    }
669                    closedir($dir) ;
670            }
671    
672          $emptyDir = ! (sizeof($dirList) || sizeof($fileList)) ;          $emptyDir = ! (sizeof($dirList) || sizeof($fileList)) ;
673    
674          // start navigation page          // start navigation page
675          $text  = "Use this page to add, delete or " ;          $text  = "Use this page to add, delete";
676          $text .= "revise files on this web site." ;          if (! isset($show_deleted)) {
677                    $text .= ", <a href=$self?D=".urlencode($relDir)."&show_deleted=1>undelete</a>";
678            }
679            $text .= " or revise files on this web site." ;
680          StartHTML("(Navigate)",$text) ;          StartHTML("(Navigate)",$text) ;
681    
682          echo "<TABLE BORDER=0 CELLPADDING=2          echo "<TABLE BORDER=0 CELLPADDING=2
# Line 527  function Navigate($fsRoot,$relDir) { Line 688  function Navigate($fsRoot,$relDir) {
688                  if ($parent == "") $parent = "/" ;                  if ($parent == "") $parent = "/" ;
689  ?>  ?>
690    
691  <TR><TD><?php echo $gblIcon("up") ?></TD><TD COLSPAN=4 CLASS=LST>  <TR><TD><?= $gblIcon("up") ?></TD><TD COLSPAN=5 CLASS=LST>
692  <A HREF="<?php echo $self ?>?D=<?php echo urlencode($parent) ?>">  <A HREF="<?= $self ?>?D=<?= urlencode($parent) ?>">
693  <B><?php echo $parent ?></B></A></TD></TR>  <B><?= $parent ?></B></A></TD></TR>
694    
695  <?php  <?php
696          }          }
# Line 539  function Navigate($fsRoot,$relDir) { Line 700  function Navigate($fsRoot,$relDir) {
700                  sort($dirList) ;                  sort($dirList) ;
701  ?>  ?>
702    
703  <TR><TD></TD><TD COLSPAN=4 CLASS=TOP><HR>DIRECTORY NAME</TD></TR>  <TR><TD></TD><TD COLSPAN=5 CLASS=TOP><HR>DIRECTORY NAME</TD></TR>
704    
705  <?php  <?php
706                  while (list($key,$dir) = each($dirList)) {                  while (list($key,$dir) = each($dirList)) {
# Line 549  function Navigate($fsRoot,$relDir) { Line 710  function Navigate($fsRoot,$relDir) {
710                          $tstr .= "\">" . $dir . "/</A>" ;                          $tstr .= "\">" . $dir . "/</A>" ;
711  ?>  ?>
712    
713  <TR><TD><?php echo $gblIcon("fldr") ?></TD>  <TR><TD><?= $gblIcon("fldr") ?></TD>
714  <TD COLSPAN=4 CLASS=LST><?php echo $tstr ?></TD></TR>  <TD COLSPAN=5 CLASS=LST><?= $tstr ?></TD></TR>
715    
716  <?php  <?php
717                  }  // iterate over dirs                  }  // iterate over dirs
718          }  // end if no dirs          }  // end if no dirs
719  ?>  ?>
720    
721  <TR><TD></TD><TD COLSPAN=4><HR><B><?php echo $webRoot . $relDir ?>  <TR><TD></TD><TD COLSPAN=5><HR><B><?= $webRoot . $relDir ?>
722  </B></TD></TR>  </B></TD></TR>
723  <TR><TD></TD><TD CLASS=TOP>DOCUMENT NAME</TD>  <TR><TD></TD><TD CLASS=TOP>DOCUMENT NAME</TD>
724  <TD><?php echo $gblIcon("blank") ?></TD>  <TD><?= $gblIcon("blank").$gblIcon("blank") ?></TD>
725    <TD CLASS=TOP>NOTE</TD>
726  <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>
727    
728  <?php  <?php
729          if (sizeof($fileList) > 0) {          if (sizeof($fileList) > 0) {
730            sort($fileList) ;            sort($fileList) ;
731            while (list($key,$file) = each($fileList)) {              while (list($key,$file) = each($fileList)) {  
732              $path = $fsDir."/".$file ;                  $path = $fsDir."/".$file ;
733              $mod  = filemtime($path) ;                  $mod  = filemtime($path) ;
734              $sz   = filesize($path) ;                  $sz   = filesize($path) ;
735    
736              if ($sz >= 10240) {                  if ($sz >= 10240) {
737                $sz = (int)(($sz+1023)/1024) . " k" ;                          $sz = (int)(($sz+1023)/1024) . " k" ;
738              }                  } else {
739              else {                          $sz .= " " ;
740                $sz .= " " ;                  } // end size
741              } // end size  
742                    $a = $b = "" ;
743              $a = $b = "" ;  
744                    $info_url=$self."?A=E&F=".urlencode($file)."&D=".urlencode($relDir);
745              if ( ($mod + 30*86400) > time() ) {  
746                $a  = "<SPAN CLASS=RED TITLE=\"Newer" ;                  if ( ($mod + 30*86400) > time() ) {
747                $a .= " than 30 days\"> * </SPAN>" ;                          $a  = "<SPAN CLASS=RED TITLE=\"Newer" ;
748              }                          $a .= " than 30 days\"> * </SPAN>" ;
749                    }
750              $tstr = $webRoot . $relDir . "/" . $file ;  
751              $tstr  = "<A HREF=\"" . $tstr . "\">" ;                  $file_lock=CheckLock($path);
752              $tstr .= $file . "</A>" . $a ;  
753                    $file_url_html="<A HREF=\"$self?A=V&F=".urlencode($file);
754              $ext = strtolower(strrchr($file,".")) ;                  $file_url_html.="&D=".urlencode($relDir);
755              if ( $ext=="" ||                  $file_url_html.="\" TITLE=\"View file\">" ;
756                   strstr(join(" ",$gblEditable),$ext) )  
757              {                    if (substr($file,0,5) != ".del/") {
758                $b  = "<A HREF=\"" . $self . "?A=C&F=" ;                          $file_url_html .= $file . "</A>" . $a ;
759                $b .= urlencode($file) . "&D=" . urlencode($relDir) ;                  } else {
760                $b .= "\" TITLE=\"List contents\">" ;                          $file_url_html .= substr($file,5,strlen($file)-5) . "</a> <SPAN CLASS=RED TITLE=\"deleted\"> <a href=\"$info_url#undelete\">deleted</a> </span>";
761                $b .= $gblIcon("view") . "</A>" ;                  }
762              }  
763                    $note_html="<a href=\"$info_url#note\">".$gblIcon("note")."</a>".ReadNote($path);
764    
765                    $ext = strtolower(strrchr($file,".")) ;
766    
767                    if ($file_lock) {
768                            if ($file_lock == $GLOBALS[gblUserName]) {
769                                    $b.="<A HREF=\"$self?A=Ci&F=".urlencode($file);
770                                    $b.="&D=".urlencode($relDir);
771                                    $b.="\" TITLE=\"Checkin (update) file on server\">" ;
772                                    $file_url_html=$b;
773                                    $b.=$gblIcon("checkin")."</A>" ;
774                                    $b.= $gblIcon("blank");
775                                    $file_url_html.="$file</a> $a";
776                                    $note_html = $gblIcon("blank")."<b>Please check-in (update) this file</b>";
777                            } else {
778                                    $b = $gblIcon("locked");
779                                    $b.= $gblIcon("blank");
780                                    $note_html = $gblIcon("blank")."<b>File locked by $file_lock</b>";
781                                    $file_url_html = "$file $a";
782                            }
783                    } else {
784                            $b.="<A HREF=\"$self?A=Co&F=".urlencode($file);
785                            $b.="&D=".urlencode($relDir);
786                            $b.="\" TITLE=\"Checkout file for edit\">" ;
787                            $b.=$gblIcon("checkout")."</A>" ;
788    
789                            if ( $ext=="" || strstr(join(" ",$gblEditable),$ext) ) {  
790                                    $b.="<A HREF=\"$self?A=C&F=".urlencode($file);
791                                    $b.="&D=".urlencode($relDir);
792                                    $b.="\" TITLE=\"List contents\">" ;
793                                    $b.=$gblIcon("view")."</A>" ;
794                            } else {
795                                    $b.= $gblIcon("blank");
796                            }
797                    }
798    
799    
800  ?>  ?>
801    
802  <TR><TD>  <TR><TD>
803  <A HREF="<?php echo $self ?>?A=E&F=<?php echo urlencode($file)  <A HREF="<?= $info_url ?>" TITLE="View/Edit">
804  ?>&D=<?php echo urlencode($relDir) ?>" TITLE="View/Edit">  <?= $gblIcon($ext) ?></A></TD>
805  <?php echo $gblIcon($ext) ?></A></TD>  <TD CLASS=LST><?= $file_url_html ?></TD>
806  <TD CLASS=LST><?php echo $tstr ?></TD>  <TD CLASS=LST ALIGN=center><?= $b ?></TD>
807  <TD CLASS=LST ALIGN=center><?php echo $b ?></TD>  <TD CLASS=LST ALIGN=left><?= $note_html ?></TD>
808  <TD CLASS=LST><?php echo date("d/M/y G:i:s",$mod) ?></TD>  <TD CLASS=LST><?= date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]",$mod) ?></TD>
809  <TD CLASS=LST><?php echo $sz ?>Bytes</TD></TR>  <TD CLASS=LST><?= $sz ?>Bytes</TD></TR>
810    
811  <?php  <?php
812            }  // iterate over files            }  // iterate over files
# Line 617  function Navigate($fsRoot,$relDir) { Line 815  function Navigate($fsRoot,$relDir) {
815          if ($emptyDir) {          if ($emptyDir) {
816  ?>  ?>
817    
818  <FORM METHOD="POST" ACTION="<?php echo $self ?>">  <FORM METHOD="POST" ACTION="<?= $self ?>">
819   <TR><TD></TD><TD COLSPAN=4 CLASS=BAR>   <TR><TD></TD><TD COLSPAN=5 CLASS=BAR>
820    <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ?>">    <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>">
821    OK TO DELETE THIS EMPTY FOLDER?    OK TO DELETE THIS EMPTY FOLDER?
822    <INPUT TYPE="CHECKBOX" NAME="CONFIRM">    <INPUT TYPE="CHECKBOX" NAME="CONFIRM">
823    <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="DELETE">    <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="DELETE">
# Line 630  function Navigate($fsRoot,$relDir) { Line 828  function Navigate($fsRoot,$relDir) {
828          } // end if emptyDir          } // end if emptyDir
829  ?>  ?>
830    
831  <TR><TD></TD><TD COLSPAN=4><HR></TD></TR>  <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>
832    
833  <FORM METHOD="POST" ACTION="<?php echo $self ?>">  <TR><TD></TD><TD COLSPAN=5>
834  <TR><TD></TD><TD COLSPAN=4 CLASS=BAR>CREATE NEW  To just view file without editing, select it's filename (<b>don't edit files which are opened this way!</b>)<br>
835    To <b>edit</b> file select <?= $gblIcon("checkout") ?> to check-out
836    and edit it locally. After editing is over, select filename or <?= $gblIcon("checkin") ?> to check-in (update copy of file on server).<br>
837    <by>If you select icon left from filename, you will get detailed information
838    about file, as well as delete, rename and annotation options.
839    </TD></TR>
840    
841    <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>
842    
843    <FORM METHOD="POST" ACTION="<?= $self ?>">
844    <TR><TD></TD><TD COLSPAN=5 CLASS=BAR>CREATE NEW
845   <INPUT TYPE="RADIO" NAME="T" VALUE="D" CHECKED>DIRECTORY -OR-   <INPUT TYPE="RADIO" NAME="T" VALUE="D" CHECKED>DIRECTORY -OR-
846   <INPUT TYPE="RADIO" NAME="T" VALUE="F">FILE : &nbsp;&nbsp;   <INPUT TYPE="RADIO" NAME="T" VALUE="F">FILE : &nbsp;&nbsp;
847   <NOBR>NAME <INPUT TYPE="TEXT" NAME="FN" SIZE=14>   <NOBR>NAME <INPUT TYPE="TEXT" NAME="FN" SIZE=14>
848   <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="CREATE">   <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="CREATE">
849   <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ?>">   <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>">
850   <INPUT TYPE="SUBMIT" VALUE="CREATE"></NOBR>   <INPUT TYPE="SUBMIT" VALUE="CREATE"></NOBR>
851   <NOBR>OR <A HREF="<?php echo $self   <NOBR>OR <A HREF="<?= $self
852          ?>?A=U&D=<?php echo urlencode($relDir) ?>">UPLOAD</A> A FILE          ?>?A=U&D=<?= urlencode($relDir) ?>">UPLOAD</A> A FILE
853   </NOBR>   </NOBR>
854  </TD></TR>  </TD></TR>
855  </FORM>  </FORM>
# Line 653  function Navigate($fsRoot,$relDir) { Line 861  function Navigate($fsRoot,$relDir) {
861    
862  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
863    
864  function UploadPage($fsRoot, $relDir) {  function UploadPage($fsRoot, $relDir, $filename) {
865    
866          $self = $GLOBALS["PHP_SELF"] ;          $self = $GLOBALS["PHP_SELF"] ;
867          if ($relDir == "") $relDir = "/" ;          if ($relDir == "") $relDir = "/" ;
# Line 661  function UploadPage($fsRoot, $relDir) { Line 869  function UploadPage($fsRoot, $relDir) {
869    
870  <P><TABLE BORDER=0 CELLPADDING=5><TR><TD WIDTH=5></TD><TD CLASS=BAR>  <P><TABLE BORDER=0 CELLPADDING=5><TR><TD WIDTH=5></TD><TD CLASS=BAR>
871  <FORM ENCTYPE="multipart/form-data" METHOD="POST"  <FORM ENCTYPE="multipart/form-data" METHOD="POST"
872   ACTION="<?php echo $self ?>">   ACTION="<?= $self ?>">
873  DESTINATION DIRECTORY:<B><?php echo " " . $relDir ?></B>  DESTINATION DIRECTORY:<B><?= " " . $relDir ?></B>
874    <? if (isset($filename)) { ?>
875    <br>DESTINATION FILE:<B><?= " " . $filename ?></B>
876    <INPUT TYPE="HIDDEN" NAME="FILENAME" VALUE="<?= $filename ?>">
877    <? } ?>
878  <P>PATHNAME OF LOCAL FILE<BR>  <P>PATHNAME OF LOCAL FILE<BR>
879  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ?>">  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>">
880  <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="UPLOAD">  <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="UPLOAD">
881  <INPUT SIZE=30 TYPE="FILE" NAME="FN"></P>  <INPUT SIZE=30 TYPE="FILE" NAME="FN"></P>
882  <P><INPUT TYPE="SUBMIT" VALUE="UPLOAD"></P>  <P><INPUT TYPE="SUBMIT" VALUE="UPLOAD"></P>
883  <P>If the <B>[BROWSE...]</B> button is not displayed,<BR>  <P>If the <B>[BROWSE...]</B> button is not displayed,<BR>
884  you must upgrade to an RFC1867-compliant browser.</P>  you must upgrade to an RFC1867-compliant browser.</P>
885  <P>Your browser:<BR><?php echo $GLOBALS["HTTP_USER_AGENT"] ?></P>  <P>Your browser:<BR><?= $GLOBALS["HTTP_USER_AGENT"] ?></P>
886  </FORM>  </FORM>
887  </TD></TR>  </TD></TR>
888  <TR><TD></TD><TD>  <TR><TD></TD><TD>
889  <FORM METHOD="POST" ACTION="<?php echo $self ?>">  <FORM METHOD="POST" ACTION="<?= $self ?>">
890  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ?>"><BR>  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>"><BR>
891  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="CANCEL">  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="CANCEL">
892  </FORM>  </FORM>
893  </TD></TR></TABLE></P>  </TD></TR></TABLE></P>
# Line 694  function Error($title,$text="") { Line 906  function Error($title,$text="") {
906    
907  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
908    
 function Writeable($path) {  
         // fix by -mat- filid brandy, brandy@ecrc.de, 07/JUL/99  
   
         clearstatcache ;  
         $perms = @fileperms($path) ;  
         $owner = @fileowner($path) ;  
         exec("id",$id) ;  
         eregi( "^uid=([0-9]*)",$id[0], $regs) ;  
         $apacheuid = $regs[1] ;  
         $perms = 0777 & $perms ;  
         if ( $apacheuid != $owner ) {  
                 return (06 == (06 & $perms)) ?  1 : 0 ;  
         }  
         else {  
                 return (0600 == (0600 & $perms)) ? 1 : 0 ;  
         }  
   
 } // end function Writable  
   
 //////////////////////////////////////////////////////////////////  
   
909  function CreateHash($user, $pw) {  function CreateHash($user, $pw) {
910    
911          global $gblHash ;  // hash function to use          global $gblHash ;  // hash function to use
# Line 749  function NoEntry() { Line 940  function NoEntry() {
940          StartHTML($title,$text) ;          StartHTML($title,$text) ;
941  ?>  ?>
942    
943  <FORM ACTION="<?php echo $self ?>?HASH=create" METHOD="POST">  <FORM ACTION="<?= $self ?>?HASH=create" METHOD="POST">
944  <INPUT TYPE="HIDDEN" NAME="USER" VALUE="<?php echo $user ?>">  <INPUT TYPE="HIDDEN" NAME="USER" VALUE="<?= $user ?>">
945  <INPUT TYPE="HIDDEN" NAME="PW" VALUE="<?php echo $pw ?>">  <INPUT TYPE="HIDDEN" NAME="PW" VALUE="<?= $pw ?>">
946    
947  <BLOCKQUOTE><B>If you are a site administrator:</B><BR><BR>  <BLOCKQUOTE><B>If you are a site administrator:</B><BR><BR>
948  Click below to <B>generate a password hash</B><BR>from  Click below to <B>generate a password hash</B><BR>from
# Line 767  the source<BR>of this file.<BR><BR> Line 958  the source<BR>of this file.<BR><BR>
958    
959  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
960    
961    function Logit($target,$msg) {
962    
963            $dir=dirname($target);
964            if (! file_exists($dir."/.log")) {
965                    mkdir($dir."/.log",0700);
966            }
967            $file=basename($target);
968    
969            $log=fopen("$dir/.log/$file","a+");
970            fputs($log,date("$GLOBALS[gblDateFmt]\t$GLOBALS[gblTimeFmt]").
971                    "\t$GLOBALS[gblUserName]\t$msg\n");
972            fclose($log);
973    
974    }
975    
976    
977    //////////////////////////////////////////////////////////////////
978    
979    function WriteNote($target,$msg) {
980    
981            $dir=dirname($target);
982            if (! file_exists($dir."/.note")) {
983                    mkdir($dir."/.note",0700);
984            }
985            $file=basename($target);
986    
987            $note=fopen("$dir/.note/$file","w");
988            fputs($note,"$msg\n");
989            fclose($note);
990    
991            Logit($target,"added note $msg");
992    
993    }
994    
995    function ReadNote($target) {
996    
997            $dir=dirname($target);
998            $file=basename($target);
999            $msg="";
1000            if (file_exists($dir."/.note/$file")) {
1001                    $note=fopen("$dir/.note/$file","r");
1002                    $msg=fgets($note,4096);
1003                    fclose($note);
1004            }
1005            return StripSlashes($msg);
1006    
1007    }
1008    
1009    //////////////////////////////////////////////////////////////////
1010    
1011    function MoveTo($source,$folder) {
1012    
1013            $file=basename($source);
1014            if (! file_exists($folder)) {
1015                    mkdir($folder,0700);
1016            }
1017            if (file_exists($source)) {
1018                    rename($source,"$folder/$file");
1019            }
1020    }
1021    
1022    //////////////////////////////////////////////////////////////////
1023    
1024    function Lock($target) {
1025    
1026            $dir=dirname($target);
1027            if (! file_exists($dir."/.lock")) {
1028                    mkdir($dir."/.lock",0700);
1029            }
1030            $file=basename($target);
1031    
1032            if (file_exists("$dir/.lock/$file")) {
1033                    Logit($target,"attempt to locked allready locked file!");
1034            } else {
1035                    $lock=fopen("$dir/.lock/$file","w");
1036                    fputs($lock,"$GLOBALS[gblUserName]\n");
1037                    fclose($lock);
1038    
1039                    Logit($target,"file locked");
1040            }
1041    
1042    }
1043    
1044    function CheckLock($target) {
1045    
1046            $dir=dirname($target);
1047            $file=basename($target);
1048            $msg=0;
1049            if (file_exists($dir."/.lock/$file")) {
1050                    $lock=fopen("$dir/.lock/$file","r");
1051                    $msg=fgets($lock,4096);
1052                    fclose($lock);
1053            }
1054            return chop($msg);
1055    
1056    }
1057    
1058    function Unlock($target) {
1059    
1060            $dir=dirname($target);
1061            $file=basename($target);
1062            if (file_exists($dir."/.lock/$file")) {
1063                    unlink("$dir/.lock/$file");
1064                    Logit($target,"file unlocked");
1065            } else {
1066                    Logit($target,"attempt to unlocked non-locked file!");
1067            }
1068    
1069    }
1070    
1071    //////////////////////////////////////////////////////////////////
1072    
1073    function redir_to_url($url) {
1074            $url=urlencode(StripSlashes("$url"));
1075            $url=str_replace("%2F","/",$url);
1076            $url=str_replace("+","%20",$url);
1077            Header("Location: $url");
1078    }
1079    
1080    //////////////////////////////////////////////////////////////////
1081    
1082    function safe_rename($from,$to) {
1083            if (file_exists($from) && is_writable(dirname($to))) {
1084                    rename($from,$to);
1085            }
1086    }
1087    
1088    //////////////////////////////////////////////////////////////////
1089    
1090  // MAIN PROGRAM  // MAIN PROGRAM
1091  // ============  // ============
1092  // query parameters: capital letters  // query parameters: capital letters
1093  // local functions : begin with capital letters  // local functions : begin with capital letters
1094  // global constants: begin with gbl  // global constants: begin with gbl
1095    
1096          $gblFilePerms = "644" ;         // default for new files          $gblFilePerms = 0640 ;         // default for new files
1097          $gblDirPerms  = 0755 ;          // default for new dirs          $gblDirPerms  = 0750 ;          // default for new dirs
1098    
1099          // phpinfo() ;          // phpinfo() ;
1100          // exit ;          // exit ;
# Line 788  the source<BR>of this file.<BR><BR> Line 1108  the source<BR>of this file.<BR><BR>
1108          }          }
1109    
1110          // authentication if $gblAuth == true          // authentication if $gblAuth == true
1111          if ( $gblAuth &&          if ( $gblAuth && $gblHash($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ||
1112               $gblHash($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ) {                  isset($relogin) && $gblPw == $relogin ) {
1113                  header("WWW-authenticate: basic realm=\"$SERVER_NAME\"") ;                  header("WWW-authenticate: basic realm=\"$SERVER_NAME\"") ;
1114                  header("HTTP/1.0 401 Unauthorized") ;                  header("HTTP/1.0 401 Unauthorized") ;
1115                  NoEntry() ;                  NoEntry() ;
# Line 827  the source<BR>of this file.<BR><BR> Line 1147  the source<BR>of this file.<BR><BR>
1147                    
1148          switch ($POSTACTION) {          switch ($POSTACTION) {
1149          case "UPLOAD" :          case "UPLOAD" :
1150                  if (!Writeable($fsDir)) Error("Write denied",$relDir) ;                  if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;
1151                  if (strstr($FN_name,"/"))                  if (strstr($FN_name,"/"))
1152                          Error("Non-conforming filename") ;                          Error("Non-conforming filename") ;
1153                  // TODO : should rather check for escapeshellcmds                  // TODO : should rather check for escapeshellcmds
1154                  // but maybe RFC 18xx asserts safe filenames ....                  // but maybe RFC 18xx asserts safe filenames ....
1155                  $source = $FN ;                  $source = $FN ;
1156                  $target = $fsDir . "/" . $FN_name ;                  if (! isset($FILENAME)) {       // from update file
1157                  exec("cp $source $target") ;                          $target = "$fsDir/$FN_name" ;
1158                  exec("chmod $gblFilePerms $target") ;                  } else {
1159                            $target = "$fsDir/$FILENAME";
1160                    }
1161    
1162                    // backup old files first
1163                    $dir=dirname($target);
1164                    if (! file_exists($dir."/.bak")) {
1165                            mkdir($dir."/.bak",0700);
1166                    }
1167                    if (! file_exists($dir."/.bak/$GLOBALS[gblNumBackups]")) {
1168                            mkdir($dir."/.bak/$GLOBALS[gblNumBackups]",0700);
1169                    }
1170                    $file=basename($target);
1171                    for($i=$GLOBALS[gblNumBackups]-1;$i>0;$i--) {
1172                            MoveTo("$dir/.bak/$i/$file","$dir/.bak/".($i+1)."/");
1173                    }
1174                    MoveTo($target,$dir."/.bak/1/");
1175    
1176                    copy($source,$target) ;
1177                    chmod($target,$gblFilePerms) ;
1178                  clearstatcache() ;                  clearstatcache() ;
1179                    Logit($target,"uploaded");
1180                    if (isset($FILENAME)) {
1181                            Unlock($target);
1182                    }
1183                  break ;                  break ;
1184    
1185          case "SAVE" :          case "SAVE" :
1186                  $path = $gblFsRoot . escapeshellcmd($RELPATH) ;                  $path = $gblFsRoot . escapeshellcmd($RELPATH) ;
1187                  $writable = Writeable($path) ;                  $writable = is_writeable($path) ;
1188                  $legaldir = Writeable(dirname($path)) ;                  $legaldir = is_writeable(dirname($path)) ;
1189                  $exists   = (file_exists($path)) ? 1 : 0 ;                  $exists   = (file_exists($path)) ? 1 : 0 ;
1190  // check for legal extension here as well  // check for legal extension here as well
1191                  if (!($writable || (!$exists && $legaldir)))                  if (!($writable || (!$exists && $legaldir)))
# Line 851  the source<BR>of this file.<BR><BR> Line 1194  the source<BR>of this file.<BR><BR>
1194                  fwrite($fh,$FILEDATA) ;                  fwrite($fh,$FILEDATA) ;
1195                  fclose($fh) ;                  fclose($fh) ;
1196                  clearstatcache() ;                  clearstatcache() ;
1197                    Logit($path,"saved changes");
1198                  break ;                  break ;
1199    
1200          case "CREATE" :          case "CREATE" :
1201                  // we know $fsDir exists                  // we know $fsDir exists
1202                  if (!Writeable($fsDir)) Error("Write denied",$relDir) ;                  if ($FN == "") break;           // no filename!
1203                    if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;
1204                  $path = $fsDir . "/" . $FN ;  // file or dir to create                  $path = $fsDir . "/" . $FN ;  // file or dir to create
1205                  $relPath = $relDir . "/" . $FN ;                  $relPath = $relDir . "/" . $FN ;
1206                  switch ( $T ) {                  switch ( $T ) {
1207                  case "D" :  // create a directory                  case "D" :  // create a directory
1208                    if ( ! @mkdir($path,$gblDirPerms) )                          if ( ! @mkdir($path,$gblDirPerms) )
1209                      Error("Mkdir failed",$relPath) ; // eg. if it exists                                  Error("Mkdir failed",$relPath) ; // eg. if it exists
1210                    clearstatcache() ;                          clearstatcache() ;
1211                    break ;                          break ;
1212                  case "F" :  // create a new file                  case "F" :  // create a new file
1213  // this functionality is doubled in DetailView().  // this functionality is doubled in DetailView().
1214  // better keep it here altogether  // better keep it here altogether
1215  // chmod perms to $gblFilePerms  // chmod perms to $gblFilePerms
1216                    if ( file_exists($path) && !Writable($path) )                          if ( file_exists($path) && !is_writable($path) )
1217                      Error("File not writable", $relPath) ;                                  Error("File not writable", $relPath) ;
1218                    $tstr = $PHP_SELF . "?A=E&D=" . $relDir . "&F=" . $FN ;                          $fh = fopen($path, "w+") ;
1219                    header("Location: " . $tstr) ;                          if ($fh) {
1220                    exit ;                                  fputs($fh,"\n");
1221                                    fclose($fh) ;
1222                                    LogIt($path,"file created");
1223                            } else {
1224                                    Error("Creation of file $relPath failed -- $path");
1225                            }
1226                            $tstr = "$PHP_SELF?A=E&D=".urlencode($relDir)."&F=".urlencode($FN) ;
1227                            header("Location: " . $tstr) ;
1228                            exit ;
1229                  }                  }
1230                  break ;                  break ;
1231    
# Line 883  the source<BR>of this file.<BR><BR> Line 1236  the source<BR>of this file.<BR><BR>
1236                  $tstr .= "insufficient privileges: " ;                  $tstr .= "insufficient privileges: " ;
1237    
1238                  if ( $FN != "") {  // delete file                  if ( $FN != "") {  // delete file
1239                    $path =  $fsDir . "/" . $FN ;                          $path =  $fsDir . "/" . $FN ;
1240                    if ( ! @unlink($path) ) {                  
1241                      Error("File delete failed", $tstr . $path) ;                          $dir=dirname($path);
1242                      exit ;                          $file=basename($path);
1243                    }                                              if (! file_exists("$dir/.del")) {
1244                                    mkdir("$dir/.del",0700);
1245                            }
1246    
1247    //                      if ( ! @unlink($path) ) {
1248                            if ( ! rename($path,"$dir/.del/$file") ) {
1249                                    Error("File delete failed", $tstr . $path) ;
1250                                    Logit($path,"file delete failed");
1251                                    exit ;
1252                            } else {
1253                                    Logit($path,"file deleted");
1254                                    MoveTo("$dir/.log/$file","$dir/.del/.log/");
1255                                    MoveTo("$dir/.note/$file","$dir/.del/.note/");
1256                                    MoveTo("$dir/.lock/$file","$dir/.del/.lock/");
1257                            }
1258                  }                  }
1259                  else {  // delete directory                  else {  // delete directory
1260                    if ( ! @rmdir($fsDir) ) {                    if ( ! @rmdir($fsDir) ) {
# Line 899  the source<BR>of this file.<BR><BR> Line 1266  the source<BR>of this file.<BR><BR>
1266                  }                  }
1267                  break ;                  break ;
1268    
1269            case "UNDELETE" :  
1270                    if ( $CONFIRM != "on" ) break ;
1271    
1272                    if (substr($FN,0,4) != ".del") break ;
1273                    $file=substr($FN,4,strlen($FN)-4);
1274    
1275                    Logit("$fsDir/.del/$file","undeleted");
1276                    MoveTo("$fsDir/.del/$file","$fsDir/");
1277                    MoveTo("$fsDir/.del/.log/$file","$fsDir/.log/");
1278                    MoveTo("$fsDir/.del/.note/$file","$fsDir/.note/");
1279                    MoveTo("$fsDir/.del/.lock/$file","$fsDir/.lock/");
1280    
1281                    break ;
1282    
1283            case "RENAME" :  
1284                    if ( $CONFIRM != "on" ) break ;
1285    
1286                    Logit("$fsDir/$FN","renamed $FN to $NEWNAME");
1287                    safe_rename("$fsDir/$FN","$fsDir/$NEWNAME");
1288                    safe_rename("$fsDir/.log/$FN","$fsDir/.log/$NEWNAME");
1289                    safe_rename("$fsDir/.note/$FN","$fsDir/.note/$NEWNAME");
1290                    safe_rename("$fsDir/.lock/$FN","$fsDir/.lock/$NEWNAME");
1291    
1292                    break ;
1293    
1294            case "NOTE" :  
1295                    WriteNote("$fsDir/$FN","$NOTE");
1296                    break ;
1297    
1298            case "UNLOCK" :  
1299                    if ( $CONFIRM != "on" ) break ;
1300                    Unlock("$fsDir/$FN");
1301                    break ;
1302    
1303          default :          default :
1304                  // user hit "CANCEL" or undefined action                  // user hit "CANCEL" or undefined action
1305          }          }
# Line 914  the source<BR>of this file.<BR><BR> Line 1315  the source<BR>of this file.<BR><BR>
1315          // $A=U : upload to path given in $D          // $A=U : upload to path given in $D
1316          // $A=E : display detail of file $D/$F and edit          // $A=E : display detail of file $D/$F and edit
1317          // $A=C : display code in file $D/$F          // $A=C : display code in file $D/$F
1318            // $A=Co : checkout file $D/$F
1319            // $A=Ci : checkin file $D/$F
1320            // $A=V : view file (do nothing except log)
1321          // default : display directory $D          // default : display directory $D
1322                    
1323          switch ($A) {          switch ($A) {
1324          case "U" :          case "U" :
1325                  // upload to $relDir                  // upload to $relDir
1326                  if (!Writeable($gblFsRoot . $relDir))                  if (!is_writeable($gblFsRoot . $relDir))
1327                          Error("Write access denied",$relDir) ;                          Error("Write access denied",$relDir) ;
1328                  $text  = "Use this page to upload a single " ;                  $text  = "Use this page to upload a single " ;
1329                  $text .= "file to <B>$SERVER_NAME</B>." ;                  $text .= "file to <B>$SERVER_NAME</B>." ;
# Line 929  the source<BR>of this file.<BR><BR> Line 1333  the source<BR>of this file.<BR><BR>
1333                  exit ;                  exit ;
1334          case "E" :          case "E" :
1335                  // detail of $relDir/$F                  // detail of $relDir/$F
1336                  DetailPage($gblFsRoot, $relDir, $F) ;                  if (is_file("$gblFsRoot/$relDir/$F")) DetailPage($gblFsRoot, $relDir, $F) ;
1337                  exit ;                  exit ;
1338          case "C" :          case "C" :
1339                  // listing of $relDir/$F                  // listing of $relDir/$F
1340                  DisplayCode($gblFsRoot, $relDir, $F) ;                  DisplayCode($gblFsRoot, $relDir, $F) ;
1341                  exit ;                  exit ;
1342            case "Co" :
1343                    // checkout
1344                    Lock("$gblFsRoot/$relDir/$F");
1345                    redir_to_url("$relDir/$F");
1346                    exit;
1347            case "Ci" :
1348                    // upload && update to $relDir
1349                    if (!is_writeable($gblFsRoot . $relDir))
1350                            Error("Write access denied",$relDir) ;
1351                    $text  = "Use this page to update a single " ;
1352                    $text .= "file to <B>$SERVER_NAME</B>." ;
1353                    StartHTML("(Update file Page)", $text) ;
1354                    UploadPage($gblFsRoot, $relDir, $F) ;
1355                    EndHTML() ;
1356                    exit ;
1357            case "V" :
1358                    // view
1359                    Log("viewed");
1360                    redir_to_url("$relDir/$F");
1361                    exit;
1362          }          }
1363    
1364          // default: display directory $relDir          // default: display directory $relDir

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.8

  ViewVC Help
Powered by ViewVC 1.1.26