AddController.class.php 7.12 KB
<?php
/**
 * 【销售活动-手机端】发布回帖接口
 *
 * User: daijun
 * Date: 2017-11-02
 */

namespace Api\Controller\Comment;

use Common\Common\Helper;
use Common\Service\CommentService;
use Common\Service\ActivityService;
use Common\Service\RightService;

class AddController extends \Api\Controller\AbstractController
{

    public function Index_post()
    {

        if (empty($this->uid)) {
            // 判断是否外部人员
            E('_EMPTY_USER_ID');
        }

        // 获取参数
        $params = I('post.');

        // 活动id不能为空
        if (empty($params['ac_id'])) {

            E('_ERR_AC_ID_EMPTY');
        }

        // 实例化活动Service
        $activity_s = new ActivityService();
        // 获取活动详情
        $activity = $activity_s->get($params['ac_id']);

        // 活动数据不存在
        if (empty($activity) || ActivityService::DRAFT_STATUS == $activity['activity_status']
            || ActivityService::OPEN_ACTIVITY_HIDE == $activity['is_hide']) {

            E('_ERR_DATA_NOT_EXIST');
        }

        // 验证扩展字段数据
        $this->check_ext_fields($params, $activity);

        // 判断活动回帖权限
        if ($activity['is_all'] != RightService::IS_ALL) {
            // 实例化权限表
            $right_s = new RightService();
            // 如果不是全公司,查询活动的回帖权限
            $right = $right_s->list_by_conds(
                [
                    'ac_id' => $params['ac_id'],
                    'r_type' => RightService::RIGHT_TYPE_ACTIVITY
                ]
            );

            // 验证当前用户是否有权限
            if (!empty($right) && !$right_s->check_get_quit($right, $this->_login->user)) {
                // 如果无权限,抛错
                E('_ERR_COMMENT_QUIT');
            }
        }

        // 如果活动已经结束或者提前终止,则无法回帖
        if ($activity['end_time'] <= MILLI_TIME || ActivityService::STOP_ACTIVITY == $activity['activity_status']) {

            E('_ERR_ACTIVITY_HAS_END');
        }

        // 评论回复信息表Service
        $comment_s = new CommentService();
        // 发布回帖
        $id = $comment_s->publish_comment($params, $activity, $this->_login->user);

        // 发帖失败
        if (!$id) {

            E('_ERR_ADD_DATA');
        }

        $this->_result = ['comment_id' => rintval($id)];
    }

    /**
     * 验证扩展字段格式
     *
     * @param array $params 参数
     * @param array $activity 活动详情
     *
     * @return bool
     */
    protected function check_ext_fields($params = [], $activity = [])
    {

        // 扩展字段
        $ext_fields = isset($params['ext_fields']) ? $params['ext_fields'] : '';

        // 如果手机端数据和后台字段数据都是空
        if (empty($ext_fields) && empty($activity['ext_fields'])) {

            return true;
        }

        // 验证手机端参数是否合法
        if ((!empty($activity['ext_fields']) && empty($ext_fields))
            || (empty($activity['ext_fields'] && !empty($ext_fields)))) {
            // 扩展字段里面为空或者没有数据
            E('_EMPTY_EXT_FIELDS');
        }

        // 数据库中自定义字段
        $activity_ext_fields = unserialize($activity['ext_fields']);
        $activity_ext_fields = array_combine_by_key($activity_ext_fields, 'name');

        // 扩展字段验证
        foreach ($ext_fields as $value) {
            // 获取当前字段是否必填
            $is_required = intval($activity_ext_fields[$value['name']]['is_required']);
            $type = intval($activity_ext_fields[$value['name']]['type']);

            // 文本验证合法性
            if (Helper::EXT_FIELD_TEXT_TYPE == $type) {
                if (ActivityService::IS_REQUIRE_TRUE == $is_required && !isset($value['text'])) {
                    // 必填的文本类型,内容不能为空
                    E('_EMPTY_EXT_FIELDS_TEXT');
                }
                continue;
            }

            // 数字验证合法性
            if (Helper::EXT_FIELD_NUMBER_TYPE == $type) {

                if (ActivityService::IS_REQUIRE_TRUE == $is_required && !isset($value['text'])) {
                    // 必填的数字类型,数字不能为空
                    E('_EMPTY_EXT_FIELDS_NUM');
                }

                if (!is_numeric($value['text'])) {
                    // 必填的数字类型,所填必须为数字
                    E('_ERR_EXT_FIELDS_NUM_TYPE');
                }
                continue;
            }

            // 单选验证合法性
            if ((Helper::EXT_FIELD_RADIO_TYPE == $type)
                && (ActivityService::IS_REQUIRE_TRUE == $is_required)) {
                // 初始化选择的选项数量
                $count = 0;
                foreach ($value['options'] as $val) {
                    // 查看所有选项
                    if (Helper::EXT_FIELD_CHECK == $val['value']) {
                        // 看看选中的有几个
                        $count++;
                    }
                }

                if ($count != 1) {
                    // 必填的单选类型,选项数目不正确
                    E('_ERR_EXT_FIELDS_SINGLE');
                }

                continue;
            }

            // 多选验证合法性
            if ((Helper::EXT_FIELD_MULTI_SELECT_TYPE == $type)
                && (ActivityService::IS_REQUIRE_TRUE == $is_required)) {

                $count = 0;
                foreach ($value['options'] as $val) {
                    // 查看所有选项
                    if (Helper::EXT_FIELD_CHECK == $val['value']) {
                        // 看看选中的有几个
                        $count++;
                    }
                }

                if ($count < 2) {
                    // 必填的单选类型,选项数目至少为两个
                    E('_ERR_EXT_FIELDS_MULTIPLE');
                }
                continue;
            }

            // 时分验证合法性
            if (Helper::EXT_FIELD_TIME_HI_TYPE == $type) {

                if ((ActivityService::IS_REQUIRE_TRUE == $is_required)
                    &&
                    (!preg_match(Helper::HOUR_MIN_REGULAR, $value['text']))
                ) {
                    E('_ERR_EXT_FIELDS_H_I');
                }
                continue;
            }

            // 年月日验证合法性
            if (Helper::EXT_FIELD_TIME_YMD_TYPE == $type) {
                if ((ActivityService::IS_REQUIRE_TRUE == $is_required)
                    &&
                    (!preg_match(Helper::YEAR_MONTH_DAY_REGULAR, $value['text']))
                ) {
                    E('_ERR_EXT_FIELDS_Y_M_D');
                }
                continue;
            }

            // 年月日时分验证合法性
            if ((Helper::EXT_FIELD_TIME_YMD_HI_TYPE == $type)
                && (ActivityService::IS_REQUIRE_TRUE == $is_required)
                && (!preg_match(Helper::YEAR_MONTH_DAY_HOUR_MIN_REGULAR, $value['text']))) {
                E('_ERR_EXT_FIELDS_Y_M_D_H_I');
            }
        }

        return true;
    }
}