%PDF- %PDF-
Direktori : /var/www/pn/beta/64801_wp-content/plugins/wysija-newsletters/helpers/ |
Current File : /var/www/pn/beta/64801_wp-content/plugins/wysija-newsletters/helpers/file.php |
<?php defined('WYSIJA') or die('Restricted access'); class WYSIJA_help_file extends WYSIJA_object{ function __construct(){ parent::__construct(); } /** * Get the full path of a file * @param type $csvfilename * @param type $folder * @return boolean */ function exists($fileFolder=false){ $upload_base_dir = $this->getUploadBaseDir(); $filename=str_replace('/',DS,$upload_base_dir).DS.'wysija'.DS.$fileFolder; if(!file_exists($filename)){ return array('result'=>false,'file'=>$filename); } return array('result'=>true,'file'=>$filename); } /** * Get the full path of a file * @param type $csvfilename * @param type $folder * @return boolean */ function get($csvfilename,$folder='temp'){ $upload_base_dir = $this->getUploadBaseDir(); $filename=$upload_base_dir.DS.'wysija'.DS.$folder.DS.$csvfilename; if(!file_exists($filename)){ $filename=$upload_base_dir.DS.$csvfilename; if(!file_exists($filename)) $filename=false; } return $filename; } // Description: create a directory recursively if possible // Parameters: (Name of the directory, permissions) // Returns: Directory path. False if impossible to create folder. function makeDir($folder='temp',$mode=0755){ $upload_base_dir = $this->getUploadBaseDir(); if(strpos(str_replace('/',DS,$folder),str_replace('/',DS,$upload_base_dir))!==false){ $dirname=$folder; }else{ $dirname=$upload_base_dir.DS.'wysija'.DS.$folder.DS; } if(!file_exists($dirname)){ if(!mkdir($dirname, $mode,true)){ $this->error('Cannot create folder '.$dirname.' try to create the folder manually'); return false; } chmod($dirname,$mode); } return $dirname; } function getUploadDir($folder=false){ $upload_base_dir = $this->getUploadBaseDir(); $dirname=$upload_base_dir.DS.'wysija'.DS; if($folder) $dirname.=$folder.DS; if(file_exists($dirname)) return $dirname; return false; } function getUploadBaseDir(){ $upload_dir = wp_upload_dir(); if(!isset($upload_dir['basedir'])){ if(isset($upload_dir['error'])) $this->wp_error('<b>WordPress error</b> : '.$upload_dir['error'],1); return false; } //having .. in a path is not safe as it can lead to some parent path where we don't have control if(strpos($upload_dir['basedir'], '..')!==false){ $pathsections=$pathsectionsc=explode(DS, $upload_dir['basedir']); while($key = array_search('..', $pathsections)){ unset($pathsections[$key]); unset($pathsections[$key-1]); $newpatharray=array(); foreach($pathsections as $ky=>$vy){ $newpatharray[]=$vy; } $pathsections=$newpatharray; } $cleanBaseDir=implode(DS, $pathsections); if(file_exists($cleanBaseDir)){ $upload_dir['basedir']=$cleanBaseDir; } } return $upload_dir['basedir']; } /** * make a temporary file * @param type $content * @param type $key * @param type $format * @return type */ function temp($content,$key='temp',$format='.tmp'){ $tempDir=$this->makeDir(); if(!$tempDir) return false; $time_created = substr( md5(rand()), 0, 20); $file_name = $key.'-'.$time_created.$format; $handle=fopen($tempDir.$file_name, 'w'); fwrite($handle, $content); fclose($handle); return array('path'=>$tempDir.$file_name,'name'=>$file_name, 'url'=>$this->url($file_name,'temp')); } /** * Get the url of a wysija file based on the filename and the wysija folder * @param type $filename * @param type $folder * @return string */ function url($filename,$folder='temp'){ $upload_dir = wp_upload_dir(); if(file_exists($upload_dir['basedir'].DS.'wysija')){ $url=$upload_dir['baseurl'].'/wysija/'.$folder.'/'.$filename; }else{ $url=$upload_dir['baseurl'].'/'.$filename; } return str_replace(DS,'/',$url); } /* * */ function clear(){ $folders_to_clear = array("import","temp"); $filename_removal = array("import-","export-", 'export_userids-'); $deleted=array(); foreach($folders_to_clear as $folder){ $path=$this->getUploadDir($folder); /* get a list of files from this folder and clear them */ if(!$path) continue; $files = scandir($path); foreach($files as $filename){ if(!in_array($filename, array('.','..',".DS_Store","Thumbs.db"))){ if(preg_match('/('.implode($filename_removal,'|').')[a-f0-9]*\.(csv|txt)/',$filename,$match)){ $deleted[]=$path.$filename; } } } } foreach($deleted as $filename){ if(file_exists($filename)){ $filename=str_replace('/',DS,$filename); unlink($filename); } } } function rrmdir($dir) { if(strpos($dir, '..')!==false){ $this->error('Path is not safe, cannot contain ..'); return false; } if (is_dir($dir)) { $files = scandir($dir); foreach ($files as $file){ if ($file != "." && $file != "..") $this->rrmdir("$dir".DS."$file"); } if(!rmdir($dir)){ chmod($dir, 0777); rmdir($dir); } } else if (file_exists($dir)) { $dir=str_replace('/',DS,$dir); unlink($dir); } } function rcopy($src, $dst) { if(strpos($src, '..')!==false || strpos($dst, '..')!==false){ $this->error('src : '.$src); $this->error('dst : '.$dst); $this->error('Path is not safe, cannot contain ..'); return false; }else{ if (file_exists($dst)) $this->rrmdir($dst); } if (is_dir($src)) { mkdir($dst); $files = scandir($src); foreach ($files as $file){ if ($file != "." && $file != "..") $this->rcopy("$src/$file", "$dst/$file"); } } else if (file_exists($src)) { copy(str_replace('/',DS,$src), str_replace('/',DS,$dst)); } } }