Example #1
0
 /**
  * 添加管理员操作日志
  *          
  * @param   string $action     操作类型
  * @param   string $content    操作对象
  * @param   string $log_info   操作信息
  */
 public static function add($action, $content, $log_info = '')
 {
     $CI =& get_instance();
     $CI->lang->load('admin/admin_log');
     $action = $action ? $CI->lang->line('log_' . $action) : '';
     $content = $content ? $CI->lang->line('log_' . $content) : '';
     $op = $action . $content;
     if ($op) {
         $log_info = $log_info ? $op . "({$log_info})" : $op;
     }
     $log = array('admin_id' => Fn::sess()->userdata('admin_id'), 'log_info' => $log_info, 'ip_address' => $CI->input->ip_address(), 'log_time' => time());
     Fn::db()->insert('rd_admin_log', $log);
 }
Example #2
0
 /**
  * 设置考试试题对应关系
  * 若$param为array,则为map<string, variant>,参数如下:
  *          int     erq_examid   测评考试id
  *          int     erq_paperid   测评考试试卷id
  *          int     er_zmoss_examid 阅卷考试id
  *          string  erq_relate_data 试题对应关系
  * @return  bool    true|false
  */
 public static function setExamRelateQuestion($param)
 {
     $param = Func::param_copy($param, 'erq_examid', 'erq_paperid', 'erq_zmoss_examid', 'erq_relate_data');
     if (!Validate::isInt($param['erq_examid']) || $param['erq_examid'] <= 0 || !Validate::isInt($param['erq_zmoss_examid']) || $param['erq_zmoss_examid'] <= 0) {
         message('请确认考试学科对应关系!');
     }
     if (!Validate::isInt($param['erq_paperid']) || $param['erq_paperid'] <= 0) {
         throw new Exception('测评考试学科试卷不可为空!');
     }
     if (!Validate::isNotEmpty($param['erq_relate_data'])) {
         throw new Exception('试题对应关系不可为空!');
     }
     $param['erq_adminid'] = Fn::sess()->userdata('admin_id');
     $param['erq_addtime'] = time();
     return Fn::db()->replace('t_exam_relate_question', $param);
 }
