123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 |
- <?php
- /**
- * 易优CMS
- * ============================================================================
- * 版权所有 2016-2028 海南赞赞网络科技有限公司,并保留所有权利。
- * 网站地址: http://www.eyoucms.com
- * ----------------------------------------------------------------------------
- * 如果商业用途务必到官方购买正版授权, 以免引起不必要的法律纠纷.
- * ============================================================================
- * Author: 小虎哥 <1105415366@qq.com>
- * Date: 2018-4-3
- */
- namespace app\home\controller;
- class View extends Base
- {
- // 模型标识
- public $nid = '';
- // 模型ID
- public $channel = '';
- // 模型名称
- public $modelName = '';
- public function _initialize() {
- parent::_initialize();
- }
- /**
- * 内容页
- */
- public function index($aid = '')
- {
- if (!is_numeric($aid) || strval(intval($aid)) !== strval($aid)) {
- abort(404,'页面不存在');
- }
- $seo_pseudo = config('ey_config.seo_pseudo');
- /*URL上参数的校验*/
- if (3 == $seo_pseudo)
- {
- if (stristr($this->request->url(), '&c=View&a=index&')) {
- abort(404,'页面不存在');
- }
- }
- else if (1 == $seo_pseudo || (2 == $seo_pseudo && isMobile()))
- {
- $seo_dynamic_format = config('ey_config.seo_dynamic_format');
- if (1 == $seo_pseudo && 2 == $seo_dynamic_format && stristr($this->request->url(), '&c=View&a=index&')) {
- abort(404,'页面不存在');
- }
- }
- /*--end*/
- $aid = intval($aid);
- $archivesInfo = M('archives')->field('a.typeid, a.channel, b.nid, b.ctl_name')
- ->alias('a')
- ->join('__CHANNELTYPE__ b', 'a.channel = b.id', 'LEFT')
- ->where([
- 'a.aid' => $aid,
- 'a.is_del' => 0,
- ])
- ->find();
- if (empty($archivesInfo) || !in_array($archivesInfo['channel'], config('global.allow_release_channel'))) {
- abort(404,'页面不存在');
- // $this->redirect('/public/static/errpage/404.html', 301);
- }
- $this->nid = $archivesInfo['nid'];
- $this->channel = $archivesInfo['channel'];
- $this->modelName = $archivesInfo['ctl_name'];
- $result = model($this->modelName)->getInfo($aid);
- // 若是管理员则不受限制
- if (session('?admin_id')) {
- if ($result['arcrank'] == -1 && $result['users_id'] != session('users_id')) {
- $this->success('待审核稿件,你没有权限阅读!');
- }
- }
- // 外部链接跳转
- if ($result['is_jump'] == 1) {
- header('Location: '.$result['jumplinks']);
- exit;
- }
- /*--end*/
- $tid = $result['typeid'];
- $arctypeInfo = model('Arctype')->getInfo($tid);
- /*自定义字段的数据格式处理*/
- $arctypeInfo = $this->fieldLogic->getTableFieldList($arctypeInfo, config('global.arctype_channel_id'));
- /*--end*/
- if (!empty($arctypeInfo)) {
- /*URL上参数的校验*/
- if (3 == $seo_pseudo) {
- $dirname = input('param.dirname/s');
- $dirname2 = '';
- $seo_rewrite_format = config('ey_config.seo_rewrite_format');
- if (1 == $seo_rewrite_format) {
- $toptypeRow = model('Arctype')->getAllPid($tid);
- $toptypeinfo = current($toptypeRow);
- $dirname2 = $toptypeinfo['dirname'];
- } else if (2 == $seo_rewrite_format) {
- $dirname2 = $arctypeInfo['dirname'];
- } else if (3 == $seo_rewrite_format) {
- $dirname2 = $arctypeInfo['dirname'];
- }
- if ($dirname != $dirname2) {
- abort(404,'页面不存在');
- }
- }
- /*--end*/
- // 是否有子栏目,用于标记【全部】选中状态
- $arctypeInfo['has_children'] = model('Arctype')->hasChildren($tid);
- // 文档模板文件,不指定文档模板,默认以栏目设置的为主
- empty($result['tempview']) && $result['tempview'] = $arctypeInfo['tempview'];
-
- /*给没有type前缀的字段新增一个带前缀的字段,并赋予相同的值*/
- foreach ($arctypeInfo as $key => $val) {
- if (!preg_match('/^type/i',$key)) {
- $key_new = 'type'.$key;
- !array_key_exists($key_new, $arctypeInfo) && $arctypeInfo[$key_new] = $val;
- }
- }
- /*--end*/
- } else {
- abort(404,'页面不存在');
- }
- $result = array_merge($arctypeInfo, $result);
- // 文档链接
- $result['arcurl'] = $result['pageurl'] = '';
- if ($result['is_jump'] != 1) {
- $result['arcurl'] = $result['pageurl'] = $this->request->url(true);
- }
- /*--end*/
- // seo
- $result['seo_title'] = set_arcseotitle($result['title'], $result['seo_title'], $result['typename']);
- $result['seo_description'] = @msubstr(checkStrHtml($result['seo_description']), 0, config('global.arc_seo_description_length'), false);
- /*支持子目录*/
- $result['litpic'] = handle_subdir_pic($result['litpic']);
- /*--end*/
- $result = view_logic($aid, $this->channel, $result, true); // 模型对应逻辑
- /*自定义字段的数据格式处理*/
- $result = $this->fieldLogic->getChannelFieldList($result, $this->channel);
- /*--end*/
-
- $eyou = array(
- 'type' => $arctypeInfo,
- 'field' => $result,
- );
- $this->eyou = array_merge($this->eyou, $eyou);
- $this->assign('eyou', $this->eyou);
- /*模板文件*/
- $viewfile = !empty($result['tempview'])
- ? str_replace('.'.$this->view_suffix, '',$result['tempview'])
- : 'view_'.$this->nid;
- /*--end*/
- /*多语言内置模板文件名*/
- if (!empty($this->home_lang)) {
- $viewfilepath = TEMPLATE_PATH.$this->theme_style.DS.$viewfile."_{$this->home_lang}.".$this->view_suffix;
- if (file_exists($viewfilepath)) {
- $viewfile .= "_{$this->home_lang}";
- }
- }
- /*--end*/
- // 若需要会员权限则执行
- if ($this->eyou['field']['arcrank'] > 0) {
- $msg = action('api/Ajax/get_arcrank', ['aid'=>$aid, 'vars'=>1]);
- if (true !== $msg) {
- $this->error($msg);
- }
- }
- return $this->fetch(":{$viewfile}");
- }
- /**
- * 下载文件
- */
- public function downfile()
- {
- $file_id = input('param.id/d', 0);
- $uhash = input('param.uhash/s', '');
- if (empty($file_id) || empty($uhash)) {
- $this->error('下载地址出错!');
- exit;
- }
- clearstatcache();
- // 查询信息
- $map = array(
- 'a.file_id' => $file_id,
- 'a.uhash' => $uhash,
- );
- $result = M('download_file')
- ->alias('a')
- ->field('a.*,b.arc_level_id')
- ->join('__ARCHIVES__ b', 'a.aid = b.aid', 'LEFT')
- ->where($map)
- ->find();
- $file_url_gbk = iconv("utf-8","gb2312//IGNORE",$result['file_url']);
- $file_url_gbk = preg_replace('#^(/[/\w]+)?(/public/upload/soft/|/uploads/soft/)#i', '$2', $file_url_gbk);
- if (empty($result) || (!is_http_url($result['file_url']) && !file_exists('.'.$file_url_gbk))) {
- $this->error('下载文件不存在!');
- exit;
- }
- // 判断会员信息
- if (0 < intval($result['arc_level_id'])) {
- $UsersData = session('users');
- if (empty($UsersData['users_id'])) {
- $this->error('请登录后下载!');
- exit;
- }else{
- /*判断会员是否可下载该文件--2019-06-21 陈风任添加*/
- // 查询会员信息
- $users = M('users')
- ->alias('a')
- ->field('a.users_id,b.level_value,b.level_name')
- ->join('__USERS_LEVEL__ b', 'a.level = b.level_id', 'LEFT')
- ->where(['a.users_id'=>$UsersData['users_id']])
- ->find();
- // 查询下载所需等级值
- $file_level = M('archives')
- ->alias('a')
- ->field('b.level_value,b.level_name')
- ->join('__USERS_LEVEL__ b', 'a.arc_level_id = b.level_id', 'LEFT')
- ->where(['a.aid'=>$result['aid']])
- ->find();
- if ($users['level_value'] < $file_level['level_value']) {
- $msg = '文件为【'.$file_level['level_name'].'】可下载,您当前为【'.$users['level_name'].'】,请先升级!';
- $this->error($msg);
- exit;
- }
- /*--end*/
- }
- }
- // 外部下载链接
- if (is_http_url($result['file_url'])) {
- if ($result['uhash'] != md5($result['file_url'])) {
- $this->error('下载地址出错!');
- }
- // 记录下载次数
- $this->download_log($result['file_id'], $result['aid']);
- if (IS_AJAX) {
- $this->success('正在跳转中……', $result['file_url']);
- } else {
- $this->redirect($result['file_url']);
- exit;
- }
- }
- // 本站链接
- else
- {
- if (md5_file('.'.$file_url_gbk) != $result['md5file']) {
- $this->error('下载文件包已损坏!');
- }
- // 记录下载次数
- $this->download_log($result['file_id'], $result['aid']);
- $uhash_mch = mchStrCode($uhash);
- $url = $this->root_dir."/index.php?m=home&c=View&a=download_file&file_id={$file_id}&uhash={$uhash_mch}";
- if (IS_AJAX) {
- $this->success('开始下载中……', $url);
- } else {
- $url = $this->request->domain().$url;
- $this->redirect($url);
- exit;
- }
- }
- }
- /**
- * 本地附件下载
- */
- public function download_file()
- {
- $file_id = input('param.file_id/d');
- $uhash = input('param.uhash/s', '');
- $uhash = mchStrCode($uhash, 'DECODE');
- $map = array(
- 'file_id' => $file_id,
- );
- $result = M('download_file')->field('file_url,file_mime,uhash')->where($map)->find();
- if (!empty($result['uhash']) && $uhash != $result['uhash']) {
- $this->error('下载地址出错!');
- }
- download_file($result['file_url'], $result['file_mime']);
- exit;
- }
- /**
- * 记录下载次数(重复下载不做记录,游客可重复记录)
- */
- private function download_log($file_id = 0, $aid = 0)
- {
- try {
- $users_id = session('users_id');
- $users_id = intval($users_id);
- $counts = M('download_log')->where([
- 'file_id' => $file_id,
- 'aid' => $aid,
- 'users_id' => $users_id,
- ])->count();
- if (empty($users_id) || empty($counts)) {
- $saveData = [
- 'users_id' => $users_id,
- 'aid' => $aid,
- 'file_id' => $file_id,
- 'ip' => clientIP(),
- 'add_time' => getTime(),
- ];
- $r = M('download_log')->insertGetId($saveData);
- if ($r !== false) {
- M('download_file')->where(['file_id'=>$file_id])->setInc('downcount');
- M('archives')->where(['aid'=>$aid])->setInc('downcount');
- }
- }
- } catch (\Exception $e) {}
- }
- }
|