# #CMS - CMS Made Simple #(c)2004 by Ted Kulp (wishy@users.sf.net) #This project's homepage is: http://www.cmsmadesimple.org # #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 of the License, 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 # include_once(dirname(__FILE__)."/fileinfo.php"); class FileManager extends CMSModule { private $_jsdone = 0; function LazyLoadFrontend() { return TRUE; } function InitializeAdmin() { //$this->RegisterModulePlugin(); } function AccessAllowed() { //return ($this->CheckPermission("Modify Files") || $this->CheckPermission('Modify Site Preferences')); return $this->CheckPermission("Modify Files"); } public function AdvancedAccessAllowed() { return $this->CheckPermission('Use FileManager Advanced',0); } function GetName() { return 'FileManager'; } function GetChangeLog() { return $this->ProcessTemplate('changelog.tpl'); } function GetFriendlyName() { return $this->Lang('friendlyname'); } function GetVersion() { return '1.4.4'; } function GetHeaderHTML() { return $this->_output_header_javascript(); } function GetHelp() { return $this->Lang('help'); } function GetAuthor() { return 'Morten Poulsen (Silmarillion)'; } function GetAuthorEmail() { return 'morten@poulsen.org'; } function IsPluginModule() { return true; } function HasAdmin() { return true; } function IsAdminOnly() { return false; } function GetAdminSection() { return 'content'; } function GetAdminDescription() { return $this->Lang('moddescription'); } function MinimumCMSVersion() { return "1.11=alpha0"; } function VisibleToAdminUser() { //return ($this->AccessAllowed() || $this->AdvancedAccessAllowed()); return $this->AccessAllowed(); } function InstallPostMessage() { return $this->Lang('postinstall'); } function UninstallPostMessage() { return $this->Lang('uninstalled'); } function UninstallPreMessage() { return $this->Lang('really_uninstall'); } function GetEventDescription($name) { return $this->Lang('eventdesc_'.$name); } function GetEventHelp($name) { return $this->Lang('eventhelp_'.$name); } function GetActionIcon($action) { $config = cmsms()->GetConfig(); return ""; } function GetFileIcon($extension,$isdir=false) { if (empty($extension)) $extension = '---'; // hardcode extension to something. if ($extension[0]==".") $extension=substr($extension,1); $config = cmsms()->GetConfig(); $iconsize=$this->GetPreference("iconsize","32px"); ///for valid xhtml $iconsizeHeight=str_replace("px","",$iconsize); ///end if ($extension[0]=='.') $extension=substr($extension, 1); $result=""; if ($isdir) { //echo hi; $result="smart_root_url()."/modules/FileManager/icons/themes/default/extensions/".$iconsize."/dir.png\" ". "alt=\"directory\" />"; return $result; } //$extension=array_pop(explode('.', $filename)); if (file_exists($config["root_path"]."/modules/FileManager/icons/themes/default/extensions/".$iconsize."/".strtolower($extension).".png")) { $result=""; } else { $result=""; } return $result; } function Slash($str,$str2="",$str3="") { if ($str=="") return $str2; if ($str2=="") return $str; if ($str[strlen($str)-1]!="/") { if ($str2[0]!="/") { return $str."/".$str2; } else { return $str.$str2; } } else { if ($str2[0]!="/") { return $str.$str2; } else { return $str.substr($str2,1); //trim away one of the slashes } } //Three strings not supported yet... return "Error in Slash-function. Please report"; } function ContainsIllegalChars($filename) { if (strpos($filename, "'")!==false) return true; if (strpos($filename, "\"")!==false) return true; if (strpos($filename, "/")!==false) return true; if (strpos($filename, "\\")!==false) return true; if (strpos($filename, "&")!==false) return true; if (strpos($filename, "\$")!==false) return true; if (strpos($filename, "+")!==false) return true; return false; } function FormatFileSize($_size) { $unit=$this->Lang("bytes"); //$size=$filelist[$i]["size"]; $size=$_size; if ($size>10000 && $size<(1024*1024)) { $size=round($size/1024); $unit=$this->Lang("kb"); } if ($size>(1024*1024)) { $size=round($size/(1024*1024),1); $unit=$this->Lang("mb"); } if ($this->GetPreference("thousanddelimiter")!="") { $size=number_format($size,0,"",$this->GetPreference("thousanddelimiter")); } $result=array(); $result["size"]=$size; $result["unit"]=$unit; return $result; } function FormatPermissions($mode,$style="xxx") { //return octdec($mode & 0777); switch ($style) { case "xxx" : { $owner=0; if ($mode & 0400) $owner+=4; if ($mode & 0200) $owner+=2; if ($mode & 0100) $owner+=1; $group=0; if ($mode & 0040) $group+=4; if ($mode & 0020) $group+=2; if ($mode & 0010) $group+=1; $others=0; if ($mode & 0004) $others+=4; if ($mode & 0002) $others+=2; if ($mode & 0001) $others+=1; return $owner.$group.$others; } case "xxxxxxxxx" : { $owner=""; if ($mode & 0400) $owner.="r"; else $owner.="-"; if ($mode & 0200) $owner.="w"; else $owner.="-"; if ($mode & 0100) $owner.="x"; else $owner.="-"; $group=""; if ($mode & 0040) $group.="r"; else $group.="-"; if ($mode & 0020) $group.="w"; else $group.="-"; if ($mode & 0010) $group.="x"; else $group.="-"; $others=""; if ($mode & 0004) $others.="r"; else $others.="-"; if ($mode & 0002) $others.="w"; else $others.="-"; if ($mode & 0001) $others.="x"; else $others.="-"; return $owner.$group.$others; } } } function SetMode($mode,$path,$file="") { $config = cmsms()->GetConfig(); $realfile=""; if ($file!="") { //$realpath=$this->Slash($config["root_path"],$path); $realfile=$this->Slash($path,$file); } else { $realfile=$path; } //echo $realfile; //echo octdec($mode); die(); //return chmod($realfile,decoct(octdec(77))); return chmod($realfile,"0".octdec($mode)); } function SetModeWin($mode,$path,$file="") { $config = cmsms()->GetConfig(); $realfile=""; if ($file!="") { //$realpath=$this->Slash($config["root_path"],$path); $realfile=$this->Slash($path,$file); } else { $realfile=$path; } $realfile=$this->WinSlashes($realfile); //echo $realfile; echo $mode;die(); $returnvar=""; $output=array(); if ($mode=="777") { //return chmod($realfile,"775"); exec("attrib -R ".$realfile,$output,$returnvar); } else { exec("attrib +R ".$realfile,$output,$returnvar); //return chmod($realfile,"0666"); } /*echo $realfile; echo $returnvar; print_r($output);*/ return ($returnvar==0); //return true; } function GetPermissions($path,$file) { $config = cmsms()->GetConfig(); $realpath=$this->Slash($config["root_path"],$path); $statinfo=stat($this->Slash($realpath,$file)); return $statinfo["mode"]; } function GetMode($path,$file) { $config = cmsms()->GetConfig(); $realpath=$this->Slash($config["root_path"],$path); $statinfo=stat($this->Slash($realpath,$file)); return $this->FormatPermissions($statinfo["mode"]); } function GetModeWin($path,$file) { $config = cmsms()->GetConfig(); $realpath=$this->Slash($config["root_path"],$path); $realpath=$this->Slash($realpath,$file); if (is_writable($realpath)) { return "777"; } else { return "444"; } //return $this->FormatPermissions($statinfo["mode"]); } function GetModeTable($id,$permissions) { $this->smarty->assign('ownertext', $this->Lang("owner")); $this->smarty->assign('groupstext', $this->Lang("group")); $this->smarty->assign('otherstext', $this->Lang("others")); $ownerr="0"; if ($permissions & 0400) $ownerr="1"; $this->smarty->assign('ownerr', $this->CreateInputCheckbox($id,"ownerr","1",$ownerr)); $ownerw="0"; if ($permissions & 0200) $ownerw="1"; $this->smarty->assign('ownerw', $this->CreateInputCheckbox($id,"ownerw","1",$ownerw)); $ownerx="0"; if ($permissions & 0100) $ownerx="1"; $this->smarty->assign('ownerx', $this->CreateInputCheckbox($id,"ownerx","1",$ownerx)); $groupr="0"; if ($permissions & 0040) $groupr="1"; $this->smarty->assign('groupr', $this->CreateInputCheckbox($id,"groupr","1",$groupr)); $groupw="0"; if ($permissions & 0020) $groupw="1"; $this->smarty->assign('groupw', $this->CreateInputCheckbox($id,"groupw","1",$groupw)); $groupx="0"; if ($permissions & 0010) $groupx="1"; $this->smarty->assign('groupx', $this->CreateInputCheckbox($id,"groupx","1",$groupx)); $othersr="0"; if ($permissions & 0004) $othersr="1"; $this->smarty->assign('othersr', $this->CreateInputCheckbox($id,"othersr","1",$othersr)); $othersw="0"; if ($permissions & 0002) $othersw="1"; $this->smarty->assign('othersw', $this->CreateInputCheckbox($id,"othersw","1",$othersw)); $othersx="0"; if ($permissions & 0001) $othersx="1"; $this->smarty->assign('othersx', $this->CreateInputCheckbox($id,"othersx","1",$othersx)); return $this->ProcessTemplate('modetable.tpl'); } function GetModeFromTable($params) { $owner=0; if (isset($params["ownerr"])) $owner+=4; if (isset($params["ownerw"])) $owner+=2; if (isset($params["ownerx"])) $owner+=1; $group=0; if (isset($params["groupr"])) $group+=4; if (isset($params["groupw"])) $group+=2; if (isset($params["groupx"])) $group+=1; $others=0; if (isset($params["othersr"])) $others+=4; if (isset($params["othersw"])) $others+=2; if (isset($params["othersx"])) $others+=1; return $owner.$group.$others; } function CHModMakesSense() { return function_exists("posix_getpwuid"); } function ParamsArray($params,$additional=array()) { $path=""; if (isset($params["path"]) && $params["path"]!="") $path=$params["path"]; } function ConfirmModeSanity($newmode) { return true; } function GetThumbnailLink($file,$path) { $gCms = cmsms(); $config = $gCms->GetConfig(); $advancedmode = filemanager_utils::check_advanced_mode(); $basedir = $config['root_path']; $baseurl = $config->smart_root_url(); $filepath=$basedir.'/'.$path; $url=$baseurl.'/'.$path; $image=""; $imagepath=$this->Slashes($filepath."/thumb_".$file["name"]); if (!file_exists($imagepath)) { $image=$this->GetFileIcon($file["ext"],$file["dir"]); } else { $imageurl=$url.'/thumb_'.$file["name"]; $image="\"".$file["name"]."\""; } $result=""; $result.=$image; $result.=""; return $result; } function WinSlashes($url) { return str_replace("/","\\",$url); } function Slashes($url) { $result=str_replace("\\","/",$url); $result=str_replace("//","/",$result); return $result; } function CreateFilePickerButton($id,$inputname,$params) { $output=""; } protected function _output_header_javascript() { if( $this->_jsdone ) return; $this->_jsdone = 1; $urlpath = $this->GetModuleURLPath()."/js"; $files = array('jquery-file-upload/jquery.iframe-transport.js'); $files[] = 'jquery-file-upload/jquery.fileupload.js'; $fmt = ''; $out = ''; foreach( $files as $one ) { $out .= sprintf($fmt,$urlpath,$one)."\n"; } return $out; } function encodefilename($filename) { return str_replace("==","",base64_encode($filename)); } function decodefilename($encodedfilename) { return base64_decode($encodedfilename."=="); } } // end of class ?>