SaveController.class.php 5.31 KB
<?php
/**
 * Created by PhpStorm.
 * User: liyifei2012it
 * Date: 17/9/26
 * Time: 11:21
 */
namespace Apicp\Controller\HomePage;

use Com\PackageValidate;
use Common\Common\HomePage;

class SaveController extends AbstractController
{
    /**
     * Save
     * @author liyifei
     * @desc 保存个人主页设置
     * @param Int homepage:true:1 是否开启(1=关闭;2=开启)
     * @param Array attrs 全体成员信息显示(只传展示的字段;homepage=2时必传)
     * @param Int secret 敏感成员信息是否显示(1=不显示;2=显示)
     * @param Array secret_rights 敏感成员范围(secret=2时必传)
     * @param Array secret_rights.dp_ids 部门ID
     * @param Array secret_rights.tag_ids 标签ID
     * @param Array secret_rights.uids 人员ID
     * @param Array secret_rights.job_ids 职位ID
     * @param Array secret_rights.role_ids 角色ID
     * @param Array secret_attrs 敏感成员信息显示(只传展示的字段;secret=2时必传)
     * @return array
     *          array(
     *              'setting_id' => 1 // 设置ID
     *          )
     */
    public function Index()
    {
        // 请求数据
        $postData = I('post.');

        // 验证规则
        $rules = [
            'homepage' => 'require|integer|in:1,2',
            'attrs' => 'array',
            'secret' => 'integer|in:1,2',
            'secret_rights' => 'array',
            'secret_attrs' => 'array',
        ];

        // 验证请求数据
        $validate = new PackageValidate();
        $validate->postData = $postData;
        $validate->validateParams($rules);

        // 校验及格式化请求数据
        $formatData = $this->_formatPostData($postData);

        $homepageServ = &HomePage::instance();
        $res = $homepageServ->saveSetting($formatData);
        if (!$res) {
            E('_ERR_HOMEPAGE_SAVE_SETTING');
        }
    }

    /**
     * 校验及格式化请求数据
     * @author liyifei
     * @param array $postData 请求数据
     * @return array
     */
    private function _formatPostData($postData)
    {
        // 默认返回值格式
        $formatData = [
            'homepage' => isset($postData['homepage']) ? $postData['homepage'] : HomePage::CLOSE,
            'attrs' => isset($postData['attrs']) ? $postData['attrs'] : [],
            'secret' => isset($postData['secret']) ? $postData['secret'] : HomePage::CLOSE,
            'secret_rights' => isset($postData['secret_rights']) ? $postData['secret_rights'] : [],
            'secret_attrs' => isset($postData['secret_attrs']) ? $postData['secret_attrs'] : [],
        ];

        // 可用人员字段
        $homepageServ = &HomePage::instance();
        $attrList = $homepageServ->getAttrs();
        $fieldNames = array_keys($attrList);

        // 个人主页功能开启
        if ($postData['homepage'] == HomePage::OPEN && (!isset($postData['attrs']) || empty($postData['attrs']))) {
            // 全体成员信息参数错误
            E('_ERR_HOMEPAGE_ATTRS_PARAM');
        }

        // 全体成员信息包含未启用的员工属性
        if (isset($postData['attrs']) && !empty($postData['attrs']) && array_diff($postData['attrs'], $fieldNames)) {
            E('_ERR_HOMEPAGE_ATTRS_VALUES');
        }

        // 敏感信息缺少必传参数
        if (isset($postData['secret']) && $postData['secret'] == HomePage::OPEN && !isset($postData['secret_rights'], $postData['secret_attrs'])) {
            E('_ERR_HOMEPAGE_SECRET_ATTRS_LOSE');
        }

        // 校验敏感成员权限数据格式
        if (isset($postData['secret_rights']) && !empty($postData['secret_rights'])) {
            $rightKeys = ['uids', 'dp_ids', 'tag_ids', 'job_ids', 'role_ids'];
            if (array_diff(array_keys($postData['secret_rights']), $rightKeys)) {
                E('_ERR_HOMEPAGE_SECRET_RIGHT');
            }

            // 格式化敏感成员权限数据
            $formatData['secret_rights'] = $this->formatPostData($postData['secret_rights']);
        }

        // 敏感成员信息包含未启用的员工属性
        if (isset($postData['secret_attrs']) && !empty($postData['secret_attrs']) && array_diff($postData['secret_attrs'], $fieldNames)) {
            E('_ERR_HOMEPAGE_SECRET_ATTRS_VALUES');
        }

        return $formatData;
    }

    /**
     * 格式化用户输入的权限数据
     * @author zhonglei
     * @param array $rights 权限数据
     * @return array
     */
    public function formatPostData($rights)
    {
        $data = [];

        foreach ($rights as $k => $v) {
            // 过滤空数组
            if (!is_array($v) || empty($v)) {
                continue;
            }

            // 数据分组
            switch ($k) {
                case 'dp_ids':
                    $data[HomePage::RIGHT_TYPE_DEPARTMENT] = $v;
                    break;
                case 'tag_ids':
                    $data[HomePage::RIGHT_TYPE_TAG] = $v;
                    break;
                case 'uids':
                    $data[HomePage::RIGHT_TYPE_USER] = $v;
                    break;
                case 'job_ids':
                    $data[HomePage::RIGHT_TYPE_JOB] = $v;
                    break;
                case 'role_ids':
                    $data[HomePage::RIGHT_TYPE_ROLE] = $v;
                    break;
            }
        }

        return $data;
    }
}