_pagesize : $param['limit'];
$where = [];
if (!empty($param['type'])) {
$where['type_id|type_id_1'] = ['eq', $param['type']];
}
if (!empty($param['level'])) {
$where['manga_level'] = ['eq', $param['level']];
}
if (in_array($param['status'], ['0', '1'])) {
$where['manga_status'] = ['eq', $param['status']];
}
if (!empty($param['lock'])) {
$where['manga_lock'] = ['eq', $param['lock']];
}
if(!empty($param['pic'])){
if($param['pic'] == '1'){
$where['manga_pic'] = ['eq',''];
}
elseif($param['pic'] == '2'){
$where['manga_pic'] = ['like','http%'];
}
elseif($param['pic'] == '3'){
$where['manga_pic'] = ['like','%#err%'];
}
}
if(!empty($param['wd'])){
$param['wd'] = urldecode($param['wd']);
$param['wd'] = mac_filter_xss($param['wd']);
$where['manga_name'] = ['like','%'.$param['wd'].'%'];
}
if (!empty($param['recycle'])) {
$where['manga_recycle_time'] = ['>', 0];
}
if(!empty($param['url'])){
if($param['url'] == '1'){
$where['manga_chapter_url'] = ['eq',''];
}
}
if(!empty($param['points'])){
if($param['points'] == '1'){
$where['manga_points'] = ['gt',0];
}
}
if(!empty($param['repeat'])){
if($param['page'] ==1){
Db::execute('DROP TABLE IF EXISTS '.config('database.prefix').'tmpmanga');
Db::execute('CREATE TABLE `'.config('database.prefix').'tmpmanga` (`id1` int unsigned DEFAULT NULL, `name1` varchar(1024) NOT NULL DEFAULT \'\') ENGINE=MyISAM');
Db::execute('INSERT INTO `'.config('database.prefix').'tmpmanga` (SELECT min(manga_id)as id1,manga_name as name1 FROM '.config('database.prefix').'manga WHERE manga_recycle_time = 0 GROUP BY name1 HAVING COUNT(name1)>1)');
}
$order='manga_name asc';
$res = model('Manga')->listRepeatData($where,$order,$param['page'],$param['limit']);
}
else{
$order='manga_time desc';
$res = model('Manga')->listData($where,$order,$param['page'],$param['limit']);
}
foreach($res['list'] as $k=>&$v){
$v['ismake'] = 1;
if($GLOBALS['config']['view']['manga_detail'] >0 && $v['manga_time_make'] < $v['manga_time']){
$v['ismake'] = 0;
}
}
$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);
$type_tree = model('Type')->getCache('type_tree');
$this->assign('type_tree', $type_tree);
$this->assign('title', lang('admin/manga/title'));
return $this->fetch('admin@manga/index');
}
public function batch()
{
$param = input();
if (!empty($param)) {
mac_echo('');
if(empty($param['ck_del']) && empty($param['ck_level']) && empty($param['ck_status']) && empty($param['ck_lock']) && empty($param['ck_hits']) && empty($param['ck_replace']) ){
return $this->error(lang('param_err'));
}
$where = $this->mangaBatchFilterWhere($param);
if($param['ck_del'] == 1){
$res = model('Manga')->recycleData($where);
mac_echo($res['code'] == 1 ? lang('recycle_ok') : $res['msg']);
mac_jump( url('manga/batch') ,3);
exit;
}
if($param['ck_del'] == 4){
$res = model('Manga')->delData($where);
mac_echo(lang('multi_del_ok'));
mac_jump( url('manga/batch') ,3);
exit;
}
if(empty($param['page'])){
$param['page'] = 1;
}
if(empty($param['limit'])){
$param['limit'] = 100;
}
if(empty($param['total'])) {
$param['total'] = model('Manga')->countData($where);
$param['page_count'] = ceil($param['total'] / $param['limit']);
}
if($param['page'] > $param['page_count']) {
mac_echo(lang('multi_set_ok'));
mac_jump( url('manga/batch') ,3);
exit;
}
mac_echo( "".lang('admin/batch_tip',[$param['total'],$param['limit'],$param['page_count'],$param['page']])."");
$page = $param['page_count'] - $param['page'] + 1;
$order='manga_id desc';
$res = model('Manga')->listData($where,$order,$page,$param['limit']);
foreach($res['list'] as $k=>$v){
$where2 = [];
$where2['manga_id'] = $v['manga_id'];
$update = [];
$des = $v['manga_id'].','.$v['manga_name'];
if(!empty($param['ck_level']) && !empty($param['val_level'])){
$update['manga_level'] = $param['val_level'];
$des .= ' '.lang('level').':'.$param['val_level'].';';
}
if(!empty($param['ck_status']) && isset($param['val_status'])){
$update['manga_status'] = $param['val_status'];
$des .= ' '.lang('status').':'.($param['val_status'] ==1 ? '['.lang('reviewed').']':'['.lang('reviewed_not').']') .';';
}
if(!empty($param['ck_lock']) && isset($param['val_lock'])){
$update['manga_lock'] = $param['val_lock'];
$des .= ' '.lang('lock').':'.($param['val_lock']==1 ? '['.lang('lock').']':'['.lang('unlock').']').';';
}
if(!empty($param['ck_hits']) && !empty($param['val_hits_min']) && !empty($param['val_hits_max']) ){
$update['manga_hits'] = rand($param['val_hits_min'],$param['val_hits_max']);
$des .= ' '.lang('hits').':'.$update['manga_hits'].';';
}
// 新增:批量替换功能
if(!empty($param['ck_replace']) && !empty($param['replace_field']) && isset($param['replace_search'])){
$field = $param['replace_field'];
$replaceres = $this->batch_replace($field,$v,$param['replace_search'],$param['replace_with'],'manga');
if(isset($replaceres[$field])) $update[$field] = $replaceres[$field];
if(!empty($replaceres['des'])) $des .= $replaceres['des'];
}
mac_echo($des);
$res2 = model('Manga')->where($where2)->update($update);
}
$param['page']++;
$url = url('manga/batch') .'?'. http_build_query($param);
mac_jump( $url ,3);
exit;
}
$type_tree = model('Type')->getCache('type_tree');
$this->assign('type_tree',$type_tree);
$this->assign('title',lang('admin/manga/title'));
return $this->fetch('admin@manga/batch');
}
private function mangaBatchFilterWhere(&$param)
{
$where = [];
if (!empty($param['type'])) {
$where['type_id'] = ['eq', $param['type']];
}
if (!empty($param['level'])) {
$where['manga_level'] = ['eq', $param['level']];
}
if (in_array($param['status'] ?? '', ['0', '1'])) {
$where['manga_status'] = ['eq', $param['status']];
}
if (!empty($param['lock'])) {
$where['manga_lock'] = ['eq', $param['lock']];
}
if (!empty($param['pic'])) {
if ($param['pic'] == '1') {
$where['manga_pic'] = ['eq', ''];
} elseif ($param['pic'] == '2') {
$where['manga_pic'] = ['like', 'http%'];
} elseif ($param['pic'] == '3') {
$where['manga_pic'] = ['like', '%#err%'];
}
}
if (!empty($param['wd'])) {
$param['wd'] = htmlspecialchars(urldecode($param['wd']));
$where['manga_name'] = ['like', '%' . $param['wd'] . '%'];
}
if (!empty($param['recycle'])) {
$where['manga_recycle_time'] = ['>', 0];
}
return $where;
}
public function exportData()
{
$param = input();
$where = $this->mangaBatchFilterWhere($param);
$this->base_export($param,'manga',$where);
}
public function importData()
{
$this->base_import('manga');
}
public function info()
{
if (Request()->isPost()) {
$param = input('post.');
$res = model('Manga')->saveData($param);
if($res['code']>1){
return $this->error($res['msg']);
}
return $this->success($res['msg']);
}
$id = input('id');
$where=[];
$where['manga_id'] = ['eq',$id];
$where['_recycle'] = 'all';
$res = model('Manga')->infoData($where);
$info = $res['info'];
if (empty($info)) {
$info = [];
}
$this->assign('info',$info);
$this->assign('manga_page_list', !empty($info['manga_page_list']) ? (array)$info['manga_page_list'] : []);
$type_tree = model('Type')->getCache('type_tree');
$this->assign('type_tree',$type_tree);
$this->assign('title',lang('admin/manga/title'));
return $this->fetch('admin@manga/info');
}
public function restore()
{
$param = input();
$ids = $param['ids'];
if (empty($ids)) {
return $this->error(lang('param_err'));
}
$where = ['manga_id' => ['in', $ids]];
$res = model('Manga')->restoreData($where);
if ($res['code'] > 1) {
return $this->error($res['msg']);
}
return $this->success($res['msg']);
}
public function del()
{
$param = input();
$ids = $param['ids'];
$purge = !empty($param['purge']);
if(!empty($ids)){
$where=[];
$where['manga_id'] = ['in',$ids];
if ($purge) {
$res = model('Manga')->delData($where);
} else {
$res = model('Manga')->recycleData($where);
}
if($res['code']>1){
return $this->error($res['msg']);
}
return $this->success($res['msg']);
}
elseif(!empty($param['repeat'])){
$st = ' not in ';
if($param['retain']=='max'){
$st=' in ';
}
$sql = 'delete from '.config('database.prefix').'manga where manga_name in(select name1 from '.config('database.prefix').'tmpmanga) and manga_id '.$st.'(select id1 from '.config('database.prefix').'tmpmanga)';
$res = model('Manga')->execute($sql);
if($res===false){
return $this->success(lang('del_err'));
}
return $this->success(lang('del_ok'));
}
return $this->error(lang('param_err'));
}
public function field()
{
$param = input();
$ids = $param['ids'];
$col = $param['col'];
$val = $param['val'];
$start = $param['start'];
$end = $param['end'];
if ($col == 'type_id' && $val==''){
return $this->error("请选择分类提交");
}
if(!empty($ids) && in_array($col,['manga_status','manga_lock','manga_level','manga_hits','type_id'])){
$where=[];
$where['manga_id'] = ['in',$ids];
$update = [];
if(empty($start)) {
$update[$col] = $val;
if($col == 'type_id'){
$type_list = model('Type')->getCache();
$id1 = intval($type_list[$val]['type_pid']);
$update['type_id_1'] = $id1;
}
$res = model('Manga')->fieldData($where, $update);
}
else{
if(empty($end)){$end = 9999;}
$ids = explode(',',$ids);
foreach($ids as $k=>$v){
$val = rand($start,$end);
$where['manga_id'] = ['eq',$v];
$update[$col] = $val;
$res = model('Manga')->fieldData($where, $update);
}
}
if($res['code']>1){
return $this->error($res['msg']);
}
return $this->success($res['msg']);
}
return $this->error(lang('param_err'));
}
public function updateToday()
{
$param = input();
$flag = $param['flag'];
$res = model('Manga')->updateToday($flag);
return json($res);
}
public function batchGenerateTag()
{
$ids = input('post.ids/a');
if(empty($ids)){
return json(['code'=>0,'msg'=>lang('admin/tag/select_manga_tag')]);
}
$success = 0;
$fail = 0;
foreach($ids as $id){
$info = model('Manga')->where('manga_id',$id)->find();
if($info){
$tag = mac_get_tag($info['manga_name'], $info['manga_content']);
if($tag !== false){
$res = model('Manga')->where('manga_id',$id)->update(['manga_tag'=>$tag]);
if($res){
$success++;
}else{
$fail++;
}
}else{
$fail++;
}
}
}
return json(['code'=>1,'msg'=>sprintf(lang('admin/tag/generate_tag_result'), $success, $fail)]);
}
}