<?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; } }