UserAdsController.php 9.17 KB
<?php

namespace app\ht\modules\setting\controllers;

use Yii;
use yii\web\NotFoundHttpException;
use app\ht\controllers\BaseController;
use common\helpers\ImageManager;
use common\components\adminlog\AdminLogs;
use domain\marketing\userads\UserAds;
use domain\marketing\userads\UserAdsLinkMode;
use domain\marketing\userads\UserAdsRepository;
use function date;
use function explode;
use function array_filter;
use function end;

/**
 * 客户端广告控制器
 * Class UserAdsController
 * @package app\ht\modules\setting\controllers
 */
class UserAdsController extends BaseController
{
    /**
     * 启用的广告列表
     */
    public function actionIndex()
    {
        $params = $this->dataList(1);
        /**
         * 渲染模板
         */
        return $this->render('index', $params);
    }

    /**
     * 禁用的广告列表
     */
    public function actionDisabled()
    {
        $params = $this->dataList(0);
        /**
         * 渲染模板
         */
        return $this->render('disabled', $params);
    }


    protected function dataList($enable = 1)
    {
        $request = Yii::$app->request;
        $clientId = '';
        /**
         * 组织SQL
         */
        $pageSize = $request->get("pageSize") ? (int)$request->get("pageSize") : 20;
        $result = UserAdsRepository::search(['is_enable' => $enable], ['orderBy' => ['sort_order' => SORT_ASC]], $clientId);
        $pages = $result->paginate($pageSize);
        $userAdses = $result->fetch($pages->offset, $pages->limit);

        /**
         * 数据整理
         */
        $data = [];
        foreach ($userAdses as $userAds) {
            if ($userAds['cover_img_path']) {
                $logo = ImageManager::getUrl($userAds['cover_img_path'], ImageManager::$STYLE_90);
            } else {
                $logo = Yii::$app->request->BaseUrl . '/images/default-item.jpg';
            }
            $clientLabel = UserAds::clientLabels($userAds['client']);
            $data[] = [
                'logo'              => $logo,
                'id'                => $userAds['id'],
                'client'            => $clientLabel,
                'detail'            => $userAds['detail'],
                'title'             => $userAds['title'],
                'link_mode'         => $userAds['link_mode'],
                'link_mode_label'   => $userAds['link_mode_label'],
                'url'               => $userAds['url'] ?? '无',
                'appid'             => $userAds['appid'] ?? '无',
                'path'              => $userAds['path'] ?? '无',
                'status'            => ($userAds['is_enable'] == 1) ? '已启用' : '已禁用',
                'sort_order'        => $userAds['sort_order'],
//                'created_at'        => date('Y-m-d H:i:s', $userAds['created_at']),
//                'updated_at'        => date('Y-m-d H:i:s', $userAds['updated_at']),
                'enable'            => ($userAds['is_enable'] == 1) ? '禁用' : '启用',
            ];
        }

        return [
            'userAdses' => $data,
            'pages'     => $pages
        ];
    }

    /**
     * 新增界面
     */
    public function actionCreate()
    {
        $request = Yii::$app->request;
        $selectedLinkMode= $request->get('selectedLinkMode');
        if (empty($selectedLinkMode)) {
            $selectedLinkMode = UserAdsLinkMode::LINK_MODE_NONE;
        }

        $clientLabels = UserAds::clientLabels();
        $linkModes = UserAdsLinkMode::label();
        $params = [
            'linkModes'         => $linkModes,
            'selectedLinkMode'  => $selectedLinkMode,
            'clientLabels'      => $clientLabels,
        ];

        return $this->render('create', $params);
    }

    /**
     * 新增执行动作
     */
    public function actionDoAdd()
    {
        $post = Yii::$app->request->post();
        if (empty($post)) {
            return ;
        }

        $attrs = [
            'title'             => $post['title'],
            'cover_img_path'    => $post['cover_img_path'],
            'is_enable'         => $post['is_enable'],
            'client'         	=> $post['client'],
            'sort_order'        => $post['sort_order'],
            'link_mode'         => $post['link_mode'],
            'url'               => $post['url'] ?? '',
            'appid'             => $post['appid'] ?? '',
            'path'              => $post['path'] ?? '',
        ];
        if (!UserAds::create($attrs)) {
            Yii::$app->session->setFlash('danger', '广告添加失败');
            return ;
        }

        Yii::$app->session->setFlash('success', '广告添加成功');
        return $this->redirect(['index']);
    }

