dzadsod/admin/table_off.class.php

286 lines
8.9 KiB
PHP

<?php
defined('IN_MET') or exit ('No permission');
load::own_class('appadmin');
//表格
class table_off extends appadmin {
//获取的ID
private $allid;
//表名
private $sqlk;
// 文字提示
private $tips = '';
//跳转URL
private $returl = '';
//参数
private $para = [];
public function __construct()
{
global $_M,$_YW;
parent::__construct();
$this->tname = $_M['form']['tname'];
$this->sqlk = $_YW['k'][$this->tname];
}
public function __destruct()
{
global $_M,$_YW;
if($this->destruct){
switch ($this->tname) {
case 'para':
$this->para = [
'p_type' => $_M['form']['p_type']
];
break;
default:
break;
}
if(count($this->para)) $para = '&'.http_build_query($this->para);
turnover($this->returl?:$_M['url']['own_name'] . 'c=table_on&a=do'.$this->tname.$para, $this->tips);
}
}
//主方法
public function doindex(){
global $_M,$_YW;
$this->allid = array_filter(explode(',', $_M['form']['all_id']));
switch ($_M['form']['submit_type']) {
case 'delet':
self::delet();
break;
case 'save':
self::save();
break;
case 'enableon':
case 'enableoff':
self::enable();
break;
case 'enable_on':
case 'enable_off':
self::enable(false);
break;
case 'typeonoff':
self::typeonoff();
break;
default:
break;
}
if($_M['form']['method'] == 'ajax') {
$this->destruct = false;
echo jsoncallback(['code' => $this->tsql->error()?1:0 ]);
}
}
//保存
private function save() {
global $_M,$_YW;
foreach ($this->allid as $id) {
if($id){
$field = self::info($id);
if(is_number($id)){
$this->tsql->table($this->tname)
->field($field)
->where(" id = '{$id}' ")
->upd();
} else {
$this->tsql->table($this->tname)
->field($field)
->add();
}
}
}
}
//删除
private function delet() {
global $_M,$_YW;
foreach ($this->allid as $id) {
if($id){
//删除关联表
$ret = self::todel($id);
if($ret == false) continue;
//删除本表
$where = " id = '{$id}' ";
$this->tsql->table($this->tname)
->where($where)
->del();
}
}
}
//调整广告位状态
private function enable($type = true) {
global $_M,$_YW;
$enable = $_M['form']['submit_type'] == 'enableon' || $_M['form']['submit_type'] == 'enable_on'?1:0;
$fid = $type?'e_vid':'id';
foreach ($this->allid as $id) {
if($id){
$this->tsql->table('elevator')
->field(['e_enable' => $enable])
->where([$fid => $id])
->upd();
}
}
}
//ajax单独调整
private function typeonoff() {
global $_M,$_YW;
$field = $_M['form']['field'];
$special = "ABS({$field}-1)";
$array = [$field => $special];
$field_id = 'id';
foreach ($this->allid as $id) {
if($id){
$this->tsql->table($this->tname)
->special($special)
->field($array)
->where([$field_id => $id])
->upd();
}
}
}
//保存信息
private function info($id) {
global $_M,$_YW;
$lang = '';
switch ($this->tname) {
case 'para':
$info = [
'p_type' => $_M['form']['p_type-'.$id],
'p_order' => $_M['form']['p_order-'.$id],
'p_name' => $_M['form']['p_name-'.$id],
'p_value' => $_M['form']['p_value-'.$id],
'p_text' => $_M['form']['p_text-'.$id]
];
break;
default:
break;
}
return $info;
}
//删除其他的关联表
private function todel($id) {
global $_M,$_YW;
$ret = true;
switch ($this->tname) {
case 'contract':
//获取合同编号
$contract = $this->tsql->table('contract')
->where(['id' => $id])
->one();
//删除相关计划
$this->tsql->table('launch')
->where(['l_hnumber' => $contract['h_number'] ])
->del();
//删除相关排期
$this->tsql->table('schedule')
->where(['s_hnumber' => $contract['h_number'] ])
->del();
break;
case 'launch':
//删除相关排期
$this->tsql->table('schedule')
->where(['s_lid' => $id ])
->del();
break;
case 'para':
//删除相关的光广告位
if($_M['form']['p_num-'.$id] > 0) $ret = false;
break;
case 'village':
//查询需要删除的广告位编号
$elevator = $this->tsql->table('elevator')
->where(['e_vid' => $id])
->all();
$e_number = array_column($elevator, 'e_number');
self::del_elevator($e_number);
break;
case 'elevator':
$elevator = $this->tsql->table('elevator')
->where(['id' => $id])
->one();
//删除相关排期广告位编号
self::del_elevator($elevator['e_number']);
break;
default:
break;
}
return $ret;
}
// 删除排期广告位编号
private function del_elevator($num) {
$dellist = [];
if(!is_array($num)) $num = [$num];
$num = array_unique($num);
if(count($num) == 0) return false;
// 广告位数组
foreach ($num as $e_number){
// 删除广告位
$this->tsql->table('elevator')
->where(['e_number' => $e_number ])
->del();
//删除相关排期缓存
$this->tsql->table('schedule')
->where(['s_enumber' => $e_number ])
->del();
// 整理数据
$launch = false;
// 选择的广告位
$launch = $this->tsql->table('launch')
->where(" find_in_set( '{$e_number}', l_selectenum ) ")
->all();
// 处理的核心函数
$col = function($launch,$field) use(&$dellist,$e_number){
foreach ($launch as $val){
$dellist[$val['id']]['info'] = $val;
$dellist[$val['id']][$field][] = $e_number;
}
};
if($launch != false) $col($launch,'l_selectenum');
// 排期成功的广告位
$launch = $this->tsql->table('launch')
->where(" find_in_set( '{$e_number}', l_enumber ) ")
->all();
if($launch != false) $col($launch,'l_enumber');
}
if(count($dellist) == 0) return false;
// 对值进行统计并修改
foreach ($dellist as $id => $la){
// 处理的核心函数
$enum = function($field) use($la){
// 拿到la内需要去掉的值 数组
// 再通过对比获得差异值,并去重,再转成字符串
return is_array($la[$field])?arrayto_string(array_unique(array_diff(stringto_array($la['info'][$field],','),$la[$field])),','):$la['info'][$field];
};
//mysql
$this->tsql->table('launch')
->field(['l_selectenum' => $enum('l_selectenum'), 'l_enumber' => $enum('l_enumber')])
->where(['id' => $id])
->upd();
}
}
}
?>