_pagesize : $param['limit'];
$where = [];
if (!empty($param['type'])) {
$where['annex_type'] = ['eq', $param['type']];
}
if (!empty($param['mid'])) {
$where['annex_mid'] = ['eq', $param['mid']];
}
if(!empty($param['wd'])){
$param['wd'] = htmlspecialchars(urldecode($param['wd']));
$where['annex_file'] = ['like','%'.$param['wd'].'%'];
}
$order='annex_time desc';
$res = model('Annex')->listData($where,$order,$param['page'],$param['limit']);
$this->assign('list', $res['list']);
$this->assign('total', $res['total']);
$this->assign('page', $res['page']);
$this->assign('limit', $res['limit']);
$param['page'] = '{page}';
$param['limit'] = '{limit}';
$this->assign('param', $param);
$this->assign('title', lang('admin/annex/title'));
return $this->fetch('admin@annex/index');
}
public function file()
{
$path = input('path');
$path = str_replace('\\','',$path);
$path = str_replace('/','',$path);
if(empty($path)){
$path = '@upload';
}
if(substr($path,0,7) != "@upload") { $path = "@upload"; }
if(count( explode("..@",$path) ) > 1) {
$this->error(lang('illegal_request'));
return;
}
$uppath = substr($path,0,strrpos($path,"@"));
$ischild = 0;
if ($path !="@upload"){
$ischild = 1;
}
$this->assign('uppath',$uppath);
$this->assign('ischild',$ischild);
$num_path = 0;
$num_file = 0;
$sum_size = 0;
$filters = ",,cache,break,artcollect,downdata,playdata,export,vodcollect,";
$files = [];
$pp = str_replace('@','/',$path);
if(is_dir('.'.$pp)){
$farr = glob('.'.$pp.'/*');
if($farr){
foreach($farr as $f){
if ( is_dir($f) ){
if(strpos($filters,",".$f.",")<=0){
$num_path++;
$tmp_path = str_replace('./upload/','@upload/',$f);
$tmp_path = str_replace('/','@',$tmp_path);
$tmp_name = str_replace($path.'@','',$tmp_path);
$files[] = ['isfile'=>0,'name'=>$tmp_name,'path'=>$tmp_path];
}
}
elseif(is_file($f)){
if (strpos($f,".html") <=0 && strpos($f,".htm") <=0){
$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");
$tmp_path = str_replace('./upload/','@upload/',$f);
$tmp_path = str_replace('/','@',$tmp_path);
$tmp_name = str_replace($path.'@',"",$tmp_path);
$tmp_path = str_replace('@','/',$tmp_path);
$files[] = ['isfile'=>1,'name'=>$tmp_name,'path'=>$tmp_path, 'size'=>$fsize, '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/annex/title'));
return $this->fetch('admin@annex/file');
}
public function info()
{
if (Request()->isPost()) {
$param = input('post.');
$res = model('Annex')->saveData($param);
if($res['code']>1){
return $this->error($res['msg']);
}
return $this->success($res['msg']);
}
$id = input('id');
$where=[];
$where['annex_id'] = ['eq',$id];
$res = model('Annex')->infoData($where);
$info = $res['info'];
$this->assign('info',$info);
$this->assign('title',lang('admin/annex/title'));
return $this->fetch('admin@annex/info');
}
public function del()
{
$param = input();
$ids = $param['ids'];
if(!empty($ids)){
if(is_array($ids)){
foreach($ids as $k=>$v){
$ids[$k] = str_replace('./','',$v);
}
}
$where=[];
$where['annex_id|annex_file'] = ['in',$ids];
$res = model('Annex')->delData($where);
if($res['code']>1){
return $this->error($res['msg']);
}
return $this->success($res['msg']);
}
return $this->error(lang('param_err'));
}
public function check()
{
mac_echo('');
$param = input();
$num = intval($param['num']);
$start = intval($param['start']);
$page_count = intval($param['page_count']);
$data_count = intval($param['data_count']);
if($start<1){
$start=1;
}
if($page_count<1){
$page_count=1;
}
$page_size = 500;
if(empty($data_count)){
$where=[];
$data_count = model('Annex')->countData($where);
$page_count = ceil($data_count / $page_size);
$param['data_count'] = $data_count;
$param['page_count'] = $page_count;
$param['page_size'] = $page_size;
}
if($start > $page_count){
mac_echo(lang('admin/annex/check_complete'));
exit;
}
mac_echo(lang('admin/annex/info_tip',[$param['data_count'],$param['page_count'],$param['page_size'],$start]));
$limit_str = ($page_size * ($page_count-$start)) .",".$page_size;
$list = Db::name('Annex')->field('*')->where($where)->limit($limit_str)->fetchSql(false)->orderRaw('annex_time desc')->select();
foreach ($list as $k3 => $v3) {
$tmp = $v3['annex_file'];
if(!file_exists('./'.$tmp)){
$where=[];
$where['annex_file'] = ['eq',$tmp];
$r = Db::name('Annex')->where($where)->delete();
mac_echo($tmp . '...del');
}
}
$param['start'] = ++$start;
$url = url('annex/check') .'?'. http_build_query($param);
mac_jump( $url ,3);
}
public function init()
{
$param = input();
if($param['ck']){
mac_echo('');
$start = intval($param['start']);
if($start<1){
$start=1;
}
$pre = config('database.prefix');
$schema = Db::query('select * from information_schema.columns where table_schema = ?', [config('database.database')]);
$col_list = [];
foreach ($schema as $k => $v) {
$col_list[$v['TABLE_NAME']][$v['COLUMN_NAME']] = $v;
}
$tables = ['actor', 'art', 'topic', 'type', 'vod', 'website' ,'actor', 'role'];
$param['tbi'] = intval($param['tbi']);
if ($param['tbi'] >= count($tables)) {
mac_echo(lang('admin/annex/check_ok'));
die;
}
$tab = $tables[$param['tbi']];
$where=[];
$page_size = 500;
$data_count = model($tab)->countData($where);
$page_count = ceil($data_count / $page_size);
if($start > $page_count){
mac_echo(lang('admin/annex/check_jump',[$tab]));
$param['tbi']++;
$param['start'] = 1;
$url = url('annex/init') . '?' . http_build_query($param);
mac_jump($url, 3);
exit;
}
mac_echo(lang('admin/annex/check_tip1',[$tab,$data_count,$page_count,$page_size,$start]));
foreach ($col_list as $k1 => $v1) {
$pre_tb = str_replace($pre, '', $k1);
$si = array_search($pre_tb, $tables);
if ($pre_tb !== $tab) {
continue;
}
$limit_str = ($page_size * ($page_count-$start)) .",".$page_size;
$list = Db::name($pre_tb)->field('*')->limit($limit_str)->fetchSql(false)->select();
$adds = [];
foreach ($list as $k3 => $v3) {
$col_id = $tables[$si] . '_id';
$col_name = $tables[$si] . '_name';
$val_id = $v3[$col_id];;
$val_name = strip_tags($v3[$col_name]);
$ck = false;
$where2 = [];
$where2[$col_id] = $val_id;
$imgs = [];
$add = [];
$add['id'] = $val_id;
$add['name'] = $val_name;
$add['col_id'] = $col_id;
$col = $tables[$si] . '_pic';
$val = $v3[$col];
if (substr($val, 0, 6) == 'upload' && file_exists('./' . $val)) {
$imgs[] = ['annex_file' => $val, 'annex_time' => time(), 'annex_size' => filesize('./' . $val), 'annex_type' => 'image'];
$ck = true;
}
$col = $tables[$si] . '_pic_thumb';
$val = $v3[$col];
if (substr($val, 0, 6) == 'upload' && file_exists('./' . $val)) {
$imgs[] = ['annex_file' => $val, 'annex_time' => time(), 'annex_size' => filesize('./' . $val), 'annex_type' => 'image'];
$ck = true;
}
$col = $tables[$si] . '_pic_slide';
$val = $v3[$col];
if (substr($val, 0, 6) == 'upload' && file_exists('./' . $val)) {
$imgs[] = ['annex_file' => $val, 'annex_time' => time(), 'annex_size' => filesize('./' . $val), 'annex_type' => 'image'];
$ck = true;
}
$col = $tables[$si] . '_content';
$val = $v3[$col];
if (!empty($val)) {
$rule = mac_buildregx("
]*src\s*=\s*['" . chr(34) . "]?([\w/\-\:.]*)['" . chr(34) . "]?[^>]*>", "is");
preg_match_all($rule, $val, $matches);
$matchfieldarr = $matches[1];
foreach ($matchfieldarr as $f => $matchfieldstr) {
$img_src = trim(preg_replace("/[ \r\n\t\f]{1,}/", " ", $matchfieldstr));
if (substr($img_src, 0, 7) == '/upload' && file_exists('.' . $img_src)) {
$imgs[] = ['annex_file' => substr($img_src, 1), 'annex_time' => time(), 'annex_size' => filesize('.' . $img_src), 'annex_type' => 'image'];
$ck = true;
}
}
}
$add['imgs'] = $imgs;
$adds[] = $add;
}
if (!empty($adds)) {
$insert = [];
foreach ($adds as $k => $v) {
$des = ''.lang('skip').'';
if (!empty($v['imgs'])) {
foreach($v['imgs'] as $k2 => $v2){
$where = [];
$where['annex_file'] = $v2['annex_file'];
$r = model('Annex')->infoData($where);
if ($r['code'] !== 1) {
$insert[] = $v2;
$des = 'ok';
}
}
}
mac_echo($v['name'] . '...' . $des);
model('Annex')->insertAll($insert);
}
}
}
$param['start']++;
$url = url('annex/init') . '?' . http_build_query($param);
mac_jump($url, 3);
exit;
}
return $this->fetch('admin@annex/init');
}
}