This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ define("NW_TMPL_FB_HEADER", "fb_header"); define("NW_TMPL_FB_FOOTER", "fb_footer"); define("NW_TMPL_FB_PARENT", "fb_parent_name"); define("NW_TMPL_FB_ROW_D", "fb_directory_row"); define("NW_TMPL_FB_ROW_F", "fb_file_row"); class mod_fb { function mod_fb() { $this->modtype="core_directory_handler"; $this->modname="Files and directories browser"; } function main() { global $http_uri, $docroot, $conf, $vhost, $rq_err, $out_contenttype, $real_uri, $out_add_headers, $accessdir, $mime, $query_string; foreach (access_query("fbiconbytype") as $icndef) { $ic=explode(" ", $icndef); $icons[trim($ic[1])]=trim($ic[0]); } $icndef=access_query("fbicondefault", 0); if (!($icndir=access_query("fbicondirectory", 0))) $icndir=$icndef; if ($http_uri[strlen($http_uri)-1]!="/") $http_uri.="/"; if (access_query("filebrowser", 0)) { if (@is_readable($docroot.$http_uri)) { $dfmt=access_query("fbdateformat", 0) or $dfmt="d-M-Y H:i:s"; $rq_err=200; $out_contenttype="text/html"; // Generate directory listing $hnd=opendir(realpath($docroot.$http_uri)); unset($fb_arr); unset($fsort); while ($f=readdir($hnd)) { $fi=stat($docroot.$http_uri.$f); $fi["isdir"]=is_dir($docroot.$http_uri.$f); $fi["f"]=$f; $fb_arr[$f]=$fi; if (!$fi["isdir"]) { $fb_ts+=$fi[7]; $fb_tf++; } } if ($fbstmp=access_query("fbsortorder", 0)) { $fbsort=explode(" ", $fbstmp); } else { $fbsort=array("name"); } parse_str($query_string, $ptmp); if (count($ptmp)) { if ($ptmp["sort"]) $fbsort[0]=$ptmp["sort"]; if ($ptmp["order"]) $fbsort[1]=$ptmp["order"]; } switch ($fbsort[0]) { case "date": $sortidx=9; break; case "size": $sortidx=7; break; case "name": default: $sortidx="f"; } $dsort = $fsort = array(); foreach ($fb_arr as $fstmp) if (!$fstmp["isdir"]) { $fsort[$fstmp["f"]] = $fstmp[$sortidx]; } else { if ($fstmp["f"] != "..") { $dsort[$fstmp["f"]] = $fstmp[$sortidx]; } else { $has_parent = $fstmp[$sortidx]; } } if ($fbsort[1]=="desc") { arsort($fsort); arsort($dsort); } else { asort($fsort); asort($dsort); } if ($has_parent) { $dsort = array_reverse($dsort); $dsort[".."] = $has_parent; $dsort = array_reverse($dsort); } // Do other processing if (@is_readable($wfn=$docroot.$http_uri.$conf[$vhost]["fbwelcomefile"][0])) { $wfc=implode("
", file($wfn)); $welcome_formated="
".$wfc."

"; } else $welcome_formated=""; $fhdr=array(); $fhdr["dir_name"]="/".$real_uri; $fhdr["welcome"]=$welcome_formated; $fhdr["total_files"]=$fb_tf; $fhdr["total_files_formated"]=number_format($fb_tf); $fhdr["total_size"]=$fb_ts; $fhdr["total_size_formated"]=number_format($fb_ts); $resp=nw_apply_template(NW_TMPL_FB_HEADER, $fhdr); $dfile=access_query("fbdescfile", 0); unset($fb_desc); if (@is_readable($dfcomp=realpath($accessdir."/".$dfile))) if ($descf=file($dfcomp)) foreach ($descf as $dfline) if (trim($dfline)) { $didx=trim(substr($dfline, 0, strpos($dfline, " "))); $desc=trim(substr($dfline, strpos($dfline, " "))); $fb_desc[$didx]=$desc; } // Display each row foreach (array_keys($dsort) as $fidx) { $fi=$fb_arr[$fidx]; $f=$fi["f"]; if ($f=="..") { $dname=nw_apply_template(NW_TMPL_FB_PARENT, array()); $tmpdl=explode("/", trim($real_uri,"/")); array_pop($tmpdl); $dlink=url_to_absolute(implode("/", $tmpdl)."/"); } else { $dname=$f; $dlink=url_to_absolute($real_uri.rawurlencode($f)."/"); } if (((substr($f, 0, 1)!="." || $f=="..") || $conf[$vhost]["fbshowdotfiles"][0]) && ($f!=".") && !($f==".." && $http_uri=="/")) { $d_row=array(); $d_row["icon"]=$icndir; $d_row["link"]=$dlink; $d_row["name"]=$dname; $d_row["date"]=date($dfmt, $fi[9]); $d_row["desc"]=($fb_desc[$f]?$fb_desc[$f]:"-"); $resp.=nw_apply_template(NW_TMPL_FB_ROW_D, $d_row, true); } } foreach (array_keys($fsort) as $fidx) { $fi=$fb_arr[$fidx]; $f=$fi["f"]; $fp=pathinfo($f); $t=$mime[strtolower($fp["extension"])]; $icnf=$icndef; if ($icons) foreach ($icons as $key=>$val) if (strpos($t, $key)===0) { $icnf=$val; break; } if ((($f[0]!="." || $f=="..") || $conf[$vhost]["fbshowdotfiles"][0]) && ($f!=".") && !($f==".." && $http_uri=="/")) { $f_row=array(); $f_row["icon"]=$icnf; $f_row["link"]=url_to_absolute(($real_uri).rawurlencode($f)); $f_row["name"]=$f; $f_row["date"]=date($dfmt, $fi[9]); $f_row["size"]=number_format($fi[7]); $f_row["desc"]=($fb_desc[$f]?$fb_desc[$f]:"-"); $resp.=nw_apply_template(NW_TMPL_FB_ROW_F, $f_row, true); } } closedir($hnd); $resp.=nw_apply_template(NW_TMPL_FB_FOOTER, $fhdr); } else { $rq_err=403; } } else $rq_err=404; if ($resp) $GLOBALS["lf"] =& new static_response($resp); } } ?>