control.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414
  1. <?php
  2. /**
  3. * 前台control父类,店铺control父类,会员control父类
  4. *
  5. ***/
  6. defined('InShopNC') or exit('Access Invalid!');
  7. /********************************** 前台control父类 **********************************************/
  8. class CMSControl{
  9. //文章状态草稿箱
  10. const ARTICLE_STATE_DRAFT = 1;
  11. //文章状态待审核
  12. const ARTICLE_STATE_VERIFY = 2;
  13. //文章状态已发布
  14. const ARTICLE_STATE_PUBLISHED = 3;
  15. //文章状态回收站
  16. const ARTICLE_STATE_RECYCLE = 4;
  17. //文章类型用户投稿
  18. const ARTICLE_TYPE_MEMBER = 1;
  19. //文章类型管理员发布
  20. const ARTICLE_TYPE_ADMIN = 2;
  21. //推荐
  22. const COMMEND_FLAG_TRUE = 1;
  23. //文章评论类型
  24. const ARTICLE = 1;
  25. const PICTURE = 2;
  26. //用户中心文章列表页
  27. const CMS_MEMBER_ARTICLE_URL = 'index.php?act=member_article&op=article_list';
  28. const CMS_MEMBER_PICTURE_URL = 'index.php?act=member_picture&op=picture_list';
  29. protected $publisher_name = '';
  30. protected $publisher_id = 0;
  31. protected $publisher_type = 0;
  32. protected $attachment_path = '';
  33. protected $publish_state;
  34. /**
  35. * 构造函数
  36. */
  37. public function __construct(){
  38. /**
  39. * cms开关判断
  40. */
  41. if(intval(C('cms_isuse')) !== 1) {
  42. header('location: '.SHOP_SITE_URL);die;
  43. }
  44. /**
  45. * 读取通用、布局的语言包
  46. */
  47. Language::read('common');
  48. Language::read('cms');
  49. /**
  50. * 设置布局文件内容
  51. */
  52. Tpl::setLayout('cms_layout');
  53. /**
  54. * 转码
  55. */
  56. if ($_GET['column'] && strtoupper(CHARSET) == 'GBK'){
  57. $_GET = Language::getGBK($_GET);
  58. }
  59. /**
  60. * 获取导航
  61. */
  62. Tpl::output('nav_list',($nav = F('nav'))? $nav :H('nav',true,'file'));
  63. /**
  64. * 登录后读取用户头像
  65. */
  66. if(!empty($_SESSION['member_id']) && intval($_SESSION['member_id']) > 0) {
  67. self::get_member_avatar($_SESSION['member_id']);
  68. }
  69. /**
  70. * 系统状态检查
  71. */
  72. if(!C('site_status')) halt(C('closed_reason'));
  73. /**
  74. * seo
  75. */
  76. Tpl::output('html_title',C('cms_seo_title').'-'.C('site_name').'');
  77. Tpl::output('seo_keywords',C('cms_seo_keywords'));
  78. Tpl::output('seo_description',C('cms_seo_description'));
  79. /**
  80. * 判断是不是管理员
  81. */
  82. if(!empty($_SESSION['member_name'])) {
  83. $this->publisher_name = $_SESSION['member_name'];
  84. $this->publisher_id = $_SESSION['member_id'];
  85. $this->publisher_type = self::ARTICLE_TYPE_MEMBER;
  86. $this->publisher_avator = self::get_member_avatar($_SESSION['member_id']);
  87. $this->attachment_path = $_SESSION['member_id'];
  88. }
  89. //发布状态,管理员直接发布,投稿如果后台开启审核未待审核状态
  90. if(intval(C('cms_submit_verify_flag')) === 1) {
  91. $this->publish_state = self::ARTICLE_STATE_VERIFY;
  92. } else {
  93. $this->publish_state = self::ARTICLE_STATE_PUBLISHED;
  94. }
  95. }
  96. protected function get_member_avatar($member_id) {
  97. if(!isset($_SESSION['member_avatar'])) {
  98. $model_member = Model('member');
  99. $member_info = $model_member->getMemberInfoByID(array('member_id'=>$member_id));
  100. $_SESSION['member_avatar'] = $member_info['member_avatar'];
  101. }
  102. return $_SESSION['member_avatar'];
  103. }
  104. protected function check_login() {
  105. if(!isset($_SESSION['is_login'])) {
  106. $ref_url = CMS_SITE_URL.request_uri();
  107. header('location: '.SHOP_SITE_URL.'/index.php?act=login&ref_url='.getRefUrl());die;
  108. }
  109. }
  110. /**
  111. * 用户详细信息
  112. */
  113. protected function get_member_detail_info($member_info) {
  114. //生成缓存的键值
  115. $member_id = $member_info['member_id'];
  116. if($member_id <= 0){
  117. header('location: '.CMS_SITE_URL);die;
  118. }
  119. //写入缓存的数据
  120. $cachekey_arr = array('member_name','store_id','member_avatar','member_qq','member_email','member_msn','member_ww','member_goldnum','member_points',
  121. 'available_predeposit','member_snsvisitnum','credit_arr','fan_count','attention_count');
  122. //先查找$member_id缓存
  123. if ($_cache = rcache($member_id,'sns_member')){
  124. foreach ($_cache as $k=>$v){
  125. $member_info[$k] = $v;
  126. }
  127. } else {
  128. $model = Model();
  129. //粉丝数
  130. $fan_count = $model->table('sns_friend')->where(array('friend_tomid'=>$member_id))->count();
  131. $member_info['fan_count'] = $fan_count;
  132. //关注数
  133. $attention_count = $model->table('sns_friend')->where(array('friend_frommid'=>$member_id))->count();
  134. $member_info['attention_count'] = $attention_count;
  135. //兴趣标签
  136. $mtag_list = $model->table('sns_membertag,sns_mtagmember')->field('mtag_name')->on('sns_membertag.mtag_id = sns_mtagmember.mtag_id')->join('inner')->where(array('sns_mtagmember.member_id'=>$member_id))->select();
  137. $tagname_array = array();
  138. if(!empty($mtag_list)){
  139. foreach ($mtag_list as $val){
  140. $tagname_array[] = $val['mtag_name'];
  141. }
  142. }
  143. $member_info['tagname'] = $tagname_array;
  144. wcache($member_id,$member_info,'sns_member');
  145. }
  146. return $member_info;
  147. }
  148. /**
  149. * 获取文章状态列表
  150. */
  151. protected function get_article_state_list() {
  152. $array = array();
  153. $array[self::ARTICLE_STATE_DRAFT] = Language::get('cms_text_draft');
  154. $array[self::ARTICLE_STATE_VERIFY] = Language::get('cms_text_verify');
  155. $array[self::ARTICLE_STATE_PUBLISHED] = Language::get('cms_text_published');
  156. $array[self::ARTICLE_STATE_RECYCLE] = Language::get('cms_text_recycle');
  157. return $array;
  158. }
  159. /**
  160. * 获取文章相关文章
  161. */
  162. protected function get_article_link_list($article_link) {
  163. $article_link_list = array();
  164. if(!empty($article_link)) {
  165. $model_article = Model('cms_article');
  166. $condition = array();
  167. $condition['article_id'] = array('in',$article_link);
  168. $condition['article_state'] = self::ARTICLE_STATE_PUBLISHED;
  169. $article_link_list = $model_article->getList($condition , NULL, 'article_id desc');
  170. }
  171. return $article_link_list;
  172. }
  173. /**
  174. * 返回json状态
  175. */
  176. protected function return_json($message,$result='true') {
  177. $data = array();
  178. $data['result'] = $result;
  179. $data['message'] = $message;
  180. self::echo_json($data);
  181. }
  182. protected function echo_json($data) {
  183. if (strtoupper(CHARSET) == 'GBK'){
  184. $data = Language::getUTF8($data);//网站GBK使用编码时,转换为UTF-8,防止json输出汉字问题
  185. }
  186. echo json_encode($data);die;
  187. }
  188. /**
  189. * 获取主域名
  190. */
  191. protected function get_url_domain($url) {
  192. $url_parse_array = parse_url($url);
  193. $host = $url_parse_array['host'];
  194. $host_names = explode(".", $host);
  195. $bottom_host_name = $host_names[count($host_names)-2] . "." . $host_names[count($host_names)-1];
  196. return $bottom_host_name;
  197. }
  198. //获得分享列表
  199. protected function get_share_app_list() {
  200. $app_shop = array();
  201. $app_array = array();
  202. if (C('share_isuse') == 1 && isset($_SESSION['member_id'])){
  203. //站外分享接口
  204. $model = Model('sns_binding');
  205. $app_array = $model->getUsableApp($_SESSION['member_id']);
  206. }
  207. Tpl::output('app_arr',$app_array);
  208. }
  209. protected function share_app_publish($publish_info=array()) {
  210. $param = array();
  211. $param['comment'] = "'".$_SESSION['member_name']."'".Language::get('cms_text_zai').C('cms_seo_title').Language::get('share_article');
  212. $param['title'] = "'".$_SESSION['member_name']."'".Language::get('cms_text_zai').C('cms_seo_title').Language::get('share_article');
  213. $param['url'] = $publish_info['url'];
  214. $param['title'] = $publish_info['share_title'];
  215. $param['image'] = $publish_info['share_image'];
  216. $param['content'] = self::get_share_app_content($param);
  217. $param['images'] = '';
  218. //分享应用
  219. $app_items = array();
  220. foreach ($_POST['share_app_items'] as $val) {
  221. if($val != '') {
  222. $app_items[$val] = TRUE;
  223. }
  224. }
  225. if (C('share_isuse') == 1 && !empty($app_items)){
  226. $model = Model('sns_binding');
  227. //查询该用户的绑定信息
  228. $bind_list = $model->getUsableApp($_SESSION['member_id']);
  229. //商城
  230. if (isset($app_items['shop'])){
  231. $model_member = Model('member');
  232. $member_info = $model_member->infoMember(array('member_id'=>$_SESSION['member_id']));
  233. $tracelog_model = Model('sns_tracelog');
  234. $insert_arr = array();
  235. $insert_arr['trace_originalid'] = '0';
  236. $insert_arr['trace_originalmemberid'] = '0';
  237. $insert_arr['trace_memberid'] = $_SESSION['member_id'];
  238. $insert_arr['trace_membername'] = $_SESSION['member_name'];
  239. $insert_arr['trace_memberavatar'] = $member_info['member_avatar'];
  240. $insert_arr['trace_title'] = $publish_info['commend_message'];
  241. $insert_arr['trace_content'] = $param['content'];
  242. $insert_arr['trace_addtime'] = time();
  243. $insert_arr['trace_state'] = '0';
  244. $insert_arr['trace_privacy'] = 0;
  245. $insert_arr['trace_commentcount'] = 0;
  246. $insert_arr['trace_copycount'] = 0;
  247. $insert_arr['trace_from'] = '4';
  248. $result = $tracelog_model->tracelogAdd($insert_arr);
  249. }
  250. //腾讯微博
  251. if (isset($app_items['qqweibo']) && $bind_list['qqweibo']['isbind'] == true){
  252. $model->addQQWeiboPic($bind_list['qqweibo'],$param);
  253. }
  254. //新浪微博
  255. if (isset($app_items['sinaweibo']) && $bind_list['sinaweibo']['isbind'] == true){
  256. $model->addSinaWeiboUpload($bind_list['sinaweibo'],$param);
  257. }
  258. }
  259. }
  260. //CMSsns内容结构
  261. protected function get_share_app_content($info) {
  262. $content_str = "
  263. <div class='fd-media'>
  264. <div class='goodsimg'><a target=\"_blank\" href=\"{$info['url']}\"><img src=\"".$info['image']."\" onload=\"javascript:DrawImage(this,120,120);\"></a></div>
  265. <div class='goodsinfo'>
  266. <dl>
  267. <dt><a target=\"_blank\" href=\"{$info['url']}\">{$info['title']}</a></dt>
  268. <dd>{$info['comment']}<a target=\"_blank\" href=\"{$info['url']}\">".Language::get('nc_common_goto')."</a></dd>
  269. </dl>
  270. </div>
  271. </div>
  272. ";
  273. return $content_str;
  274. }
  275. }
  276. class CMSHomeControl extends CMSControl{
  277. public function __construct() {
  278. parent::__construct();
  279. $model_navigation = Model('cms_navigation');
  280. $navigation_list = $model_navigation->getList(TRUE, null, 'navigation_sort asc');
  281. Tpl::output('navigation_list', $navigation_list);
  282. $model_article_class = Model('cms_article_class');
  283. $article_class_list = $model_article_class->getList(TRUE, null, 'class_sort asc');
  284. $article_class_list = array_under_reset($article_class_list, 'class_id');
  285. Tpl::output('article_class_list', $article_class_list);
  286. $model_picture_class = Model('cms_picture_class');
  287. $picture_class_list = $model_picture_class->getList(TRUE, null, 'class_sort asc');
  288. $picture_class_list = array_under_reset($picture_class_list, 'class_id');
  289. Tpl::output('picture_class_list', $picture_class_list);
  290. Tpl::output('index_sign','index');
  291. Tpl::output('top_function_block',TRUE);
  292. }
  293. /**
  294. * 推荐文章
  295. */
  296. protected function get_article_comment() {
  297. $model_article = Model('cms_article');
  298. $condition = array();
  299. $condition['article_commend_flag'] = 1;
  300. $article_commend_list = $model_article->getListWithClassName($condition, NULL, 'article_id desc', '*', 9);
  301. Tpl::output('article_commend_list', $article_commend_list);
  302. }
  303. }
  304. class CMSMemberControl extends CMSControl{
  305. public function __construct() {
  306. parent::__construct();
  307. if(empty($this->publisher_name)) {
  308. @header('Location: index.php');die;
  309. }
  310. //发布人信息
  311. Tpl::output('publisher_info', array('name'=>$this->publisher_name,
  312. 'id'=>$this->publisher_id,
  313. 'type'=>$this->publisher_type,
  314. 'avator'=>$this->publisher_avator,
  315. )
  316. );
  317. }
  318. protected function check_article_auth($article_id) {
  319. if($article_id > 0) {
  320. $model_article = Model('cms_article');
  321. $article_detail = $model_article->getOne(array('article_id'=>$article_id));
  322. if(!empty($article_detail)) {
  323. if( $this->publisher_type == self::ARTICLE_TYPE_ADMIN ||
  324. ($article_detail['article_type'] != self::ARTICLE_TYPE_ADMIN
  325. && $article_detail['article_publisher_id'] == $this->publisher_id)) {
  326. return $article_detail;
  327. } else {
  328. return FALSE;
  329. }
  330. } else {
  331. return FALSE;
  332. }
  333. } else {
  334. return FALSE;
  335. }
  336. }
  337. protected function check_picture_auth($picture_id) {
  338. if($picture_id > 0) {
  339. $model_picture = Model('cms_picture');
  340. $picture_detail = $model_picture->getOne(array('picture_id'=>$picture_id));
  341. if(!empty($picture_detail)) {
  342. if( $this->publisher_type == self::ARTICLE_TYPE_ADMIN ||
  343. ($picture_detail['picture_type'] != self::ARTICLE_TYPE_ADMIN
  344. && $picture_detail['picture_publisher_id'] == $this->publisher_id)) {
  345. return $picture_detail;
  346. } else {
  347. return FALSE;
  348. }
  349. } else {
  350. return FALSE;
  351. }
  352. } else {
  353. return FALSE;
  354. }
  355. }
  356. /**
  357. * 删除图片
  358. */
  359. protected function drop_image($attachment_path, $image_name) {
  360. $image = BASE_UPLOAD_PATH.DS.ATTACH_CMS.DS.$attachment_path.DS.$image_name;
  361. if(is_file($image)) {
  362. unlink($image);
  363. }
  364. }
  365. }