Example #3
0
 public static function is_action_type_self($segment, $item, $subject_id = 0)
 {
     //return $this->get_action_type_segment($segment, $item) == '1';
     $action = Fn::sess()->userdata('action');
     $is_action_type_self = false;
     foreach ($action as $power) {
         $action_type = @unserialize($power['action_type']);
         if ($subject_id > 0) {
             if ($power['subject_id'] == -1 || in_array($subject_id, explode(',', $power['subject_id']))) {
                 if (!empty($action_type[$segment][$item]) && $action_type[$segment][$item] == 1) {
                     $is_action_type_self = true;
                     break;
                 }
             }
         } else {
             if (!empty($action_type[$segment][$item]) && $action_type[$segment][$item] == 1) {
                 $is_action_type_self = true;
                 break;
             }
         }
     }
     return $is_action_type_self;
 }
    /**
     * 导入机构和校区记录(从excel文件中),
     * 注意: 目前$ti_id参数未启用
     *
     * @param   int     $ti_id = NULL   默认将校区全导入到该机构ID下
     */
    public function import_titc_excel($ti_id = NULL)
    {
        if ($_GET['dl'] == '1') {
            Func::dumpFile('application/vnd.ms-excel', 'file/import_training_campus_template.xls', '培训机构及校区导入模板.xls');
            exit;
        }
        $data = array();
        while (isset($_FILES['file'])) {
            $param = $_POST;
            $err_map = array(UPLOAD_ERR_OK => '没有错误发生,文件上传成功', UPLOAD_ERR_INI_SIZE => '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值', UPLOAD_ERR_FORM_SIZE => '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值', UPLOAD_ERR_PARTIAL => '文件只有部分被上传', UPLOAD_ERR_NO_FILE => '没有文件被上传', UPLOAD_ERR_NO_TMP_DIR => '找不到临时文件夹', UPLOAD_ERR_CANT_WRITE => '文件写入失败');
            if ($_FILES['file']['error'] !== 0) {
                $data['error'] = $err_map[$_FILES['file']['error']];
                break;
            }
            if (strpos($_FILES['file']['type'], 'excel') === false) {
                $mime = mime_content_type($_FILES['file']['tmp_name']);
                if (!in_array($mime, array('application/vnd.ms-excel', 'application/vnd.ms-office', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'))) {
                    $data['error'] = "您上传的不是Excel文件({$mime})";
                    break;
                }
            }
            // 开始处理excel
            $excel = PHPExcel_IOFactory::load($_FILES['file']['tmp_name']);
            $sheet = $excel->getSheet(0);
            $row_num = $sheet->getHighestRow();
            $col_num = $sheet->getHighestColumn();
            $title = array('机构名称', '机构类型', '机构省份', '机构城市', '机构区县', '机构地址', '优先级', '学员人数/年', '机构网址', '校区名称', '校区省份', '校区城市', '校区区县', '校区地址', '联系人', '联系电话');
            $col_num = base_convert($col_num, 36, 10);
            if ($col_num < count($title)) {
                $data['error'] = 'Excel列数验证未通过';
                break;
            }
            $col_num = count($title);
            $col_char = array();
            for ($j = 0; $j < $col_num; $j++) {
                $col_char[$j] = strtoupper(base_convert(10 + $j, 10, 36));
                if ($title[$j] !== trim($sheet->getCell($col_char[$j] . '1')->getValue())) {
                    $data['error'] = $col_char[$j] . '列标题不符';
                    break;
                }
            }
            if (isset($data['error'])) {
                break;
            }
            $rows = array();
            for ($i = 2; $i <= $row_num; $i++) {
                $rows[$i - 2] = array();
                for ($j = 0; $j < $col_num; $j++) {
                    $rows[$i - 2][$j] = trim($sheet->getCell($col_char[$j] . $i)->getValue());
                }
                if ($rows[$i - 2][0] == '') {
                    unset($rows[$i - 2]);
                    break;
                }
            }
            unset($sheet);
            unset($excel);
            if (empty($rows)) {
                $data['error'] = 'Excel文件工作表中没有任何要导入的记录';
                break;
            }
            $tit_map = array_flip(array_map("trim", TrainingInstitutionModel::trainingInstitutionTypePairs()));
            $tipt_map = array_flip(array_map("trim", TrainingInstitutionModel::trainingInstitutionPriTypePairs()));
            $sql = <<<EOT
SELECT * FROM rd_region WHERE region_id > 1 ORDER BY region_type
EOT;
            $region_list = Fn::db()->fetchAll($sql);
            // 以region_id为键以行记录为值,同时加个children,以保存直接子项
            $region_map = array();
            // 以名字加'_'连接起来为键,以region_id为值
            $regionname_map = array();
            foreach ($region_list as $v) {
                $region_map[$v['region_id']] = $v;
                $region_map[$v['region_id']]['children'] = array();
                if ($v['region_type'] == 1) {
                    $regionname_map[trim($v['region_name'])] = $v['region_id'];
                } else {
                    if ($v['region_type'] == 2) {
                        $region_map[$v['parent_id']]['children'][] = $v['region_id'];
                        $regionname_map[trim($region_map[$v['parent_id']]['region_name']) . '_' . trim($v['region_name'])] = $v['region_id'];
                    } else {
                        if ($v['region_type'] == 3) {
                            $region_map[$v['parent_id']]['children'][] = $v['region_id'];
                            $regionname_map[trim($region_map[$region_map[$v['parent_id']]['parent_id']]['region_name']) . '_' . trim($region_map[$v['parent_id']]['region_name']) . '_' . trim($v['region_name'])] = $v['region_id'];
                        }
                    }
                }
            }
            unset($region_list);
            $row_num = count($rows);
            $ti_arr = array();
            //ti_arr[ti_name] => ti_list[i]
            $tc_arr = array();
            //tc_arr[ti_name][tc_name] => tc_list[i]
            $ti_list = array();
            $tc_list = array();
            foreach ($rows as $k => $row) {
                // 机构名称
                if (mb_strlen($row[0], 'UTF-8') > 60) {
                    $data['error'] = $col_char[0] . ($k + 2) . ' - "机构名称"内容太长了,不可超过60个字符';
                    break;
                }
                $row['ti_name'] = $row[0];
                // 机构类型
                if ($row[1] == '') {
                    $data['error'] = $col_char[1] . ($k + 2) . ' - "机构类型"内容不可为空';
                    break;
                }
                // 机构类型
                if (!isset($tit_map[$row[1]])) {
                    $data['error'] = $col_char[1] . ($k + 2) . ' - "机构类型"不正确';
                    break;
                }
                $row['ti_typeid'] = $tit_map[$row[1]];
                if ($row[2] == '') {
                    if ($param['ti_provid_required']) {
                        $data['error'] = $col_char[2] . ($k + 2) . ' - "机构省份"不可为空';
                        break;
                    } else {
                        $row['ti_provid'] = 0;
                    }
                } else {
                    if (!isset($regionname_map[$row[2]])) {
                        $data['error'] = $col_char[2] . ($k + 2) . ' - "机构省份"不存在';
                        break;
                    }
                    $row['ti_provid'] = $regionname_map[$row[2]];
                }
                $row['ti_cityid'] = 0;
                $row['ti_areaid'] = 0;
                if (!empty($region_map[$regionname_map[$row[2]]]['children'])) {
                    // 验证市
                    if ($row[3] == '') {
                        if ($param['ti_cityid_required']) {
                            $data['error'] = $col_char[3] . ($k + 2) . ' - "机构城市"不可为空';
                            break;
                        } else {
                            $row['ti_cityid'] = 0;
                        }
                    } else {
                        if (!isset($regionname_map[$row[2] . '_' . $row[3]])) {
                            $data['error'] = $col_char[3] . ($k + 2) . ' - "机构城市"不存在';
                            break;
                        }
                        $row['ti_cityid'] = $regionname_map[$row[2] . '_' . $row[3]];
                    }
                    // 验证区县
                    if ($row[4] == '') {
                        if ($param['ti_areaid_required']) {
                            $data['error'] = $col_char[4] . ($k + 2) . ' - "机构区县"不可为空';
                            break;
                        } else {
                            $row['ti_areaid'] = 0;
                        }
                    } else {
                        if (!isset($regionname_map[$row[2] . '_' . $row[3] . '_' . $row[4]])) {
                            $data['error'] = $col_char[4] . ($k + 2) . ' - "机构区县"不存在';
                            break;
                        }
                        $row['ti_areaid'] = $regionname_map[$row[2] . '_' . $row[3] . '_' . $row[4]];
                    }
                }
                // 机构地址
                if ($row[5] == '') {
                    if ($param['ti_addr_required']) {
                        $data['error'] = $col_char[5] . ($k + 2) . ' - "机构地址"不可为空';
                        break;
                    }
                }
                if (mb_strlen($row[5], 'UTF-8') > 255) {
                    $data['error'] = $col_char[5] . ($k + 2) . ' - "机构地址"内容太长了';
                    break;
                }
                $row['ti_addr'] = $row[5];
                // 优先级
                if ($row[6] == '') {
                    if ($param['ti_priid_required']) {
                        $data['error'] = $col_char[6] . ($k + 2) . ' - "优先级"不能为空';
                        break;
                    } else {
                        $row[6] = '一般';
                    }
                }
                if (!isset($tipt_map[$row[6]])) {
                    $data['error'] = $col_char[6] . ($k + 2) . ' - "优先级"不正确';
                    break;
                }
                $row['ti_priid'] = $tipt_map[$row[6]];
                if ($row[7] == '') {
                    if ($param['ti_stumax_required']) {
                        $data['error'] = $col_char[6] . ($k + 2) . ' - "学员人数/年"不能为空';
                        break;
                    } else {
                        $row[7] = '0';
                    }
                }
                // 学员人数/年
                if (!Validate::isInt($row[7]) || $row[7] < 0) {
                    $data['error'] = $col_char[7] . ($k + 2) . ' - "学员人数/年"必须为正整数';
                    break;
                }
                $row['ti_stumax'] = $row[7];
                // 机构网址
                if (mb_strlen($row[8], 'UTF-8') > 512) {
                    $data['error'] = $col_char[8] . ($k + 2) . ' - "机构网址"内容太长了';
                    break;
                }
                $row['ti_url'] = $row[8];
                // 校区名称
                if ($row[9] == '') {
                    $data['error'] = $col_char[9] . ($k + 2) . ' - "校区名称"不可为空';
                    break;
                }
                if (mb_strlen($row[9], 'UTF-8') > 60) {
                    $data['error'] = $col_char[9] . ($k + 2) . ' - "校区名称"太长了';
                    break;
                }
                $row['tc_name'] = $row[9];
                if ($row[10] == '') {
                    if ($param['tc_provid_required']) {
                        $data['error'] = $col_char[10] . ($k + 2) . ' - "校区省份"不可为空';
                        break;
                    } else {
                        $row['tc_provid'] = 0;
                    }
                } else {
                    if (!isset($regionname_map[$row[10]])) {
                        $data['error'] = $col_char[10] . ($k + 2) . ' - "校区省份"不存在';
                        break;
                    }
                    $row['tc_provid'] = $regionname_map[$row[10]];
                }
                $row['tc_cityid'] = 0;
                $row['tc_areaid'] = 0;
                if (!empty($region_map[$regionname_map[$row[10]]]['children'])) {
                    // 验证市
                    if ($row[11] == '') {
                        if ($param['tc_cityid_required']) {
                            $data['error'] = $col_char[11] . ($k + 2) . ' - "校区城市"不可为空';
                            break;
                        } else {
                            $row['tc_cityid'] = 0;
                        }
                    } else {
                        if (!isset($regionname_map[$row[10] . '_' . $row[11]])) {
                            $data['error'] = $col_char[11] . ($k + 2) . ' - "校区城市"不存在';
                            break;
                        }
                        $row['tc_cityid'] = $regionname_map[$row[10] . '_' . $row[11]];
                    }
                    // 验证区县
                    if ($row[12] == '') {
                        if ($param['tc_areaid_required']) {
                            $data['error'] = $col_char[12] . ($k + 2) . ' - "校区区县"不可为空';
                            break;
                        } else {
                            $row[12] = 0;
                        }
                    } else {
                        if (!isset($regionname_map[$row[10] . '_' . $row[11] . '_' . $row[12]])) {
                            $data['error'] = $col_char[12] . ($k + 2) . ' - "校区区县"不存在';
                            break;
                        }
                        $row['tc_areaid'] = $regionname_map[$row[10] . '_' . $row[11] . '_' . $row[12]];
                    }
                }
                // 校区地址
                if ($row[13] == '') {
                    if ($param['tc_ctcaddr_required']) {
                        $data['error'] = $col_char[13] . ($k + 2) . ' - "校区地址"不可为空';
                        break;
                    }
                }
                if (mb_strlen($row[13], 'UTF-8') > 255) {
                    $data['error'] = $col_char[13] . ($k + 2) . ' - "校区地址"太长了';
                    break;
                }
                $row['tc_ctcaddr'] = $row[13];
                // 联系人
                if (mb_strlen($row[14], 'UTF-8') > 60) {
                    $data['error'] = $col_char[14] . ($k + 2) . ' - "联系人"太长了';
                    break;
                }
                $row['tc_ctcperson'] = $row[14];
                // 联系电话
                if ($row['15'] == '') {
                    if ($param['tc_ctcphone_required']) {
                        $data['error'] = $col_char[15] . ($k + 2) . ' - "联系电话"不能为空';
                        break;
                    }
                }
                if (mb_strlen($row[15], 'UTF-8') > 120) {
                    $data['error'] = $col_char[15] . ($k + 2) . ' - "联系电话"太长了';
                    break;
                }
                $row['tc_ctcphone'] = $row[15];
                if (!isset($ti_arr[$row[0]])) {
                    $ti_arr[$row[0]] = count($ti_list);
                    $ti_list[] = array('index' => $k + 2, 'ti_id' => 0, 'ti_name' => $row[0], 'ti_typeid' => $row['ti_typeid'], 'ti_provid' => $row['ti_provid'], 'ti_cityid' => $row['ti_cityid'], 'ti_areaid' => $row['ti_areaid'], 'ti_addr' => $row[5], 'ti_priid' => $row['ti_priid'], 'ti_stumax' => $row[7], 'ti_url' => $row[8]);
                }
                if (!isset($tc_arr[$row[0]])) {
                    $tc_arr[$row[0]] = array();
                }
                if (isset($tc_arr[$row[0]][$row[9]])) {
                    $data['error'] = $col_char[9] . ($k + 2) . ' - "校区名称"同一机构内有重复';
                    break;
                }
                $tc_arr[$row[0]][$row[9]] = count($tc_list);
                $tc_list[] = array('index' => $k + 2, 'ti_name' => $row[0], 'tc_name' => $row[9], 'tc_provid' => $row['tc_provid'], 'tc_cityid' => $row['tc_cityid'], 'tc_areaid' => $row['tc_areaid'], 'tc_ctcaddr' => $row[13], 'tc_ctcperson' => $row[14], 'tc_ctcphone' => $row[15]);
            }
            if (isset($data['error'])) {
                break;
            }
            unset($region_map);
            unset($regionname_map);
            unset($tit_map);
            unset($tipt_map);
            unset($rows);
            // 这里开始导入
            try {
                $db = Fn::db();
                if (!$db->beginTransaction()) {
                    throw new Exception('开始导入事务处理失败');
                }
                $time = time();
                $adduid = Fn::sess()->userdata('admin_id');
                // 导入机构
                $sql1 = <<<EOT
SELECT ti_id FROM t_training_institution WHERE ti_name = ?
EOT;
                $sql2 = <<<EOT
SELECT tc_id FROM t_training_campus WHERE tc_tiid = ? AND tc_name = ?
EOT;
                $sql3 = <<<EOT
UPDATE t_training_institution SET ti_campusnum = ti_campusnum + 1 
WHERE ti_id = 
EOT;
                $tc_update = 0;
                $tc_insert = 0;
                $ti_update = 0;
                $ti_insert = 0;
                foreach ($ti_list as $k => $row) {
                    $ti_id = $db->fetchOne($sql1, array($row['ti_name']));
                    if ($ti_id) {
                        $ti_list[$k]['ti_id'] = $ti_id;
                        // update
                        $row2 = array();
                        if ($param['same_tiname_update_ti_typeid']) {
                            $row2['ti_typeid'] = $row['ti_typeid'];
                        }
                        if ($param['same_tiname_update_ti_region'] && intval($row['ti_provid']) != 0) {
                            $row2['ti_provid'] = $row['ti_provid'];
                            $row2['ti_cityid'] = $row['ti_provid'];
                            $row2['ti_areaid'] = $row['ti_areaid'];
                        }
                        if ($param['same_tiname_update_ti_addr'] && $row['ti_addr'] != '') {
                            $row2['ti_addr'] = $row['ti_addr'];
                        }
                        if ($param['same_tiname_update_ti_priid']) {
                            $row2['ti_priid'] = $row['ti_priid'];
                        }
                        if ($param['same_tiname_update_ti_stumax'] && intval($row['ti_stumax']) != '0') {
                            $row2['ti_stumax'] = $row['ti_stumax'];
                        }
                        if ($param['same_tiname_update_ti_url'] && $row['ti_url'] != '') {
                            $row2['ti_url'] = $row['ti_url'];
                        }
                        if ($row2) {
                            $db->update('t_training_institution', $row2, 'ti_id = ' . $ti_id);
                            $ti_update++;
                        }
                    } else {
                        // insert
                        unset($row['index']);
                        unset($row['ti_id']);
                        $row['ti_flag'] = $time;
                        if ($row['ti_addr'] == '') {
                            $row['ti_addr'] = NULL;
                        }
                        if ($row['ti_url'] == '') {
                            $row['ti_url'] = NULL;
                        }
                        $row['ti_addtime'] = date('Y-m-d H:i:s', $time);
                        $row['ti_adduid'] = $adduid;
                        $db->insert('t_training_institution', $row);
                        $ti_list[$k]['ti_id'] = $db->lastInsertId('t_training_institution', 'ti_id');
                        $ti_insert++;
                    }
                }
                // 导入校区
                foreach ($tc_list as $k => $row) {
                    $ti_id = $ti_list[$ti_arr[$row['ti_name']]]['ti_id'];
                    $tc_list[$k]['ti_id'] = $ti_id;
                    $tc_id = $db->fetchOne($sql2, array($ti_id, $row['tc_name']));
                    if ($tc_id) {
                        // update
                        $tc_list[$k]['tc_id'] = $tc_id;
                        $row2 = array();
                        if ($param['same_tcname_update_tc_region'] && intval($row['tc_provid']) != 0) {
                            $row2['tc_provid'] = $row['tc_provid'];
                            $row2['tc_cityid'] = $row['tc_provid'];
                            $row2['tc_areaid'] = $row['tc_areaid'];
                        }
                        if ($param['same_tcname_update_tc_ctcaddr'] && $row['tc_ctcaddr'] != '') {
                            $row2['tc_ctcaddr'] = $row['tc_ctcaddr'];
                        }
                        if ($param['same_tcname_update_tc_ctcperson'] && $row['tc_ctcperson'] != '') {
                            $row2['tc_ctcperson'] = $row['tc_ctcperson'];
                        }
                        if ($param['same_tcname_update_tc_ctcphone'] && $row['tc_ctcphone'] != '') {
                            $row2['tc_ctcphone'] = $row['tc_ctcphone'];
                        }
                        if ($row2) {
                            $db->update('t_training_campus', $row2, 'tc_id = ' . $tc_id);
                            $tc_update++;
                        }
                    } else {
                        // insert
                        unset($row['index']);
                        unset($row['ti_name']);
                        $row['tc_tiid'] = $ti_id;
                        $row['tc_flag'] = $time;
                        $row['tc_environ'] = 3;
                        $row['tc_addtime'] = date('Y-m-d H:i:s', $time);
                        $row['tc_adduid'] = $adduid;
                        if ($row['tc_ctcperson'] == '') {
                            $row['tc_ctcperson'] = NULL;
                        }
                        $db->insert('t_training_campus', $row);
                        $tc_list[$k]['tc_id'] = $db->lastInsertId('t_training_campus', 'tc_id');
                        $db->exec($sql3 . $ti_id);
                        $tc_insert++;
                    }
                }
                if ($db->commit()) {
                    $data['success'] = <<<EOT
导入Excel文件({$_FILES['file']['name']})成功,共更新{$ti_update}条机构记录, 插入{$ti_insert}条机构记录, 更新{$tc_update}条校区记录, 插入{$tc_insert}条校区记录
EOT;
                    admin_log('import', '', "培训机构和校区 " . $data['success']);
                } else {
                    $err = $db->errorInfo()[2];
                    $db->rollBack();
                    throw new Exception($err);
                }
            } catch (Exception $e) {
                $data['error'] = $e->getMessage();
            }
            break;
        }
        if (!isset($_FILES['file'])) {
            $param = array('ti_provid_required' => 1, 'ti_cityid_required' => 2, 'ti_areaid_required' => 3, 'ti_addr_required' => 1, 'ti_priid_required' => 1, 'ti_stumax_required' => 1, 'tc_provid_required' => 1, 'tc_cityid_required' => 2, 'tc_areaid_required' => 3, 'tc_ctcaddr_required' => 1, 'tc_ctcphone_required' => 1, 'same_tiname_update_ti_typeid' => 1, 'same_tiname_update_ti_region' => 1, 'same_tiname_update_ti_addr' => 1, 'same_tiname_update_ti_priid' => 1, 'same_tiname_update_ti_stumax' => 1, 'same_tiname_update_ti_url' => 1, 'same_tcname_update_tc_region' => 1, 'same_tcname_update_tc_ctcaddr' => 1, 'same_tcname_update_tc_ctcperson' => 1, 'same_tcname_update_tc_ctcphone' => 1);
            // 同名校区更新联系电话
        }
        $data['param'] = $param;
        $this->load->view('traininginstitution/import_titc_excel', $data);
    }
    /**
     * 新增培训校区
     * @param   array   map<string, variant>类型的参数
     *                  string      tc_name
     *                  int         tc_tiid
     *                  int         tc_flag
     *                  int         tc_provid
     *                  int         tc_cityid
     *                  int         tc_areaid
     *                  string      tc_ctcaddr
     *                  string      tc_ctcphone
     *                  string      tc_ctcperson
     *                  int         tc_environ
     * @return  int     返回新增的培训校区ID,否则返回0 
     */
    public static function addTrainingCampus(array $param)
    {
        $param = Func::param_copy($param, 'tc_name', 'tc_tiid', 'tc_flag', 'tc_provid', 'tc_cityid', 'tc_areaid', 'tc_ctcaddr', 'tc_ctcphone', 'tc_ctcperson', 'tc_environ');
        if (!Validate::isStringLength($param['tc_name'], 1, 60)) {
            throw new Exception('培训校区名称不能为空且长度最多60个字符');
        }
        if (!Validate::isInt($param['tc_tiid'])) {
            throw new Exception('培训校区所属机构ID必须为整数');
        }
        if (!Validate::isInt($param['tc_flag'])) {
            throw new Exception('培训校区状态标志必须为整数');
        }
        if (!Validate::isInt($param['tc_provid']) || !Validate::isInt($param['tc_cityid']) || !Validate::isInt($param['tc_areaid'])) {
            throw new Exception('培训校区所在地区ID必须为整数');
        }
        if (!Validate::isStringLength($param['tc_ctcaddr'], 1, 255)) {
            throw new Exception('培训校区联系地址长度最多为255个字符');
        }
        if (isset($param['tc_ctcperson'])) {
            if ($param['tc_ctcperson'] == '') {
                $param['tc_ctcperson'] = NULL;
            } else {
                if (!Validate::isStringLength($param['tc_ctcperson'], 1, 60)) {
                    throw new Exception('培训校区联系人姓名最多60个字符');
                }
            }
        }
        if (!Validate::isStringLength($param['tc_ctcphone'], 1, 120)) {
            throw new Exception('培训校区联系电话长度最多为255个字符');
        }
        if (isset($param['tc_environ']) && !Validate::isInt($param['tc_environ'])) {
            throw new Exception('培训校区环境指数必须为整数');
        }
        $db = Fn::db();
        $param['tc_addtime'] = date('Y-m-d H:i:s');
        $param['tc_adduid'] = Fn::sess()->userdata('admin_id');
        $tc_id = 0;
        if ($db->beginTransaction()) {
            if ($db->insert('t_training_campus', $param)) {
                $tc_id = $db->lastInsertId('t_training_campus', 'tc_id');
                $ti_id = $param['tc_tiid'];
                $sql = <<<EOT
UPDATE t_training_institution SET ti_campusnum = ti_campusnum + 1 
WHERE ti_id = {$ti_id}
EOT;
                $db->exec($sql);
                if (!$db->commit()) {
                    $tc_id = 0;
                    $db->rollBack();
                }
            } else {
                $db->rollBack();
            }
        }
        return $tc_id;
    }
Example #6
0
    /**
     * 导入教师记录(从excel文件中),
     */
    public function importteacher($sch_id = 0)
    {
        if ($_GET['dl'] == '1') {
            Func::dumpFile('application/vnd.ms-excel', 'file/import_school_teacher_template.xlsx', '教师导入模板.xlsx');
            exit;
        }
        if (!$sch_id || !SchoolModel::schoolInfo($sch_id)) {
            message('学校不存在,无法导入教师!');
        }
        $data = array();
        $data['sch_id'] = $sch_id;
        while (isset($_FILES['file'])) {
            $param = $_POST;
            $title = array('姓名', '年级', '学科', '简介');
            $col_char = array();
            $rows = Excel::readSimpleUploadFile($_FILES['file'], $title, $col_char);
            if (!is_array($rows)) {
                $data['error'] = $rows;
                break;
            }
            $grade_map = array_flip(C('grades'));
            $subject_map = array_flip(C('subject'));
            $ct_list = array();
            foreach ($rows as $k => $row) {
                //////////////////////////////
                //   姓名0 年级1 学科2  简介3
                //////////////////////////////
                // 姓名
                if ($row[0] == '') {
                    $data['error'] == $col_char[0] . ($k + 2) . ' - "姓名"不可为空';
                    break;
                }
                if (mb_strlen($row[0], 'UTF-8') > 30) {
                    $data['error'] = $col_char[0] . ($k + 2) . ' - "姓名"内容太长了,不可超过30个字符';
                    break;
                }
                // 年级
                if ($row[1] == '') {
                    $data['error'] = $col_char[1] . ($k + 2) . ' - "年级"不能为空';
                    break;
                }
                $row[1] = str_replace(array(',', ' ', ' ', '、', "\r\n", "\r", "\n"), ',', $row[1]);
                $row['ctg_gradeid'] = array();
                $arr = explode(',', $row[1]);
                foreach ($arr as $v) {
                    $v = trim($v);
                    if ($v == '') {
                        continue;
                    }
                    if (isset($grade_map[$v])) {
                        $row['ctg_gradeid'][] = $grade_map[$v];
                    } else {
                        $data['error'] = $col_char[1] . ($k + 2) . ' - "年级"里有不正确的选项';
                        break;
                    }
                }
                if (isset($data['error'])) {
                    break;
                }
                if (empty($row['ctg_gradeid'])) {
                    $data['error'] = $col_char[1] . ($k + 2) . ' - "年级"不能为空';
                    break;
                }
                $row['ctg_gradeid'] = array_unique($row['ctg_gradeid']);
                // 学科
                if ($row[2] == '') {
                    $data['error'] = $col_char[2] . ($k + 2) . ' - "学科"不能为空';
                    break;
                }
                $row[2] = str_replace(array(',', ' ', ' ', '、', "\r\n", "\r", "\n"), ',', $row[2]);
                $row['cts_subjectid'] = array();
                $arr = explode(',', $row[2]);
                foreach ($arr as $v) {
                    $v = trim($v);
                    if ($v == '') {
                        continue;
                    }
                    if (isset($subject_map[$v])) {
                        $row['cts_subjectid'][] = $subject_map[$v];
                    } else {
                        $data['error'] = $col_char[2] . ($k + 2) . ' - "学科"里有不正确的选项空';
                        break;
                    }
                }
                if (isset($data['error'])) {
                    break;
                }
                if (empty($row['cts_subjectid'])) {
                    $data['error'] = $col_char[2] . ($k + 2) . ' - "学科"不能为空';
                    break;
                }
                $row['cts_subjectid'] = array_unique($row['cts_subjectid']);
                // 简介
                if ($row[3] == '') {
                    $row[3] = NULL;
                }
                $ct_list[] = array('index' => $k + 2, 'ct_name' => $row[0], 'ct_memo' => $row[3], 'ctg_gradeid' => $row['ctg_gradeid'], 'cts_subjectid' => $row['cts_subjectid']);
            }
            if (isset($data['error'])) {
                break;
            }
            unset($grade_map);
            unset($subject_map);
            unset($rows);
            // 这里开始导入
            $db = Fn::db();
            try {
                $time = time();
                $adduid = Fn::sess()->userdata('admin_id');
                if (!$db->beginTransaction()) {
                    throw new Exception('开始导入事务处理失败');
                }
                $ct_insert = 0;
                // 导入教师
                foreach ($ct_list as $k => $row) {
                    // insert
                    $db->insert('t_cteacher', array('ct_name' => $row['ct_name'], 'ct_memo' => $row['ct_memo'], 'ct_flag' => $param['ct_flag']));
                    $ct_id = $db->lastInsertId('t_cteacher', 'ct_id');
                    $bind = array('scht_schid' => $sch_id, 'scht_ctid' => $ct_id);
                    $db->insert('t_cteacher_school', $bind);
                    foreach ($row['ctg_gradeid'] as $v) {
                        $db->insert('t_cteacher_gradeid', array('ctg_ctid' => $ct_id, 'ctg_gradeid' => $v));
                    }
                    foreach ($row['cts_subjectid'] as $v) {
                        $db->insert('t_cteacher_subjectid', array('cts_ctid' => $ct_id, 'cts_subjectid' => $v));
                    }
                    $ct_insert++;
                }
                if ($db->commit()) {
                    $data['success'] = <<<EOT
导入Excel文件({$_FILES['file']['name']})成功,共插入{$ct_insert}条教师记录
EOT;
                    admin_log('add', 'cteacher', $data['success']);
                } else {
                    $err = $db->errorInfo()[2];
                    $db->rollBack();
                    throw new Exception($err);
                }
            } catch (Exception $e) {
                $data['error'] = $e->getMessage();
            }
            break;
        }
        if (!isset($_FILES['file'])) {
            $param = array('ct_flag' => time());
        }
        $data['param'] = $param;
        $this->load->view('school/importteacher', $data);
    }
Example #7
0
    /**
     * 导入课程记录(从excel文件中),
     * 注意: 目前$cors_id参数未启用
     *
     * @param   int     $cors_id = NULL   默认将课程全导入到该课程ID下
     */
    public function import_cors_excel($cors_id = NULL)
    {
        if ($_GET['dl'] == '1') {
            Func::dumpFile('application/vnd.ms-excel', 'file/import_course_template.xls', '培训课程导入模板.xls');
            exit;
        }
        $data = array();
        while (isset($_FILES['file'])) {
            $param = $_POST;
            $err_map = array(UPLOAD_ERR_OK => '没有错误发生,文件上传成功', UPLOAD_ERR_INI_SIZE => '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值', UPLOAD_ERR_FORM_SIZE => '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值', UPLOAD_ERR_PARTIAL => '文件只有部分被上传', UPLOAD_ERR_NO_FILE => '没有文件被上传', UPLOAD_ERR_NO_TMP_DIR => '找不到临时文件夹', UPLOAD_ERR_CANT_WRITE => '文件写入失败');
            if ($_FILES['file']['error'] !== 0) {
                $data['error'] = $err_map[$_FILES['file']['error']];
                break;
            }
            if (strpos($_FILES['file']['type'], 'excel') === false) {
                $mime = mime_content_type($_FILES['file']['tmp_name']);
                if (!in_array($mime, array('application/vnd.ms-excel', 'application/vnd.ms-office', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'))) {
                    $data['error'] = "您上传的不是Excel文件({$mime})";
                    break;
                }
            }
            // 开始处理excel
            $excel = PHPExcel_IOFactory::load($_FILES['file']['tmp_name']);
            $sheet = $excel->getSheet(0);
            $row_num = $sheet->getHighestRow();
            $col_num = $sheet->getHighestColumn();
            $title = array('课程名称', '来源机构', '授课模式', '年级', '学科', '类型', '授课教师', '教师来源', '课程时间', '课程周期', '上课校区', '上课省份', '上课城市', '上课区县', '上课地址', '收费', '上课课时', '联系人', '联系电话', '课程简介', '网址');
            $col_num = base_convert($col_num, 36, 10);
            if ($col_num < count($title)) {
                $data['error'] = 'Excel列数验证未通过';
                break;
            }
            $col_num = count($title);
            $col_char = array();
            for ($j = 0; $j < $col_num; $j++) {
                $col_char[$j] = strtoupper(base_convert(10 + $j, 10, 36));
                if ($title[$j] !== trim($sheet->getCell($col_char[$j] . '1')->getValue())) {
                    $data['error'] = $col_char[$j] . '列标题不符';
                    break;
                }
            }
            if (isset($data['error'])) {
                break;
            }
            $rows = array();
            for ($i = 2; $i <= $row_num; $i++) {
                $rows[$i - 2] = array();
                for ($j = 0; $j < $col_num; $j++) {
                    $rows[$i - 2][$j] = trim($sheet->getCell($col_char[$j] . $i)->getValue());
                }
                if ($rows[$i - 2][0] == '') {
                    unset($rows[$i - 2]);
                    break;
                }
            }
            unset($sheet);
            unset($excel);
            if (empty($rows)) {
                $data['error'] = 'Excel文件工作表中没有任何要导入的记录';
                break;
            }
            $cm_map = array_flip(array_map("trim", CourseModel::courseModePairs()));
            $grade_map = array_flip(C('grades'));
            $subject_map = array_flip(C('subject'));
            $ctf_map = array_flip(array_map("trim", CourseModel::courseTeachfromPairs()));
            $sql = <<<EOT
SELECT class_id, class_name FROM rd_question_class
EOT;
            $class_map = Fn::db()->fetchPairs($sql);
            if (!is_array($class_map)) {
                $class_map = array();
            } else {
                $class_map = array_flip(array_map("trim", $class_map));
            }
            $sql = <<<EOT
SELECT * FROM rd_region WHERE region_id > 1 ORDER BY region_type
EOT;
            $region_list = Fn::db()->fetchAll($sql);
            // 以region_id为键以行记录为值,同时加个children,以保存直接子项
            $region_map = array();
            // 以名字加'_'连接起来为键,以region_id为值
            $regionname_map = array();
            foreach ($region_list as $v) {
                $region_map[$v['region_id']] = $v;
                $region_map[$v['region_id']]['children'] = array();
                if ($v['region_type'] == 1) {
                    $regionname_map[trim($v['region_name'])] = $v['region_id'];
                } else {
                    if ($v['region_type'] == 2) {
                        $region_map[$v['parent_id']]['children'][] = $v['region_id'];
                        $regionname_map[trim($region_map[$v['parent_id']]['region_name']) . '_' . trim($v['region_name'])] = $v['region_id'];
                    } else {
                        if ($v['region_type'] == 3) {
                            $region_map[$v['parent_id']]['children'][] = $v['region_id'];
                            $regionname_map[trim($region_map[$region_map[$v['parent_id']]['parent_id']]['region_name']) . '_' . trim($region_map[$v['parent_id']]['region_name']) . '_' . trim($v['region_name'])] = $v['region_id'];
                        }
                    }
                }
            }
            unset($region_list);
            $row_num = count($rows);
            $cors_arr = array();
            //cors_arr[cors_name] => cors_list[i]
            $cc_arr = array();
            //cc_arr[ti_name][tc_name] => cc_list[i]
            $cors_list = array();
            $cc_list = array();
            foreach ($rows as $k => $row) {
                // 课程名称
                if ($row[0] == '') {
                    $data['error'] == $col_char[0] . ($k + 2) . ' - "课程名称"不可为空';
                    break;
                }
                if (mb_strlen($row[0], 'UTF-8') > 100) {
                    $data['error'] = $col_char[0] . ($k + 2) . ' - "课程名称"内容太长了,不可超过100个字符';
                    break;
                }
                // 来源机构
                if ($row[1] == '') {
                    $data['error'] = $col_char[1] . ($k + 2) . ' - "来源机构"不可为空';
                    break;
                }
                if (mb_strlen($row[1], 'UTF-8') > 60) {
                    $data['error'] = $col_char[1] . ($k + 2) . ' - "来源机构"内容太长了,不可超过60个字符';
                    break;
                }
                // 授课模式
                if ($row[2] == '') {
                    $data['error'] = $col_char[2] . ($k + 2) . ' - "授课模式"不能为空';
                    break;
                }
                if (!isset($cm_map[$row[2]])) {
                    $data['error'] = $col_char[2] . ($k + 2) . ' - "授课模式"不正确';
                    break;
                }
                $row['cors_cmid'] = $cm_map[$row[2]];
                ////////////
                //   年级3 学科4 类型5 授课教师6 教师来源7 课程时间8
                //   课程周期9 上课校区10
                //////////////////
                // 年级
                if ($row[3] == '') {
                    $data['error'] = $col_char[3] . ($k + 2) . ' - "年级"不能为空';
                    break;
                }
                $row['cors_gradeid'] = array();
                $arr = explode(',', $row[3]);
                foreach ($arr as $v) {
                    $v = trim($v);
                    if (isset($grade_map[$v])) {
                        $row['cors_gradeid'][] = $grade_map[$v];
                    }
                }
                if (count($arr) != count($row['cors_gradeid'])) {
                    $data['error'] = $col_char[3] . ($k + 2) . ' - "年级"里有不正确的选项';
                    break;
                }
                if (empty($row['cors_gradeid'])) {
                    $data['error'] = $col_char[3] . ($k + 2) . ' - "年级"不能为空';
                    break;
                }
                $row['cors_gradeid'] = array_unique($row['cors_gradeid']);
                if ($row['cors_cmid'] != 1 && count($row['cors_gradeid']) > 1) {
                    $data['error'] = $col_char[3] . ($k + 2) . ' - 一对一课程"年级"只能有一个';
                    break;
                }
                // 学科
                if ($row[4] == '') {
                    $data['error'] = $col_char[4] . ($k + 2) . ' - "学科"不能为空';
                    break;
                }
                $row['cors_subjectid'] = array();
                $arr = explode(',', $row[4]);
                foreach ($arr as $v) {
                    $v = trim($v);
                    if (isset($subject_map[$v])) {
                        $row['cors_subjectid'][] = $subject_map[$v];
                    }
                }
                if (count($arr) != count($row['cors_subjectid'])) {
                    $data['error'] = $col_char[4] . ($k + 2) . ' - "学科"里有不正确的选项空';
                    break;
                }
                if (empty($row['cors_subjectid'])) {
                    $data['error'] = $col_char[4] . ($k + 2) . ' - "学科"不能为空';
                    break;
                }
                $row['cors_subjectid'] = array_unique($row['cors_subjectid']);
                if ($row['cors_cmid'] != 1 && count($row['cors_subjectid']) > 1) {
                    $data['error'] = $col_char[3] . ($k + 2) . ' - 一对一课程"学科"只能有一个';
                    break;
                }
                // 类型
                if ($row[5] == '') {
                    if ($param['cors_classid_required']) {
                        $data['error'] = $col_char[5] . ($k + 2) . ' - "类型"不能为空';
                        break;
                    }
                    $row['cors_classid'] = array();
                } else {
                    $row['cors_classid'] = array();
                    $arr = explode(',', $row[5]);
                    foreach ($arr as $v) {
                        $v = trim($v);
                        if (isset($class_map[$v])) {
                            $row['cors_classid'][] = $class_map[$v];
                        }
                    }
                    if (count($arr) != count($row['cors_classid'])) {
                        $data['error'] = $col_char[5] . ($k + 2) . ' - "类型"里有不正确的选项空';
                        break;
                    }
                    if (empty($row['cors_classid'])) {
                        if ($param['cors_classid_required']) {
                            $data['error'] = $col_char[5] . ($k + 2) . ' - "类型"不能为空';
                            break;
                        }
                    }
                    $row['cors_classid'] = array_unique($row['cors_classid']);
                }
                // TODO 需要验证
                $row['cc_teachers'] = $row[6];
                // 教师来源
                if ($row[7] == '') {
                    $data['error'] = $col_char[7] . ($k + 2) . ' - "教师来源"不能为空';
                    break;
                }
                if (!isset($ctf_map[$row[7]])) {
                    $data['error'] = $col_char[7] . ($k + 2) . ' - "教师来源"不正确';
                    break;
                }
                $row['cc_ctfid'] = $ctf_map[$row[7]];
                // 课程时间
                if ($row[8] == '') {
                    if ($param['cc_classtime_required']) {
                        $data['error'] = $col_char[8] . ($k + 2) . ' - "课程时间"不能为空';
                        break;
                    }
                }
                if (mb_strlen($row[8], 'UTF-8') > 255) {
                    $data['error'] = $col_char[8] . ($k + 2) . ' - "课程时间"内容太长了,不可超过255个字符';
                    break;
                }
                // 课程周期
                if ($row[9] == '') {
                    // 任意时间开课
                    $row['cc_startanytime'] = 1;
                    $row['cc_begindate'] = NULL;
                    $row['cc_enddate'] = NULL;
                } else {
                    $row['cc_startanytime'] = 0;
                    if (strlen($row[9]) < 21) {
                        $data['error'] = $col_char[9] . ($k + 2) . ' - "课程周期"格式不正确,应为"2015-02-04x2015-08-01",其中x可为一个或多个字符串';
                        break;
                    }
                    $d1 = substr($row[9], 0, 10);
                    $d2 = substr($row[9], -10, 10);
                    if (!Validate::isDate($d1) || !Validate::isDate($d2)) {
                        $data['error'] = $col_char[9] . ($k + 2) . ' - "课程周期"格式不正确,应为"2015-02-04x2015-08-01",其中x可为一个或多个字符串';
                        break;
                    }
                    if ($d1 > $d2) {
                        $data['error'] = $col_char[9] . ($k + 2) . ' - "课程周期"开始日期不能大于结束日期';
                        break;
                    }
                    $row['cc_begindate'] = $d1;
                    $row['cc_enddate'] = $d2;
                }
                // 上课校区
                if ($row['cors_cmid'] == 1) {
                    // 一对一
                    // 上课校区
                    if ($row[10] == '') {
                        $row['tc_name'] = NULL;
                    } else {
                        if (mb_strlen($row[10], 'UTF-8') > 60) {
                            $data['error'] = $col_char[10] . ($k + 2) . ' - "上课校区"太长了';
                            break;
                        }
                        $row['tc_name'] = $row[10];
                    }
                } else {
                    // 上课校区
                    if ($row[10] == '') {
                        $data['error'] = $col_char[10] . ($k + 2) . ' - "上课校区"不可为空';
                        break;
                    }
                    if (mb_strlen($row[10], 'UTF-8') > 60) {
                        $data['error'] = $col_char[10] . ($k + 2) . ' - "上课校区"太长了';
                        break;
                    }
                    $row['tc_name'] = $row[10];
                }
                // 上课省份
                if ($row[11] == '') {
                    if ($param['cc_provid_required']) {
                        $data['error'] = $col_char[11] . ($k + 2) . ' - "上课省份"不可为空';
                        break;
                    } else {
                        $row['cc_provid'] = 0;
                    }
                } else {
                    if (!isset($regionname_map[$row[11]])) {
                        $data['error'] = $col_char[11] . ($k + 2) . ' - "上课省份"不存在';
                        break;
                    }
                    $row['cc_provid'] = $regionname_map[$row[11]];
                }
                $row['cc_cityid'] = 0;
                $row['cc_areaid'] = 0;
                if (!empty($region_map[$regionname_map[$row[11]]]['children'])) {
                    // 验证市
                    if ($row[12] == '') {
                        if ($param['cc_cityid_required']) {
                            $data['error'] = $col_char[12] . ($k + 2) . ' - "上课城市"不可为空';
                            break;
                        } else {
                            $row['cc_cityid'] = 0;
                        }
                    } else {
                        if (!isset($regionname_map[$row[11] . '_' . $row[12]])) {
                            $data['error'] = $col_char[12] . ($k + 2) . ' - "上课城市"不存在';
                            break;
                        }
                        $row['cc_cityid'] = $regionname_map[$row[11] . '_' . $row[12]];
                    }
                    // 验证区县
                    if ($row[13] == '') {
                        if ($param['cc_areaid_required']) {
                            $data['error'] = $col_char[13] . ($k + 2) . ' - "上课区县"不可为空';
                            break;
                        } else {
                            $row['cc_areaid'] = 0;
                        }
                    } else {
                        if (!isset($regionname_map[$row[11] . '_' . $row[12] . '_' . $row[13]])) {
                            $data['error'] = $col_char[13] . ($k + 2) . ' - "上课区县"不存在';
                            break;
                        }
                        $row['cc_areaid'] = $regionname_map[$row[11] . '_' . $row[12] . '_' . $row[13]];
                    }
                }
                // 上课地址
                if ($row[14] == '') {
                    if ($param['cc_addr_required']) {
                        $data['error'] = $col_char[14] . ($k + 2) . ' - "上课地址"不可为空';
                        break;
                    }
                }
                if (mb_strlen($row[14], 'UTF-8') > 255) {
                    $data['error'] = $col_char[14] . ($k + 2) . ' - "上课地址"内容太长了';
                    break;
                }
                // 收费
                if ($row[15] == '') {
                    if ($param['cc_price_required']) {
                        $data['error'] = $col_char[15] . ($k + 2) . ' - "收费"不能为空';
                        break;
                    } else {
                        $row[15] = '0.00';
                    }
                }
                if (!is_numeric($row[15]) || $row[15] < 0) {
                    $data['error'] = $col_char[15] . ($k + 2) . ' - "收费"必须为非负数';
                    break;
                }
                $row[15] = bcadd($row[15], '0.00', 2);
                // 上课课时
                if ($row[16] == '') {
                    if ($param['cc_hours_required']) {
                        $data['error'] = $col_char[16] . ($k + 2) . ' - "上课课时"不能为空';
                        break;
                    } else {
                        $row[16] = '0';
                    }
                }
                if (!Validate::isInt($row[16]) || $row[16] < 0) {
                    $data['error'] = $col_char[16] . ($k + 2) . ' - "上课课时"必须为非负整数';
                    break;
                }
                // 联系人
                if ($row[17] == '') {
                    if ($param['cc_ctcperson_required']) {
                        $data['error'] = $col_char[17] . ($k + 2) . ' - "联系人"不可为空';
                        break;
                    }
                }
                if (mb_strlen($row[17], 'UTF-8') > 60) {
                    $data['error'] = $col_char[17] . ($k + 2) . ' - "联系人"太长了';
                    break;
                }
                // 联系电话
                if ($row['18'] == '') {
                    if ($param['cc_ctcphone_required']) {
                        $data['error'] = $col_char[18] . ($k + 2) . ' - "联系电话"不能为空';
                        break;
                    }
                }
                if (mb_strlen($row[18], 'UTF-8') > 120) {
                    $data['error'] = $col_char[18] . ($k + 2) . ' - "联系电话"太长了';
                    break;
                }
                // 课程简介
                if ($row[19] == '') {
                    if ($param['cors_memo_required']) {
                        $data['error'] = $col_char[19] . ($k + 2) . ' - "课程简介"不能为空';
                        break;
                    }
                }
                if (mb_strlen($row[19], 'UTF-8') > 65535) {
                    $data['error'] = $col_char[19] . ($k + 2) . ' - "课程简介"太长了';
                    break;
                }
                // 网址
                if ($row[20] == '') {
                    if ($param['cors_url_required']) {
                        $data['error'] = $col_char[20] . ($k + 2) . ' - "网址"不能为空';
                        break;
                    }
                }
                if (mb_strlen($row[20], 'UTF-8') > 512) {
                    $data['error'] = $col_char[20] . ($k + 2) . ' - "网址"内容太长了';
                    break;
                }
                $key = <<<EOT
{$row[0]}/{$row[1]}/{$row[2]}/{$row[3]}/{$row[4]}
EOT;
                if (!isset($cors_arr[$key])) {
                    $cors_arr[$key] = count($cors_list);
                    $cors_list[] = array('key' => $key, 'index' => $k + 2, 'cors_id' => 0, 'cors_name' => $row[0], 'ti_name' => $row[1], 'cors_cmid' => $row['cors_cmid'], 'cors_gradeid' => $row['cors_gradeid'], 'cors_subjectid' => $row['cors_subjectid'], 'cors_classid' => $row['cors_classid'], 'cors_memo' => $row[19], 'cors_url' => $row[20]);
                }
                if (!isset($cc_arr[$key])) {
                    $cc_arr[$key] = array();
                }
                $cc_arr[$key][] = count($cc_list);
                $cc_list[] = array('key' => $key, 'index' => $k + 2, 'tc_name' => $row['tc_name'], 'cc_teachers' => $row['cc_teachers'], 'cc_ctfid' => $row['cc_ctfid'], 'cc_classtime' => $row[8], 'cc_startanytime' => $row['cc_startanytime'], 'cc_begindate' => $row['cc_begindate'], 'cc_enddate' => $row['cc_enddate'], 'cc_provid' => $row['cc_provid'], 'cc_cityid' => $row['cc_cityid'], 'cc_areaid' => $row['cc_areaid'], 'cc_price' => $row[15], 'cc_hours' => $row[16], 'cc_addr' => $row[14], 'cc_ctcperson' => $row[17], 'cc_ctcphone' => $row[18]);
            }
            if (isset($data['error'])) {
                break;
            }
            unset($region_map);
            unset($regionname_map);
            unset($cm_map);
            unset($grade_map);
            unset($subject_map);
            unset($ctf_map);
            unset($class_map);
            unset($rows);
            // 这里开始导入
            $db = Fn::db();
            // 所属机构
            $sql1 = <<<EOT
SELECT ti_id FROM t_training_institution WHERE ti_name = ?
EOT;
            $sql2 = <<<EOT
SELECT tc_tiid, tc_id, tc_name FROM t_training_campus WHERE tc_tiid IN 
EOT;
            $sql3 = <<<EOT
UPDATE t_training_institution SET ti_campusnum = ti_campusnum + 1 
WHERE ti_id = 
EOT;
            $sql4 = <<<EOT
SELECT ct_id FROM t_cteacher WHERE ct_name = ? AND ct_contact IS NULL
EOT;
            $ti_id_arr = array();
            foreach ($cors_list as $k => $row) {
                $ti_id = $db->fetchOne($sql1, array($row['ti_name']));
                if ($ti_id) {
                    $ti_id_arr[] = $ti_id;
                    $cors_list[$k]['cors_tiid'] = $ti_id;
                } else {
                    $data['error'] = $col_char[1] . $row['index'] . ' - "来源机构"不存在';
                    break;
                }
            }
            if (isset($data['error'])) {
                break;
            }
            $ti_id_arr = array_unique($ti_id_arr);
            $tclist = $db->fetchAll($sql2 . '(' . implode(',', $ti_id_arr) . ')');
            $ti_tc_map = array();
            foreach ($tclist as $v) {
                if (!isset($ti_tc_map[$v['tc_tiid']])) {
                    $ti_tc_map[$v['tc_tiid']] = array();
                }
                $ti_tc_map[$v['tc_tiid']][trim($v['tc_name'])] = $v['tc_id'];
            }
            unset($tclist);
            foreach ($cc_list as $k => $row) {
                $ti_id = $cors_list[$cors_arr[$row['key']]]['cors_tiid'];
                $cc_list[$k]['ti_id'] = $ti_id;
                if (is_null($row['tc_name'])) {
                    $cc_list[$k]['cc_tcid'] = NULL;
                } else {
                    if (isset($ti_tc_map[$ti_id])) {
                        if (isset($ti_tc_map[$ti_id][$row['tc_name']])) {
                            $cc_list[$k]['cc_tcid'] = $ti_tc_map[$ti_id][$row['tc_name']];
                        } else {
                            // 不存在
                            if ($param['non_exist_tcname_action'] == '0') {
                                $data['error'] = $col_char[10] . $row['index'] . ' - "上课校区"不存在';
                                break;
                            }
                            $cc_list[$k]['cc_tcid'] = 0;
                        }
                    } else {
                        //  不存在
                        if ($param['non_exist_tcname_action'] == '0') {
                            $data['error'] = $col_char[10] . $row['index'] . ' - "上课校区"不存在';
                            break;
                        }
                        $cc_list[$k]['cc_tcid'] = 0;
                    }
                }
            }
            if (isset($data['error'])) {
                break;
            }
            /* 不需要验证一对一课程是否只能有一个校区了
               foreach ($cors_arr as $key => $index)
               {
                   if ($cors_list[$index]['cors_cmid'] == 1)
                   {
                       if (count($cc_arr[$key]) > 1)
                       {
                           $data['error'] = $col_char[10] 
                               . $cc_list[$cc_arr[$key][1]]['index']
                               . ' - 该行为一对一课程,只能有一条课程校区';
                           break;
                       }
                   }
               }
               if (isset($data['error']))
               {
                   break;
               }
                */
            try {
                $time = time();
                $adduid = Fn::sess()->userdata('admin_id');
                if (!$db->beginTransaction()) {
                    throw new Exception('开始导入事务处理失败');
                }
                $cors_insert = 0;
                $tc_insert = 0;
                $cc_insert = 0;
                $ct_insert = 0;
                // 导入课程
                foreach ($cors_list as $k => $row) {
                    // insert
                    $row2 = array();
                    $row2['cors_cmid'] = $row['cors_cmid'];
                    $row2['cors_name'] = $row['cors_name'];
                    $row2['cors_flag'] = $time;
                    $row2['cors_tiid'] = $row['cors_tiid'];
                    if ($row['cors_cmid'] == 1) {
                        $row2['cors_stunumtype'] = 1;
                    } else {
                        $row2['cors_stunumtype'] = 2;
                    }
                    $row2['cors_url'] = $row['cors_url'];
                    $row2['cors_memo'] = $row['cors_memo'];
                    $row2['cors_addtime'] = date('Y-m-d H:i:s', $time);
                    $row2['cors_adduid'] = $adduid;
                    $row2['cors_lastmodify'] = date('Y-m-d H:i:s', $time);
                    $db->insert('t_course', $row2);
                    $cors_list[$k]['cors_id'] = $cors_id = $db->lastInsertId('t_course', 'cors_id');
                    if (empty($row['cors_gradeid'])) {
                        $db->insert('t_course_gradeid', array('cg_corsid' => $cors_id, 'cg_gradeid' => 0));
                    } else {
                        foreach ($row['cors_gradeid'] as $v) {
                            $db->insert('t_course_gradeid', array('cg_corsid' => $cors_id, 'cg_gradeid' => $v));
                        }
                    }
                    if (empty($row['cors_subjectid'])) {
                        $db->insert('t_course_subjectid', array('cs_corsid' => $cors_id, 'cs_subjectid' => 0));
                    } else {
                        foreach ($row['cors_subjectid'] as $v) {
                            $db->insert('t_course_subjectid', array('cs_corsid' => $cors_id, 'cs_subjectid' => $v));
                        }
                    }
                    if (!empty($row['cors_classid'])) {
                        foreach ($row['cors_classid'] as $v) {
                            $db->insert('t_course_classid', array('cci_corsid' => $cors_id, 'cci_classid' => $v));
                        }
                    }
                    if ($row['cors_cmid'] != 1) {
                        $db->insert('t_course_knowledge', array('ck_corsid' => $cors_id, 'ck_kid' => 0, 'ck_knprocid' => 0));
                    }
                    $cors_insert++;
                }
                // 导入校区
                foreach ($cc_list as $k => $row) {
                    $key = $row['key'];
                    $row['cc_corsid'] = $cors_id = $cors_list[$cors_arr[$key]]['cors_id'];
                    $ti_id = $row['ti_id'];
                    if (is_null($row['cc_tcid'])) {
                        // 不要加
                    } else {
                        if ($row['cc_tcid'] == 0) {
                            if (isset($ti_tc_map[$ti_id][$row['tc_name']])) {
                                $row['cc_tcid'] = $ti_tc_map[$ti_id][$row['tc_name']];
                            }
                        }
                        if ($row['cc_tcid'] == 0) {
                            // 自动增加
                            $row2 = array();
                            $row2['tc_name'] = $row['tc_name'];
                            $row2['tc_tiid'] = $ti_id;
                            $row2['tc_provid'] = $row['cc_provid'];
                            $row2['tc_cityid'] = $row['cc_cityid'];
                            $row2['tc_areaid'] = $row['cc_areaid'];
                            $row2['tc_flag'] = $time;
                            $row2['tc_ctcaddr'] = $row['cc_addr'];
                            $row2['tc_ctcperson'] = $row['cc_ctcperson'];
                            $row2['tc_ctcphone'] = $row['cc_ctcphone'];
                            $row2['tc_environ'] = 3;
                            $row2['tc_addtime'] = date('Y-m-d H:i:s', $time);
                            $row2['tc_adduid'] = $adduid;
                            $db->insert('t_training_campus', $row2);
                            $ti_tc_map[$ti_id][$row['tc_name']] = $row['cc_tcid'] = $db->lastInsertId('t_training_campus', 'tc_id');
                            $tc_insert++;
                            $db->exec($sql3 . $ti_id);
                        }
                    }
                    $cc_teachers = $row['cc_teachers'];
                    unset($row['cc_teachers']);
                    unset($row['key']);
                    unset($row['index']);
                    unset($row['tc_name']);
                    unset($row['ti_id']);
                    $db->insert('t_course_campus', $row);
                    $cc_id = $db->lastInsertId('t_course_campus', 'cc_id');
                    $cc_insert++;
                    if ($cc_teachers == '') {
                        continue;
                    }
                    $cc_teachers_arr = explode(',', $cc_teachers);
                    $cc_teachers_arr = array_unique($cc_teachers_arr);
                    foreach ($cc_teachers_arr as $ctname) {
                        if ($ctname == '') {
                            continue;
                        }
                        $ct_id = $db->fetchOne($sql4, array($ctname));
                        if (!$ct_id) {
                            $db->insert('t_cteacher', array('ct_name' => $ctname, 'ct_flag' => $time));
                            $ct_id = $db->lastInsertId('t_cteacher', 'ct_id');
                            $ct_insert++;
                            $row3 = $cors_list[$cors_arr[$key]];
                            if (empty($row3['cors_gradeid'])) {
                                $db->insert('t_cteacher_gradeid', array('ctg_ctid' => $ct_id, 'ctg_gradeid' => 0));
                            } else {
                                foreach ($row3['cors_gradeid'] as $v) {
                                    $db->insert('t_cteacher_gradeid', array('ctg_ctid' => $ct_id, 'ctg_gradeid' => $v));
                                }
                            }
                            if (empty($row3['cors_subjectid'])) {
                                $db->insert('t_cteacher_subjectid', array('cts_ctid' => $ct_id, 'cts_subjectid' => 0));
                            } else {
                                foreach ($row3['cors_subjectid'] as $v) {
                                    $db->insert('t_cteacher_subjectid', array('cts_ctid' => $ct_id, 'cts_subjectid' => $v));
                                }
                            }
                        }
                        $db->insert('t_course_campus_teacher', array('cct_ccid' => $cc_id, 'cct_ctid' => $ct_id));
                    }
                }
                if ($db->commit()) {
                    $data['success'] = <<<EOT
导入Excel文件({$_FILES['file']['name']})成功,共插入{$cors_insert}条课程记录, 插入{$tc_insert}条机构校区记录, 插入{$cc_insert}条课程校区记录, 插入{$ct_insert}条教师记录
EOT;
                    admin_log('add', 'course', $data['success']);
                } else {
                    $err = $db->errorInfo()[2];
                    $db->rollBack();
                    throw new Exception($err);
                }
            } catch (Exception $e) {
                $data['error'] = $e->getMessage();
            }
            break;
        }
        if (!isset($_FILES['file'])) {
            $param = array('cors_classid_required' => 1, 'cc_classtime_required' => 1, 'cc_provid_required' => 1, 'cc_cityid_required' => 2, 'cc_areaid_required' => 3, 'cc_addr_required' => 1, 'cc_price_required' => 1, 'cc_hours_required' => 1, 'cc_ctcperson_required' => 1, 'cc_ctcphone_required' => 1, 'cors_memo_required' => 1, 'cors_url_required' => 1, 'non_exist_tcname_action' => 0);
        }
        $data['param'] = $param;
        $this->load->view('course/import_cors_excel', $data);
    }
Example #8
0
 /**
  * 检查当前用户是否有 查看/编辑某个学科的权限
  */
 public static function check_subject_power($subject_id = 0, $power_type = 'w', $output = true)
 {
     $subject_id = intval($subject_id);
     if (!$subject_id) {
         return true;
     }
     //管理员 或者 有查看所有权限
     $is_super_user = Fn::sess()->userdata('is_super');
     if ($is_super_user || CpUserModel::is_action_type_all('question', $power_type)) {
         return true;
     }
     //当前学科
     $is_action = CpUserModel::is_action_type_subject('question', $power_type, $subject_id);
     if ($output && !$is_action) {
         message('您没权限!');
     } else {
         return $is_action;
     }
 }
Example #9
0
 /**
  * 插入信息
  * @param array $rule_data
  * @param array $knowledge_data
  * @param array $method_tactic_data
  * @param array $group_type_data
  * @return boolean
  */
 public static function insert($rule_data, $knowledge_data, $method_tactic_data = array(), $group_type_data = array())
 {
     $bOk = false;
     $db = Fn::db();
     if (!$db->beginTransaction()) {
         return $bOk;
     }
     try {
         $rule_data['admin_id'] = Fn::sess()->userdata('admin_id');
         if ($db->insert('rd_evaluate_rule', $rule_data)) {
             $inserted_id = $db->lastInsertId('rd_evaluate_rule', 'id');
             //知识点
             foreach ($knowledge_data as &$item) {
                 $item['er_id'] = $inserted_id;
                 $db->insert('rd_evaluate_knowledge', $item);
             }
             //方法策略
             if (is_array($method_tactic_data) && count($method_tactic_data)) {
                 foreach ($method_tactic_data as &$item) {
                     $item['er_id'] = $inserted_id;
                     $db->insert('rd_evaluate_method_tactic', $item);
                 }
             }
             //信息提取方式
             if (is_array($group_type_data) && count($group_type_data)) {
                 foreach ($group_type_data as &$item) {
                     $item['er_id'] = $inserted_id;
                     $db->insert('rd_evaluate_group_type', $item);
                 }
             }
         }
         $bOk = $db->commit();
         if (!$bOk) {
             $db->rollBack();
         }
     } catch (Exception $e) {
     }
     return $bOk;
 }
Example #10
0
    public static function get_admins($act)
    {
        $admin_id = Fn::sess()->userdata('admin_id');
        if ($act == 'add') {
            $sql = <<<EOT
SELECT admin_id,admin_user FROM rd_admin
WHERE admin_id <> {$admin_id} AND is_delete = 0
EOT;
        } else {
            $sql = <<<EOT
SELECT admin_id, admin_user FROM rd_admin WHERE is_delete = 0
EOT;
        }
        $res = Fn::db()->fetchPairs($sql);
        return $res;
    }
Example #11
0
 public static function studentLoginUInfo()
 {
     $uinfo = Fn::sess()->userdata('uinfo');
     if (empty($uinfo)) {
         $uinfo = array('fullname' => '[游客]', 'uid' => '', 'avatar_url' => __IMG_ROOT_URL__ . 'zeming/exam/head.gif');
         Fn::sess()->set_userdata(array('uid' => '', 'uinfo' => $uinfo));
     }
     return $uinfo;
 }
Example #12
0
 /**
  * 新增培训课程
  * @param   array   $param  map<string, variant>类型的参数,
  *                          string      cors_name
  *                          int         cors_cmid
  *                          int         cors_flag
  *                          int         cors_tiid
  *                          string      cors_url
  *                          string      cors_memo
  *                          int         cors_stunumtype
  *                          list<int>   classid_list
  *                          map<int,int> kid_knprocid_pairs
  *                                      知识点->认知过程
  *                          list<int>   gradeid_list
  *                          list<int>   subjectid_list
  * @return  int     返回新增的课程ID,否则返回0 
  */
 public static function addCourse(array $param)
 {
     $param = Func::param_copy($param, 'cors_name', 'cors_cmid', 'cors_flag', 'cors_tiid', 'cors_url', 'cors_memo', 'cors_stunumtype', 'classid_list', 'kid_knprocid_pairs', 'gradeid_list', 'subjectid_list');
     if (!Validate::isStringLength($param['cors_name'], 1, 100)) {
         throw new Exception('课程名称不能为空且长度最多100个字符');
     }
     if (!Validate::isInt($param['cors_cmid'])) {
         throw new Exception('课程模式ID必须为整数');
     }
     if (!Validate::isInt($param['cors_tiid'])) {
         throw new Exception('课程所属培训机构ID必须为整数');
     }
     if (!Validate::isInt($param['cors_flag'])) {
         throw new Exception('课程状态标志必须为整数');
     }
     if (!Validate::isInt($param['cors_stunumtype'])) {
         throw new Exception('课程人数类别ID必须为整数');
     }
     if (isset($param['cors_url'])) {
         if ($param['cors_url'] == '') {
             $param['cors_url'] = NULL;
         } else {
             if (!Validate::isStringLength($param['cors_url'], 1, 512)) {
                 throw new Exception('课程网址最多512个字符');
             }
         }
     }
     if (isset($param['cors_memo'])) {
         if ($param['cors_memo'] == '') {
             $param['cors_memo'] = NULL;
         }
     }
     $classid_list = array();
     if (isset($param['classid_list'])) {
         if (!is_array($param['classid_list'])) {
             throw new Exception('考试类型参数类型不正确');
         }
         $param['classid_list'] = array_values($param['classid_list']);
         $param['classid_list'] = array_unique($param['classid_list']);
         foreach ($param['classid_list'] as $v) {
             if (!Validate::isInt($v)) {
                 throw new Exception('考试类型ID必须为整数');
             }
         }
         $classid_list = $param['classid_list'];
         unset($param['classid_list']);
     }
     $kid_knprocid_pairs = array();
     if (isset($param['kid_knprocid_pairs'])) {
         if (!is_array($param['kid_knprocid_pairs'])) {
             throw new Exception('相关知识点参数类型不正确');
         }
         foreach ($param['kid_knprocid_pairs'] as $k => $v) {
             if (!Validate::isInt($v) || !Validate::isInt($k)) {
                 throw new Exception('相关知识点ID或认知过程ID必须为整数');
             }
         }
         $kid_knprocid_pairs = $param['kid_knprocid_pairs'];
         unset($param['kid_knprocid_pairs']);
     }
     $gradeid_list = array();
     if (isset($param['gradeid_list'])) {
         if (!is_array($param['gradeid_list'])) {
             throw new Exception('年级参数类型不正确');
         }
         $param['gradeid_list'] = array_values($param['gradeid_list']);
         $param['gradeid_list'] = array_unique($param['gradeid_list']);
         foreach ($param['gradeid_list'] as $v) {
             if (!Validate::isInt($v)) {
                 throw new Exception('年级ID必须为整数');
             }
         }
         $gradeid_list = $param['gradeid_list'];
         unset($param['gradeid_list']);
     }
     if (empty($gradeid_list)) {
         throw new Exception('年级ID必须填写');
     }
     if ($param['cors_stunumtype'] != 1 && count($gradeid_list) > 1) {
         throw new Exception('年级ID只能填写一个');
     }
     $subjectid_list = array();
     if (isset($param['subjectid_list'])) {
         if (!is_array($param['subjectid_list'])) {
             throw new Exception('学科参数类型不正确');
         }
         $param['subjectid_list'] = array_values($param['subjectid_list']);
         $param['subjectid_list'] = array_unique($param['subjectid_list']);
         foreach ($param['subjectid_list'] as $v) {
             if (!Validate::isInt($v)) {
                 throw new Exception('学科ID必须为整数');
             }
         }
         $subjectid_list = $param['subjectid_list'];
         unset($param['subjectid_list']);
     }
     if (empty($subjectid_list)) {
         throw new Exception('学科ID必须填写');
     }
     if ($param['cors_stunumtype'] != 1 && count($subjectid_list) > 1) {
         throw new Exception('学科ID只能填写一个');
     }
     $db = Fn::db();
     $param['cors_addtime'] = date('Y-m-d H:i:s');
     $param['cors_adduid'] = Fn::sess()->userdata('admin_id');
     $param['cors_lastmodify'] = $param['cors_addtime'];
     $cors_id = 0;
     if ($db->beginTransaction()) {
         $db->insert('t_course', $param);
         $cors_id = $db->lastInsertId('t_course', 'cors_id');
         foreach ($classid_list as $v) {
             $db->insert('t_course_classid', array('cci_corsid' => $cors_id, 'cci_classid' => $v));
         }
         foreach ($kid_knprocid_pairs as $k => $v) {
             $db->insert('t_course_knowledge', array('ck_corsid' => $cors_id, 'ck_kid' => $k, 'ck_knprocid' => $v));
         }
         foreach ($gradeid_list as $v) {
             $db->insert('t_course_gradeid', array('cg_corsid' => $cors_id, 'cg_gradeid' => $v));
         }
         foreach ($subjectid_list as $v) {
             $db->insert('t_course_subjectid', array('cs_corsid' => $cors_id, 'cs_subjectid' => $v));
         }
         if (!$db->commit()) {
             $db->rollBack();
             $cors_id = 0;
         }
     }
     return $cors_id;
 }