/[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.7 by dpavlin, Fri Aug 4 10:13:10 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
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  <?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    <TR><TD></TD><TD COLSPAN=5>
834    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  <FORM METHOD="POST" ACTION="<?php echo $self ?>">  <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>
842  <TR><TD></TD><TD COLSPAN=4 CLASS=BAR>CREATE NEW  
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("$relDir/$F"));
1075            $url=str_replace("%2F","/",$url);
1076            $url=str_replace("+","%20",$url);
1077            Header("Location: $url");
1078    }
1079    
1080    //////////////////////////////////////////////////////////////////
1081    
1082  // MAIN PROGRAM  // MAIN PROGRAM
1083  // ============  // ============
1084  // query parameters: capital letters  // query parameters: capital letters
1085  // local functions : begin with capital letters  // local functions : begin with capital letters
1086  // global constants: begin with gbl  // global constants: begin with gbl
1087    
1088          $gblFilePerms = "644" ;         // default for new files          $gblFilePerms = 0640 ;         // default for new files
1089          $gblDirPerms  = 0755 ;          // default for new dirs          $gblDirPerms  = 0750 ;          // default for new dirs
1090    
1091          // phpinfo() ;          // phpinfo() ;
1092          // exit ;          // exit ;
# Line 788  the source<BR>of this file.<BR><BR> Line 1100  the source<BR>of this file.<BR><BR>
1100          }          }
1101    
1102          // authentication if $gblAuth == true          // authentication if $gblAuth == true
1103          if ( $gblAuth &&          if ( $gblAuth && $gblHash($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ||
1104               $gblHash($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ) {                  isset($relogin) && $gblPw == $relogin ) {
1105                  header("WWW-authenticate: basic realm=\"$SERVER_NAME\"") ;                  header("WWW-authenticate: basic realm=\"$SERVER_NAME\"") ;
1106                  header("HTTP/1.0 401 Unauthorized") ;                  header("HTTP/1.0 401 Unauthorized") ;
1107                  NoEntry() ;                  NoEntry() ;
# Line 827  the source<BR>of this file.<BR><BR> Line 1139  the source<BR>of this file.<BR><BR>
1139                    
1140          switch ($POSTACTION) {          switch ($POSTACTION) {
1141          case "UPLOAD" :          case "UPLOAD" :
1142                  if (!Writeable($fsDir)) Error("Write denied",$relDir) ;                  if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;
1143                  if (strstr($FN_name,"/"))                  if (strstr($FN_name,"/"))
1144                          Error("Non-conforming filename") ;                          Error("Non-conforming filename") ;
1145                  // TODO : should rather check for escapeshellcmds                  // TODO : should rather check for escapeshellcmds
1146                  // but maybe RFC 18xx asserts safe filenames ....                  // but maybe RFC 18xx asserts safe filenames ....
1147                  $source = $FN ;                  $source = $FN ;
1148                  $target = $fsDir . "/" . $FN_name ;                  if (! isset($FILENAME)) {       // from update file
1149                  exec("cp $source $target") ;                          $target = "$fsDir/$FN_name" ;
1150                  exec("chmod $gblFilePerms $target") ;                  } else {
1151                            $target = "$fsDir/$FILENAME";
1152                    }
1153    
1154                    // backup old files first
1155                    $dir=dirname($target);
1156                    if (! file_exists($dir."/.bak")) {
1157                            mkdir($dir."/.bak",0700);
1158                    }
1159                    if (! file_exists($dir."/.bak/$GLOBALS[gblNumBackups]")) {
1160                            mkdir($dir."/.bak/$GLOBALS[gblNumBackups]",0700);
1161                    }
1162                    $file=basename($target);
1163                    for($i=$GLOBALS[gblNumBackups]-1;$i>0;$i--) {
1164                            MoveTo("$dir/.bak/$i/$file","$dir/.bak/".($i+1)."/");
1165                    }
1166                    MoveTo($target,$dir."/.bak/1/");
1167    
1168                    copy($source,$target) ;
1169                    chmod($target,$gblFilePerms) ;
1170                  clearstatcache() ;                  clearstatcache() ;
1171                    Logit($target,"uploaded");
1172                    if (isset($FILENAME)) {
1173                            Unlock($target);
1174                    }
1175                  break ;                  break ;
1176    
1177          case "SAVE" :          case "SAVE" :
1178                  $path = $gblFsRoot . escapeshellcmd($RELPATH) ;                  $path = $gblFsRoot . escapeshellcmd($RELPATH) ;
1179                  $writable = Writeable($path) ;                  $writable = is_writeable($path) ;
1180                  $legaldir = Writeable(dirname($path)) ;                  $legaldir = is_writeable(dirname($path)) ;
1181                  $exists   = (file_exists($path)) ? 1 : 0 ;                  $exists   = (file_exists($path)) ? 1 : 0 ;
1182  // check for legal extension here as well  // check for legal extension here as well
1183                  if (!($writable || (!$exists && $legaldir)))                  if (!($writable || (!$exists && $legaldir)))
# Line 851  the source<BR>of this file.<BR><BR> Line 1186  the source<BR>of this file.<BR><BR>
1186                  fwrite($fh,$FILEDATA) ;                  fwrite($fh,$FILEDATA) ;
1187                  fclose($fh) ;                  fclose($fh) ;
1188                  clearstatcache() ;                  clearstatcache() ;
1189                    Logit($path,"saved changes");
1190                  break ;                  break ;
1191    
1192          case "CREATE" :          case "CREATE" :
1193                  // we know $fsDir exists                  // we know $fsDir exists
1194                  if (!Writeable($fsDir)) Error("Write denied",$relDir) ;                  if ($FN == "") break;           // no filename!
1195                    if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;
1196                  $path = $fsDir . "/" . $FN ;  // file or dir to create                  $path = $fsDir . "/" . $FN ;  // file or dir to create
1197                  $relPath = $relDir . "/" . $FN ;                  $relPath = $relDir . "/" . $FN ;
1198                  switch ( $T ) {                  switch ( $T ) {
1199                  case "D" :  // create a directory                  case "D" :  // create a directory
1200                    if ( ! @mkdir($path,$gblDirPerms) )                          if ( ! @mkdir($path,$gblDirPerms) )
1201                      Error("Mkdir failed",$relPath) ; // eg. if it exists                                  Error("Mkdir failed",$relPath) ; // eg. if it exists
1202                    clearstatcache() ;                          clearstatcache() ;
1203                    break ;                          break ;
1204                  case "F" :  // create a new file                  case "F" :  // create a new file
1205  // this functionality is doubled in DetailView().  // this functionality is doubled in DetailView().
1206  // better keep it here altogether  // better keep it here altogether
1207  // chmod perms to $gblFilePerms  // chmod perms to $gblFilePerms
1208                    if ( file_exists($path) && !Writable($path) )                          if ( file_exists($path) && !is_writable($path) )
1209                      Error("File not writable", $relPath) ;                                  Error("File not writable", $relPath) ;
1210                    $tstr = $PHP_SELF . "?A=E&D=" . $relDir . "&F=" . $FN ;                          $fh = fopen($path, "w+") ;
1211                    header("Location: " . $tstr) ;                          if ($fh) {
1212                    exit ;                                  fputs($fh,"\n");
1213                                    fclose($fh) ;
1214                                    LogIt($path,"file created");
1215                            } else {
1216                                    Error("Creation of file $relPath failed -- $path");
1217                            }
1218                            $tstr = "$PHP_SELF?A=E&D=".urlencode($relDir)."&F=".urlencode($FN) ;
1219                            header("Location: " . $tstr) ;
1220                            exit ;
1221                  }                  }
1222                  break ;                  break ;
1223    
# Line 883  the source<BR>of this file.<BR><BR> Line 1228  the source<BR>of this file.<BR><BR>
1228                  $tstr .= "insufficient privileges: " ;                  $tstr .= "insufficient privileges: " ;
1229    
1230                  if ( $FN != "") {  // delete file                  if ( $FN != "") {  // delete file
1231                    $path =  $fsDir . "/" . $FN ;                          $path =  $fsDir . "/" . $FN ;
1232                    if ( ! @unlink($path) ) {                  
1233                      Error("File delete failed", $tstr . $path) ;                          $dir=dirname($path);
1234                      exit ;                          $file=basename($path);
1235                    }                                              if (! file_exists("$dir/.del")) {
1236                                    mkdir("$dir/.del",0700);
1237                            }
1238    
1239    //                      if ( ! @unlink($path) ) {
1240                            if ( ! rename($path,"$dir/.del/$file") ) {
1241                                    Error("File delete failed", $tstr . $path) ;
1242                                    Logit($path,"file delete failed");
1243                                    exit ;
1244                            } else {
1245                                    Logit($path,"file deleted");
1246                                    MoveTo("$dir/.log/$file","$dir/.del/.log/");
1247                                    MoveTo("$dir/.note/$file","$dir/.del/.note/");
1248                                    MoveTo("$dir/.lock/$file","$dir/.del/.lock/");
1249                            }
1250                  }                  }
1251                  else {  // delete directory                  else {  // delete directory
1252                    if ( ! @rmdir($fsDir) ) {                    if ( ! @rmdir($fsDir) ) {
# Line 899  the source<BR>of this file.<BR><BR> Line 1258  the source<BR>of this file.<BR><BR>
1258                  }                  }
1259                  break ;                  break ;
1260    
1261            case "UNDELETE" :  
1262                    if ( $CONFIRM != "on" ) break ;
1263    
1264                    if (substr($FN,0,4) != ".del") break ;
1265                    $file=substr($FN,4,strlen($FN)-4);
1266    
1267                    Logit("$fsDir/.del/$file","undeleted");
1268                    MoveTo("$fsDir/.del/$file","$fsDir/");
1269                    MoveTo("$fsDir/.del/.log/$file","$fsDir/.log/");
1270                    MoveTo("$fsDir/.del/.note/$file","$fsDir/.note/");
1271                    MoveTo("$fsDir/.del/.lock/$file","$fsDir/.lock/");
1272    
1273                    break ;
1274    
1275            case "RENAME" :  
1276                    if ( $CONFIRM != "on" ) break ;
1277    
1278                    Logit("$fsDir/$FN","renamed $FN to $NEWNAME");
1279                    rename("$fsDir/$FN","$fsDir/$NEWNAME");
1280                    rename("$fsDir/.log/$FN","$fsDir/.log/$NEWNAME");
1281                    rename("$fsDir/.note/$FN","$fsDir/.note/$NEWNAME");
1282                    rename("$fsDir/.lock/$FN","$fsDir/.lock/$NEWNAME");
1283    
1284                    break ;
1285    
1286            case "NOTE" :  
1287                    WriteNote("$fsDir/$FN","$NOTE");
1288                    break ;
1289    
1290            case "UNLOCK" :  
1291                    if ( $CONFIRM != "on" ) break ;
1292                    Unlock("$fsDir/$FN");
1293                    break ;
1294    
1295          default :          default :
1296                  // user hit "CANCEL" or undefined action                  // user hit "CANCEL" or undefined action
1297          }          }
# Line 914  the source<BR>of this file.<BR><BR> Line 1307  the source<BR>of this file.<BR><BR>
1307          // $A=U : upload to path given in $D          // $A=U : upload to path given in $D
1308          // $A=E : display detail of file $D/$F and edit          // $A=E : display detail of file $D/$F and edit
1309          // $A=C : display code in file $D/$F          // $A=C : display code in file $D/$F
1310            // $A=Co : checkout file $D/$F
1311            // $A=Ci : checkin file $D/$F
1312            // $A=V : view file (do nothing except log)
1313          // default : display directory $D          // default : display directory $D
1314                    
1315          switch ($A) {          switch ($A) {
1316          case "U" :          case "U" :
1317                  // upload to $relDir                  // upload to $relDir
1318                  if (!Writeable($gblFsRoot . $relDir))                  if (!is_writeable($gblFsRoot . $relDir))
1319                          Error("Write access denied",$relDir) ;                          Error("Write access denied",$relDir) ;
1320                  $text  = "Use this page to upload a single " ;                  $text  = "Use this page to upload a single " ;
1321                  $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 1325  the source<BR>of this file.<BR><BR>
1325                  exit ;                  exit ;
1326          case "E" :          case "E" :
1327                  // detail of $relDir/$F                  // detail of $relDir/$F
1328                  DetailPage($gblFsRoot, $relDir, $F) ;                  if (is_file("$gblFsRoot/$relDir/$F")) DetailPage($gblFsRoot, $relDir, $F) ;
1329                  exit ;                  exit ;
1330          case "C" :          case "C" :
1331                  // listing of $relDir/$F                  // listing of $relDir/$F
1332                  DisplayCode($gblFsRoot, $relDir, $F) ;                  DisplayCode($gblFsRoot, $relDir, $F) ;
1333                  exit ;                  exit ;
1334            case "Co" :
1335                    // checkout
1336                    Lock("$gblFsRoot/$relDir/$F");
1337                    redir_to_url("$relDir/$F");
1338                    exit;
1339            case "Ci" :
1340                    // upload && update to $relDir
1341                    if (!is_writeable($gblFsRoot . $relDir))
1342                            Error("Write access denied",$relDir) ;
1343                    $text  = "Use this page to update a single " ;
1344                    $text .= "file to <B>$SERVER_NAME</B>." ;
1345                    StartHTML("(Update file Page)", $text) ;
1346                    UploadPage($gblFsRoot, $relDir, $F) ;
1347                    EndHTML() ;
1348                    exit ;
1349            case "V" :
1350                    // view
1351                    Log("viewed");
1352                    redir_to_url("$relDir/$F");
1353                    exit;
1354          }          }
1355    
1356          // default: display directory $relDir          // default: display directory $relDir

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

  ViewVC Help
Powered by ViewVC 1.1.26