<?php
// +----------------------------------------------------------------------
// | Description: 任务标签及基础
// +----------------------------------------------------------------------
// | Author:  	yykun
// +----------------------------------------------------------------------

namespace app\work\controller;

use think\Request;
use think\Session;
use think\Hook;
use think\Db;
use app\admin\controller\ApiCommon;

class Tasklable extends ApiCommon
{
    /**
     * 用于判断权限
     * @permission 无限制
     * @allow 登录用户可访问
     * @other 其他根据系统设置
    **/    
    public function _initialize()
    {
        $action = [
            'permission'=>[''],
            'allow'=>['index','getwoklist','grouplist','save','update','delete','read']         
        ];
        Hook::listen('check_auth',$action);
        $request = Request::instance();
        $a = strtolower($request->action());        
        if (!in_array($a, $action['permission'])) {
            parent::_initialize();
        }
    }

    /**
     * 添加新标签
     * @author yykun
     * @return
     */
    public function save()
    {
        $param = $this->param;
        $lableModel = model('WorkLable');
        $userInfo = $this->userInfo;
		$param['create_user_id'] = $userInfo['id']; 
        $flag = $lableModel->createData($param);
        if ($flag) {
            return resultArray(['data'=>'添加成功']);
        } else {
            return resultArray(['error'=>$lableModel->getError()]);
        }
    }
	
    /**
     * 标签列表
     * @author yykun
     * @return
     */
    public function index()
    {
        $userInfo = $this->userInfo;
        $lableModel = model('WorkLable');
        $list = $lableModel->getDataList($userInfo['id']);
        return resultArray(['data'=>$list]);
    }

    /**
     * 根据标签获取项目及任务
     * @author yykun
     * @return
     */
    public function getWokList()
    {
        $param = $this->param;
        $userInfo = $this->userInfo;
        if (!$param['lable_id']) {
            return resultArray(['error'=>'参数错误']);
        }
        $taskModel = model('Task');
        $adminTypes = adminGroupTypes($userInfo['id']);
        if (!in_array(1,$adminTypes) && !in_array(7,$adminTypes)) {
            $str = ','.$userInfo['id'].',';
            $param['whereStr'] = ' ( task.create_user_id ='.$userInfo['id'].' or (  task.owner_user_id like "%'.$str.'%") or ( task.main_user_id = '.$userInfo['id'].' ) )';
        }
        # 标签列表只查询项目下的任务
        $param['work_id'] = ['neq', 0];

        $resData = $taskModel->getTaskList($param);
        $taskList = $resData['list'] ? : [];
        
        $workArr = [];
        $workGroupList = $taskList ? $this->group_same_key($taskList) : [];
        return resultArray(['data'=>$workGroupList]);
    }

    public function group_same_key($arr)
    {
        $new_arr = array();
        foreach ($arr as $k => $v) {
            $new_arr[$v['work_id']]['work_name'] = $v['work_name'] ? : '我的任务';
            $new_arr[$v['work_id']]['color'] = $v['color'] ? : '#4AB8B8';
            $new_arr[$v['work_id']]['work_id'] = $v['work_id'];
            $new_arr[$v['work_id']]['list'][] = $v;
        }
        $ListArr = $new_arr ? sort_select(array_merge($new_arr), 'work_id', 2) : [];
        return $ListArr;
    }

    /**
     * 分组列表
     * @author yykun
     * @return
     */
    public function groupList()
    {
        $lableModel = model('WorkLable');
        $workList = $this->field('name,work_id')->select();
        $temp = array();
        foreach ($workList as $key => $value) {
            $temp = array();
            $taskList = Db::name('Task')->field('task_id,lable_id')->where('work_id ='.$value['work_id'])->select();
            foreach ($taskList as $k => $v) {
                $temp_temp = $lableModel->getDataByStr($v['lable_id']);
                $temp = array_merge($temp,$temp_temp);
            }
            $temp = array_filter(array_unique($temp));
            $workList[$key]['taskList'] = $temp;
        }
        return resultArray(['data' => $workList]);
    }

    /**
     * 编辑标签
     * @author yykun
     * @return
     */
    public function update()
    {
        $param = $this->param;
        $lableModel = model('WorkLable');
        if (!$param['lable_id']) {
            return resultArray(['error'=>'参数错误']);
        }
        $userInfo = $this->userInfo;
		$param['create_user_id'] = $userInfo['id']; 
        $flag = $lableModel->updateDataById($param);
        if ($flag)  {
            return resultArray(['data'=>'编辑成功']);
        } else {
            return resultArray(['error'=>$lableModel->getError()]);
        }
    }

    /**
     * 删除标签
     * @author yykun
     * @return
     */
    public function delete()
    {
        $param = $this->param;
        $taskLableModel = model('WorkLable');
        if (!$param['lable_id']) {
            return resultArray(['error'=>'参数错误']);
        }
        $userInfo = $this->userInfo;
		$param['create_user_id'] = $userInfo['id']; 
        $flag = $taskLableModel->delDataById($param);
        if ($flag) {
            # 删除标签排序
            db('work_lable_order')->where('lable_id', $param['lable_id'])->delete();
            return resultArray(['data'=>'删除成功']);
        } else {
            return resultArray(['error'=>$taskLableModel->getError()]);
        }
    } 

    /**
     * 标签详情
     * @author Michael_xu
     * @return
     */        
    public function read()
    {
        $param = $this->param;
        if (!$param['lable_id']) return resultArray(['error'=>'参数错误']);
        $taskLableModel = model('WorkLable');
        $data = $taskLableModel->getDataById($param['lable_id']);
        return resultArray(['data'=>$data]);
    }

    /**
     * 标签排序
     *
     * @author fanqi
     * @since 2021-03-27
     * @return \think\response\Json
     */
    public function updateOrder()
    {
        $param = $this->param;
        $userInfo = $this->userInfo;
        $param['user_id'] = $userInfo['id'];

        $labelModel = model('WorkLable');
        $labelModel->updateOrder($param);

        return resultArray(['data' => '操作成功!']);
    }
}