    /**
     * 更新界面
     */
    public function actionUpdate($id)
    {
        $model = $this->findModel($id);

        $request = Yii::$app->request;
        $selectedLinkMode= $request->get('selectedLinkMode');
        if (empty($selectedLinkMode)) {
            $selectedLinkMode = $model->link_mode;
        }

        $clientLabels = UserAds::clientLabels();
        $selectedClient = $model->client;
        $linkModes = UserAdsLinkMode::label();
        $params = [
            'model'             => $model,
            'linkModes'         => $linkModes,
            'selectedLinkMode'  => $selectedLinkMode,
            'clientLabels'      => $clientLabels,
            'selectedClient'    => $selectedClient,
        ];

        return $this->render('update', $params);
    }

    /**
     * 更新执行动作
     */
    public function actionDoUpdate($id)
    {
        $post = Yii::$app->request->post();
        if (empty($post)) {
            return;
        }

        $attrs = [
            'title'             => $post['title'],
            'cover_img_path'    => $post['cover_img_path'],
            'is_enable'         => $post['is_enable'],
            'sort_order'        => $post['sort_order'],
            'client'         	=> $post['client'],
            'link_mode'         => $post['link_mode'],
            'url'               => $post['url'] ?? '',
            'appid'             => $post['appid'] ?? '',
            'path'              => $post['path'] ?? '',
        ];

        if (!UserAds::update($id, $attrs)) {
            Yii::$app->session->setFlash('danger', '广告更新失败');
            return ;
        }

        Yii::$app->session->setFlash('success', '广告更新成功');
        return $this->redirect(['index']);
    }

    /**
     * 删除执行动作
     */
    public function actionDelete($id)
    {
        if (!UserAds::delete($id)) {
            Yii::$app->session->setFlash('danger', '广告删除失败');
            return ;
        }

        Yii::$app->session->setFlash('success', '广告删除完成');
        return $this->redirect(['index']);
    }

    /**
     * 根据主键查找模型
     */
    protected function findModel($id)
    {
        $userAdsModel = UserAdsRepository::findOne($id);
        if ($userAdsModel) {
            return $userAdsModel;
        } else {
            throw new NotFoundHttpException('访问页面不存在');
        }
    }

    /**
     * 启用或禁用
     */
    public function actionEnable($id)
    {
        $model = $this->findModel($id);
        $model->is_enable = ($model->is_enable == 1) ? 0 : 1;
        $model->save();

        return $this->redirect(['index']);
    }

    /**
     * 批量启用
     */
    public function actionBatchEnable($ids)
    {
        $_ids = explode(',', $ids);
        $_ids = array_filter($_ids);

        foreach ($_ids as $id) {
            UserAds::enable($id);
        }

        Yii::$app->getSession()->setFlash('success', '批量启用成功');
        return $this->redirect(['index']);
    }

    /**
     * 批量禁用
     */
    public function actionBatchDisable($ids)
    {
        $_ids = explode(',', $ids);
        $_ids = array_filter($_ids);

        foreach ($_ids as $id) {
            UserAds::disable($id);
        }

        Yii::$app->getSession()->setFlash('success', '批量禁用成功');

        return $this->redirect(['disabled']);
    }

    /**
     * AJAX
     * 上传LOGO
     */
    public function actionAjaxUploadLogo()
    {
        $request = Yii::$app->request;
        $id = $request->get("id") ? $request->get("id") : null;

        $image = $_FILES['logo'];
        // 图片路径数据整理
        $tmp = explode('.', $image['name']);
        $suffix = end($tmp);
        $savePath = ImageManager::getUserAdsPath($suffix);

        if (empty($id)) {
            ImageManager::add($image["tmp_name"], $savePath);
        } else {
            // 已存在的图片进行替换,并执行一次数据save操作,否则在按提交前就会图片丢失
            $model = $this->findModel($id);
            $cover_img_path = $model->cover_img_path;
            ImageManager::replace($cover_img_path, $savePath, $image["tmp_name"]);
            UserAds::updateCoverImage($id, $savePath);
        }

        /**
         * 后台操作日志
         */
        AdminLogs::doImport('广告图片上传', 1);

        return json_encode([
            'success'            => true,
            'thumpnailImagePath' => ImageManager::getUrl($savePath),
            'imagePath'          => $savePath,
        ]);
    }
}