www.lightcourse.com/app/admin/controller/Activity.php

466 lines
20 KiB
PHP

<?php
namespace app\admin\controller;
use think\facade\View;
use think\facade\Lang;
/**
* ============================================================================
* 联课教育商城系统
* ============================================================================
* 版权所有 2022 刻羽互动科技有限公司,并保留所有权利。
* 网站地址: http://www.o1h.cn
* ----------------------------------------------------------------------------
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
* 不允许对程序代码以任何形式任何目的的再发布。
* ============================================================================
* 控制器
*/
class Activity extends AdminControl {
public function initialize() {
parent::initialize(); // TODO: Change the autogenerated stub
Lang::load(base_path() . 'admin/lang/' . config('lang.default_lang') . '/activity.lang.php');
}
/**
* 活动列表/删除活动
*/
public function index() {
$activity_model = model('activity');
//条件
$condition = array();
$condition[] = array('activity_type','=','1');//只显示商品活动
//状态
if ((input('param.searchstate'))) {
$state = intval(input('param.searchstate')) - 1;
$condition[] = array('activity_state','=',$state);
}
//标题
if ((input('param.searchtitle'))) {
$condition[] = array('activity_title','like', "%" . input('param.searchtitle') . "%");
}
//有效期范围
if ((input('param.searchstartdate')) && (input('param.searchenddate'))) {
$startdate = strtotime(input('param.searchstartdate'));
$enddate = strtotime(input('param.searchenddate'));
if ($enddate > 0) {
$enddate += 86400;
}
$condition[] = array('activity_enddate','>=', $startdate);
$condition[] = array('activity_startdate','<=', $enddate);
}
//活动列表
$activity_list = $activity_model->getActivityList($condition, 10, 'activity_sort asc');
//输出
View::assign('show_page', $activity_model->page_info->render());
View::assign('activity_list', $activity_list);
View::assign('filtered', $condition ? 1 : 0); //是否有查询条件
$this->setAdminCurItem('index');
return View::fetch();
}
/**
* 新建活动/保存新建活动
*/
public function add() {
if (request()->isPost()) {
//提交表单
$data = [
'activity_title' => input('post.activity_title'),
'activity_startdate' => strtotime(input('post.activity_startdate')),
'activity_enddate' => strtotime(input('post.activity_enddate')),
'activity_style' => input('post.activity_style'),
'activity_type' => input('post.activity_type'),
'activity_banner' => $_FILES['activity_banner']['name'],
'activity_banner_mobile' => $_FILES['activity_banner_mobile']['name'],
'activity_sort' => intval(input('post.activity_sort'))
];
$activity_validate = ds_validate('activity');
if (!$activity_validate->scene('add')->check($data)) {
$this->error($activity_validate->getError());
}
$file_name = '';
if (!empty($_FILES['activity_banner']['name'])) {
$res=ds_upload_pic(ATTACH_ACTIVITY,'activity_banner');
if($res['code']){
$file_name=$res['data']['file_name'];
}else{
$this->error($res['msg']);
}
}
$data['activity_banner'] = $file_name;
$file_name_mobile = '';
if (!empty($_FILES['activity_banner_mobile']['name'])) {
$res=ds_upload_pic(ATTACH_ACTIVITY,'activity_banner_mobile');
if($res['code']){
$file_name_mobile=$res['data']['file_name'];
}else{
$this->error($res['msg']);
}
}
//保存
$data['activity_banner_mobile'] = $file_name_mobile;
$data['activity_desc'] = trim(input('post.activity_desc'));
$data['activity_state'] = intval(input('post.activity_state'));
$activity_model = model('activity');
$result = $activity_model->addActivity($data);
if ($result) {
$this->log(lang('ds_add') . lang('activity_index') . '[' . input('post.activity_title') . ']', null);
dsLayerOpenSuccess(lang('ds_common_op_succ'));
} else {
//添加失败则删除刚刚上传的图片,节省空间资源
@unlink($upload_file . DIRECTORY_SEPARATOR . $file_name);
@unlink($upload_file . DIRECTORY_SEPARATOR . $file_name_mobile);
$this->error(lang('ds_common_op_fail'));
}
} else {
$activity = array(
'activity_type' => '1',
'activity_startdate' => TIMESTAMP,
'activity_enddate' => TIMESTAMP,
'activity_banner' => '',
'activity_style' => '',
'activity_desc' => '',
'activity_state' => '1',
);
View::assign('activity', $activity);
return View::fetch('form');
}
}
/**
* 异步修改
*/
public function ajax() {
if (in_array(input('param.branch'), array('activity_title', 'activity_sort'))) {
$activity_model = model('activity');
$update_array = array();
switch (input('param.branch')) {
/**
* 活动主题
*/
case 'activity_title':
if (trim(input('param.value')) == '')
exit;
break;
/**
* 排序
*/
case 'activity_sort':
if (preg_match('/^\d+$/', trim(input('param.value'))) <= 0 or intval(trim(input('param.value'))) < 0 or intval(trim(input('param.value'))) > 255)
exit;
break;
default:
exit;
}
$update_array[input('param.column')] = trim(input('param.value'));
if ($activity_model->editActivity($update_array, intval(input('param.id'))))
echo 'true';
}elseif (in_array(input('param.branch'), array('activitydetail_sort'))) {
$activitydetail_model = model('activitydetail');
$update_array = array();
switch (input('param.branch')) {
/**
* 排序
*/
case 'activitydetail_sort':
if (preg_match('/^\d+$/', trim(input('param.value'))) <= 0 or intval(trim(input('param.value'))) < 0 or intval(trim(input('param.value'))) > 255)
exit;
break;
default:
exit;
}
$update_array[input('param.column')] = trim(input('param.value'));
if ($activitydetail_model->editActivitydetail($update_array, array('activitydetail_id' => intval(input('param.id')))))
echo 'true';
}
}
/**
* 删除活动
*/
public function del() {
$id = intval(input('param.activity_id'));
if ($id <= 0) {
ds_json_encode(10001, lang('param_error'));
}
$activity_model = model('activity');
$activitydetail_model = model('activitydetail');
//获取可以删除的数据
$activity_info = $activity_model->getOneActivityById($id);
if (empty($activity_info) || ($activity_info['activity_state'] && $activity_info['activity_enddate']>TIMESTAMP)) {//没有符合条件的活动信息直接返回成功信息
ds_json_encode(10001, lang('activity_index_help3'));
}
$id_arr = array($activity_info['activity_id']);
//只有关闭或者过期的活动,能删除
if ($activitydetail_model->getActivitydetailList(array(array('activity_id','in', $id_arr)))) {
if (!$activitydetail_model->delActivitydetail(array(array('activity_id','in', $id_arr)))) {
ds_json_encode(10001, lang('activity_del_fail'));
}
}
try {
//删除数据先删除横幅图片,节省空间资源
foreach ($id_arr as $v) {
$this->delBanner(intval($v));
}
} catch (Exception $e) {
ds_json_encode(10001, $e->getMessage());
}
if ($activity_model->delActivity(array(array('activity_id','in', $id_arr)))) {
$this->log(lang('ds_del') . lang('activity_index') . '[ID:' . $id . ']', null);
ds_json_encode(10000, lang('ds_common_del_succ'));
}
ds_json_encode(10001, lang('activity_del_fail'));
}
/**
* 编辑活动/保存编辑活动
*/
public function edit() {
$activity_id = intval(input('param.activity_id'));
if ($activity_id <= 0) {
$this->error(lang('miss_argument'));
}
$activity_model = model('activity');
$activity = $activity_model->getOneActivityById($activity_id);
if (!request()->isPost()) {
View::assign('activity', $activity);
return View::fetch('form');
} else {
//提交表单
$data = [
'activity_title' => input('post.activity_title'),
'activity_startdate' => strtotime(input('post.activity_startdate')),
'activity_enddate' => strtotime(input('post.activity_enddate')),
'activity_style' => input('post.activity_style'),
'activity_type' => input('post.activity_type'),
'activity_sort' => intval(input('post.activity_sort'))
];
$activity_validate = ds_validate('activity');
if (!$activity_validate->scene('edit')->check($data)) {
$this->error($activity_validate->getError());
}
//构造更新内容
if ($_FILES['activity_banner']['name'] != '') {
$res=ds_upload_pic(ATTACH_ACTIVITY,'activity_banner');
if($res['code']){
$file_name=$res['data']['file_name'];
$data['activity_banner'] = $file_name;
}else{
$this->error($res['msg']);
}
}
$file_name_mobile = '';
if ($_FILES['activity_banner_mobile']['name'] != '') {
$res=ds_upload_pic(ATTACH_ACTIVITY,'activity_banner_mobile');
if($res['code']){
$file_name_mobile=$res['data']['file_name'];
$data['activity_banner_mobile'] = $file_name_mobile;
}else{
$this->error($res['msg']);
}
}
$data['activity_desc'] = trim(input('post.activity_desc'));
$data['activity_state'] = intval(input('post.activity_state'));
$activity_model = model('activity');
$result = $activity_model->editActivity($data, $activity_id);
if ($result) {
@unlink($upload_file . DIRECTORY_SEPARATOR .$activity['activity_banner']);
@unlink($upload_file . DIRECTORY_SEPARATOR .$activity['activity_banner_mobile']);
$this->log(lang('ds_edit') . lang('activity_index') . '[ID:' . $activity_id . ']', null);
dsLayerOpenSuccess(lang('ds_common_save_succ'));
} else {
if ($_FILES['activity_banner']['name'] != '') {
@unlink($upload_file . DIRECTORY_SEPARATOR . $file_name);
}
if ($_FILES['activity_banner_mobile']['name'] != '') {
@unlink($upload_file . DIRECTORY_SEPARATOR .$file_name_mobile);
}
$this->error(lang('ds_common_save_fail'));
}
}
}
/**
* 删除活动内容
*/
public function del_detail() {
$activitydetail_id = input('param.activitydetail_id');
$activitydetail_id_array = ds_delete_param($activitydetail_id);
if ($activitydetail_id_array == FALSE) {
ds_json_encode('10001', lang('param_error'));
}
$activitydetail_model = model('activitydetail');
//条件
$condition_arr = array();
$condition_arr[] = array('activitydetail_id','in', $activitydetail_id_array);
if ($activitydetail_model->delActivitydetail($condition_arr)) {
$this->log(lang('ds_del') . lang('activity_index_content') . '[ID:' . implode(',', $activitydetail_id_array) . ']', null);
ds_json_encode(10000, lang('ds_common_del_succ'));
} else {
ds_json_encode(10001, lang('ds_common_del_fail'));
}
}
/**
* 根据活动编号删除横幅图片
*
* @param int $id
*/
private function delBanner($id) {
$activity_model = model('activity');
$row = $activity_model->getOneActivityById($id);
//删除图片文件
@unlink(BASE_UPLOAD_PATH . DIRECTORY_SEPARATOR . ATTACH_ACTIVITY . DIRECTORY_SEPARATOR . $row['activity_banner']);
}
/**
* 参与活动
*/
public function activity_apply() {
if (!request()->isPost()) {
//根据活动编号查询活动信息
$activity_id = intval(input('param.activity_id'));
if ($activity_id <= 0) {
$this->error(lang('param_error'), 'Activity/index');
}
$activity_model = model('activity');
$activity_info = $activity_model->getOneActivityById($activity_id);
//活动类型必须是商品并且活动没有关闭并且活动进行中
if (empty($activity_info) || $activity_info['activity_type'] != '1' || $activity_info['activity_state'] != 1) {
$this->error(lang('activity_not_exists'), 'Activity/index');
}
if ($activity_info['activity_startdate'] > TIMESTAMP || $activity_info['activity_enddate'] < TIMESTAMP){
$this->error(lang('activity_time_end'), 'Activity/index');
}
View::assign('activity', $activity_info);
//查询品牌列表
$brand = model('brand');
$brand_list = $brand->getBrandList(array());
View::assign('brand_list', $brand_list);
//查询活动细节信息
$activitydetail_model = model('activitydetail');
$condition = array();
$condition[] = array('activitydetail.activity_id','=',$activity_id);
$activitydetail_list = $activitydetail_model->getGoodsJoinList($condition);
//构造通过与审核中商品的编号数组,以便在下方待选列表中,不显示这些内容
$item_ids = array();
if (is_array($activitydetail_list) and ! empty($activitydetail_list)) {
foreach ($activitydetail_list as $k => $v) {
$item_ids[] = $v['item_id'];
}
}
View::assign('activitydetail_list', $activitydetail_list);
//根据查询条件查询商品列表
$condition = array();
if (input('param.gc_id') != '') {
$condition[] = array('gc_id','=',intval(input('param.gc_id')));
}
if (input('param.brand_id') != '') {
$condition[] = array('brand_id','=',intval(input('param.brand_id')));
}
if (trim(input('param.name')) != '') {
$condition[] = array('goods_name','like', '%' . trim(input('param.name')) . '%');
}
if (!empty($item_ids)) {
$condition[] = array('goods_id','not in', $item_ids);
}
$goods_model = model('goods');
$goods_list = $goods_model->getGoodsOnlineList($condition, '*', 10);
View::assign('goods_list', $goods_list);
View::assign('show_page', $goods_model->page_info->render());
View::assign('search', input('param.get'));
/**
* 页面输出
*/
$this->setAdminCurItem('activity_apply');
return View::fetch('activity_apply');
} else {
//判断页面参数
$item_id_array = input('post.item_id/a');#获取POST数组
if (empty($item_id_array)) {
$this->error(lang('activity_choose_goods'), 'Activity/index');
}
$activity_id = intval(input('post.activity_id'));
if ($activity_id <= 0) {
ds_json_encode(10001,lang('param_error'));
}
//根据页面参数查询活动内容信息,如果不存在则添加,存在则根据状态进行修改
$activity_model = model('activity');
$activity = $activity_model->getOneActivityById($activity_id);
//活动类型必须是商品并且活动没有关闭并且活动进行中
if (empty($activity) || $activity['activity_type'] != '1' || $activity['activity_state'] != '1' || $activity['activity_startdate'] > TIMESTAMP || $activity['activity_enddate'] < TIMESTAMP) {
ds_json_encode(10001,lang('activity_not_exists'));
}
$activitydetail_model = model('activitydetail');
$list = $activitydetail_model->getActivitydetailList(array('activity_id' => "$activity_id"));
$ids = array(); //已经存在的活动内容编号
$ids_state2 = array(); //已经存在的被拒绝的活动编号
if (is_array($list) and ! empty($list)) {
foreach ($list as $ad) {
$ids[] = $ad['item_id'];
$ids_state2[] = $ad['item_id'];
}
}
//根据查询条件查询商品列表
foreach ($item_id_array as $item_id) {
$item_id = intval($item_id);
if (!in_array($item_id, $ids)) {
$input = array();
$input['activity_id'] = $activity_id;
$goods = model('goods');
$item = $goods->getGoodsOnlineInfoByID($item_id);
if (empty($item)) {
continue;
}
$input['item_name'] = $item['goods_name'];
$input['item_id'] = $item_id;
$activitydetail_model->addActivitydetail($input);
} elseif (in_array($item_id, $ids_state2)) {
$input = array();
$activitydetail_model->editActivitydetail($input, array('item_id' => $item_id));
}
}
ds_json_encode(10000,lang('ds_common_save_succ'));
}
}
/**
* 获取卖家栏目列表,针对控制器下的栏目
*/
protected function getAdminItemList() {
$menu_array = array(
array(
'name' => 'index', 'text' => lang('ds_manage'), 'url' => url('Activity/index')
),
array(
'name' => 'add',
'text' => lang('ds_new'),
'url' => "javascript:dsLayerOpen('" . url('Activity/add') . "','新增')"
),
);
if (request()->action() == 'activity_apply') {
$menu_array[] = array(
'name' => 'activity_apply', 'text' => lang('ds_activity_manage'), 'url' => 'javascript:void(0)'
);
}
return $menu_array;
}
}