model = new CmsModel(); $this->lg = get_default_lg(); } // 站点基础信息 public function site() { // 获取参数 $acode = request('acode', 'var') ?: $this->lg; // 读取数据 if (! $name = request('name', 'var')) { $data = $this->model->getSiteAll($acode); } else { $data = $this->model->getSite($acode, $name); } // 输出数据 json(1, $data); } // 公司信息 public function company() { // 获取参数 $acode = request('acode', 'var') ?: $this->lg; // 读取数据 if (! $name = request('name', 'var')) { $data = $this->model->getCompanyAll($acode); } else { $data = $this->model->getCompany($acode, $name); } // 输出数据 json(1, $data); } // 自定义标签信息 public function label() { // 获取全部或指定自定义标签 if (! $name = request('name', 'var')) { $data = $this->model->getLabelAll(); } else { $data = $this->model->getLabel($name); } // 输出数据 json(1, $data); } // 获取菜单栏目树 public function nav() { // 获取参数 $acode = request('acode', 'var') ?: $this->lg; // 获取栏目树 if (! $scode = request('scode', 'var')) { $data = $this->model->getSorts($acode); } else { // 获取子类 $data = $this->model->getSortsSon($acode, $scode); } // 输出数据 json(1, $data); } // 当前栏目位置 public function position() { // 获取参数 $acode = request('acode', 'var') ?: $this->lg; if (! ! $scode = request('scode', 'var')) { $data = $this->model->getPosition($acode, $scode); json(1, $data); } else { json(0, '必须传递当前分类scode参数'); } } // 分类信息 public function sort() { // 获取参数 $acode = request('acode', 'var') ?: $this->lg; if (! ! $scode = request('scode', 'var')) { $data = $this->model->getSort($acode, $scode); json(1, $data); } else { json(0, '必须传递分类scode参数'); } } // 内容多图 public function pics() { if (! ! $id = request('id', 'int')) { $acode = request('acode', 'var') ?: $this->lg; if (! ! $pics = $this->model->getContentPics($acode, $id)) { $pics = explode(',', $pics); } else { $pics = array(); } json(1, $pics); } else { json(0, '必须传递内容id参数'); } } // 幻灯片 public function slide() { if (! ! $gid = request('gid', 'var')) { $acode = request('acode', 'var') ?: $this->lg; $num = request('num', 'int') ?: 10; $data = $this->model->getSlides($acode, $gid, $num); json(1, $data); } else { json(0, '必须传递幻灯片分组gid参数'); } } // 友情链接 public function link() { if (! ! $gid = request('gid', 'var')) { $acode = request('acode', 'var') ?: $this->lg; $num = request('num', 'int') ?: 20; $data = $this->model->getLinks($acode, $gid, $num); json(1, $data); } else { json(0, '必须传递友情链接分组gid参数'); } } // 搜索 public function search() { if (! $_POST) { json(0, '请使用POST提交!'); } $acode = request('acode', 'var') ?: $this->lg; // 获取主要参数 $field = request('field'); if (! preg_match('/^[\w\|]+$/', $field)) { $field = ''; } $keyword = request('keyword', 'vars'); $scode = request('scode'); // 支持多个分类逗号隔开 if (! preg_match('/^[\w,\s]+$/', $scode)) { $scode = ''; } if ($scode == '*') { // 星号意味任意栏目 $scode = ''; } $num = request('num', 'int') ?: $this->config('pagesize'); $rorder = request('order'); $tags = request('tags', 'vars'); $fuzzy = request('fuzzy', 'int') ?: true; if (! preg_match('/^[\w\-,\s]+$/', $rorder)) { $order = 'a.istop DESC,a.isrecommend DESC,a.isheadline DESC,a.sorting ASC,a.date DESC,a.id DESC'; } else { switch ($rorder) { case 'id': $order = 'a.id DESC,a.istop DESC,a.isrecommend DESC,a.isheadline DESC,a.sorting ASC,a.date DESC'; break; case 'date': $order = 'a.date DESC,a.istop DESC,a.isrecommend DESC,a.isheadline DESC,a.sorting ASC,a.id DESC'; break; case 'sorting': $order = 'a.sorting ASC,a.istop DESC,a.isrecommend DESC,a.isheadline DESC,a.date DESC,a.id DESC'; break; case 'istop': $order = 'a.istop DESC,a.isrecommend DESC,a.isheadline DESC,a.sorting ASC,a.date DESC,a.id DESC'; break; case 'isrecommend': $order = 'a.isrecommend DESC,a.istop DESC,a.isheadline DESC,a.sorting ASC,a.date DESC,a.id DESC'; break; case 'isheadline': $order = 'a.isrecommend DESC,a.istop DESC,a.isheadline DESC,a.sorting ASC,a.date DESC,a.id DESC'; break; case 'visits': case 'likes': case 'oppose': $order = $rorder . ' DESC,a.istop DESC,a.isrecommend DESC,a.isheadline DESC,a.sorting ASC,a.date DESC,a.id DESC'; break; case 'random': // 随机取数 $db_type = get_db_type(); if ($db_type == 'mysql') { $order = "RAND()"; } elseif ($db_type == 'sqlite') { $order = "RANDOM()"; } break; default: if ($rorder) { $orders = explode(',', $rorder); foreach ($orders as $k => $v) { if (strpos($v, 'ext_') === 0) { $orders[$k] = 'e.' . $v; } else { $orders[$k] = 'a.' . $v; } } $order = implode(',', $orders); $order .= ',a.istop DESC,a.isrecommend DESC,a.isheadline DESC,a.sorting ASC,a.date DESC,a.id DESC'; } } } $where1 = array(); // tags数据筛选 $where2 = array(); if ($tags) { $tags_arr = explode(',', $tags); foreach ($tags_arr as $value) { if ($value) { if ($fuzzy) { $where2[] = "a.tags like '%" . escape_string($value) . "%'"; } else { $where2[] = "a.tags='" . escape_string($value) . "'"; } } } } // 存储搜索条件,条件为“并列”关系,由于为模糊匹配,条件为空时意味着“任意” $where3 = array(); // 采取keyword方式 if ($keyword) { if (strpos($field, '|')) { // 匹配多字段的关键字搜索 $field = explode('|', $field); foreach ($field as $value) { if ($value == 'title') { $value = 'a.title'; } if ($fuzzy) { $like = " like '%" . $keyword . "%'"; // 前面已经转义过 } else { $like = " like '" . $keyword . "'"; // 前面已经转义过 } if (isset($where3[0])) { $where3[0] .= ' OR ' . $value . $like; } else { $where3[0] = $value . $like; } } if (count($field) > 1) { $where3[0] = '(' . $where3[0] . ')'; } } else { // 匹配单一字段的关键字搜索 if ($field) { if ($field == 'title') { $field = 'a.title'; } $where3[$field] = $keyword; } else { $where3['a.title'] = $keyword; } } } // 数据接收 if ($_POST) { $receive = $_POST; } else { $receive = $_GET; } foreach ($receive as $key => $value) { if (! ! $value = request($key, 'vars')) { if ($key == 'title') { $key = 'a.title'; } if (preg_match('/^[\w\-\.]+$/', $key)) { // 带有违规字符时不带入查询 $where3[$key] = $value; } } } // 去除特殊键值 unset($where3['appid']); unset($where3['timestamp']); unset($where3['signature']); unset($where3['keyword']); unset($where3['field']); unset($where3['scode']); unset($where3['page']); unset($where3['from']); unset($where3['isappinstalled']); unset($where3['tdsourcetag']); unset($where3['x']); unset($where3['y']); unset($where3['searchtpl']); unset($where3['p']); unset($where3['s']); // 读取数据 $data = $this->model->getLists($acode, $scode, $num, $order, $where1, $where2, $where3, $fuzzy); $Parser = new ParserController(); foreach ($data as $key => $value) { if ($value->outlink) { $data[$key]->apilink = $value->outlink; } else { $data[$key]->apilink = url('/api/content/index/scode/' . $value->id, false); } $data[$key]->likeslink = url('/home/Do/likes/id/' . $value->id, false); $data[$key]->opposelink = url('/home/Do/oppose/id/' . $value->id, false); $data[$key]->content = str_replace(STATIC_DIR . '/upload/', get_http_url() . STATIC_DIR . '/upload/', $value->content); // 返回网页链接地址,便于AJAX调用内容 $data[$key]->contentlink = $Parser->parserLink(2, $value->urlname, 'content', $value->scode, $value->sortfilename, $value->id, $value->filename); } // 输出数据 if (request('page') <= PAGECOUNT) { json(1, $data); } else { return json(0, '已经到底了!'); } } // 读取留言记录 public function msg() { // 获取参数 $acode = request('acode', 'var') ?: $this->lg; $num = request('num', 'int') ?: $this->config('pagesize'); // 获取栏目数 $data = $this->model->getMessage($acode, $num); if (request('page') <= PAGECOUNT) { json(1, $data); } else { return json(0, '已经到底了!'); } } // 新增留言 public function addmsg() { if ($_POST) { if ($this->config('message_status') === '0') { json(0, '系统已经关闭留言功能,请到后台开启再试!'); } // 读取字段 if (! $form = $this->model->getFormField(1)) { json(0, '接收表单不存在任何字段,请核对后重试!'); } // 接收数据 $mail_body = ''; foreach ($form as $value) { $field_data = post($value->name); if (is_array($field_data)) { // 如果是多选等情况时转换 $field_data = implode(',', $field_data); } $field_data = str_replace('pboot:if', '', $field_data); if ($value->required && ! $field_data) { json(0, $value->description . '不能为空!'); } else { $data[$value->name] = $field_data; $mail_body .= $value->description . ':' . $field_data . '
'; } } $status = $this->config('message_verify') == '0' ? 1 : 0; // 设置其他字段 if ($data) { $data['acode'] = request('acode', 'var') ?: $this->lg; $data['user_ip'] = ip2long(get_user_ip()); $data['user_os'] = get_user_os(); $data['user_bs'] = get_user_bs(); $data['recontent'] = ''; $data['status'] = $status; $data['create_user'] = 'api'; $data['update_user'] = 'api'; } // 写入数据 if ($this->model->addMessage($value->table_name, $data)) { $this->log('API提交留言数据成功!'); if ($this->config('message_send_mail') && $this->config('message_send_to')) { $mail_subject = "【" . CMSNAME . "】您有新的" . $value->form_name . "信息,请注意查收!"; $mail_body .= '
来自网站' . get_http_url() . '(' . date('Y-m-d H:i:s') . ')'; sendmail($this->config(), $this->config('message_send_to'), $mail_subject, $mail_body); } json(1, '留言提交成功!'); } else { $this->log('API提交留言数据失败!'); json(0, '留言提交失败!'); } } else { json(0, '留言提交失败,请使用POST方式提交!'); } } // 表单记录 public function form() { // 获取参数 $num = request('num', 'int') ?: $this->config('pagesize'); // 获取表单编码 if (! $fcode = request('fcode', 'var')) json(0, '必须传递表单编码fcode'); // 获取表名称 if (! $table = $this->model->getFormTable($fcode)) { json(0, '传递的fcode有误'); } // 获取表数据 $data = $this->model->getForm($table, $num); if (request('page') <= PAGECOUNT) { json(1, $data); } else { return json(0, '已经到底了!'); } } // 表单提交 public function addform() { if ($_POST) { if (! $fcode = request('fcode', 'var')) { json(0, '传递的表单编码fcode有误!'); } if ($this->config('form_status') === '0') { json(0, '系统已经关闭表单功能,请到后台开启再试!'); } // 读取字段 if (! $form = $this->model->getFormField($fcode)) { json(0, '接收表单不存在任何字段,请核对后重试!'); } // 接收数据 $mail_body = ''; foreach ($form as $value) { $field_data = post($value->name); if (is_array($field_data)) { // 如果是多选等情况时转换 $field_data = implode(',', $field_data); } $field_data = str_replace('pboot:if', '', $field_data); if ($value->required && ! $field_data) { json(0, $value->description . '不能为空!'); } else { $data[$value->name] = $field_data; $mail_body .= $value->description . ':' . $field_data . '
'; } } // 设置创建时间 if ($data) { $data['create_time'] = get_datetime(); } // 写入数据 if ($this->model->addForm($value->table_name, $data)) { $this->log('API提交表单数据成功!'); if ($this->config('form_send_mail') && $this->config('message_send_to')) { $mail_subject = "【" . CMSNAME . "】您有新的" . $value->form_name . "信息,请注意查收!"; $mail_body .= '
来自网站' . get_http_url() . '(' . date('Y-m-d H:i:s') . ')'; sendmail($this->config(), $this->config('message_send_to'), $mail_subject, $mail_body); } json(1, '表单提交成功!'); } else { $this->log('API提交表单数据失败!'); json(0, '表单提交失败!'); } } else { json(0, '表单提交失败,请使用POST方式提交!'); } } // 空拦截 public function _empty() { json(0, '您调用的接口不存在,请核对后重试!'); } }