// +---------------------------------------------------------------------- /** * 后台公共文件 * 主要定义后台公共函数库 */ /* 解析列表定义规则*/ function get_list_field($data, $grid) { // 获取当前字段数据 foreach ($grid['field'] as $field) { $array = explode('|', $field); $temp = $data[$array[0]]; $twotemp = $data[$array[2]];//新加 // 函数支持 if (isset($array[1])) { if (isset($twotemp)) {//新加 $param = explode('*', $array[1]); $temp = isset($param[1]) ? call_user_func($param[0], $temp, $param[1]) : call_user_func($array[1], $twotemp, $temp); } else { $param = explode('*', $array[1]); $temp = isset($param[1]) ? call_user_func($param[0], $temp, $param[1]) : call_user_func($array[1], $temp); } } $data2[$array[0]] = $temp; } if (!empty($grid['format'])) { $value = preg_replace_callback('/\[([a-z_]+)\]/', function ($match) use ($data2) { return $data2[$match[1]]; }, $grid['format']); } else { $value = implode(' ', $data2); } // 链接支持 if ('title' == $grid['field'][0] && '目录' == $data['type']) { // 目录类型自动设置子文档列表链接 $grid['href'] = '[LIST]'; } if (!empty($grid['href'])) { $links = explode(',', $grid['href']); foreach ($links as $link) { $array = explode('|', $link); $href = $array[0]; if (preg_match('/^\[([a-z_]+)\]$/', $href, $matches)) { $val[] = $data2[$matches[1]]; } else { $show = isset($array[1]) ? $array[1] : $value; // 替换系统特殊字符串 $href = str_replace( array('[DELETE]', '[EDIT]', '[LIST]'), array('setstatus?status=-1&ids=[id]', 'edit?id=[id]&model=[model_id]&cate_id=[category_id]', 'index?pid=[id]&model=[model_id]&cate_id=[category_id]'), $href); // 替换数据变量 $href = preg_replace_callback('/\[([a-z_]+)\]/', function ($match) use ($data) { return $data[$match[1]]; }, $href); switch ($show) { case '删除': $val[] = '' . $show . ''; break; default: $val[] = '' . $show . ''; break; } } } $value = implode(' ', $val); } return $value; } /** * [every_day 获取日期] * @param integer $m [description] * @return [type] [array] */ function every_day($m = 7) { $time = array(); for ($i = $m - 1; $i >= 0; $i--) { $time[] = date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') - $i, date('Y'))); } return $time; } // 两个日期之间的所有日期 function prDates($start, $end) { $dt_start = strtotime($start); $dt_end = strtotime($end); while ($dt_start <= $dt_end) { $tt[] = date('Y-m-d', $dt_start); $dt_start = strtotime('+1 day', $dt_start); } return $tt; } /* 解析插件数据列表定义规则*/ function get_addonlist_field($data, $grid, $addon) { // 获取当前字段数据 foreach ($grid['field'] as $field) { $array = explode('|', $field); $temp = $data[$array[0]]; // 函数支持 if (isset($array[1])) { $temp = call_user_func($array[1], $temp); } $data2[$array[0]] = $temp; } if (!empty($grid['format'])) { $value = preg_replace_callback('/\[([a-z_]+)\]/', function ($match) use ($data2) { return $data2[$match[1]]; }, $grid['format']); } else { $value = implode(' ', $data2); } // 链接支持 if (!empty($grid['href'])) { $links = explode(',', $grid['href']); foreach ($links as $link) { $array = explode('|', $link); $href = $array[0]; if (preg_match('/^\[([a-z_]+)\]$/', $href, $matches)) { $val[] = $data2[$matches[1]]; } else { $show = isset($array[1]) ? $array[1] : $value; // 替换系统特殊字符串 $href = str_replace( array('[DELETE]', '[EDIT]', '[ADDON]'), array('del?ids=[id]&name=[ADDON]', 'edit?id=[id]&name=[ADDON]', $addon), $href); // 替换数据变量 $href = preg_replace_callback('/\[([a-z_]+)\]/', function ($match) use ($data) { return $data[$match[1]]; }, $href); $val[] = '' . $show . ''; } } $value = implode(' ', $val); } return $value; } // 获取模型名称 function get_model_by_id($id) { return $model = M('Model')->getFieldById($id, 'title'); } // 获取属性类型信息 function get_attribute_type($type = '') { // TODO 可以加入系统配置 static $_type = array( 'num' => array('数字', 'int(10) UNSIGNED NOT NULL'), 'string' => array('字符串', 'varchar(255) NOT NULL'), 'textarea' => array('文本框', 'text NOT NULL'), 'date' => array('日期', 'int(10) NOT NULL'), 'datetime' => array('时间', 'int(10) NOT NULL'), 'bool' => array('布尔', 'tinyint(2) NOT NULL'), 'select' => array('枚举', 'char(50) NOT NULL'), 'radio' => array('单选', 'char(10) NOT NULL'), 'checkbox' => array('多选', 'varchar(100) NOT NULL'), 'editor' => array('编辑器', 'text NOT NULL'), 'picture' => array('上传图片', 'int(10) UNSIGNED NOT NULL'), 'file' => array('上传附件', 'int(10) UNSIGNED NOT NULL'), ); return $type ? $_type[$type][0] : $_type; } /** * 获取对应状态的文字信息 * @param int $status * @return string 状态文字 ,false 未获取到 * @author huajie */ function get_status_title($status = null) { if (!isset($status)) { return false; } switch ($status) { case -1 : return "已删除"; break; case 0 : return "禁用"; break; case 1 : return "正常"; break; case 2 : return "待审核"; break; default : return false; break; } } // 获取数据的状态操作 function show_status_op($status) { switch ($status) { case 0 : return "正常"; break; case 1 : return "禁用"; break; case 2 : return "待审核"; break; default : return false; break; } } /** * 获取文档的类型文字 * @param string $type * @return string 状态文字 ,false 未获取到 * @author huajie */ function get_document_type($type = null) { if (!isset($type)) { return false; } switch ($type) { case 1 : return '目录'; break; case 2 : return '主题'; break; case 3 : return '段落'; break; default : return false; break; } } /** * 获取配置的类型 * @param string $type 配置类型 * @return string */ function get_config_type($type = 0) { $list = C('CONFIG_TYPE_LIST'); return $list[$type]; } /** * 获取配置的分组 * @param string $group 配置分组 * @return string */ function get_config_group($group = 0) { $list = C('CONFIG_GROUP_LIST'); return $group ? $list[$group] : ''; } /** * select返回的数组进行整数映射转换 * * @param array $map 映射关系二维数组 array( * '字段名1'=>array(映射关系数组), * '字段名2'=>array(映射关系数组), * ...... * ) * @return array * * array( * array('id'=>1,'title'=>'标题','status'=>'1','status_text'=>'正常') * .... * ) * * @author 朱亚杰 */ function int_to_string(&$data, $map = array('status' => array(1 => '正常', -1 => '删除', 0 => '锁定', 2 => '未审核', 3 => '草稿'))) { if ($data === false || $data === null) { return $data; } $data = (array)$data; foreach ($data as $key => $row) { foreach ($map as $col => $pair) { if (isset($row[$col]) && isset($pair[$row[$col]])) { $data[$key][$col . '_text'] = $pair[$row[$col]]; } } } return $data; } /** * 动态扩展左侧菜单,base.html里用到 * @author 朱亚杰 */ function extra_menu($extra_menu, &$base_menu) { foreach ($extra_menu as $key => $group) { if (isset($base_menu['child'][$key])) { $base_menu['child'][$key] = array_merge($base_menu['child'][$key], $group); } else { $base_menu['child'][$key] = $group; } } } /** * 获取参数的所有父级分类 * @param int $cid 分类id * @return array 参数分类和父类的信息集合 * @author huajie */ function get_parent_category($cid) { if (empty($cid)) { return false; } $cates = M('Category')->where(array('status' => 1))->field('id,title,pid')->order('sort')->select(); $child = get_category($cid); //获取参数分类的信息 $pid = $child['pid']; $temp = array(); $res[] = $child; while (true) { foreach ($cates as $key => $cate) { if ($cate['id'] == $pid) { $pid = $cate['pid']; array_unshift($res, $cate); //将父分类插入到数组第一个元素前 } } if ($pid == 0) { break; } } return $res; } /** * 检测验证码 * @param integer $id 验证码ID * @return boolean 检测结果 * @author 麦当苗儿 */ function check_verify($code, $id = 1) { $verify = new \Think\Verify(); return $verify->check($code, $id); } /** * 获取当前分类的文档类型 * @param int $id * @return array 文档类型数组 * @author huajie */ function get_type_bycate($id = null) { if (empty($id)) { return false; } $type_list = C('DOCUMENT_MODEL_TYPE'); $model_type = M('Category')->getFieldById($id, 'type'); $model_type = explode(',', $model_type); foreach ($type_list as $key => $value) { if (!in_array($key, $model_type)) { unset($type_list[$key]); } } return $type_list; } /** * 获取当前文档的分类 * @param int $id * @return array 文档类型数组 * @author huajie */ function get_cate($cate_id = null) { if (empty($cate_id)) { return false; } $cate = M('Category')->where('id=' . $cate_id)->getField('title'); return $cate; } // 分析枚举类型配置值 格式 a:名称1,b:名称2 function parse_config_attr($string) { $array = preg_split('/[,;\r\n]+/', trim($string, ",;\r\n")); if (strpos($string, ':')) { $value = array(); foreach ($array as $val) { list($k, $v) = explode(':', $val); $value[$k] = $v; } } else { $value = $array; } return $value; } // 获取子文档数目 function get_subdocument_count($id = 0) { return M('Document')->where('pid=' . $id)->count(); } // 分析枚举类型字段值 格式 a:名称1,b:名称2 // 暂时和 parse_config_attr功能相同 // 但请不要互相使用,后期会调整 function parse_field_attr($string) { if (0 === strpos($string, ':')) { // 采用函数定义 return eval('return ' . substr($string, 1) . ';'); } elseif (0 === strpos($string, '[')) { // 支持读取配置参数(必须是数组类型) return C(substr($string, 1, -1)); } $array = preg_split('/[,;\r\n]+/', trim($string, ",;\r\n")); if (strpos($string, ':')) { $value = array(); foreach ($array as $val) { list($k, $v) = explode(':', $val); $value[$k] = $v; } } else { $value = $array; } return $value; } /** * 获取行为数据 * @param string $id 行为id * @param string $field 需要获取的字段 * @author huajie */ function get_action($id = null, $field = null) { if (empty($id) && !is_numeric($id)) { return false; } $list = S('action_list'); if (empty($list[$id])) { $map = array('status' => array('gt', -1), 'id' => $id); $list[$id] = M('Action')->where($map)->field(true)->find(); } return empty($field) ? $list[$id] : $list[$id][$field]; } /** * 根据条件字段获取数据 * @param mixed $value 条件,可用常量或者数组 * @param string $condition 条件字段 * @param string $field 需要返回的字段,不传则返回整个数据 * @author huajie */ function get_document_field($value = null, $condition = 'id', $field = null) { if (empty($value)) { return false; } //拼接参数 $map[$condition] = $value; $info = M('Model')->where($map); if (empty($field)) { $info = $info->field(true)->find(); } else { $info = $info->getField($field); } return $info; } /** * 获取行为类型 * @param intger $type 类型 * @param bool $all 是否返回全部类型 * @author huajie */ function get_action_type($type, $all = false) { $list = array( 1 => '系统', 2 => '用户', ); if ($all) { return $list; } return $list[$type]; } //获取服务器类型 function getServerType($serverType) { return (($serverType == 1) ? '专服' : '混服'); } //获取合作方 function getPartnerList($id = 0) { if ($id > 0) { return M('Partner', 'tab_')->field('id,partner')->find($id); } else { return M('Partner', 'tab_')->field('id,partner')->where(array('status' => 1))->select(); } } function getPartnerName($id = 0) { return M('Partner', 'tab_')->where(array('id' => intval($id)))->getField('partner'); }