| <?php |
| namespace app\admin\controller; |
| use think\Db; |
|
|
| class Template extends Base |
| { |
| public function __construct() |
| { |
| parent::__construct(); |
| } |
|
|
| public function index() |
| { |
| $param = input(); |
| $path = $param['path']; |
| $path = str_replace('\\','',$path); |
| $path = str_replace('/','',$path); |
|
|
| if(empty($path)){ |
| $path = '.@template'; |
| } |
|
|
| if(substr($path,0,10) != ".@template") { $path = ".@template"; } |
| if(count( explode(".@",$path) ) > 2) { |
| $this->error(lang('illegal_request')); |
| return; |
| } |
|
|
| $uppath = substr($path,0,strrpos($path,"@")); |
| $ischild = 0; |
| if ($path !=".@template"){ |
| $ischild = 1; |
| } |
|
|
| $config = config('maccms.site'); |
| if($param['current']==1){ |
| $path = '.@template@' . $config['template_dir'] .'@' . $config['html_dir'] ; |
| $ischild = 0; |
| $pp = str_replace('@','/',$path); |
| $filters = $pp.'/*'; |
| } |
| elseif($param['label']==1){ |
| $path = '.@template@' . $config['template_dir'] .'@' . $config['html_dir'] ; |
| $ischild = 0; |
| $pp = str_replace('@','/',$path); |
| $filters = $pp.'/label/*'; |
| } |
| elseif($param['ads']==1){ |
| $path = '.@template@' . $config['template_dir'] .'@' . $config['html_dir'] ; |
| $ischild = 0; |
| $pp = str_replace('@','/',$path); |
| $filters = $pp.'/ads/*'; |
| } |
| else{ |
| $pp = str_replace('@','/',$path); |
| $filters = $pp.'/*'; |
| } |
|
|
| $this->assign('curpath',$path); |
| $this->assign('uppath',$uppath); |
| $this->assign('ischild',$ischild); |
|
|
| $num_path = 0; |
| $num_file = 0; |
| $sum_size = 0; |
| $files = []; |
|
|
| if(is_dir($pp)) { |
| $farr = glob($filters); |
| if ($farr) { |
| foreach ($farr as $f) { |
|
|
| if(is_dir($f)) { |
| $num_path++; |
| $tmp_path = str_replace('./template/', '.@template/', $f); |
| $tmp_path = str_replace('/', '@', $tmp_path); |
| $tmp_name = str_replace($path . '@', '', $tmp_path); |
| $ftime = filemtime($f); |
|
|
| $files[] = ['isfile' => 0, 'name' => $tmp_name, 'path' => $tmp_path, 'note'=>lang('dir'), 'time' => $ftime]; |
| } |
| elseif(is_file($f)) { |
| $num_file++; |
| $fsize = filesize($f); |
| $sum_size += $fsize; |
| $fsize = mac_format_size($fsize); |
| $ftime = filemtime($f); |
| $tmp_path = mac_convert_encoding($f, "UTF-8", "GB2312"); |
|
|
| $path_info = @pathinfo($f); |
| $tmp_path = $path_info['dirname']; |
| $tmp_name = $path_info['basename']; |
|
|
| $files[] = ['isfile' => 1, 'name' => $tmp_name, 'path' => $tmp_path, 'fullname'=> $tmp_path.'/'.$tmp_name, 'size' => $fsize,'note'=>lang('file'), 'time' => $ftime]; |
| } |
| } |
| } |
| } |
| $this->assign('sum_size',mac_format_size($sum_size)); |
| $this->assign('num_file',$num_file); |
| $this->assign('num_path',$num_path); |
| $this->assign('files',$files); |
|
|
| $this->assign('title',lang('admin/template/title')); |
| return $this->fetch('admin@template/index'); |
| } |
|
|
| public function ads() |
| { |
| $adsdir = $GLOBALS['config']['site']['ads_dir']; |
| if(empty($adsdir)){ |
| $adsdir='ads'; |
| } |
| $path = './template/'.$GLOBALS['config']['site']['template_dir'].'/'.$adsdir ; |
| if(!file_exists($path)){ |
| mac_mkdirss($path); |
| } |
|
|
| $filters = $path.'/*.js'; |
| $num_file=0; |
| $sum_size=0; |
| $farr = glob($filters); |
| if ($farr) { |
| foreach ($farr as $f) { |
| if(is_file($f)) { |
| $num_file++; |
| $fsize = filesize($f); |
| $sum_size += $fsize; |
| $fsize = mac_format_size($fsize); |
| $ftime = filemtime($f); |
| $tmp_path = mac_convert_encoding($f, "UTF-8", "GB2312"); |
|
|
| $path_info = @pathinfo($f); |
| $tmp_path = $path_info['dirname']; |
| $tmp_name = $path_info['basename']; |
|
|
| $files[] = ['isfile' => 1, 'name' => $tmp_name, 'path' => $tmp_path, 'fullname'=> $tmp_path.'/'.$tmp_name, 'size' => $fsize,'note'=>lang('file'), 'time' => $ftime]; |
| } |
| } |
| } |
| $this->assign('curpath',$path); |
| $this->assign('sum_size',mac_format_size($sum_size)); |
| $this->assign('num_file',$num_file); |
| $this->assign('files',$files); |
| $this->assign('title',lang('admin/template/ads/title')); |
| return $this->fetch('admin@template/ads'); |
| } |
|
|
| public function info() |
| { |
| $param = input(); |
|
|
| $fname = $param['fname']; |
| $fpath = $param['fpath']; |
|
|
| if( empty($fpath)){ |
| $this->error(lang('param_err').'1'); |
| return; |
| } |
| $fpath = str_replace('@','/',$fpath); |
| $fullname = $fpath .'/' .$fname; |
| $fullname = str_replace('\\','/',$fullname); |
|
|
| if( (substr($fullname,0,10) != "./template") || count( explode("./",$fullname) ) > 2) { |
| $this->error(lang('param_err').'2'); |
| return; |
| } |
| $path = pathinfo($fullname); |
| if(!empty($fname)) { |
| $extarr = array('html', 'htm', 'js', 'xml'); |
| if (!in_array($path['extension'], $extarr)) { |
| $this->error(lang('admin/template/ext_safe_tip')); |
| return; |
| } |
| } |
|
|
| $filter = '<\?|php|eval|server|assert|get|post|request|cookie|session|input|env|config|call|global|dump|print|phpinfo|fputs|fopen|global|chr|strtr|pack|system|gzuncompress|shell|base64|file|proc|preg|call|ini|{:|{$|{~|{-|{+|{/'; |
| $this->assign('filter',$filter); |
|
|
| if (Request()->isPost()) { |
| $validate = \think\Loader::validate('Token'); |
| if(!$validate->check($param)){ |
| return $this->error($validate->getError()); |
| } |
|
|
| $validate = \think\Loader::validate('Template'); |
| if(!$validate->check($param)){ |
| return $this->error($validate->getError()); |
| } |
|
|
| $fcontent = $param['fcontent']; |
| $r = mac_reg_replace($fcontent,$filter,"*"); |
| if($fcontent !== $r){ |
| $this->error(lang('admin/template/php_safe_tip')); |
| return; |
| } |
| $res = @fwrite(fopen($fullname,'wb'),$fcontent); |
|
|
| if($res===false){ |
| return $this->error(lang('save_err')); |
| } |
| return $this->success(lang('save_ok')); |
| } |
|
|
| $fcontent = @file_get_contents($fullname); |
| $fcontent = str_replace('</textarea>','</textarea>',$fcontent); |
| $this->assign('fname',$fname); |
| $this->assign('fpath',$fpath); |
| $this->assign('fcontent',$fcontent); |
|
|
| return $this->fetch('admin@template/info'); |
| } |
|
|
| public function del() |
| { |
| $param = input(); |
| $fname = $param['fname']; |
| if(!empty($fname)){ |
| if(!is_array($fname)){ |
| $fname = [$fname]; |
| } |
| foreach($fname as $a){ |
| $a = str_replace('\\','/',$a); |
|
|
| if( (substr($a,0,10) != "./template") || count( explode("./",$a) ) > 2) { |
|
|
| } |
| else{ |
| $a = mac_convert_encoding($a,"UTF-8","GB2312"); |
| if(file_exists($a)){ @unlink($a); } |
| } |
| } |
| } |
| return $this->success(lang('del_ok')); |
| } |
|
|
| public function wizard() |
| { |
| $this->assign('title',lang('admin/template/wizard/title')); |
| return $this->fetch('admin@template/wizard'); |
| } |
|
|
| } |
|
|