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