| | <?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'); |
| | } |
| |
|
| | } |
| |
|