浏览代码

first import

stanley-king 9 年之前
当前提交
14a97d0ea7
共有 100 个文件被更改,包括 22823 次插入0 次删除
  1. 6 0
      admin/config/config.ini.php
  2. 105 0
      admin/control/account.php
  3. 369 0
      admin/control/activity.php
  4. 316 0
      admin/control/admin.php
  5. 151 0
      admin/control/admin_log.php
  6. 577 0
      admin/control/adv.php
  7. 385 0
      admin/control/article.php
  8. 266 0
      admin/control/article_class.php
  9. 537 0
      admin/control/bill.php
  10. 414 0
      admin/control/brand.php
  11. 100 0
      admin/control/cache.php
  12. 81 0
      admin/control/chat_log.php
  13. 22 0
      admin/control/circle_cache.php
  14. 166 0
      admin/control/circle_class.php
  15. 103 0
      admin/control/circle_inform.php
  16. 437 0
      admin/control/circle_manage.php
  17. 106 0
      admin/control/circle_member.php
  18. 183 0
      admin/control/circle_memberlevel.php
  19. 317 0
      admin/control/circle_setting.php
  20. 319 0
      admin/control/circle_theme.php
  21. 230 0
      admin/control/cms_article.php
  22. 158 0
      admin/control/cms_article_class.php
  23. 144 0
      admin/control/cms_base.php
  24. 89 0
      admin/control/cms_comment.php
  25. 458 0
      admin/control/cms_index.php
  26. 81 0
      admin/control/cms_manage.php
  27. 199 0
      admin/control/cms_navigation.php
  28. 225 0
      admin/control/cms_picture.php
  29. 158 0
      admin/control/cms_picture_class.php
  30. 323 0
      admin/control/cms_special.php
  31. 155 0
      admin/control/cms_tag.php
  32. 123 0
      admin/control/common.php
  33. 569 0
      admin/control/complain.php
  34. 212 0
      admin/control/consulting.php
  35. 314 0
      admin/control/control.php
  36. 172 0
      admin/control/dashboard.php
  37. 307 0
      admin/control/db.php
  38. 138 0
      admin/control/delivery.php
  39. 196 0
      admin/control/document.php
  40. 158 0
      admin/control/domain.php
  41. 105 0
      admin/control/evaluate.php
  42. 145 0
      admin/control/exppoints.php
  43. 68 0
      admin/control/express.php
  44. 88 0
      admin/control/flea.php
  45. 492 0
      admin/control/flea_class.php
  46. 62 0
      admin/control/flea_class_index.php
  47. 166 0
      admin/control/flea_index.php
  48. 293 0
      admin/control/flea_region.php
  49. 234 0
      admin/control/goods.php
  50. 180 0
      admin/control/goods_album.php
  51. 667 0
      admin/control/goods_class.php
  52. 614 0
      admin/control/groupbuy.php
  53. 252 0
      admin/control/help_store.php
  54. 68 0
      admin/control/index.php
  55. 405 0
      admin/control/inform.php
  56. 260 0
      admin/control/link.php
  57. 219 0
      admin/control/live_area.php
  58. 178 0
      admin/control/live_class.php
  59. 146 0
      admin/control/live_groupbuy.php
  60. 128 0
      admin/control/live_order.php
  61. 133 0
      admin/control/live_setting.php
  62. 66 0
      admin/control/login.php
  63. 245 0
      admin/control/mall_consult.php
  64. 198 0
      admin/control/mb_ad.php
  65. 59 0
      admin/control/mb_app.php
  66. 235 0
      admin/control/mb_category.php
  67. 39 0
      admin/control/mb_feedback.php
  68. 121 0
      admin/control/mb_home.php
  69. 24 0
      admin/control/mb_index.php
  70. 76 0
      admin/control/mb_payment.php
  71. 300 0
      admin/control/mb_special.php
  72. 284 0
      admin/control/member.php
  73. 55 0
      admin/control/member_grade.php
  74. 413 0
      admin/control/message.php
  75. 1097 0
      admin/control/microshop.php
  76. 381 0
      admin/control/navigation.php
  77. 87 0
      admin/control/notice.php
  78. 104 0
      admin/control/offpay_area.php
  79. 61 0
      admin/control/operation.php
  80. 286 0
      admin/control/order.php
  81. 505 0
      admin/control/ownshop.php
  82. 59 0
      admin/control/payment.php
  83. 27 0
      admin/control/perform.php
  84. 149 0
      admin/control/pointorder.php
  85. 459 0
      admin/control/pointprod.php
  86. 203 0
      admin/control/points.php
  87. 748 0
      admin/control/predeposit.php
  88. 158 0
      admin/control/promotion_booth.php
  89. 172 0
      admin/control/promotion_bundling.php
  90. 205 0
      admin/control/promotion_mansong.php
  91. 242 0
      admin/control/promotion_xianshi.php
  92. 321 0
      admin/control/rec_position.php
  93. 309 0
      admin/control/rechargecard.php
  94. 216 0
      admin/control/refund.php
  95. 135 0
      admin/control/return.php
  96. 47 0
      admin/control/search.php
  97. 54 0
      admin/control/seccode.php
  98. 364 0
      admin/control/setting.php
  99. 47 0
      admin/control/show_pics.php
  100. 0 0
      admin/control/sns_malbum.php

+ 6 - 0
admin/config/config.ini.php

@@ -0,0 +1,6 @@
+<?php
+defined('InShopNC') or exit('Access Invalid!');
+
+$config['sys_log'] 			= true;
+
+return $config;

+ 105 - 0
admin/control/account.php

@@ -0,0 +1,105 @@
+<?php
+/**
+ * 账号同步
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class accountControl extends SystemControl{
+	private $links = array(
+		array('url'=>'act=account&op=qq','lang'=>'qqSettings'),
+		array('url'=>'act=account&op=sina','lang'=>'sinaSettings')
+	);
+	public function __construct(){
+		parent::__construct();
+		Language::read('setting');
+	}
+
+	/**
+	 * QQ互联
+	 */
+	public function qqOp(){
+		$model_setting = Model('setting');
+		if (chksubmit()){
+			$obj_validate = new Validate();
+			if (trim($_POST['qq_isuse']) == '1'){
+				$obj_validate->validateparam = array(
+					array("input"=>$_POST["qq_appid"], "require"=>"true","message"=>Language::get('qq_appid_error')),
+					array("input"=>$_POST["qq_appkey"], "require"=>"true","message"=>Language::get('qq_appkey_error'))
+				);
+			}
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				$update_array = array();
+				$update_array['qq_isuse'] 	= $_POST['qq_isuse'];
+				$update_array['qq_appcode'] = $_POST['qq_appcode'];
+				$update_array['qq_appid'] 	= $_POST['qq_appid'];
+				$update_array['qq_appkey'] 	= $_POST['qq_appkey'];
+				$result = $model_setting->updateSetting($update_array);
+				if ($result === true){
+					$this->log(L('nc_edit,qqSettings'),1);
+					showMessage(Language::get('nc_common_save_succ'));
+				}else {
+					$this->log(L('nc_edit,qqSettings'),0);
+					showMessage(Language::get('nc_common_save_fail'));
+				}
+			}
+		}
+
+		$list_setting = $model_setting->getListSetting();
+		Tpl::output('list_setting',$list_setting);
+
+		//输出子菜单
+		Tpl::output('top_link',$this->sublink($this->links,'qq'));
+		Tpl::showpage('setting.qq_setting');
+	}
+
+	/**
+	 * sina微博设置
+	 */
+	public function sinaOp(){
+		$model_setting = Model('setting');
+		if (chksubmit()){
+			$obj_validate = new Validate();
+			if (trim($_POST['sina_isuse']) == '1'){
+				$obj_validate->validateparam = array(
+					array("input"=>$_POST["sina_wb_akey"], "require"=>"true","message"=>Language::get('sina_wb_akey_error')),
+					array("input"=>$_POST["sina_wb_skey"], "require"=>"true","message"=>Language::get('sina_wb_skey_error'))
+				);
+			}
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				$update_array = array();
+				$update_array['sina_isuse'] 	= $_POST['sina_isuse'];
+				$update_array['sina_wb_akey'] 	= $_POST['sina_wb_akey'];
+				$update_array['sina_wb_skey'] 	= $_POST['sina_wb_skey'];
+				$update_array['sina_appcode'] 	= $_POST['sina_appcode'];
+				$result = $model_setting->updateSetting($update_array);
+				if ($result === true){
+					$this->log(L('nc_edit,sinaSettings'),1);
+					showMessage(Language::get('nc_common_save_succ'));
+				}else {
+					$this->log(L('nc_edit,sinaSettings'),0);
+					showMessage(Language::get('nc_common_save_fail'));
+				}
+			}
+		}
+		$is_exist = function_exists('curl_init');
+		if ($is_exist){
+			$list_setting = $model_setting->getListSetting();
+			Tpl::output('list_setting',$list_setting);
+		}
+		Tpl::output('is_exist',$is_exist);
+
+		//输出子菜单
+		Tpl::output('top_link',$this->sublink($this->links,'sina'));
+
+		Tpl::showpage('setting.sina_setting');
+	}
+}

+ 369 - 0
admin/control/activity.php

@@ -0,0 +1,369 @@
+<?php
+/**
+ * 活动管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+
+class activityControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('activity');
+	}
+	/**
+	 * 活动列表
+	 */
+	public function indexOp(){
+		$this->activityOp();
+	}
+	/**
+	 * 活动列表/删除活动
+	 */
+	public function activityOp(){
+		$activity	= Model('activity');
+		//条件
+		$condition_arr = array();
+		$condition_arr['activity_type'] = '1';//只显示商品活动
+		//状态
+		if (!empty($_GET['searchstate'])){
+			$state = intval($_GET['searchstate'])-1;
+			$condition_arr['activity_state'] = "$state";
+		}
+		//标题
+		if (!empty($_GET['searchtitle'])){
+			$condition_arr['activity_title'] = $_GET['searchtitle'];
+		}
+		//有效期范围
+		if (!empty($_GET['searchstartdate']) && !empty($_GET['searchenddate'])){
+			$condition_arr['activity_daterange']['startdate'] = strtotime($_GET['searchstartdate']);
+			$condition_arr['activity_daterange']['enddate'] = strtotime($_GET['searchenddate']);
+            if($condition_arr['activity_daterange']['enddate'] > 0) {
+                $condition_arr['activity_daterange']['enddate'] += 86400;
+            }
+		}
+		$condition_arr['order'] = 'activity_sort asc';
+		//活动列表
+		$page	= new Page();
+		$page->setEachNum(10);
+		$page->setStyle('admin');
+		$list	= $activity->getList($condition_arr,$page);
+		//输出
+		Tpl::output('show_page',$page->show());
+		Tpl::output('list',$list);
+		Tpl::showpage('activity.index');
+	}
+
+	/**
+	 * 新建活动/保存新建活动
+	 */
+	public function newOp(){
+		//新建处理
+		if($_POST['form_submit'] != 'ok'){
+			Tpl::showpage('activity.add');
+			exit;
+		}
+		//提交表单
+		$obj_validate = new Validate();
+		$validate_arr[] = array("input"=>$_POST["activity_title"],"require"=>"true","message"=>Language::get('activity_new_title_null'));
+		$validate_arr[] = array("input"=>$_POST["activity_start_date"],"require"=>"true","message"=>Language::get('activity_new_startdate_null'));
+		$validate_arr[] = array("input"=>$_POST["activity_end_date"],"require"=>"true",'validator'=>'Compare','operator'=>'>','to'=>"{$_POST['activity_start_date']}","message"=>Language::get('activity_new_enddate_null'));
+		$validate_arr[] = array("input"=>$_POST["activity_style"],"require"=>"true","message"=>Language::get('activity_new_style_null'));
+		$validate_arr[] = array('input'=>$_POST['activity_type'],'require'=>'true','message'=>Language::get('activity_new_type_null'));
+		$validate_arr[] = array('input'=>$_FILES['activity_banner']['name'],'require'=>'true','message'=>Language::get('activity_new_banner_null'));
+		$validate_arr[] = array('input'=>$_POST['activity_sort'],'require'=>'true','validator'=>'Range','min'=>0,'max'=>255,'message'=>Language::get('activity_new_sort_error'));
+		$obj_validate->validateparam = $validate_arr;
+		$error = $obj_validate->validate();
+		if ($error != ''){
+			showMessage(Language::get('error').$error,'','','error');
+		}
+		$upload	= new UploadFile();
+		$upload->set('default_dir',ATTACH_ACTIVITY);
+		$result = $upload->upfile('activity_banner');
+		if(!$result){
+			showMessage($upload->error);
+		}
+		//保存
+		$input	= array();
+		$input['activity_title']	= trim($_POST['activity_title']);
+		//$input['activity_type']		= trim($_POST['activity_type']);
+		$input['activity_type']		= '1';
+		$input['activity_banner']	= $upload->file_name;
+		$input['activity_style']	= trim($_POST['activity_style']);
+		$input['activity_desc']		= trim($_POST['activity_desc']);
+		$input['activity_sort']		= intval(trim($_POST['activity_sort']));
+		$input['activity_start_date']= strtotime(trim($_POST['activity_start_date']));
+		$input['activity_end_date']	= strtotime(trim($_POST['activity_end_date']));
+		$input['activity_state']	= intval($_POST['activity_state']);
+		$activity	= Model('activity');
+		$result	= $activity->add($input);
+		if($result){
+			$this->log(L('nc_add,activity_index').'['.$_POST['activity_title'].']',null);
+			showMessage(Language::get('nc_common_op_succ'),'index.php?act=activity&op=activity');
+		}else{
+			//添加失败则删除刚刚上传的图片,节省空间资源
+			@unlink(BASE_UPLOAD_PATH.DS.ATTACH_ACTIVITY.DS.$upload->file_name);
+			showMessage(Language::get('nc_common_op_fail'));
+		}
+	}
+
+	/**
+	 * 异步修改
+	 */
+	public function ajaxOp(){
+		if(in_array($_GET['branch'],array('activity_title','activity_sort'))){
+			$activity = Model('activity');
+			$update_array = array();
+			switch ($_GET['branch']){
+				/**
+				 * 活动主题
+				 */
+				case 'activity_title':
+					if(trim($_GET['value'])=='')exit;
+					break;
+				/**
+				 * 排序
+				 */
+				case 'activity_sort':
+					if(preg_match('/^\d+$/',trim($_GET['value']))<=0 or intval(trim($_GET['value']))<0 or intval(trim($_GET['value']))>255)exit;
+					break;
+				default:
+						exit;
+			}
+			$update_array[$_GET['column']] = trim($_GET['value']);
+			if($activity->update($update_array,intval($_GET['id'])))
+			echo 'true';
+		}elseif(in_array($_GET['branch'],array('activity_detail_sort'))){
+			$activity_detail = Model('activity_detail');
+			$update_array = array();
+			switch ($_GET['branch']){
+				/**
+				 * 排序
+				 */
+				case 'activity_detail_sort':
+					if(preg_match('/^\d+$/',trim($_GET['value']))<=0 or intval(trim($_GET['value']))<0 or intval(trim($_GET['value']))>255)exit;
+					break;
+				default:
+						exit;
+			}
+			$update_array[$_GET['column']] = trim($_GET['value']);
+			if($activity_detail->update($update_array,intval($_GET['id'])))
+			echo 'true';
+		}
+	}
+
+	/**
+	 * 删除活动
+	 */
+	public function delOp(){
+		$id	= '';
+		if(empty($_REQUEST['activity_id'])){
+			showMessage(Language::get('activity_del_choose_activity'));
+		}
+		if(is_array($_POST['activity_id'])){
+			try{
+				//删除数据先删除横幅图片,节省空间资源
+				foreach ($_POST['activity_id'] as $v){
+					$this->delBanner(intval($v));
+				}
+			}catch(Exception $e){
+				showMessage($e->getMessage());
+			}
+			$id	= "'".implode("','",$_POST['activity_id'])."'";
+		}else{
+			//删除数据先删除横幅图片,节省空间资源
+			$this->delBanner(intval($_GET['activity_id']));
+			$id	= intval($_GET['activity_id']);
+		}
+		$activity	= Model('activity');
+		$activity_detail	= Model('activity_detail');
+		//获取可以删除的数据
+		$condition_arr = array();
+		$condition_arr['activity_state'] = '0';//已关闭
+		$condition_arr['activity_enddate_greater_or'] = time();//过期
+		$condition_arr['activity_id_in'] = $id;
+		$activity_list = $activity->getList($condition_arr);
+		if (empty($activity_list)){//没有符合条件的活动信息直接返回成功信息
+			showMessage(Language::get('nc_common_del_succ'));
+		}
+		$id_arr = array();
+		foreach ($activity_list as $v){
+			$id_arr[] = $v['activity_id'];
+		}
+		$id_new	= "'".implode("','",$id_arr)."'";
+		//只有关闭或者过期的活动,能删除
+		if($activity_detail->del($id_new)){
+			if($activity->del($id_new)){
+				$this->log(L('nc_del,activity_index').'[ID:'.$id.']',null);
+				showMessage(Language::get('nc_common_del_succ'));
+			}
+		}
+		showMessage(Language::get('activity_del_fail'));
+	}
+
+	/**
+	 * 编辑活动/保存编辑活动
+	 */
+	public function editOp(){
+		if($_POST['form_submit'] != 'ok'){
+			if(empty($_GET['activity_id'])){
+				showMessage(Language::get('miss_argument'));
+			}
+			$activity	= Model('activity');
+			$row	= $activity->getOneById(intval($_GET['activity_id']));
+			Tpl::output('activity',$row);
+			Tpl::showpage('activity.edit');
+			exit;
+		}
+		//提交表单
+		$obj_validate = new Validate();
+		$validate_arr[] = array("input"=>$_POST["activity_title"],"require"=>"true","message"=>Language::get('activity_new_title_null'));
+		$validate_arr[] = array("input"=>$_POST["activity_start_date"],"require"=>"true","message"=>Language::get('activity_new_startdate_null'));
+		$validate_arr[] = array("input"=>$_POST["activity_end_date"],"require"=>"true",'validator'=>'Compare','operator'=>'>','to'=>"{$_POST['activity_start_date']}","message"=>Language::get('activity_new_enddate_null'));
+		$validate_arr[] = array("input"=>$_POST["activity_style"],"require"=>"true","message"=>Language::get('activity_new_style_null'));
+		$validate_arr[] = array('input'=>$_POST['activity_type'],'require'=>'true','message'=>Language::get('activity_new_type_null'));
+		$validate_arr[] = array('input'=>$_POST['activity_desc'],'require'=>'true','message'=>Language::get('activity_new_desc_null'));
+		$validate_arr[] = array('input'=>$_POST['activity_sort'],'require'=>'true','validator'=>'Range','min'=>0,'max'=>255,'message'=>Language::get('activity_new_sort_error'));
+		$obj_validate->validateparam = $validate_arr;
+		$error = $obj_validate->validate();
+		if ($error != ''){
+			showMessage(Language::get('error').$error,'','','error');
+		}
+		//构造更新内容
+		$input	= array();
+		if($_FILES['activity_banner']['name']!=''){
+			$upload	= new UploadFile();
+			$upload->set('default_dir',ATTACH_ACTIVITY);
+			$result	= $upload->upfile('activity_banner');
+			if(!$result){
+				showMessage($upload->error);
+			}
+			$input['activity_banner']	= $upload->file_name;
+		}
+		$input['activity_title']	= trim($_POST['activity_title']);
+		$input['activity_type']		= trim($_POST['activity_type']);
+		$input['activity_style']	= trim($_POST['activity_style']);
+		$input['activity_desc']		= trim($_POST['activity_desc']);
+		$input['activity_sort']		= intval(trim($_POST['activity_sort']));
+		$input['activity_start_date']	= strtotime(trim($_POST['activity_start_date']));
+		$input['activity_end_date']	= strtotime(trim($_POST['activity_end_date']));
+		$input['activity_state']	= intval($_POST['activity_state']);
+
+		$activity	= Model('activity');
+		$row	= $activity->getOneById(intval($_POST['activity_id']));
+		$result	= $activity->update($input,intval($_POST['activity_id']));
+		if($result){
+			if($_FILES['activity_banner']['name']!=''){
+				@unlink(BASE_UPLOAD_PATH.DS.ATTACH_ACTIVITY.DS.$row['activity_banner']);
+			}
+			$this->log(L('nc_edit,activity_index').'[ID:'.$_POST['activity_id'].']',null);
+			showMessage(Language::get('nc_common_save_succ'),'index.php?act=activity&op=activity');
+		}else{
+			if($_FILES['activity_banner']['name']!=''){
+				@unlink(BASE_UPLOAD_PATH.DS.ATTACH_ACTIVITY.DS.$upload->file_name);
+			}
+			showMessage(Language::get('nc_common_save_fail'));
+		}
+	}
+
+	/**
+	 * 活动细节列表
+	 */
+	public function detailOp(){
+		$activity_id = intval($_GET['id']);
+		if($activity_id <= 0){
+			showMessage(Language::get('miss_argument'));
+		}
+		//条件
+		$condition_arr = array();
+		$condition_arr['activity_id'] = $activity_id;
+		//审核状态
+		if (!empty($_GET['searchstate'])){
+			$state = intval($_GET['searchstate'])-1;
+			$condition_arr['activity_detail_state'] = "$state";
+		}
+		//店铺名称
+		if (!empty($_GET['searchstore'])){
+			$condition_arr['store_name'] = $_GET['searchstore'];
+		}
+	    //商品名称
+		if (!empty($_GET['searchgoods'])){
+			$condition_arr['item_name'] = $_GET['searchgoods'];
+		}
+		$condition_arr['order'] = 'activity_detail.activity_detail_state asc,activity_detail.activity_detail_sort asc';
+
+		$page	= new Page();
+		$page->setEachNum(10);
+		$page->setStyle('admin');
+		$activitydetail_model	= Model('activity_detail');
+		$list	= $activitydetail_model->getList($condition_arr,$page);
+		//输出到模板
+		Tpl::output('show_page',$page->show());
+		Tpl::output('list',$list);
+		Tpl::showpage('activity_detail.index');
+	}
+
+	/**
+	 * 活动内容处理
+	 */
+	public function dealOp(){
+		if(empty($_REQUEST['activity_detail_id'])){
+			showMessage(Language::get('activity_detail_del_choose_detail'));
+		}
+		//获取id
+		$id	= '';
+		if(is_array($_POST['activity_detail_id'])){
+			$id	= "'".implode("','",$_POST['activity_detail_id'])."'";
+		}else{
+			$id	= intval($_GET['activity_detail_id']);
+		}
+		//创建活动内容对象
+		$activity_detail	= Model('activity_detail');
+		if($activity_detail->update(array('activity_detail_state'=>intval($_GET['state'])),$id)){
+			$this->log(L('nc_edit,activity_index').'[ID:'.$id.']',null);
+			showMessage(Language::get('nc_common_op_succ'));
+		}else{
+			showMessage(Language::get('nc_common_op_fail'));
+		}
+	}
+
+	/**
+	 * 删除活动内容
+	 */
+	public function del_detailOp(){
+		if(empty($_REQUEST['activity_detail_id'])){
+			showMessage(Language::get('activity_detail_del_choose_detail'));
+		}
+		$id	= '';
+		if(is_array($_POST['activity_detail_id'])){
+			$id	= "'".implode("','",$_POST['activity_detail_id'])."'";
+		}else{
+			$id	= "'".intval($_GET['activity_detail_id'])."'";
+		}
+		$activity_detail	= Model('activity_detail');
+		//条件
+		$condition_arr = array();
+		$condition_arr['activity_detail_id_in'] = $id;
+		$condition_arr['activity_detail_state_in'] = "'0','2'";//未审核和已拒绝
+		if($activity_detail->delList($condition_arr)){
+			$this->log(L('nc_del,activity_index_content').'[ID:'.$id.']',null);
+			showMessage(Language::get('nc_common_del_succ'));
+		}else{
+			showMessage(Language::get('nc_common_del_fail'));
+		}
+	}
+
+	/**
+	 * 根据活动编号删除横幅图片
+	 *
+	 * @param int $id
+	 */
+	private function delBanner($id){
+		$activity	= Model('activity');
+		$row	= $activity->getOneById($id);
+		//删除图片文件
+		@unlink(BASE_UPLOAD_PATH.DS.ATTACH_ACTIVITY.DS.$row['activity_banner']);
+	}
+}

+ 316 - 0
admin/control/admin.php

@@ -0,0 +1,316 @@
+<?php
+/**
+ * 权限管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+
+class adminControl extends SystemControl{
+	private $links = array(
+		array('url'=>'act=admin&op=admin','lang'=>'limit_admin'),
+		array('url'=>'act=admin&op=admin_add','lang'=>'admin_add_limit_admin'),
+		array('url'=>'act=admin&op=gadmin','lang'=>'limit_gadmin'),
+		array('url'=>'act=admin&op=gadmin_add','lang'=>'admin_add_limit_gadmin'),
+	);
+	public function __construct(){
+		parent::__construct();
+		Language::read('admin');
+	}
+
+	/**
+	 * 管理员列表
+	 */
+	public function adminOp(){
+		$model = Model();
+		if (chksubmit()){
+			//ID为1的会员不允许删除
+			if (@in_array(1,$_POST['del_id'])){
+				showMessage(L('admin_index_not_allow_del'));
+			}
+
+			if (!empty($_POST['del_id'])){
+				if (is_array($_POST['del_id'])){
+					foreach ($_POST['del_id'] as $k => $v){
+						$model->table('admin')->where(array('admin_id'=>intval($v)))->delete();
+					}
+				}
+				$this->log(L('nc_delete,limit_admin'),1);
+				showMessage(L('nc_common_del_succ'));
+			}else {
+				showMessage(L('nc_common_del_succ'));
+			}
+		}
+		$admin_list = $model->table('admin,gadmin')->join('left join')->on('gadmin.gid=admin.admin_gid')->page(10)->select();
+
+		Tpl::output('admin_list',$admin_list);
+		Tpl::output('page',$model->showpage());
+
+		Tpl::output('top_link',$this->sublink($this->links,'admin'));
+		Tpl::showpage('admin.index');
+	}
+
+	/**
+	 * 管理员删除
+	 */
+	public function admin_delOp(){
+		if (!empty($_GET['admin_id'])){
+			if ($_GET['admin_id'] == 1){
+				showMessage(L('nc_common_save_fail'));
+			}
+			Model()->table('admin')->where(array('admin_id'=>intval($_GET['admin_id'])))->delete();
+			$this->log(L('nc_delete,limit_admin').'[ID:'.intval($_GET['admin_id']).']',1);
+			showMessage(L('nc_common_del_succ'));
+		}else {
+			showMessage(L('nc_common_del_fail'));
+		}
+	}
+
+	/**
+	 * 管理员添加
+	 */
+	public function admin_addOp(){
+		if (chksubmit()){
+			$limit_str = '';
+			$model_admin = Model('admin');
+			$param['admin_name'] = $_POST['admin_name'];
+			$param['admin_gid'] = $_POST['gid'];
+			$param['admin_password'] = md5($_POST['admin_password']);
+			$rs = $model_admin->addAdmin($param);
+			if ($rs){
+				$this->log(L('nc_add,limit_admin').'['.$_POST['admin_name'].']',1);
+				showMessage(L('nc_common_save_succ'),'index.php?act=admin&op=admin');
+			}else {
+				showMessage(L('nc_common_save_fail'));
+			}
+		}
+
+		//得到权限组
+		$gadmin = Model('gadmin')->field('gname,gid')->select();
+		Tpl::output('gadmin',$gadmin);
+		Tpl::output('top_link',$this->sublink($this->links,'admin_add'));
+        Tpl::output('limit',$this->permission());
+		Tpl::showpage('admin.add');
+	}
+
+	/**
+	 * 设置权限组权限
+	 */
+	public function gadmin_setOp(){
+		$model = Model('gadmin');
+		$gid = intval($_GET['gid']);
+
+		$ginfo = $model->getby_gid($gid);
+		if (empty($ginfo)){
+			showMessage(L('admin_set_admin_not_exists'));
+		}
+		if (chksubmit()){
+			$limit_str = '';
+			if (is_array($_POST['permission'])){
+				$limit_str = implode('|',$_POST['permission']);
+			}
+			$limit_str = encrypt($limit_str,MD5_KEY.md5($_POST['gname']));
+			$data['limits'] = $limit_str;
+			$data['gname']	= $_POST['gname'];
+			$update = $model->where(array('gid'=>$gid))->update($data);
+			if ($update){
+				$this->log(L('nc_edit,limit_gadmin').'['.$_POST['gname'].']',1);
+				showMessage(L('nc_common_save_succ'),'index.php?act=admin&op=gadmin');
+			}else {
+				showMessage(L('nc_common_save_succ'));
+			}
+		}
+
+		//解析已有权限
+		$hlimit = decrypt($ginfo['limits'],MD5_KEY.md5($ginfo['gname']));
+		$ginfo['limits'] = explode('|',$hlimit);
+		Tpl::output('ginfo',$ginfo);
+        Tpl::output('limit',$this->permission());
+		Tpl::output('top_link',$this->sublink($this->links,'gadmin'));
+		Tpl::showpage('gadmin.set');
+	}
+
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			//管理人员名称验证
+			case 'check_admin_name':
+				$model_admin = Model('admin');
+				$condition['admin_name'] = $_GET['admin_name'];
+				$list = $model_admin->infoAdmin($condition);
+				if (!empty($list)){
+					exit('false');
+				}else {
+					exit('true');
+				}
+				break;
+			//权限组名称验证
+			case 'check_gadmin_name':
+				$condition = array();
+				if (is_numeric($_GET['gid'])){
+					$condition['gid'] = array('neq',intval($_GET['gid']));
+				}
+				$condition['gname'] = $_GET['gname'];
+				$info = Model('gadmin')->where($condition)->find();
+				if (!empty($info)){
+					exit('false');
+				}else {
+					exit('true');
+				}
+				break;
+		}
+	}
+
+	/**
+	 * 设置管理员权限
+	 */
+	public function admin_editOp(){
+		if (chksubmit()){
+			//没有更改密码
+			if ($_POST['new_pw'] != ''){
+				$data['admin_password'] = md5($_POST['new_pw']);
+			}
+			$data['admin_id'] = intval($_GET['admin_id']);
+			$data['admin_gid'] = intval($_POST['gid']);
+			//查询管理员信息
+			$admin_model = Model('admin');
+			$result = $admin_model->updateAdmin($data);
+			if ($result){
+				$this->log(L('nc_edit,limit_admin').'[ID:'.intval($_GET['admin_id']).']',1);
+				showMessage(Language::get('admin_edit_success'),'index.php?act=admin&op=admin');
+			}else{
+				showMessage(Language::get('admin_edit_fail'),'index.php?act=admin&op=admin');
+			}
+		}else{
+			//查询用户信息
+			$admin_model = Model('admin');
+			$admininfo = $admin_model->getOneAdmin(intval($_GET['admin_id']));
+			if (!is_array($admininfo) || count($admininfo)<=0){
+				showMessage(Language::get('admin_edit_admin_error'),'index.php?act=admin&op=admin');
+			}
+			Tpl::output('admininfo',$admininfo);
+			Tpl::output('top_link',$this->sublink($this->links,'admin'));
+
+			//得到权限组
+			$gadmin = Model('gadmin')->field('gname,gid')->select();
+			Tpl::output('gadmin',$gadmin);
+			Tpl::showpage('admin.edit');
+		}
+	}
+
+    /**
+     * 取得所有权限项
+     *
+     * @return array
+     */
+    private function permission() {
+		Language::read('common');
+		$lang = Language::getLangContent();
+		$limit = require(BASE_PATH.'/include/limit.php');
+		if (is_array($limit)){
+			foreach ($limit as $k=>$v) {
+				if (is_array($v['child'])){
+					$tmp = array();
+					foreach ($v['child'] as $key => $value) {
+						$act = (!empty($value['act'])) ? $value['act'] : $v['act'];
+						if (strpos($act,'|') == false){//act参数不带|
+							$limit[$k]['child'][$key]['op'] = rtrim($act.'.'.str_replace('|','|'.$act.'.',$value['op']),'.');
+						}else{//act参数带|
+							$tmp_str = '';
+							if (empty($value['op'])){
+								$limit[$k]['child'][$key]['op'] = $act;
+							}elseif (strpos($value['op'],'|') == false){//op参数不带|
+								foreach (explode('|',$act) as $v1) {
+									$tmp_str .= "$v1.{$value['op']}|";
+								}
+								$limit[$k]['child'][$key]['op'] = rtrim($tmp_str,'|');
+							}elseif (strpos($value['op'],'|') != false && strpos($act,'|') != false){//op,act都带|,交差权限
+								foreach (explode('|',$act) as $v1) {
+									foreach (explode('|',$value['op']) as $v2) {
+										$tmp_str .= "$v1.$v2|";
+									}
+								}
+								$limit[$k]['child'][$key]['op'] = rtrim($tmp_str,'|');
+							}
+						}
+					}
+				}
+			}
+			return $limit;
+		}else{
+			return array();
+		}
+    }
+
+	/**
+	 * 权限组
+	 */
+	public function gadminOp(){
+		$model = Model('gadmin');
+		if (chksubmit()){
+			if (@in_array(1,$_POST['del_id'])){
+				showMessage(L('admin_index_not_allow_del'));
+			}
+
+			if (!empty($_POST['del_id'])){
+				if (is_array($_POST['del_id'])){
+					foreach ($_POST['del_id'] as $k => $v){
+						$model->where(array('gid'=>intval($v)))->delete();
+					}
+				}
+				$this->log(L('nc_delete,limit_gadmin').'[ID:'.implode(',',$_POST['del_id']).']',1);
+				showMessage(L('nc_common_del_succ'));
+			}else {
+				showMessage(L('nc_common_del_fail'));
+			}
+		}
+		$list = $model->page(10)->select();
+
+		Tpl::output('list',$list);
+		Tpl::output('page',$model->showpage());
+
+		Tpl::output('top_link',$this->sublink($this->links,'gadmin'));
+		Tpl::showpage('gadmin.index');
+	}
+
+	/**
+	 * 添加权限组
+	 */
+	public function gadmin_addOp(){
+		if (chksubmit()){
+			$limit_str = '';
+			$model = Model('gadmin');
+			if (is_array($_POST['permission'])){
+				$limit_str = implode('|',$_POST['permission']);
+			}
+			$data['limits'] = encrypt($limit_str,MD5_KEY.md5($_POST['gname']));
+			$data['gname'] = $_POST['gname'];
+			if ($model->insert($data)){
+				$this->log(L('nc_add,limit_gadmin').'['.$_POST['gname'].']',1);
+				showMessage(L('nc_common_save_succ'),'index.php?act=admin&op=gadmin');
+			}else {
+				showMessage(L('nc_common_save_fail'));
+			}
+		}
+		Tpl::output('top_link',$this->sublink($this->links,'gadmin_add'));
+        Tpl::output('limit',$this->permission());
+		Tpl::showpage('gadmin.add');
+	}
+
+	/**
+	 * 组删除
+	 */
+	public function gadmin_delOp(){
+		if (is_numeric($_GET['gid'])){
+			Model('gadmin')->where(array('gid'=>intval($_GET['gid'])))->delete();
+			$this->log(L('nc_delete,limit_gadmin').'[ID'.intval($_GET['gid']).']',1);
+			redirect();
+		}else {
+			showMessage(L('nc_common_op_fail'));
+		}
+	}
+}

+ 151 - 0
admin/control/admin_log.php

@@ -0,0 +1,151 @@
+<?php
+/**
+ * 系统操作日志
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class admin_logControl extends SystemControl{
+	const EXPORT_SIZE = 5000;
+
+	public function __construct(){
+		parent::__construct();
+		Language::read('admin_log');
+	}
+
+	/**
+	 * 日志列表
+	 *
+	 */
+	public function listOp(){
+		$model = Model('admin_log');
+		$condition = array();
+		if (!empty($_GET['admin_name'])){
+			$condition['admin_name'] = $_GET['admin_name'];
+		}
+		if(!empty($_GET['time_from'])){
+			$time1	= strtotime($_GET['time_from']);
+		}
+		if(!empty($_GET['time_to'])){
+			$time2	= strtotime($_GET['time_to']);
+			if($time2 !== false) $time2 = $time2 + 86400;
+		}
+		if ($time1 && $time2){
+			$condition['createtime'] = array('between',array($time1,$time2));
+		}elseif($time1){
+			$condition['createtime'] = array('egt',$time1);
+		}elseif($time2){
+			$condition['createtime'] = array('elt',$time2);
+		}
+		$list = $model->where($condition)->order('id desc')->page(20)->select();
+
+//		$admin = Model()->table('admin,gadmin')->field('admin_id,admin_name,gid,gname')->join('left')->on('admin.admin_gid=gadmin.gid')->select();
+
+		Tpl::output('list',$list);
+		Tpl::output('page',$model->showpage());
+		Tpl::showpage('admin_log.index');
+	}
+
+	/**
+	 * 删除日志
+	 *
+	 */
+	public function list_delOp(){
+		$condition = array();
+		if (is_numeric($_GET['delago'])){
+			$condition['createtime'] = array('lt',TIMESTAMP-intval($_GET['delago']));
+		}elseif($_GET['delago'] == 'all'){
+			$condition = true;
+		}elseif(is_array($_POST['del_id'])){
+			$condition['id'] = array('in',$_POST['del_id']);
+		}
+		if (!Model('admin_log')->where($condition)->delete()){
+			$this->log(L('nc_del,nc_admin_log'),0);
+			showMessage(L('nc_common_del_fail'),'','html','error');
+		}else{
+		    $this->log(L('nc_del,nc_admin_log'),1);
+			showMessage(L('nc_common_del_succ'),'','html','error');
+		}
+	}
+
+	/**
+	 * 导出第一步
+	 */
+	public function export_step1Op(){
+		$model = Model('admin_log');
+		$condition = array();
+		if (!empty($_GET['admin_name'])){
+			$condition['admin_name'] = $_GET['admin_name'];
+		}
+		if(!empty($_GET['time_from'])){
+			$time1	= strtotime($_GET['time_from']);
+		}
+		if(!empty($_GET['time_to'])){
+			$time2	= strtotime($_GET['time_to']);
+			if($time2 !== false) $time2 = $time2 + 86400;
+		}
+		if ($time1 && $time2){
+			$condition['createtime'] = array('between',array($time1,$time2));
+		}elseif($time1){
+			$condition['createtime'] = array('egt',$time1);
+		}elseif($time2){
+			$condition['createtime'] = array('elt',$time2);
+		}
+		if (!is_numeric($_GET['curpage'])){
+			$count = $model->where($condition)->count();
+			$array = array();
+			if ($count > self::EXPORT_SIZE ){	//显示下载链接
+				$page = ceil($count/self::EXPORT_SIZE);
+				for ($i=1;$i<=$page;$i++){
+					$limit1 = ($i-1)*self::EXPORT_SIZE + 1;
+					$limit2 = $i*self::EXPORT_SIZE > $count ? $count : $i*self::EXPORT_SIZE;
+					$array[$i] = $limit1.' ~ '.$limit2 ;
+				}
+				Tpl::output('list',$array);
+				Tpl::output('murl','index.php?act=admin_log&op=list');
+				Tpl::showpage('export.excel');
+			}else{	//如果数量小,直接下载
+				$data = $model->where($condition)->order('id desc')->limit(self::EXPORT_SIZE)->select();
+				$this->createExcel($data);
+			}
+		}else{	//下载
+			$limit1 = ($_GET['curpage']-1) * self::EXPORT_SIZE;
+			$limit2 = self::EXPORT_SIZE;
+			$data = $model->where($condition)->order('id desc')->limit("{$limit1},{$limit2}")->select();
+			$this->createExcel($data);
+		}
+	}
+
+	/**
+	 * 生成excel
+	 *
+	 * @param array $data
+	 */
+	private function createExcel($data = array()){
+		Language::read('export');
+		import('libraries.excel');
+		$excel_obj = new Excel();
+		$excel_data = array();
+		//设置样式
+		$excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1')));
+		//header
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('admin_log_man'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('admin_log_do'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('admin_log_dotime'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>'IP');
+		foreach ((array)$data as $k=>$v){
+			$tmp = array();
+			$tmp[] = array('data'=>$v['admin_name']);
+			$tmp[] = array('data'=>$v['content']);
+			$tmp[] = array('data'=>date('Y-m-d H:i:s',$v['createtime']));
+			$tmp[] = array('data'=>$v['ip']);
+			$excel_data[] = $tmp;
+		}
+		$excel_data = $excel_obj->charset($excel_data,CHARSET);
+		$excel_obj->addArray($excel_data);
+		$excel_obj->addWorksheet($excel_obj->charset(L('nc_admin_log'),CHARSET));
+		$excel_obj->generateXML($excel_obj->charset(L('nc_admin_log'),CHARSET).$_GET['curpage'].'-'.date('Y-m-d-H',time()));
+	}
+}

+ 577 - 0
admin/control/adv.php

@@ -0,0 +1,577 @@
+<?php
+/**
+ * 广告管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+
+class advControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('adv');
+	}
+
+	/**
+	 *
+	 * 管理员添加广告
+	 */
+	public function adv_addOp(){
+		if(!chksubmit()){
+		    $adv  = Model('adv');
+		    /**
+		     * 取广告位信息
+		     */
+		    $ap_list = $adv->getApList();
+		    Tpl::output('ap_list',$ap_list);
+		    Tpl::showpage('adv_add');
+		}else{
+			$lang = Language::getLangContent();
+			$adv  = Model('adv');
+		    $upload		= new UploadFile();
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$validate_arr = array();
+			$validate_arr[] = array("input"=>$_POST["adv_name"], "require"=>"true", "message"=>$lang['adv_can_not_null']);
+			$validate_arr[] = array("input"=>$_POST["aptype_hidden"], "require"=>"true", "message"=>$lang['must_select_ap']);
+			$validate_arr[] = array("input"=>$_POST["ap_id"], "require"=>"true", "message"=>$lang['must_select_ap']);
+			$validate_arr[] = array("input"=>$_POST["adv_start_time"], "require"=>"true", "message"=>$lang['must_select_start_time']);
+			$validate_arr[] = array("input"=>$_POST["adv_end_time"], "require"=>"true", "message"=>$lang['must_select_end_time']);
+			if ($_POST["aptype_hidden"] == '1'){
+				//文字广告
+				$validate_arr[] = array("input"=>$_POST["adv_word"], "require"=>"true", "message"=>$lang['textadv_null_error']);
+			}elseif ($_POST["aptype_hidden"] == '3'){
+				//flash广告
+				$validate_arr[] = array("input"=>$_FILES['flash_swf']['name'], "require"=>"true", "message"=>$lang['flashadv_null_error']);
+			}else {
+				//图片广告
+				$validate_arr[] = array("input"=>$_FILES['adv_pic']['name'], "require"=>"true", "message"=>$lang['picadv_null_error']);
+			}
+			$obj_validate->validateparam = $validate_arr;
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				$insert_array['adv_title']       = trim($_POST['adv_name']);
+				$insert_array['ap_id']  		 = intval($_POST['ap_id']);
+				$insert_array['adv_start_date']  = $this->getunixtime($_POST['adv_start_time']);
+				$insert_array['adv_end_date']    = $this->getunixtime($_POST['adv_end_time']);
+				$insert_array['is_allow']        = '1';
+				/**
+				 * 建立文字广告信息的入库数组
+				 */
+				//判断页面编码确定汉字所占字节数
+			    switch (CHARSET){
+				   case 'UTF-8':
+					  $charrate = 3;
+					  break;
+				   case 'GBK':
+					  $charrate = 2;
+					  break;
+			    }
+				//图片广告
+				if($_POST['aptype_hidden'] == '0'){
+					$upload->set('default_dir',ATTACH_ADV);
+					$result	= $upload->upfile('adv_pic');
+					if (!$result){
+						showMessage($upload->error,'','','error');
+					}
+					$ac = array(
+					'adv_pic'     =>$upload->file_name,
+					'adv_pic_url' =>trim($_POST['adv_pic_url'])
+					);
+					$ac = serialize($ac);
+					$insert_array['adv_content'] = $ac;
+				}
+				//文字广告
+				if($_POST['aptype_hidden'] == '1'){
+					if(strlen($_POST['adv_word'])>($_POST['adv_word_len']*$charrate)){
+						$error = $lang['wordadv_toolong'];
+						showMessage($error);die;
+					}
+					$ac = array(
+					'adv_word'    =>trim($_POST['adv_word']),
+					'adv_word_url'=>trim($_POST['adv_word_url'])
+					);
+					$ac = serialize($ac);
+					$insert_array['adv_content'] = $ac;
+				}
+				//建立Flash广告信息的入库数组
+				if($_POST['aptype_hidden'] == '3'){
+					$upload->set('default_dir',ATTACH_ADV);
+					$upload->upfile('flash_swf');
+					$ac = array(
+					'flash_swf'  =>$upload->file_name,
+					'flash_url'  =>trim($_POST['flash_url'])
+					);
+					$ac = serialize($ac);
+					$insert_array['adv_content'] = $ac;
+				}
+				//广告信息入库
+				$result = $adv->adv_add($insert_array);
+				//更新相应广告位所拥有的广告数量
+				$condition['ap_id'] = intval($_POST['ap_id']);
+				$ap_list = $adv->getApList($condition);
+				$ap_list = $ap_list['0'];
+				$adv_num = $ap_list['adv_num'];
+				$param['ap_id']   = intval($_POST['ap_id']);
+				$param['adv_num'] = $adv_num+1;
+				$result2 = $adv->ap_update($param);
+
+			    if ($result&&$result2){
+					$this->log(L('adv_add_succ').'['.$_POST["adv_name"].']',null);
+					showMessage($lang['adv_add_succ'],'index.php?act=adv&op=adv&ap_id='.$_POST['ap_id']);
+				}else {
+					showMessage($lang['adv_add_fail']);
+				}
+		}
+	  }
+	}
+
+	/**
+	 *
+	 * 管理广告位
+	 */
+	public function ap_manageOp(){
+		$lang = Language::getLangContent();
+		$adv  = Model('adv');
+		/**
+		 * 多选删除广告位
+		 */
+	    if (chksubmit()){
+			if (!empty($_POST['del_id'])){
+				$in_array_id=implode(',',$_POST['del_id']);
+				$where  = "where ap_id in (".$in_array_id.")";
+			    Db::delete("adv_position",$where);
+			    foreach ($_POST['del_id'] as $v) {
+			    	$adv->delapcache($v);
+			    }
+			}
+			$url = array(
+						array(
+							'url'=>trim($_POST['ref_url']),
+							'msg'=>$lang['goback_ap_manage'],
+						)
+					);
+			$this->log(L('ap_del_succ').'[ID:'.$in_array_id.']',null);
+			showMessage($lang['ap_del_succ'],$url);
+		}
+		/**
+		 * 显示广告位管理界面
+		 */
+		$condition = array();
+		$orderby   = '';
+		if($_GET['search_name'] != ''){
+			$condition['ap_name'] = trim($_GET['search_name']);
+		}
+		/**
+		 * 分页
+		 */
+		$page	 = new Page();
+		$page->setEachNum(25);
+		$page->setStyle('admin');
+
+		$ap_list  = $adv->getApList($condition,$page,$orderby);
+		$adv_list = $adv->getList();
+ 		Tpl::output('ap_list',$ap_list);
+ 		Tpl::output('adv_list',$adv_list);
+ 		Tpl::output('page',$page->show());
+		Tpl::showpage('ap_manage');
+	}
+
+	/**
+	 * js代码调用
+	 */
+	public function ap_copyOp(){
+		Tpl::showpage('ap_copy', 'null_layout');
+	}
+
+	/**
+	 *
+	 * 修改广告位
+	 */
+	public function ap_editOp(){
+		if(!chksubmit()){
+		     $adv  = Model('adv');
+		     $condition['ap_id'] = intval($_GET['ap_id']);
+		     $ap_list = $adv->getApList($condition);
+			 Tpl::output('ref_url',getReferer());
+		     Tpl::output('ap_list',$ap_list);
+		     Tpl::showpage('ap_edit');
+		}else{
+			$lang = Language::getLangContent();
+			$adv  = Model('adv');
+		    $upload		= new UploadFile();
+
+			$obj_validate = new Validate();
+			if($_POST['ap_class'] == '1'){
+				$obj_validate->validateparam = array(
+			    array("input"=>$_POST["ap_name"], "require"=>"true", "message"=>$lang['ap_can_not_null']),
+				array("input"=>$_POST["ap_width"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['ap_width_must_num']),
+			    );
+			}else{
+				$obj_validate->validateparam = array(
+			    array("input"=>$_POST["ap_name"], "require"=>"true", "message"=>$lang['ap_can_not_null']),
+				array("input"=>$_POST["ap_width"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['ap_width_must_num']),
+				array("input"=>$_POST["ap_height"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['ap_height_must_num']),
+			    );
+			}
+
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				$param['ap_id']      = intval($_GET['ap_id']);
+				$param['ap_name']    = trim($_POST["ap_name"]);
+				$param['ap_intro']   = trim($_POST["ap_intro"]);
+				$param['ap_width']   = intval(trim($_POST["ap_width"]));
+				$param['ap_height']  = intval(trim($_POST["ap_height"]));
+				if($_POST["ap_display"] != ''){
+					$param['ap_display'] = intval($_POST["ap_display"]);
+				}
+				if($_POST["is_use"] != ''){
+					$param['is_use']     = intval($_POST["is_use"]);
+				}
+			    if($_FILES['default_pic']['name'] != ''){
+			    	$upload->set('default_dir',ATTACH_ADV);
+					$result = $upload->upfile('default_pic');
+			    	if (!$result){
+						showMessage($upload->error,'','','error');
+					}
+					$param['default_content'] = $upload->file_name;
+				}
+				if($_POST['default_word'] != ''){
+					$param['default_content'] = trim($_POST['default_word']);
+				}
+				$result = $adv->ap_update($param);
+
+			    if ($result){
+					$this->log(L('ap_change_succ').'['.$_POST["ap_name"].']',null);
+					showMessage($lang['ap_change_succ'],$_POST['ref_url']);
+				}else {
+					showMessage($lang['ap_change_fail']	,$url);
+				}
+			}
+		}
+	}
+
+	/**
+	 *
+	 * 新增广告位
+	 */
+	public function ap_addOp(){
+		if($_POST['form_submit'] != 'ok'){
+		    Tpl::showpage('ap_add');
+		}else{
+			$lang = Language::getLangContent();
+			$adv  = Model('adv');
+		    $upload		= new UploadFile();
+
+			$obj_validate = new Validate();
+			if($_POST['ap_class'] == '1'){
+				$obj_validate->validateparam = array(
+			    array("input"=>$_POST["ap_name"], "require"=>"true", "message"=>$lang['ap_can_not_null']),
+				array("input"=>$_POST["ap_width_word"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['ap_wordwidth_must_num']),
+				array("input"=>$_POST["default_word"], "require"=>"true", "message"=>$lang['default_word_can_not_null']),
+			);
+			}else{
+				$obj_validate->validateparam = array(
+			    array("input"=>$_POST["ap_name"], "require"=>"true", "message"=>$lang['ap_can_not_null']),
+				array("input"=>$_POST["ap_width_media"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['ap_width_must_num']),
+				array("input"=>$_POST["ap_height"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['ap_height_must_num']),
+				array("input"=>$_FILES["default_pic"], "require"=>"true", "message"=>$lang['default_pic_can_not_null']),
+			);
+			}
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				$insert_array['ap_name']    = trim($_POST['ap_name']);
+				$insert_array['ap_intro']   = trim($_POST['ap_intro']);
+				$insert_array['ap_class']   = intval($_POST['ap_class']);
+				$insert_array['ap_display'] = intval($_POST['ap_display']);
+				$insert_array['is_use']     = intval($_POST['is_use']);
+				if($_POST['ap_width_media'] != ''){
+					$insert_array['ap_width']  = intval(trim($_POST['ap_width_media']));
+				}
+			    if($_POST['ap_width_word'] != ''){
+					$insert_array['ap_width']  = intval(trim($_POST['ap_width_word']));
+				}
+				if($_POST['default_word'] != ''){
+					$insert_array['default_content'] = trim($_POST['default_word']);
+				}
+				if($_FILES['default_pic']['name'] != ''){
+					$upload->set('default_dir',ATTACH_ADV);
+					$result = $upload->upfile('default_pic');
+					if (!$result){
+						showMessage($upload->error,'','','error');
+					}
+					$insert_array['default_content'] = $upload->file_name;
+				}
+				$insert_array['ap_height'] = intval(trim($_POST['ap_height']));
+			    $result  = $adv->ap_add($insert_array);
+
+				if ($result){
+					$this->log(L('ap_add_succ').'['.$_POST["ap_name"].']',null);
+					showMessage($lang['ap_add_succ'],'index.php?act=adv&op=ap_manage','html','succ',1,4000);
+				}else {
+					showMessage($lang['ap_add_fail']);
+				}
+			}
+		}
+	}
+
+	/**
+	 *
+	 * 广告管理
+	 */
+	public function advOp(){
+		$lang = Language::getLangContent();
+		$adv  = Model('adv');
+		if (chksubmit()){
+			if (is_array($_POST['del_id']) && !empty($_POST['del_id'])){
+                // 删除缓存
+                Model('adv')->dropApCacheByAdvIds($_POST['del_id']);
+
+				$in_array_id = "'".implode("','", $_POST['del_id'])."'";
+				$where  = "where adv_id in (".$in_array_id.")";
+			    Db::delete("adv", $where);
+			}
+			$url = array(
+						array(
+							'url'=>getReferer(),
+							'msg'=>$lang['goback_adv_manage'],
+						)
+					);
+			$this->log(L('adv_del_succ').'[ID:'.$in_array_id.']',null);
+			showMessage($lang['adv_del_succ'],$url);
+		}
+		/**
+		 * 分页
+		 */
+		$page	 = new Page();
+		$page->setEachNum(20);
+		$page->setStyle('admin');
+		$condition = array();
+		$condition['is_allow'] = '1';
+		$limit     = '';
+		$orderby   = '';
+		if ($_GET['ap_id'] != ''){
+			$condition['ap_id'] = intval($_GET['ap_id']);
+		}
+		$adv_info = $adv->getList($condition,$page,$limit,$orderby);
+		$ap_info  = $adv->getApList();
+		Tpl::output('adv_info',$adv_info);
+		Tpl::output('ap_info',$ap_info);
+		Tpl::output('ap_name',Model()->table('adv_position')->getfby_ap_id(intval($_GET['ap_id']),'ap_name'));
+		Tpl::output('page',$page->show());
+		Tpl::showpage('adv.index');
+	}
+
+	/**
+	 *
+	 * 修改广告
+	 */
+    public function adv_editOp(){
+    	if($_POST['form_submit'] != 'ok'){
+		     $adv  = Model('adv');
+		     $condition['adv_id'] = intval($_GET['adv_id']);
+		     $adv_list = $adv->getList($condition);
+		     $ap_info  = $adv->getApList();
+			 Tpl::output('ref_url',getReferer());
+		     Tpl::output('adv_list',$adv_list);
+		     Tpl::output('ap_info',$ap_info);
+		     Tpl::showpage('adv.edit');
+    	}else{
+    		$lang = Language::getLangContent();
+    	    $adv  = Model('adv');
+		    $upload		= new UploadFile();
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+			    array("input"=>$_POST["adv_name"], "require"=>"true", "message"=>$lang['ap_can_not_null']),
+				array("input"=>$_POST["adv_start_date"], "require"=>"true","message"=>$lang['must_select_start_time']),
+				array("input"=>$_POST["adv_end_date"], "require"=>"true", "message"=>$lang['must_select_end_time'])
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				$param['adv_id']         = intval($_GET['adv_id']);
+				$param['adv_title']      = trim($_POST['adv_name']);
+				$param['adv_start_date'] = $this->getunixtime(trim($_POST['adv_start_date']));
+				$param['adv_end_date']   = $this->getunixtime(trim($_POST['adv_end_date']));
+				/**
+				  * 建立图片广告信息的入库数组
+				  */
+				if($_POST['mark'] == '0'){
+				if($_FILES['adv_pic']['name'] != ''){
+				  	$upload->set('default_dir',ATTACH_ADV);
+					$result	= $upload->upfile('adv_pic');
+					if (!$result){
+						showMessage($upload->error,'','','error');
+					}
+					$ac = array(
+					'adv_pic'     =>$upload->file_name,
+					'adv_pic_url' =>trim($_POST['adv_pic_url'])
+					);
+					$ac = serialize($ac);
+					$param['adv_content'] = $ac;
+				}else{
+					$ac = array(
+					'adv_pic'     =>trim($_POST['pic_ori']),
+					'adv_pic_url' =>trim($_POST['adv_pic_url'])
+					);
+					$ac = serialize($ac);
+					$param['adv_content'] = $ac;
+				}
+				}
+			   /**
+				 * 建立文字广告信息的入库数组
+				 */
+				if($_POST['mark'] == '1'){
+				//判断页面编码确定汉字所占字节数
+		        switch (CHARSET){
+			       case 'UTF-8':
+				        $charrate = 3;
+				        break;
+			       case 'GBK':
+				        $charrate = 2;
+				        break;
+		        }
+				if(strlen($_POST['adv_word'])>($_POST['adv_word_len']*$charrate)){
+						$error = $lang['wordadv_toolong'];
+						showMessage($error);die;
+				}
+					$ac = array(
+					'adv_word'    =>trim($_POST['adv_word']),
+					'adv_word_url'=>trim($_POST['adv_word_url'])
+					);
+					$ac = serialize($ac);
+					$param['adv_content'] = $ac;
+				}
+				/**
+				 * 建立Flash广告信息的入库数组
+				 */
+				if($_POST['mark'] == '3'){
+				if($_FILES['flash_swf']['name'] != ''){
+					$upload->set('default_dir',ATTACH_ADV);
+					$result	= $upload->upfile('flash_swf');
+					$ac = array(
+					'flash_swf'  =>$upload->file_name,
+					'flash_url'  =>trim($_POST['flash_url'])
+					);
+					$ac = serialize($ac);
+					$param['adv_content'] = $ac;
+				 }else{
+				 	$ac = array(
+					'flash_swf'  =>trim($_POST['flash_ori']),
+					'flash_url'  =>trim($_POST['flash_url'])
+					);
+					$ac = serialize($ac);
+					$param['adv_content'] = $ac;
+				 }
+				}
+				$result = $adv->update($param);
+
+			    if ($result){
+					$url = array(
+						array(
+							'url'=>trim($_POST['ref_url']),
+							'msg'=>$lang['goback_ap_manage'],
+						)
+					);
+					$this->log(L('adv_change_succ').'['.$_POST["ap_name"].']',null);
+					showMessage($lang['adv_change_succ'],$url);
+				}else {
+					showMessage($lang['adv_change_fail'],$url);
+				}
+			}
+    	}
+    }
+
+    /**
+     *
+     * 删除广告
+     */
+    public function adv_delOp(){
+    	$lang = Language::getLangContent();
+    	$adv  = Model('adv');
+       /**
+		 * 删除一个广告
+		 */
+
+			$result  = $adv->adv_del(intval($_GET['adv_id']));
+
+		    if (!$result){
+					$url = array(
+						array(
+							'url'=>'index.php?act=adv&op=adv',
+							'msg'=>$lang['goback_adv_manage'],
+						),
+						array(
+							'url'=>'index.php?act=adv&op=ap_manage',
+							'msg'=>$lang['goback_ap_manage'],
+						),
+					);
+					showMessage($lang['adv_del_fail'],$url);die;
+				}else{
+					$this->log(L('adv_del_succ').'['.intval($_GET['adv_id']).']',null);
+					showMessage($lang['adv_del_succ'],$url);die;
+				}
+		 /**
+		  * 多选删除多个广告
+		  */
+	if (chksubmit()){
+
+        if($_POST['del_id'] != ''){
+			foreach ($_POST['del_id'] as $k=>$v){
+				$v = intval($v);
+
+				$adv->adv_del($v);
+
+			}
+			$url = array(
+						array(
+							'url'=>'index.php?act=adv&op=adv',
+							'msg'=>$lang['goback_adv_manage'],
+						)
+					);
+			showMessage($lang['adv_del_succ'],$url);
+		}
+	}
+    }
+
+    /**
+     *
+     * 获取UNIX时间戳
+     */
+	public function getunixtime($time){
+		$array     = explode("-", $time);
+		$unix_time = mktime(0,0,0,$array[1],$array[2],$array[0]);
+		return $unix_time;
+	}
+
+	/**
+	 *
+	 * ajaxOp
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			case 'is_use':
+			$adv=Model('adv');
+			$param[trim($_GET['column'])]=intval($_GET['value']);
+			$param['ap_id']=intval($_GET['id']);
+			$adv->ap_update($param);
+
+			echo 'true';exit;
+			break;
+		}
+	}
+}

+ 385 - 0
admin/control/article.php

@@ -0,0 +1,385 @@
+<?php
+/**
+ * 文章管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class articleControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('article');
+	}
+	/**
+	 * 文章管理
+	 */
+	public function articleOp(){
+		$lang	= Language::getLangContent();
+		$model_article = Model('article');
+		/**
+		 * 删除
+		 */
+		if (chksubmit()){
+			if (is_array($_POST['del_id']) && !empty($_POST['del_id'])){
+				$model_upload = Model('upload');
+				foreach ($_POST['del_id'] as $k => $v){
+					$v = intval($v);
+					/**
+					 * 删除图片
+					 */
+					$condition['upload_type'] = '1';
+					$condition['item_id'] = $v;
+					$upload_list = $model_upload->getUploadList($condition);
+					if (is_array($upload_list)){
+						foreach ($upload_list as $k_upload => $v_upload){
+							$model_upload->del($v_upload['upload_id']);
+							@unlink(BASE_UPLOAD_PATH.DS.ATTACH_ARTICLE.DS.$v_upload['file_name']);
+						}
+					}
+					$model_article->del($v);
+				}
+				$this->log(L('article_index_del_succ').'[ID:'.implode(',',$_POST['del_id']).']',null);
+				showMessage($lang['article_index_del_succ']);
+			}else {
+				showMessage($lang['article_index_choose']);
+			}
+		}
+		/**
+		 * 检索条件
+		 */
+		$condition['ac_id'] = intval($_GET['search_ac_id']);
+		$condition['like_title'] = trim($_GET['search_title']);
+		/**
+		 * 分页
+		 */
+		$page	= new Page();
+		$page->setEachNum(10);
+		$page->setStyle('admin');
+		/**
+		 * 列表
+		 */
+		$article_list = $model_article->getArticleList($condition,$page);
+		/**
+		 * 整理列表内容
+		 */
+		if (is_array($article_list)){
+			/**
+			 * 取文章分类
+			 */
+			$model_class = Model('article_class');
+			$class_list = $model_class->getClassList($condition);
+			$tmp_class_name = array();
+			if (is_array($class_list)){
+				foreach ($class_list as $k => $v){
+					$tmp_class_name[$v['ac_id']] = $v['ac_name'];
+				}
+			}
+
+			foreach ($article_list as $k => $v){
+				/**
+				 * 发布时间
+				 */
+				$article_list[$k]['article_time'] = date('Y-m-d H:i:s',$v['article_time']);
+				/**
+				 * 所属分类
+				 */
+				if (@array_key_exists($v['ac_id'],$tmp_class_name)){
+					$article_list[$k]['ac_name'] = $tmp_class_name[$v['ac_id']];
+				}
+			}
+		}
+		/**
+		 * 分类列表
+		 */
+		$model_class = Model('article_class');
+		$parent_list = $model_class->getTreeClassList(2);
+		if (is_array($parent_list)){
+			$unset_sign = false;
+			foreach ($parent_list as $k => $v){
+				$parent_list[$k]['ac_name'] = str_repeat("&nbsp;",$v['deep']*2).$v['ac_name'];
+			}
+		}
+
+		Tpl::output('article_list',$article_list);
+		Tpl::output('page',$page->show());
+		Tpl::output('search_title',trim($_GET['search_title']));
+		Tpl::output('search_ac_id',intval($_GET['search_ac_id']));
+		Tpl::output('parent_list',$parent_list);
+		Tpl::showpage('article.index');
+	}
+
+	/**
+	 * 文章添加
+	 */
+	public function article_addOp(){
+		$lang	= Language::getLangContent();
+		$model_article = Model('article');
+		/**
+		 * 保存
+		 */
+		if (chksubmit()){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["article_title"], "require"=>"true", "message"=>$lang['article_add_title_null']),
+				array("input"=>$_POST["ac_id"], "require"=>"true", "message"=>$lang['article_add_class_null']),
+				//array("input"=>$_POST["article_url"], 'validator'=>'Url', "message"=>$lang['article_add_url_wrong']),
+				array("input"=>$_POST["article_content"], "require"=>"true", "message"=>$lang['article_add_content_null']),
+				array("input"=>$_POST["article_sort"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['article_add_sort_int']),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+
+				$insert_array = array();
+				$insert_array['article_title'] = trim($_POST['article_title']);
+				$insert_array['ac_id'] = intval($_POST['ac_id']);
+				$insert_array['article_url'] = trim($_POST['article_url']);
+				$insert_array['article_show'] = trim($_POST['article_show']);
+				$insert_array['article_sort'] = trim($_POST['article_sort']);
+				$insert_array['article_content'] = trim($_POST['article_content']);
+				$insert_array['article_time'] = time();
+				$result = $model_article->add($insert_array);
+				if ($result){
+					/**
+					 * 更新图片信息ID
+					 */
+					$model_upload = Model('upload');
+					if (is_array($_POST['file_id'])){
+						foreach ($_POST['file_id'] as $k => $v){
+							$v = intval($v);
+							$update_array = array();
+							$update_array['upload_id'] = $v;
+							$update_array['item_id'] = $result;
+							$model_upload->update($update_array);
+							unset($update_array);
+						}
+					}
+
+					$url = array(
+						array(
+							'url'=>'index.php?act=article&op=article',
+							'msg'=>"{$lang['article_add_tolist']}",
+						),
+						array(
+							'url'=>'index.php?act=article&op=article_add&ac_id='.intval($_POST['ac_id']),
+							'msg'=>"{$lang['article_add_continueadd']}",
+						),
+					);
+					$this->log(L('article_add_ok').'['.$_POST['article_title'].']',null);
+					showMessage("{$lang['article_add_ok']}",$url);
+				}else {
+					showMessage("{$lang['article_add_fail']}");
+				}
+			}
+		}
+		/**
+		 * 分类列表
+		 */
+		$model_class = Model('article_class');
+		$parent_list = $model_class->getTreeClassList(2);
+		if (is_array($parent_list)){
+			$unset_sign = false;
+			foreach ($parent_list as $k => $v){
+				$parent_list[$k]['ac_name'] = str_repeat("&nbsp;",$v['deep']*2).$v['ac_name'];
+			}
+		}
+		/**
+		 * 模型实例化
+		 */
+		$model_upload = Model('upload');
+		$condition['upload_type'] = '1';
+		$condition['item_id'] = '0';
+		$file_upload = $model_upload->getUploadList($condition);
+		if (is_array($file_upload)){
+			foreach ($file_upload as $k => $v){
+				$file_upload[$k]['upload_path'] = UPLOAD_SITE_URL.'/'.ATTACH_ARTICLE.'/'.$file_upload[$k]['file_name'];
+			}
+		}
+
+		Tpl::output('PHPSESSID',session_id());
+		Tpl::output('ac_id',intval($_GET['ac_id']));
+		Tpl::output('parent_list',$parent_list);
+		Tpl::output('file_upload',$file_upload);
+		Tpl::showpage('article.add');
+	}
+
+	/**
+	 * 文章编辑
+	 */
+	public function article_editOp(){
+		$lang	 = Language::getLangContent();
+		$model_article = Model('article');
+
+		if (chksubmit()){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["article_title"], "require"=>"true", "message"=>$lang['article_add_title_null']),
+				array("input"=>$_POST["ac_id"], "require"=>"true", "message"=>$lang['article_add_class_null']),
+				//array("input"=>$_POST["article_url"], 'validator'=>'Url', "message"=>$lang['article_add_url_wrong']),
+				array("input"=>$_POST["article_content"], "require"=>"true", "message"=>$lang['article_add_content_null']),
+				array("input"=>$_POST["article_sort"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['article_add_sort_int']),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+
+				$update_array = array();
+				$update_array['article_id'] = intval($_POST['article_id']);
+				$update_array['article_title'] = trim($_POST['article_title']);
+				$update_array['ac_id'] = intval($_POST['ac_id']);
+				$update_array['article_url'] = trim($_POST['article_url']);
+				$update_array['article_show'] = trim($_POST['article_show']);
+				$update_array['article_sort'] = trim($_POST['article_sort']);
+				$update_array['article_content'] = trim($_POST['article_content']);
+
+				$result = $model_article->update($update_array);
+				if ($result){
+					/**
+					 * 更新图片信息ID
+					 */
+					$model_upload = Model('upload');
+					if (is_array($_POST['file_id'])){
+						foreach ($_POST['file_id'] as $k => $v){
+							$update_array = array();
+							$update_array['upload_id'] = intval($v);
+							$update_array['item_id'] = intval($_POST['article_id']);
+							$model_upload->update($update_array);
+							unset($update_array);
+						}
+					}
+
+					$url = array(
+						array(
+							'url'=>$_POST['ref_url'],
+							'msg'=>$lang['article_edit_back_to_list'],
+						),
+						array(
+							'url'=>'index.php?act=article&op=article_edit&article_id='.intval($_POST['article_id']),
+							'msg'=>$lang['article_edit_edit_again'],
+						),
+					);
+					$this->log(L('article_edit_succ').'['.$_POST['article_title'].']',null);
+					showMessage($lang['article_edit_succ'],$url);
+				}else {
+					showMessage($lang['article_edit_fail']);
+				}
+			}
+		}
+
+		$article_array = $model_article->getOneArticle(intval($_GET['article_id']));
+		if (empty($article_array)){
+			showMessage($lang['param_error']);
+		}
+		/**
+		 * 文章类别模型实例化
+		 */
+		$model_class = Model('article_class');
+		/**
+		 * 父类列表,只取到第一级
+		 */
+		$parent_list = $model_class->getTreeClassList(2);
+		if (is_array($parent_list)){
+			$unset_sign = false;
+			foreach ($parent_list as $k => $v){
+				$parent_list[$k]['ac_name'] = str_repeat("&nbsp;",$v['deep']*2).$v['ac_name'];
+			}
+		}
+		/**
+		 * 模型实例化
+		 */
+		$model_upload = Model('upload');
+		$condition['upload_type'] = '1';
+		$condition['item_id'] = $article_array['article_id'];
+		$file_upload = $model_upload->getUploadList($condition);
+		if (is_array($file_upload)){
+			foreach ($file_upload as $k => $v){
+				$file_upload[$k]['upload_path'] = UPLOAD_SITE_URL.'/'.ATTACH_ARTICLE.'/'.$file_upload[$k]['file_name'];
+			}
+		}
+
+		Tpl::output('PHPSESSID',session_id());
+		Tpl::output('file_upload',$file_upload);
+		Tpl::output('parent_list',$parent_list);
+		Tpl::output('article_array',$article_array);
+		Tpl::showpage('article.edit');
+	}
+	/**
+	 * 文章图片上传
+	 */
+	public function article_pic_uploadOp(){
+		/**
+		 * 上传图片
+		 */
+		$upload = new UploadFile();
+		$upload->set('default_dir',ATTACH_ARTICLE);
+		$result = $upload->upfile('fileupload');
+		if ($result){
+			$_POST['pic'] = $upload->file_name;
+		}else {
+			echo 'error';exit;
+		}
+		/**
+		 * 模型实例化
+		 */
+		$model_upload = Model('upload');
+		/**
+		 * 图片数据入库
+		 */
+		$insert_array = array();
+		$insert_array['file_name'] = $_POST['pic'];
+		$insert_array['upload_type'] = '1';
+		$insert_array['file_size'] = $_FILES['fileupload']['size'];
+		$insert_array['upload_time'] = time();
+		$insert_array['item_id'] = intval($_POST['item_id']);
+		$result = $model_upload->add($insert_array);
+		if ($result){
+			$data = array();
+			$data['file_id'] = $result;
+			$data['file_name'] = $_POST['pic'];
+			$data['file_path'] = $_POST['pic'];
+			/**
+			 * 整理为json格式
+			 */
+			$output = json_encode($data);
+			echo $output;
+		}
+
+	}
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			/**
+			 * 删除文章图片
+			 */
+			case 'del_file_upload':
+				if (intval($_GET['file_id']) > 0){
+					$model_upload = Model('upload');
+					/**
+					 * 删除图片
+					 */
+					$file_array = $model_upload->getOneUpload(intval($_GET['file_id']));
+					@unlink(BASE_UPLOAD_PATH.DS.ATTACH_ARTICLE.DS.$file_array['file_name']);
+					/**
+					 * 删除信息
+					 */
+					$model_upload->del(intval($_GET['file_id']));
+					echo 'true';exit;
+				}else {
+					echo 'false';exit;
+				}
+				break;
+		}
+	}
+}

+ 266 - 0
admin/control/article_class.php

@@ -0,0 +1,266 @@
+<?php
+/**
+ * 文章分类
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class article_classControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('article_class');
+	}
+
+	/**
+	 * 文章管理
+	 */
+	public function article_classOp(){
+		$lang	= Language::getLangContent();
+		$model_class = Model('article_class');
+		//删除
+		if (chksubmit()){
+			if (!empty($_POST['check_ac_id'])){
+				if (is_array($_POST['check_ac_id'])){
+					$del_array = $model_class->getChildClass($_POST['check_ac_id']);
+					if (is_array($del_array)){
+						foreach ($del_array as $k => $v){
+							$model_class->del($v['ac_id']);
+						}
+					}
+				}
+				$this->log(l('nc_del,article_class_index_class'),1);
+				showMessage($lang['article_class_index_del_succ']);
+			}else {
+				showMessage($lang['article_class_index_choose']);
+			}
+		}
+		/**
+		 * 父ID
+		 */
+		$parent_id = $_GET['ac_parent_id']?intval($_GET['ac_parent_id']):0;
+		/**
+		 * 列表
+		 */
+		$tmp_list = $model_class->getTreeClassList(2);
+		if (is_array($tmp_list)){
+			foreach ($tmp_list as $k => $v){
+				if ($v['ac_parent_id'] == $parent_id){
+					/**
+					 * 判断是否有子类
+					 */
+					if ($tmp_list[$k+1]['deep'] > $v['deep']){
+						$v['have_child'] = 1;
+					}
+					$class_list[] = $v;
+				}
+			}
+		}
+		if ($_GET['ajax'] == '1'){
+			/**
+			 * 转码
+			 */
+			if (strtoupper(CHARSET) == 'GBK'){
+				$class_list = Language::getUTF8($class_list);
+			}
+			$output = json_encode($class_list);
+			print_r($output);
+			exit;
+		}else {
+			Tpl::output('class_list',$class_list);
+			Tpl::showpage('article_class.index');
+		}
+	}
+
+	/**
+	 * 文章分类 新增
+	 */
+	public function article_class_addOp(){
+		$lang	= Language::getLangContent();
+		$model_class = Model('article_class');
+		if (chksubmit()){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["ac_name"], "require"=>"true", "message"=>$lang['article_class_add_name_null']),
+				array("input"=>$_POST["ac_sort"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['article_class_add_sort_int']),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+
+				$insert_array = array();
+				$insert_array['ac_name'] = trim($_POST['ac_name']);
+				$insert_array['ac_parent_id'] = intval($_POST['ac_parent_id']);
+				$insert_array['ac_sort'] = trim($_POST['ac_sort']);
+
+				$result = $model_class->add($insert_array);
+				if ($result){
+					$url = array(
+						array(
+							'url'=>'index.php?act=article_class&op=article_class_add&ac_parent_id='.intval($_POST['ac_parent_id']),
+							'msg'=>$lang['article_class_add_class'],
+						),
+						array(
+							'url'=>'index.php?act=article_class&op=article_class',
+							'msg'=>$lang['article_class_add_back_to_list'],
+						)
+					);
+					$this->log(l('nc_add,article_class_index_class').'['.$_POST['ac_name'].']',1);
+					showMessage($lang['article_class_add_succ'],$url);
+				}else {
+					showMessage($lang['article_class_add_fail']);
+				}
+			}
+		}
+		/**
+		 * 父类列表,只取到第三级
+		 */
+		$parent_list = $model_class->getTreeClassList(1);
+		if (is_array($parent_list)){
+			foreach ($parent_list as $k => $v){
+				$parent_list[$k]['ac_name'] = str_repeat("&nbsp;",$v['deep']*2).$v['ac_name'];
+			}
+		}
+
+		Tpl::output('ac_parent_id',intval($_GET['ac_parent_id']));
+		Tpl::output('parent_list',$parent_list);
+		Tpl::showpage('article_class.add');
+	}
+
+	/**
+	 * 文章分类编辑
+	 */
+	public function article_class_editOp(){
+		$lang	= Language::getLangContent();
+		$model_class = Model('article_class');
+
+		if (chksubmit()){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["ac_name"], "require"=>"true", "message"=>$lang['article_class_add_name_null']),
+				array("input"=>$_POST["ac_sort"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['article_class_add_sort_int']),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+
+				$update_array = array();
+				$update_array['ac_id'] = intval($_POST['ac_id']);
+				$update_array['ac_name'] = trim($_POST['ac_name']);
+//				$update_array['ac_parent_id'] = intval($_POST['ac_parent_id']);
+				$update_array['ac_sort'] =trim($_POST['ac_sort']);
+
+				$result = $model_class->update($update_array);
+				if ($result){
+					$url = array(
+						array(
+							'url'=>'index.php?act=article_class&op=article_class',
+							'msg'=>$lang['article_class_add_back_to_list'],
+						),
+						array(
+							'url'=>'index.php?act=article_class&op=article_class_edit&ac_id='.intval($_POST['ac_id']),
+							'msg'=>$lang['article_class_edit_again'],
+						),
+					);
+					$this->log(l('nc_edit,article_class_index_class').'['.$_POST['ac_name'].']',1);
+					showMessage($lang['article_class_edit_succ'],'index.php?act=article_class&op=article_class');
+				}else {
+					showMessage($lang['article_class_edit_fail']);
+				}
+			}
+		}
+
+		$class_array = $model_class->getOneClass(intval($_GET['ac_id']));
+		if (empty($class_array)){
+			showMessage($lang['param_error']);
+		}
+
+		Tpl::output('class_array',$class_array);
+		Tpl::showpage('article_class.edit');
+	}
+
+	/**
+	 * 删除分类
+	 */
+	public function article_class_delOp(){
+		$lang	= Language::getLangContent();
+		$model_class = Model('article_class');
+		if (intval($_GET['ac_id']) > 0){
+			$array = array(intval($_GET['ac_id']));
+
+			$del_array = $model_class->getChildClass($array);
+			if (is_array($del_array)){
+				foreach ($del_array as $k => $v){
+					$model_class->del($v['ac_id']);
+				}
+			}
+			$this->log(l('nc_add,article_class_index_class').'[ID:'.intval($_GET['ac_id']).']',1);
+			showMessage($lang['article_class_index_del_succ'],'index.php?act=article_class&op=article_class');
+		}else {
+			showMessage($lang['article_class_index_choose'],'index.php?act=article_class&op=article_class');
+		}
+	}
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			/**
+			 * 分类:验证是否有重复的名称
+			 */
+			case 'article_class_name':
+				$model_class = Model('article_class');
+				$class_array = $model_class->getOneClass(intval($_GET['id']));
+
+				$condition['ac_name'] = trim($_GET['value']);
+				$condition['ac_parent_id'] = $class_array['ac_parent_id'];
+				$condition['no_ac_id'] = intval($_GET['id']);
+				$class_list = $model_class->getClassList($condition);
+				if (empty($class_list)){
+					$update_array = array();
+					$update_array['ac_id'] = intval($_GET['id']);
+					$update_array['ac_name'] = trim($_GET['value']);
+					$model_class->update($update_array);
+					echo 'true';exit;
+				}else {
+					echo 'false';exit;
+				}
+				break;
+			/**
+			 * 分类: 排序 显示 设置
+			 */
+			case 'article_class_sort':
+				$model_class = Model('article_class');
+				$update_array = array();
+				$update_array['ac_id'] = intval($_GET['id']);
+				$update_array[$_GET['column']] = trim($_GET['value']);
+				$result = $model_class->update($update_array);
+				echo 'true';exit;
+				break;
+			/**
+			 * 分类:添加、修改操作中 检测类别名称是否有重复
+			 */
+			case 'check_class_name':
+				$model_class = Model('article_class');
+				$condition['ac_name'] = trim($_GET['ac_name']);
+				$condition['ac_parent_id'] = intval($_GET['ac_parent_id']);
+				$condition['no_ac_id'] = intval($_GET['ac_id']);
+				$class_list = $model_class->getClassList($condition);
+				if (empty($class_list)){
+					echo 'true';exit;
+				}else {
+					echo 'false';exit;
+				}
+				break;
+		}
+	}
+}

+ 537 - 0
admin/control/bill.php

@@ -0,0 +1,537 @@
+<?php
+/**
+ * 结算管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class billControl extends SystemControl{
+    /**
+     * 每次导出订单数量
+     * @var int
+     */
+    const EXPORT_SIZE = 1000;
+
+    private $links = array(
+    	array('url'=>'act=bill&op=index','lang'=>'nc_manage'),
+    );
+
+    public function __construct(){
+    	parent::__construct();
+    }
+
+    /**
+     * 所有月份销量账单
+     *
+     */
+    public function indexOp(){
+
+        //检查是否需要生成上月及更早结算单的程序不再执行,执行量较大,放到任务计划中触发
+
+        $condition = array();
+    	if (preg_match('/^\d{4}$/',$_GET['query_year'],$match)) {
+	        $condition['os_year'] = $_GET['query_year'];
+	    }
+        $model_bill = Model('bill');
+        $bill_list = $model_bill->getOrderStatisList($condition,'*',12,'os_month desc');
+        Tpl::output('bill_list',$bill_list);
+        Tpl::output('show_page',$model_bill->showpage());
+
+        //输出子菜单
+        Tpl::output('top_link',$this->sublink($this->links,'index'));
+
+        Tpl::showpage('bill_order_statis.index');
+    }
+
+	/**
+	 * 某月所有店铺销量账单
+	 *
+	 */
+	public function show_statisOp(){
+	    if (!empty($_GET['os_month']) && !preg_match('/^20\d{4}$/',$_GET['os_month'],$match)) {
+	        showMessage('参数错误','','html','error');
+	    }
+	    $model_bill = Model('bill');
+		$condtion = array();
+		if (!empty($_GET['os_month'])) {
+		    $condition['os_month'] = intval($_GET['os_month']);
+		}
+		if (is_numeric($_GET['bill_state'])) {
+		    $condition['ob_state'] = intval($_GET['bill_state']);
+		}
+		if (preg_match('/^\d{1,8}$/',$_GET['query_store'])) {
+			$condition['ob_store_id'] = $_GET['query_store'];
+		}elseif ($_GET['query_store'] != ''){
+			$condition['ob_store_name'] = $_GET['query_store'];
+		}
+		$bill_list = $model_bill->getOrderBillList($condition,'*',30,'ob_no desc');
+		Tpl::output('bill_list',$bill_list);
+		Tpl::output('show_page',$model_bill->showpage());
+
+		//输出子菜单
+		Tpl::output('top_link',$this->sublink($this->links,'index'));
+
+		Tpl::showpage('bill_order_statis.show');
+	}
+
+	/**
+	 * 某店铺某月订单列表
+	 *
+	 */
+	public function show_billOp(){
+		if (!preg_match('/^20\d{5,12}$/',$_GET['ob_no'],$match)) {
+			showMessage('参数错误','','html','error');
+		}
+		$model_bill = Model('bill');
+		$bill_info = $model_bill->getOrderBillInfo(array('ob_no'=>$_GET['ob_no']));
+		if (!$bill_info){
+			showMessage('参数错误','','html','error');
+		}
+
+		$order_condition = array();
+		$order_condition['order_state'] = ORDER_STATE_SUCCESS;
+		$order_condition['store_id'] = $bill_info['ob_store_id'];
+		$if_start_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_start_date']);
+		$if_end_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_end_date']);
+		$start_unixtime = $if_start_date ? strtotime($_GET['query_start_date']) : null;
+		$end_unixtime = $if_end_date ? strtotime($_GET['query_end_date']) : null;
+		$end_unixtime = $if_end_date ? $end_unixtime+86400-1 : null;
+		if ($if_start_date || $if_end_date) {
+		    $order_condition['finnshed_time'] = array('between',"{$start_unixtime},{$end_unixtime}");
+		} else {
+		    $order_condition['finnshed_time'] = array('between',"{$bill_info['ob_start_date']},{$bill_info['ob_end_date']}");
+		}
+		if ($_GET['query_type'] == 'refund') {
+			//退款订单列表
+		    $model_refund = Model('refund_return');
+			$refund_condition = array();
+			$refund_condition['seller_state'] = 2;
+			$refund_condition['store_id'] = $bill_info['ob_store_id'];
+			$refund_condition['goods_id'] = array('gt',0);
+			$refund_condition['admin_time'] = $order_condition['finnshed_time'];
+			$refund_list = $model_refund->getRefundReturnList($refund_condition,20,'*,ROUND(refund_amount*commis_rate/100,2) as commis_amount');
+			if (is_array($refund_list) && count($refund_list) == 1 && $refund_list[0]['refund_id'] == '') {
+			    $refund_list = array();
+			}
+			//取返还佣金
+			Tpl::output('refund_list',$refund_list);
+			Tpl::output('show_page',$model_refund->showpage());
+			$sub_tpl_name = 'bill_order_bill.show.refund_list';
+		} elseif ($_GET['query_type'] == 'cost') {
+
+		    //店铺费用
+		    $model_store_cost = Model('store_cost');
+		    $cost_condition = array();
+		    $cost_condition['cost_store_id'] = $bill_info['ob_store_id'];
+		    $cost_condition['cost_time'] = $order_condition['finnshed_time'];
+		    $store_cost_list = $model_store_cost->getStoreCostList($cost_condition,20);
+		    //取得店铺名字
+		    $store_info = Model('store')->getStoreInfoByID($bill_info['ob_store_id']);
+		    Tpl::output('cost_list',$store_cost_list);
+		    Tpl::output('store_info',$store_info);
+		    Tpl::output('show_page',$model_store_cost->showpage());
+		    $sub_tpl_name = 'bill_order_bill.show.cost_list';
+
+		} else {
+
+		    //订单列表
+		    $model_order = Model('order');
+		    $order_list = $model_order->getOrderList($order_condition,20);
+
+		    //然后取订单商品佣金
+		    $order_id_array = array();
+		    if (is_array($order_list)) {
+		        foreach ($order_list as $order_info) {
+		            $order_id_array[] = $order_info['order_id'];
+		        }
+		    }
+		    $order_goods_condition = array();
+		    $order_goods_condition['order_id'] = array('in',$order_id_array);
+		    $field = 'SUM(ROUND(goods_pay_price*commis_rate/100,2)) as commis_amount,order_id';
+		    $commis_list = $model_order->getOrderGoodsList($order_goods_condition,$field,null,null,'','order_id','order_id');
+		    Tpl::output('commis_list',$commis_list);
+		    Tpl::output('order_list',$order_list);
+		    Tpl::output('show_page',$model_order->showpage());
+		    $sub_tpl_name = 'bill_order_bill.show.order_list';
+
+		}
+
+        Tpl::output('tpl_name',$sub_tpl_name);
+		Tpl::output('bill_info',$bill_info);
+		Tpl::showpage('bill_order_bill.show');
+	}
+
+	public function bill_checkOp(){
+		if (!preg_match('/^20\d{5,12}$/',$_GET['ob_no'])) {
+			showMessage('参数错误','','html','error');
+		}
+		$model_bill = Model('bill');
+		$condition = array();
+		$condition['ob_no'] = $_GET['ob_no'];
+		$condition['ob_state'] = BILL_STATE_STORE_COFIRM;
+		$update = $model_bill->editOrderBill(array('ob_state'=>BILL_STATE_SYSTEM_CHECK),$condition);
+		if ($update){
+		    $this->log('审核账单,账单号:'.$_GET['ob_no'],1);
+			showMessage('审核成功,账单进入付款环节');
+		}else{
+		    $this->log('审核账单,账单号:'.$_GET['ob_no'],0);
+			showMessage('审核失败','','html','error');
+		}
+	}
+
+	/**
+	 * 账单付款
+	 *
+	 */
+	public function bill_payOp(){
+		if (!preg_match('/^20\d{5,12}$/',$_GET['ob_no'])) {
+			showMessage('参数错误','','html','error');
+		}
+		$model_bill = Model('bill');
+		$condition = array();
+		$condition['ob_no'] = $_GET['ob_no'];
+		$condition['ob_state'] = BILL_STATE_SYSTEM_CHECK;
+		$bill_info = $model_bill->getOrderBillInfo($condition);
+		if (!$bill_info){
+			showMessage('参数错误','','html','error');
+		}
+		if (chksubmit()){
+			if (!preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_POST['pay_date'])) {
+				showMessage('参数错误','','html','error');
+			}
+			$input = array();
+			$input['ob_pay_content'] = $_POST['pay_content'];
+			$input['ob_pay_date'] = strtotime($_POST['pay_date']);
+			$input['ob_state'] = BILL_STATE_SUCCESS;
+			$update = $model_bill->editOrderBill($input,$condition);
+			if ($update){
+			    $model_store_cost = Model('store_cost');
+			    $cost_condition = array();
+			    $cost_condition['cost_store_id'] = $bill_info['ob_store_id'];
+			    $cost_condition['cost_state'] = 0;
+			    $cost_condition['cost_time'] = array('between',"{$bill_info['ob_start_date']},{$bill_info['ob_end_date']}");
+			    $model_store_cost->editStoreCost(array('cost_state'=>1),$cost_condition);
+
+			    // 发送店铺消息
+                $param = array();
+                $param['code'] = 'store_bill_gathering';
+                $param['store_id'] = $bill_info['ob_store_id'];
+                $param['param'] = array(
+                    'bill_no' => $bill_info['ob_no']
+                );
+			    QueueClient::push('sendStoreMsg', $param);
+
+			    $this->log('账单付款,账单号:'.$_GET['ob_no'],1);
+				showMessage('保存成功','index.php?act=bill&op=show_statis&os_month='.$bill_info['os_month']);
+			}else{
+			    $this->log('账单付款,账单号:'.$_GET['ob_no'],1);
+				showMessage('保存失败','','html','error');
+			}
+		}else{
+			Tpl::showpage('bill.pay');
+		}
+	}
+
+	/**
+	 * 打印结算单
+	 *
+	 */
+	public function bill_printOp(){
+		if (!preg_match('/^20\d{5,12}$/',$_GET['ob_no'])) {
+			showMessage('参数错误','','html','error');
+		}
+		$model_bill = Model('bill');
+		$condition = array();
+		$condition['ob_no'] = $_GET['ob_no'];
+		$condition['ob_state'] = BILL_STATE_SUCCESS;
+		$bill_info = $model_bill->getOrderBillInfo($condition);
+		if (!$bill_info){
+			showMessage('参数错误','','html','error');
+		}
+
+		Tpl::output('bill_info',$bill_info);
+
+		Tpl::showpage('bill.print','null_layout');
+	}
+
+
+	/**
+	 * 导出平台月出账单表
+	 *
+	 */
+	public function export_billOp(){
+	    if (!empty($_GET['os_month']) && !preg_match('/^20\d{4}$/',$_GET['os_month'],$match)) {
+	        showMessage('参数错误','','html','error');
+	    }
+	    $model_bill = Model('bill');
+		$condition = array();
+		if (!empty($_GET['os_month'])) {
+		    $condition['os_month'] = intval($_GET['os_month']);
+		}
+		if (is_numeric($_GET['bill_state'])) {
+		    $condition['ob_state'] = intval($_GET['bill_state']);
+		}
+		if (preg_match('/^\d{1,8}$/',$_GET['query_store'])) {
+			$condition['ob_store_id'] = $_GET['query_store'];
+		}elseif ($_GET['query_store'] != ''){
+			$condition['ob_store_name'] = $_GET['query_store'];
+		}
+		if (!is_numeric($_GET['curpage'])){
+		    $count = $model_bill->getOrderBillCount($condition);
+    		$array = array();
+    		if ($count > self::EXPORT_SIZE ){
+    		    //显示下载链接
+    		    $page = ceil($count/self::EXPORT_SIZE);
+    		    for ($i=1;$i<=$page;$i++){
+    		        $limit1 = ($i-1)*self::EXPORT_SIZE + 1;
+    		        $limit2 = $i*self::EXPORT_SIZE > $count ? $count : $i*self::EXPORT_SIZE;
+    		        $array[$i] = $limit1.' ~ '.$limit2 ;
+    		    }
+    		    Tpl::output('list',$array);
+    		    Tpl::output('murl','index.php?act=bill&op=index');
+    		    Tpl::showpage('export.excel');
+    		    exit();
+    		}else{
+    		    //如果数量小,直接下载
+    		    $data = $model_bill->getOrderBillList($condition,'*','','ob_no desc',self::EXPORT_SIZE);
+    		}
+		}else{
+		    //下载
+		    $limit1 = ($_GET['curpage']-1) * self::EXPORT_SIZE;
+		    $limit2 = self::EXPORT_SIZE;
+		    $data = $model_bill->getOrderBillList($condition,'*','','ob_no desc',"{$limit1},{$limit2}");
+		}
+
+		$export_data = array();
+		$export_data[0] = array('账单编号','开始日期','结束日期','订单金额','运费','佣金金额','退款金额','退还佣金','店铺费用','本期应结','出账日期','账单状态','店铺','店铺ID');
+		$ob_order_totals = 0;
+		$ob_shipping_totals = 0;
+		$ob_commis_totals = 0;
+		$ob_order_return_totals = 0;
+		$ob_commis_return_totals = 0;
+		$ob_store_cost_totals = 0;
+		$ob_result_totals = 0;
+		foreach ($data as $k => $v) {
+		    $export_data[$k+1][] = $v['ob_no'];
+		    $export_data[$k+1][] = date('Y-m-d',$v['ob_start_date']);
+		    $export_data[$k+1][] = date('Y-m-d',$v['ob_end_date']);
+		    $ob_order_totals += $export_data[$k+1][] = $v['ob_order_totals'];
+		    $ob_shipping_totals += $export_data[$k+1][] = $v['ob_shipping_totals'];
+		    $ob_commis_totals += $export_data[$k+1][] = $v['ob_commis_totals'];
+		    $ob_order_return_totals += $export_data[$k+1][] = $v['ob_order_return_totals'];
+		    $ob_commis_return_totals += $export_data[$k+1][] = $v['ob_commis_return_totals'];
+		    $ob_store_cost_totals += $export_data[$k+1][] = $v['ob_store_cost_totals'];
+		    $ob_result_totals += $export_data[$k+1][] = $v['ob_result_totals'];
+		    $export_data[$k+1][] = date('Y-m-d',$v['ob_create_date']);
+		    $export_data[$k+1][] = billState($v['ob_state']);
+		    $export_data[$k+1][] = $v['ob_store_name'];
+		    $export_data[$k+1][] = $v['ob_store_id'];
+		}
+		$count = count($export_data);
+		$export_data[$count][] = '';
+		$export_data[$count][] = '';
+		$export_data[$count][] = '合计';
+		$export_data[$count][] = $ob_order_totals;
+		$export_data[$count][] = $ob_shipping_totals;
+		$export_data[$count][] = $ob_commis_totals;
+		$export_data[$count][] = $ob_order_return_totals;
+		$export_data[$count][] = $ob_commis_return_totals;
+		$export_data[$count][] = $ob_store_cost_totals;
+		$export_data[$count][] = $ob_result_totals;
+		$csv = new Csv();
+		$export_data = $csv->charset($export_data,CHARSET,'gbk');
+		$csv->filename = $csv->charset('账单-',CHARSET).$_GET['os_month'];
+		$csv->export($export_data);
+	}
+
+	/**
+	 * 导出结算订单明细CSV
+	 *
+	 */
+	public function export_orderOp(){
+		if (!preg_match('/^20\d{5,12}$/',$_GET['ob_no'])) {
+			showMessage('参数错误','','html','error');
+		}
+		$model_bill = Model('bill');
+		$bill_info = $model_bill->getOrderBillInfo(array('ob_no'=>$_GET['ob_no']));
+		if (!$bill_info){
+			showMessage('参数错误','','html','error');
+		}
+
+		$model_order = Model('order');
+		$condition = array();
+		$condition['order_state'] = ORDER_STATE_SUCCESS;
+		$condition['store_id'] = $bill_info['ob_store_id'];
+		$if_start_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_start_date']);
+		$if_end_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_end_date']);
+		$start_unixtime = $if_start_date ? strtotime($_GET['query_start_date']) : null;
+		$end_unixtime = $if_end_date ? strtotime($_GET['query_end_date']) : null;
+		$end_unixtime = $if_end_date ? $end_unixtime+86400-1 : null;
+		if ($if_start_date || $if_end_date) {
+		    $condition['finnshed_time'] = array('between',"{$start_unixtime},{$end_unixtime}");
+		} else {
+		    $condition['finnshed_time'] = array('between',"{$bill_info['ob_start_date']},{$bill_info['ob_end_date']}");
+		}
+		if (!is_numeric($_GET['curpage'])){
+		    $count = $model_order->getOrderCount($condition);
+    		$array = array();
+    		if ($count > self::EXPORT_SIZE ){
+    		    //显示下载链接
+    		    $page = ceil($count/self::EXPORT_SIZE);
+    		    for ($i=1;$i<=$page;$i++){
+    		        $limit1 = ($i-1)*self::EXPORT_SIZE + 1;
+    		        $limit2 = $i*self::EXPORT_SIZE > $count ? $count : $i*self::EXPORT_SIZE;
+    		        $array[$i] = $limit1.' ~ '.$limit2 ;
+    		    }
+    		    Tpl::output('list',$array);
+    		    Tpl::output('murl','index.php?act=bill&op=show_bill&ob_no='.$_GET['ob_no']);
+    		    Tpl::showpage('export.excel');
+    		    exit();
+    		}else{
+    		    //如果数量小,直接下载
+    		    $data = $model_order->getOrderList($condition,'','*','order_id desc',self::EXPORT_SIZE,array('order_goods'));
+    		}
+		}else{
+		    //下载
+		    $limit1 = ($_GET['curpage']-1) * self::EXPORT_SIZE;
+		    $limit2 = self::EXPORT_SIZE;
+		    $data = $model_order->getOrderList($condition,'','*','order_id desc',"{$limit1},{$limit2}",array('order_goods'));
+		}
+
+		//订单商品表查询条件
+		$order_id_array = array();
+		if (is_array($data)) {
+		    foreach ($data as $order_info) {
+		        $order_id_array[] = $order_info['order_id'];
+		    }
+		}
+		$order_goods_condition = array();
+		$order_goods_condition['order_id'] = array('in',$order_id_array);
+
+		$export_data = array();
+		$export_data[0] = array('订单编号','订单金额','运费','佣金','下单日期','成交日期','商家','商家编号','买家','买家编号','商品');
+		$order_totals = 0;
+		$shipping_totals = 0;
+		$commis_totals = 0;
+		$k = 0;
+		foreach ($data as $v) {
+		    //该订单算佣金
+		    $field = 'SUM(ROUND(goods_pay_price*commis_rate/100,2)) as commis_amount,order_id';
+		    $commis_list = $model_order->getOrderGoodsList($order_goods_condition,$field,null,null,'','order_id','order_id');
+		    $export_data[$k+1][] = 'NC'.$v['order_sn'];
+		    $order_totals += $export_data[$k+1][] = $v['order_amount'];
+		    $shipping_totals += $export_data[$k+1][] = $v['shipping_fee'];
+		    $commis_totals += $export_data[$k+1][] = floatval($commis_list[$v['order_id']]['commis_amount']);
+		    $export_data[$k+1][] = date('Y-m-d',$v['add_time']);
+		    $export_data[$k+1][] = date('Y-m-d',$v['finnshed_time']);
+		    $export_data[$k+1][] = $v['store_name'];
+		    $export_data[$k+1][] = $v['store_id'];
+		    $export_data[$k+1][] = $v['buyer_name'];
+		    $export_data[$k+1][] = $v['buyer_id'];
+		    $goods_string = '';
+		    if (is_array($v['extend_order_goods'])) {
+                foreach ($v['extend_order_goods'] as $v) {
+                    $goods_string .= $v['goods_name'].'|单价:'.$v['goods_price'].'|数量:'.$v['goods_num'].'|实际支付:'.$v['goods_pay_price'].'|佣金比例:'.$v['commis_rate'].'%';
+                }
+		    }
+		    $export_data[$k+1][] = $goods_string;
+		    $k++;
+		}
+		$count = count($export_data);
+		$export_data[$count][] = '合计';
+		$export_data[$count][] = $order_totals;
+		$export_data[$count][] = $shipping_totals;
+		$export_data[$count][] = $commis_totals;
+		$csv = new Csv();
+		$export_data = $csv->charset($export_data,CHARSET,'gbk');
+		$csv->filename = $csv->charset('订单明细-',CHARSET).$_GET['ob_no'];
+		$csv->export($export_data);
+	}
+
+	/**
+	 * 导出结算退单明细CSV
+	 *
+	 */
+	public function export_refund_orderOp(){
+	    if (!preg_match('/^20\d{5,12}$/',$_GET['ob_no'])) {
+	        showMessage('参数错误','','html','error');
+	    }
+	    $model_bill = Model('bill');
+	    $bill_info = $model_bill->getOrderBillInfo(array('ob_no'=>$_GET['ob_no']));
+	    if (!$bill_info){
+	        showMessage('参数错误','','html','error');
+	    }
+
+	    $model_refund = Model('refund_return');
+		$condition = array();
+		$condition['seller_state'] = 2;
+		$condition['store_id'] = $bill_info['ob_store_id'];
+		$condition['goods_id'] = array('gt',0);
+		$if_start_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_start_date']);
+		$if_end_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_end_date']);
+		$start_unixtime = $if_start_date ? strtotime($_GET['query_start_date']) : null;
+		$end_unixtime = $if_end_date ? strtotime($_GET['query_end_date']) : null;
+		$end_unixtime = $if_end_date ? $end_unixtime+86400-1 : null;
+		if ($if_start_date || $if_end_date) {
+		    $condition['finnshed_time'] = array('between',"{$start_unixtime},{$end_unixtime}");
+		} else {
+		    $condition['finnshed_time'] = array('between',"{$bill_info['ob_start_date']},{$bill_info['ob_end_date']}");
+		}
+	    if (!is_numeric($_GET['curpage'])){
+	        $count = $model_refund->getRefundReturn($condition);
+	        $array = array();
+	        if ($count > self::EXPORT_SIZE ){	//显示下载链接
+	            $page = ceil($count/self::EXPORT_SIZE);
+	            for ($i=1;$i<=$page;$i++){
+	                $limit1 = ($i-1)*self::EXPORT_SIZE + 1;
+	                $limit2 = $i*self::EXPORT_SIZE > $count ? $count : $i*self::EXPORT_SIZE;
+	                $array[$i] = $limit1.' ~ '.$limit2 ;
+	            }
+	            Tpl::output('list',$array);
+	            Tpl::output('murl','index.php?act=bill&op=show_bill&query_type=refund&ob_no='.$_GET['ob_no']);
+	            Tpl::showpage('export.excel');
+	            exit();
+	        }else{
+	            //如果数量小,直接下载
+	            $data = $model_refund->getRefundReturnList($condition,'','*,ROUND(refund_amount*commis_rate/100,2) as commis_amount',self::EXPORT_SIZE);
+	        }
+	    }else{
+	        //下载
+	        $limit1 = ($_GET['curpage']-1) * self::EXPORT_SIZE;
+	        $limit2 = self::EXPORT_SIZE;
+	        $data = $model_refund->getRefundReturnList(condition,'','*,ROUND(refund_amount*commis_rate/100,2) as commis_amount',"{$limit1},{$limit2}");
+	    }
+	    if (is_array($data) && count($data) == 1 && $data[0]['refund_id'] == '') {
+	        $refund_list = array();
+	    }
+	    $export_data = array();
+	    $export_data[0] = array('退单编号','订单编号','退单金额','退单佣金','类型','退款日期','商家','商家编号','买家','买家编号');
+	    $refund_amount = 0;
+	    $commis_totals = 0;
+	    $k = 0;
+	    foreach ($data as $v) {
+	        $export_data[$k+1][] = 'NC'.$v['refund_sn'];
+	        $export_data[$k+1][] = 'NC'.$v['order_sn'];
+	        $refund_amount += $export_data[$k+1][] = $v['refund_amount'];
+	        $commis_totals += $export_data[$k+1][] = ncPriceFormat($v['commis_amount']);
+	        $export_data[$k+1][] = str_replace(array(1,2),array('退款','退货'),$v['refund_type']);
+	        $export_data[$k+1][] = date('Y-m-d',$v['admin_time']);
+	        $export_data[$k+1][] = $v['store_name'];
+	        $export_data[$k+1][] = $v['store_id'];
+	        $export_data[$k+1][] = $v['buyer_name'];
+	        $export_data[$k+1][] = $v['buyer_id'];
+	        $k++;
+	    }
+	    $count = count($export_data);
+	    $export_data[$count][] = '';
+	    $export_data[$count][] = '合计';
+	    $export_data[$count][] = $refund_amount;
+	    $export_data[$count][] = $commis_totals;
+	    $csv = new Csv();
+	    $export_data = $csv->charset($export_data,CHARSET,'gbk');
+	    $csv->filename = $csv->charset('退单明细-',CHARSET).$_GET['ob_no'];
+	    $csv->export($export_data);
+	}
+}

+ 414 - 0
admin/control/brand.php

@@ -0,0 +1,414 @@
+<?php
+/**
+ * 商品品牌管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class brandControl extends SystemControl{
+	const EXPORT_SIZE = 1000;
+	public function __construct(){
+		parent::__construct();
+		Language::read('brand');
+	}
+
+	/**
+	 * 品牌列表
+	 */
+	public function brandOp(){
+		$lang	= Language::getLangContent();
+		$model_brand = Model('brand');
+		if (chksubmit()){
+			if (!empty($_POST['del_brand_id'])){
+				//删除图片
+				if (is_array($_POST['del_brand_id'])){
+				    $brandid_array = array();
+					foreach ($_POST['del_brand_id'] as $k => $v){
+						$brandid_array[] = intval($v);
+					}
+					$model_brand->delBrand(array('brand_id' => array('in', $brandid_array)));
+				}
+				$this->log(L('nc_delete,brand_index_brand').'[ID:'.implode(',',$_POST['del_brand_id']).']',1);
+				showMessage($lang['nc_common_del_succ']);
+			}else {
+				$this->log(L('nc_delete,brand_index_brand').'[ID:'.implode(',',$_POST['del_brand_id']).']',0);
+				showMessage($lang['nc_common_del_fail']);
+			}
+		}
+		/**
+		 * 检索条件
+		 */
+		if (!empty($_GET['search_brand_name'])){
+			$condition['brand_name'] = array('like',"%".$_GET['search_brand_name']."%");
+		}
+		if (!empty($_GET['search_brand_class'])){
+			$condition['brand_class'] = array('like',"%".$_GET['search_brand_class']."%");
+		}
+		$condition['brand_apply']	= '1';
+		$brand_list = $model_brand->getBrandList($condition, "*", 10);
+		Tpl::output('page',$model_brand->showpage());
+		Tpl::output('brand_list',$brand_list);
+		Tpl::output('search_brand_name',trim($_GET['search_brand_name']));
+		Tpl::output('search_brand_class',trim($_GET['search_brand_class']));
+		Tpl::showpage('brand.index');
+	}
+
+	/**
+	 * 增加品牌
+	 */
+	public function brand_addOp(){
+		$lang	= Language::getLangContent();
+		$model_brand = Model('brand');
+		if (chksubmit()){
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["brand_name"], "require"=>"true", "message"=>$lang['brand_add_name_null']),
+				array("input"=>$_POST["brand_initial"], "require"=>"true", "message"=>'请填写首字母'),
+				array("input"=>$_POST["brand_sort"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['brand_add_sort_int']),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				$insert_array = array();
+				$insert_array['brand_name'] = trim($_POST['brand_name']);
+				$insert_array['brand_initial'] = strtoupper($_POST['brand_initial']);
+				$insert_array['class_id']	= $_POST['class_id'];
+				$insert_array['brand_class'] = trim($_POST['brand_class']);
+				$insert_array['brand_pic'] = trim($_POST['brand_pic']);
+				$insert_array['brand_recommend'] = trim($_POST['brand_recommend']);
+				$insert_array['brand_sort'] = intval($_POST['brand_sort']);
+				$insert_array['show_type'] = intval($_POST['show_type'])==1?1:0;
+				$result = $model_brand->addBrand($insert_array);
+				if ($result){
+					$url = array(
+						array(
+							'url'=>'index.php?act=brand&op=brand_add',
+							'msg'=>$lang['brand_add_again'],
+						),
+						array(
+							'url'=>'index.php?act=brand&op=brand',
+							'msg'=>$lang['brand_add_back_to_list'],
+						)
+					);
+					$this->log(L('nc_add,brand_index_brand').'['.$_POST['brand_name'].']',1);
+					showMessage($lang['nc_common_save_succ'],$url);
+				}else {
+					showMessage($lang['nc_common_save_fail']);
+				}
+			}
+		}
+
+		// 一级商品分类
+		$gc_list = Model('goods_class')->getGoodsClassListByParentId(0);
+		Tpl::output('gc_list', $gc_list);
+
+		Tpl::showpage('brand.add');
+	}
+
+	/**
+	 * 品牌编辑
+	 */
+	public function brand_editOp(){
+		$lang	= Language::getLangContent();
+		$model_brand = Model('brand');
+
+		if (chksubmit()){
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["brand_name"], "require"=>"true", "message"=>$lang['brand_add_name_null']),
+				array("input"=>$_POST["brand_initial"], "require"=>"true", "message"=>'请填写首字母'),
+				array("input"=>$_POST["brand_sort"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['brand_add_sort_int']),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+			    $brand_info = $model_brand->getBrandInfo(array('brand_id' => intval($_POST['brand_id'])));
+			    $where = array();
+				$where['brand_id'] = intval($_POST['brand_id']);
+				$update_array = array();
+				$update_array['brand_name'] = trim($_POST['brand_name']);
+				$update_array['brand_initial'] = strtoupper($_POST['brand_initial']);
+				$update_array['class_id']	= $_POST['class_id'];
+				$update_array['brand_class'] = trim($_POST['brand_class']);
+				if (!empty($_POST['brand_pic'])){
+					$update_array['brand_pic'] = $_POST['brand_pic'];
+				}
+				$update_array['brand_recommend'] = intval($_POST['brand_recommend']);
+				$update_array['brand_sort'] = intval($_POST['brand_sort']);
+				$update_array['show_type'] = intval($_POST['show_type'])==1?1:0;
+				$result = $model_brand->editBrand($where, $update_array);
+				if ($result){
+					if (!empty($_POST['brand_pic']) && !empty($brand_info['brand_pic'])){
+						@unlink(BASE_UPLOAD_PATH.DS.ATTACH_BRAND.DS.$brand_info['brand_pic']);
+					}
+					$url = array(
+						array(
+							'url'=>'index.php?act=brand&op=brand_edit&brand_id='.intval($_POST['brand_id']),
+							'msg'=>$lang['brand_edit_again'],
+						),
+						array(
+							'url'=>'index.php?act=brand&op=brand',
+							'msg'=>$lang['brand_add_back_to_list'],
+						)
+					);
+					$this->log(L('nc_edit,brand_index_brand').'['.$_POST['brand_name'].']',1);
+					showMessage($lang['nc_common_save_succ'],$url);
+				}else {
+					$this->log(L('nc_edit,brand_index_brand').'['.$_POST['brand_name'].']',0);
+					showMessage($lang['nc_common_save_fail']);
+				}
+			}
+		}
+
+		$brand_info = $model_brand->getBrandInfo(array('brand_id' => intval($_GET['brand_id'])));
+		if (empty($brand_info)){
+			showMessage($lang['param_error']);
+		}
+		Tpl::output('brand_array',$brand_info);
+
+		// 一级商品分类
+		$gc_list = Model('goods_class')->getGoodsClassListByParentId(0);
+		Tpl::output('gc_list', $gc_list);
+
+		Tpl::showpage('brand.edit');
+	}
+
+	/**
+	 * 删除品牌
+	 */
+	public function brand_delOp(){
+		if (intval($_GET['del_brand_id']) > 0){
+			Model('brand')->delBrand(array('brand_id' => intval($_GET['del_brand_id'])));
+			$this->log(L('nc_delete,brand_index_brand').'[ID:'.intval($_GET['del_brand_id']).']',1);
+			showMessage(L('nc_common_del_succ'),'index.php?act=brand&op=brand');
+		}else {
+			$this->log(L('nc_delete,brand_index_brand').'[ID:'.intval($_GET['del_brand_id']).']',0);
+			showMessage(L('nc_common_del_fail'),'index.php?act=brand&op=brand');
+		}
+	}
+
+	/**
+	 * 品牌申请
+	 */
+	public function brand_applyOp(){
+		$lang	= Language::getLangContent();
+		$model_brand = Model('brand');
+		/**
+		 * 对申请品牌进行操作 通过,拒绝
+		 */
+		if (chksubmit()){
+			if (!empty($_POST['del_id'])){
+				switch ($_POST['type']){
+					case 'pass':
+						//更新品牌 申请状态
+						$brandid_array = array();
+						foreach ($_POST['del_id'] as $v){
+							$brandid_array[] = intval($v);
+						}
+						$update_array = array();
+						$update_array['brand_apply'] = 1;
+						$model_brand->editBrand(array('brand_id' => array('in', $brandid_array)), $update_array);
+						$this->log(L('brand_apply_pass').'[ID:'.implode(',',$brandid_array).']',null);
+						showMessage($lang['brand_apply_passed']);
+						break;
+					case 'refuse':
+						//删除该品牌
+						$brandid_array = array();
+						foreach ($_POST['del_id'] as $v){
+							$brandid_array[] = intval($v);
+						}
+                        $model_brand->delBrand(array('brand_id' => array('in', $brandid_array)));
+						$this->log(L('nc_delete,brand_index_brand').'[ID:'.implode(',',$_POST['del_id']).']',1);
+						showMessage($lang['nc_common_del_succ']);
+						break;
+						default:
+							showMessage($lang['brand_apply_invalid_argument']);
+				}
+			}else {
+				$this->log(L('nc_delete,brand_index_brand'),0);
+				showMessage($lang['nc_common_del_fail']);
+			}
+		}
+		/**
+		 * 检索条件
+		 */
+		$condition = array();
+		if (!empty($_POST['search_brand_name'])) {
+            $condition['brand_name'] = array('like', '%' . trim($_POST['search_brand_name']) . '%');
+		}
+		if (!empty($_POST['search_brand_class'])) {
+		    $condition['brand_class'] = array('like', '%' . trim($_POST['search_brand_class']) . '%');
+		}
+		$brand_list = $model_brand->getBrandNoPassedList($condition, '*', 10);
+
+		Tpl::output('brand_list',$brand_list);
+		Tpl::output('show_page', $model_brand->showpage());
+		Tpl::output('search_brand_name',trim($_POST['search_brand_name']));
+		Tpl::output('search_brand_class',trim($_POST['search_brand_class']));
+		Tpl::showpage('brand.apply');
+	}
+
+	/**
+	 * 审核 申请品牌操作
+	 */
+	public function brand_apply_setOp(){
+		$model_brand = Model('brand');
+
+		if (intval($_GET['brand_id']) > 0){
+			switch ($_GET['state']){
+				case 'pass':
+					/**
+					 * 更新品牌 申请状态
+					 */
+					$update_array = array();
+					$update_array['brand_apply'] = 1;
+					$result = $model_brand->editBrand(array('brand_id' => intval($_GET['brand_id'])), $update_array);
+					if ($result === true){
+						$this->log(L('brand_apply_pass').'[ID:'.intval($_GET['brand_id']).']',null);
+						showMessage(Language::get('brand_apply_pass'));
+					}else {
+						$this->log(L('brand_apply_pass').'[ID:'.intval($_GET['brand_id']).']',0);
+						showMessage(Language::get('brand_apply_fail'));
+					}
+					break;
+				case 'refuse':
+					// 删除
+					$model_brand->delBrand(array('brand_id' => intval($_GET['brand_id'])));
+					$this->log(L('nc_delete,brand_index_brand').'[ID:'.intval($_GET['brand_id']).']',1);
+					showMessage(Language::get('nc_common_del_succ'));
+					break;
+					default:
+						showMessage(Language::get('brand_apply_paramerror'));
+			}
+		}else {
+			$this->log(L('nc_delete,brand_index_brand').'[ID:'.intval($_GET['brand_id']).']',0);
+			showMessage(Language::get('brand_apply_brandparamerror'));
+		}
+	}
+
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		$model_brand = Model('brand');
+		switch ($_GET['branch']){
+			/**
+			 * 品牌名称
+			 */
+			case 'brand_name':
+				/**
+				 * 判断是否有重复
+				 */
+				$condition['brand_name'] = trim($_GET['value']);
+				$condition['brand_id'] = array('neq', intval($_GET['id']));
+				$result = $model_brand->getBrandList($condition);
+				if (empty($result)){
+					$model_brand->editBrand(array('brand_id' => intval($_GET['id'])), array('brand_name' => trim($_GET['value'])));
+					$this->log(L('nc_edit,brand_index_name').'['.$_GET['value'].']',1);
+					echo 'true';exit;
+				}else {
+					echo 'false';exit;
+				}
+				break;
+			/**
+			 * 品牌类别,品牌排序,推荐
+			 */
+			case 'brand_class':
+			case 'brand_sort':
+			case 'brand_recommend':
+				$model_brand->editBrand(array('brand_id' => intval($_GET['id'])), array($_GET['column'] => trim($_GET['value'])));
+				$detail_log = str_replace(array('brand_class','brand_sort','brand_recommend'),array(L('brand_index_class'),L('nc_sort'),L('nc_recommend')),$_GET['branch']);
+				$this->log(L('nc_edit,brand_index_brand').$detail_log.'[ID:'.intval($_GET['id']).']',1);
+				echo 'true';exit;
+				break;
+			/**
+			 * 验证品牌名称是否有重复
+			 */
+			case 'check_brand_name':
+				$condition['brand_name'] = trim($_GET['brand_name']);
+				$condition['brand_id'] = array('neq', intval($_GET['id']));
+				$result = $model_brand->getBrandList($condition);
+				if (empty($result)){
+					echo 'true';exit;
+				}else {
+					echo 'false';exit;
+				}
+				break;
+		}
+	}
+
+	/**
+	 * 品牌导出第一步
+	 */
+	public function export_step1Op(){
+		$model_brand = Model('brand');
+		$condition = array();
+		if (!empty($_GET['search_brand_name'])){
+			$condition['brand_name'] = array('like',"%{$_GET['search_brand_name']}%");
+		}
+		if (!empty($_GET['search_brand_class'])){
+			$condition['brand_class'] = array('like',"%{$_GET['search_brand_class']}%");
+		}
+		$condition['brand_apply']	= '1';
+
+		if (!is_numeric($_GET['curpage'])){
+			$count = $model_brand->getBrandCount($condition);
+			$array = array();
+			if ($count > self::EXPORT_SIZE ){	//显示下载链接
+				$page = ceil($count/self::EXPORT_SIZE);
+				for ($i=1;$i<=$page;$i++){
+					$limit1 = ($i-1)*self::EXPORT_SIZE + 1;
+					$limit2 = $i*self::EXPORT_SIZE > $count ? $count : $i*self::EXPORT_SIZE;
+					$array[$i] = $limit1.' ~ '.$limit2 ;
+				}
+				Tpl::output('list',$array);
+				Tpl::output('murl','index.php?act=brand&op=brand');
+				Tpl::showpage('export.excel');
+			}else{	//如果数量小,直接下载
+				$data = $model_brand->getBrandList($condition, '*', 0, 'brand_id desc', self::EXPORT_SIZE);
+				$this->createExcel($data);
+			}
+		}else{	//下载
+			$limit1 = ($_GET['curpage']-1) * self::EXPORT_SIZE;
+			$limit2 = self::EXPORT_SIZE;
+			$data = $model_brand->getBrandList($condition, '*', 0, 'brand_id desc', "{$limit1},{$limit2}");
+			$this->createExcel($data);
+		}
+	}
+
+	/**
+	 * 生成excel
+	 *
+	 * @param array $data
+	 */
+	private function createExcel($data = array()){
+		Language::read('export');
+		import('libraries.excel');
+		$excel_obj = new Excel();
+		$excel_data = array();
+		//设置样式
+		$excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1')));
+		//header
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_brandid'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_brand'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_brand_cate'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_brand_img'));
+		foreach ((array)$data as $k=>$v){
+			$tmp = array();
+			$tmp[] = array('data'=>$v['brand_id']);
+			$tmp[] = array('data'=>$v['brand_name']);
+			$tmp[] = array('data'=>$v['brand_class']);
+			$tmp[] = array('data'=>$v['brand_pic']);
+			$excel_data[] = $tmp;
+		}
+		$excel_data = $excel_obj->charset($excel_data,CHARSET);
+		$excel_obj->addArray($excel_data);
+		$excel_obj->addWorksheet($excel_obj->charset(L('exp_brand'),CHARSET));
+		$excel_obj->generateXML($excel_obj->charset(L('exp_brand'),CHARSET).$_GET['curpage'].'-'.date('Y-m-d-H',time()));
+	}
+
+}

+ 100 - 0
admin/control/cache.php

@@ -0,0 +1,100 @@
+<?php
+/**
+ * 清理缓存
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+
+class cacheControl extends SystemControl
+{
+    protected $cacheItems = array(
+        'setting',          // 基本缓存
+        'seo',              // SEO缓存
+        'groupbuy_price',   // 抢购价格区间
+        'nav',              // 底部导航缓存
+        'express',          // 快递公司
+        'store_class',      // 店铺分类
+        'store_grade',      // 店铺等级
+        'store_msg_tpl',    // 店铺消息
+        'member_msg_tpl',   // 用户消息
+        'consult_type',     // 咨询类型
+        'circle_level',     // 圈子成员等级
+    );
+
+    public function __construct()
+    {
+        parent::__construct();
+        Language::read('cache');
+    }
+
+    /**
+     * 清理缓存
+     */
+    public function clearOp()
+    {
+        if (!chksubmit()) {
+            Tpl::showpage('cache.clear');
+            return;
+        }
+
+        $lang = Language::getLangContent();
+
+        // 清理所有缓存
+        if ($_POST['cls_full'] == 1) {
+            foreach ($this->cacheItems as $i) {
+                dkcache($i);
+            }
+
+            // 表主键
+            Model::dropTablePkArrayCache();
+
+            // 商品分类
+            dkcache('gc_class');
+            dkcache('all_categories');
+            dkcache('goods_class_seo');
+            dkcache('class_tag');
+
+            // 广告
+            Model('adv')->makeApAllCache();
+
+            // 首页
+            Model('web_config')->getWebHtml('index', 1);
+            delCacheFile('index');
+        } else {
+            $todo = (array) $_POST['cache'];
+
+            foreach ($this->cacheItems as $i) {
+                if (in_array($i, $todo)) {
+                    dkcache($i);
+                }
+            }
+
+            // 表主键
+            if (in_array('table', $todo)) {
+                Model::dropTablePkArrayCache();
+            }
+
+            // 商品分类
+            if (in_array('goodsclass', $todo)) {
+                dkcache('gc_class');
+                dkcache('all_categories');
+                dkcache('goods_class_seo');
+                dkcache('class_tag');
+            }
+
+            // 广告
+            if (in_array('adv', $todo)) {
+                Model('adv')->makeApAllCache();
+            }
+
+            // 首页
+            if (in_array('index', $todo)) {
+                Model('web_config')->getWebHtml('index', 1);
+                delCacheFile('index');
+            }
+        }
+
+        $this->log(L('cache_cls_operate'));
+        showMessage($lang['cache_cls_ok']);
+    }
+}

+ 81 - 0
admin/control/chat_log.php

@@ -0,0 +1,81 @@
+<?php
+/**
+ * 聊天记录查询
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class chat_logControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		$add_time_to = date("Y-m-d");
+		$time_from = array();
+		$time_from['7'] = strtotime($add_time_to)-60*60*24*7;
+		$time_from['90'] = strtotime($add_time_to)-60*60*24*90;
+		$add_time_from = date("Y-m-d",$time_from['90']);
+		Tpl::output('minDate', $add_time_from);//只能查看3个月内数据
+		Tpl::output('maxDate', $add_time_to);
+		if (empty($_GET['add_time_from']) || $_GET['add_time_from'] < $add_time_from) {//默认显示7天内数据
+			$_GET['add_time_from'] = date("Y-m-d",$time_from['7']);
+		}
+		if (empty($_GET['add_time_to']) || $_GET['add_time_to'] > $add_time_to) {
+			$_GET['add_time_to'] = $add_time_to;
+		}
+	}
+
+	/**
+	 * 聊天记录查询
+	 */
+	public function chat_logOp() {
+		$model_chat	= Model('web_chat');
+		$f_member = array();//发消息人
+		$t_member = array();//收消息人
+		$f_name = trim($_GET['f_name']);
+		if (!empty($f_name)) {
+    		$condition = array();
+    		$condition['member_name'] = $f_name;
+            $f_member = $model_chat->getMemberInfo($condition);
+    		Tpl::output('f_member', $f_member);
+		}
+		$t_name = trim($_GET['t_name']);
+		if (!empty($t_name)) {
+    		$condition = array();
+    		$condition['member_name'] = $t_name;
+            $t_member = $model_chat->getMemberInfo($condition);
+    		Tpl::output('t_member', $t_member);
+		}
+		if ($f_member['member_id'] > 0 && $t_member['member_id'] > 0) {//验证账号
+		    $condition = array();
+			$condition['add_time_from'] = trim($_GET['add_time_from']);
+			$condition['add_time_to'] = trim($_GET['add_time_to']);
+			$condition['f_id'] = intval($f_member['member_id']);
+			$condition['t_id'] = intval($t_member['member_id']);
+			$log_list = $model_chat->getLogFromList($condition,15);
+			$log_list = array_reverse($log_list);
+			Tpl::output('log_list',$log_list);
+			Tpl::output('show_page',$model_chat->showpage());
+		}
+		Tpl::showpage('chat_log.list');
+	}
+
+	/**
+	 * 聊天内容查询
+	 */
+	public function msg_logOp() {
+		if (!empty($_GET['msg'])) {
+		    $model_chat	= Model('web_chat');
+		    $condition = array();
+			$add_time_from = strtotime($_GET['add_time_from']);
+			$add_time_to = strtotime($_GET['add_time_to']);
+			$condition['add_time'] = array('time',array($add_time_from,$add_time_to));
+			$condition['t_msg'] = array('like','%'.trim($_GET['msg']).'%');
+			$log_list = $model_chat->getLogList($condition,15);
+			$log_list = array_reverse($log_list);
+			Tpl::output('log_list',$log_list);
+			Tpl::output('show_page',$model_chat->showpage());
+		}
+		Tpl::showpage('chat_msg_log.list');
+	}
+}

+ 22 - 0
admin/control/circle_cache.php

@@ -0,0 +1,22 @@
+<?php
+/*******
+ * 圈子话题管理 
+ *
+
+ */
+defined('InShopNC') or exit('Access Invalid!');
+class circle_cacheControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+	}
+	public function indexOp(){
+		rcache('circle_level',true);
+		showMessage(L('nc_common_op_succ'), 'index.php?act=circle_setting');
+	}
+}
+
+
+
+
+
+

+ 166 - 0
admin/control/circle_class.php

@@ -0,0 +1,166 @@
+<?php
+/**
+ * 圈子分类管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class circle_classControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('circle');
+	}
+	/**
+	 * 圈子分类列表
+	 */
+	public function class_listOp(){
+		$model = Model();
+		if(chksubmit()){
+			// 批量删除
+			if($_POST['submit_type'] == 'batchdel'){
+				$id_array	=$_POST['check_class_id'];
+				if(empty($id_array) && !is_array($id_array)){
+					showMessage(L('circle_please_choose_class'));
+				}
+				$where = array('class_id'=>array('in',$id_array));
+				$model->table('circle_class')->where($where)->delete();
+				showMessage(L('nc_common_op_succ'));
+			}
+		}
+		$where = array();
+		if(trim($_GET['searchname']) != ''){
+			$where['class_name']		= array('like', '%'.trim($_GET['searchname']).'%');
+		}
+		if(trim($_GET['searchstatus']) != ''){
+			$where['class_status']		= intval($_GET['searchstatus']);
+		}
+		$class_list = $model->table('circle_class')->where($where)->order('class_sort asc')->select();
+		Tpl::output('class_list', $class_list);
+		Tpl::showpage('circle_class.list');
+	}
+	/**
+	 * 圈子分类添加
+	 */
+	public function class_addOp(){
+		$model = Model();
+		if(chksubmit()){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+					array("input"=>$_POST["class_name"], "require"=>"true", "message"=>L('circle_class_name_not_null')),
+					array("input"=>$_POST["class_sort"], "require"=>"true", 'validator'=>'Number', "message"=>L('circle_class_sort_is_number')),
+			);
+			$error = $obj_validate->validate();
+			if($error != ''){
+				showMessage($error);
+			}else{
+				$insert = array();
+				$insert['class_name']		= trim($_POST['class_name']);
+				$insert['class_sort']		= intval($_POST['class_sort']);
+				$insert['class_status']		= intval($_POST['status']);
+				$insert['is_recommend']		= intval($_POST['recommend']);
+				$insert['class_addtime']	= time();
+				$result = $model->table('circle_class')->insert($insert);
+				if($result){
+					$url = array(
+						array(
+							'url'=>'index.php?act=circle_class&op=class_add',
+							'msg'=>L('circle_continue_add'),
+						),
+						array(
+							'url'=>'index.php?act=circle_class&op=class_list',
+							'msg'=>L('circle_return_list'),
+						)
+					);
+					showMessage(L('nc_common_op_succ'),$url);
+				}else{
+					showMessage(L('nc_common_op_fail'));
+				}
+			}
+		}
+		// 商品分类
+		$gc_list = Model('goods_class')->getGoodsClassListByParentId(0);
+		Tpl::output('gc_list', $gc_list);
+
+		Tpl::showpage('circle_class.add');
+	}
+	/**
+	 * 圈子分类编辑
+	 */
+	public function class_editOp(){
+		$model = Model();
+		if(chksubmit()){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+					array("input"=>$_POST["class_name"], "require"=>"true", "message"=>L('circle_class_name_not_null')),
+					array("input"=>$_POST["class_sort"], "require"=>"true", 'validator'=>'Number', "message"=>L(’circle_class_sort_is_number)),
+			);
+			$error = $obj_validate->validate();
+			if($error != ''){
+				showMessage($error);
+			}else{
+				$update = array();
+				$update['class_id']		= intval($_POST['class_id']);
+				$update['class_name']	= trim($_POST['class_name']);
+				$update['class_sort']	= intval($_POST['class_sort']);
+				$update['class_status']	= intval($_POST['status']);
+				$update['is_recommend']	= intval($_POST['recommend']);
+				$result = $model->table('circle_class')->update($update);
+				if($result){
+					showMessage(L('nc_common_op_succ'),'index.php?act=circle_class&op=class_list');
+				}else{
+					showMessage(L('nc_common_op_fail'));
+				}
+			}
+		}
+		$id = intval($_GET['classid']);
+		if($id <= 0){
+			showMessage(L('param_error'));
+		}
+		$class_info = $model->table('circle_class')->find($id);
+
+		Tpl::output('class_info', $class_info);
+		// 商品分类
+		$gc_list = Model('goods_class')->getGoodsClassListByParentId(0);
+		Tpl::output('gc_list', $gc_list);
+
+		Tpl::showpage('circle_class.edit');
+	}
+	/**
+	 * 删除分类
+	 */
+	public function class_delOp(){
+		$id = intval($_GET['classid']);
+		if($id <= 0){
+			showMessage(L('param_error'));
+		}
+		$model = Model();
+		$model->table('circle_class')->delete($id);
+		showMessage(L('nc_common_op_succ'));
+	}
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			case 'recommend':
+			case 'status':
+			case 'sort':
+			case 'name':
+				$update = array(
+					'class_id'=>intval($_GET['id']),
+					$_GET['column']=>$_GET['value']
+				);
+				Model()->table('circle_class')->update($update);
+				echo 'true';
+				break;
+		}
+	}
+}

+ 103 - 0
admin/control/circle_inform.php

@@ -0,0 +1,103 @@
+<?php
+/**
+ * Circle Inform
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class circle_informControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('circle_inform');
+	}
+	/**
+	 * inform list
+	 */
+	public function inform_listOp(){
+		$model = Model();
+		if(chksubmit()){
+			if(empty($_POST['i_id'])){
+				showMessage(L('wrong_argument'), '', '', 'error');
+			}
+			// check
+			foreach ($_POST['i_id'] as $key=>$val){
+				if (!is_numeric($val)) unset($_POST[$key]);
+			}
+			$rs = $model->table('circle_inform')->where(array('inform_id'=>array('in', $_POST['i_id'])))->delete();
+			if($rs){
+				showMessage(L('nc_common_op_succ'));
+			}else{
+				showMessage(L('nc_common_op_fail'), '', '', 'error');
+			}
+		}
+		$where = array();
+		if($_GET['searchname'] != ''){
+			$where['member_name'] = array('like', '%'.$_GET['searchname'].'%');
+		}
+		if($_GET['circlename'] != ''){
+			$where['circle_name'] = array('like', '%'.$_GET['circlename'].'%');
+		}
+		if($_GET['searchstate'] != ''){
+			$where['inform_state'] = intval($_GET['searchstate']);
+		}
+		$inform_list = $model->table('circle_inform')->where($where)->page(10)->order('inform_id desc')->select();
+		// tidy
+		if(!empty($inform_list)){
+			foreach ($inform_list as $key=>$val){
+				$inform_list[$key]['url']	= $this->spellInformUrl($val);
+				$inform_list[$key]['title'] = L('circle_theme,nc_quote1').$val['theme_name'].L('nc_quote2');
+				$inform_list[$key]['state'] = $this->informStatr(intval($val['inform_state']));
+				if($val['reply_id'] != 0)
+					$inform_list[$key]['title']	.= L('circle_inform_reply_title');
+			}
+		}
+		Tpl::output('inform_list', $inform_list);
+		Tpl::output('show_page', $model->showpage(2));
+
+		Tpl::showpage('circle_inform');
+	}
+	/**
+	 * Inform delete
+	 */
+	public function inform_delOp(){
+		$i_id = intval($_GET['i_id']);
+		if($i_id <= 0){
+			showMessage(L('wrong_argument'), '', '', 'error');
+		}
+		$rs = Model()->table('circle_inform')->delete($i_id);
+		if($rs){
+			showMessage(L('nc_common_op_succ'));
+		}else{
+			showMessage(L('nc_common_op_fail'), '', '', 'error');
+		}
+	}
+	/**
+	 * Inform Url link
+	 */
+	public function spellInformUrl($param){
+		if($param['reply_id'] == 0) return $url = 'index.php?act=theme&op=theme_detail&c_id='.$param['circle_id'].'&t_id='.$param['theme_id'];
+
+		$where = array();
+		$where['circle_id']	= $param['circle_id'];
+		$where['theme_id']	= $param['theme_id'];
+		$where['reply_id']	= array('elt', $param['reply_id']);
+		$count = Model()->table('circle_threply')->where($where)->count();
+		$page = ceil($count/15);
+		return $url = 'index.php?act=theme&op=theme_detail&c_id='.$param['circle_id'].'&t_id='.$param['theme_id'].'&curpage='.$page.'#f'.$param['reply_id'];
+	}
+	/**
+	 * Inform state
+	 */
+	private function informStatr($state){
+		switch ($state){
+			case 0:
+				return L('circle_inform_untreated');
+				break;
+			case 1:
+				return L('circle_inform_treated');
+				break;
+		}
+	}
+}

+ 437 - 0
admin/control/circle_manage.php

@@ -0,0 +1,437 @@
+<?php
+/**
+ * 圈子管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class circle_manageControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('circle');
+	}
+	/**
+	 * 圈子列表
+	 */
+	public function circle_listOp(){
+		$model = Model();
+		if(chksubmit()){
+			// 批量删除圈子
+			if($_POST['submit_type'] == 'batchdel'){
+				$id_array = $_POST['check_circleid'];
+				if(empty($id_array) && !is_array($id_array)){
+					showMessage(L('circle_choose_del_circle'));
+				}
+				$model = Model();
+				$where = array('circle_id'=>array('in',$id_array));
+				$circle_list = $model->table('circle')->where($where)->select();
+
+				// 删除圈子logo
+				if(!empty($circle_list)){
+					foreach ($circle_list as $val){
+						@unlink(BASE_UPLOAD_PATH.DS.ATTACH_CIRCLE.'/group/'.$circle_list['circle_id'].'.jpg');
+					}
+				}
+				// 删除附件
+				$affix_list = $model->table('circle_affix')->where($where)->select();
+				if(!empty($affix_list)){
+					foreach ($affix_list as $val){
+						@unlink(themeImagePath($val['affix_filename']));
+						@unlink(themeImagePath($val['affix_filethumb']));
+					}
+					$model->table('circle_affix')->where($where)->delete();
+				}
+
+				// 删除商品
+				$model->table('circle_thg')->where($where)->delete();
+
+				// 删除赞表相关
+				$model->table('circle_like')->where($where)->delete();
+
+				// 删除回复
+				$model->table('circle_threply')->where($where)->delete();
+
+				// 删除话题
+				$model->table('circle_theme')->where($where)->delete();
+
+				// 删除成员
+				$model->table('circle_member')->where($where)->delete();
+
+				// 删除圈子
+				$model->table('circle')->where($where)->delete();
+
+				$this->log(L('nc_del_circle').'['.implode(',', $id_array).']');
+				showMessage(L('nc_common_op_succ'));
+			}
+		}
+		$where = array();
+		if(trim($_GET['searchname']) != ''){
+			$where['circle_name']		= array('like', '%'.trim($_GET['searchname']).'%');
+		}
+		if(trim($_GET['searchmaster']) != ''){
+			$where['circle_mastername']	= array('like', '%'.trim($_GET['searchmaster']).'%');
+		}
+		if(trim($_GET['searchstatus']) != ''){
+			$where['circle_status']		= intval($_GET['searchstatus']);
+		}
+		$circle_list = $model->table('circle')->where($where)->page('10')->select();
+		Tpl::output('page', $model->showpage('2'));
+		Tpl::output('circle_list', $circle_list);
+		Tpl::showpage('circle.list');
+	}
+	/**
+	 * 圈子待审核列表
+	 */
+	public function circle_verifyOp(){
+		$model = Model();
+		if(chksubmit()){
+			$id_array = $_POST['check_circleid'];
+			if(empty($id_array) && !is_array($id_array)){
+				showMessage(L('circle_choose_del_circle'));
+			}
+			if($_POST['submit_type'] == 'batchdel'){
+				// delete circle
+				$where = array('circle_id'=>array('in',$id_array));
+				$model->table('circle')->where($where)->delete();
+				showMessage(L('nc_common_del_succ'));
+			}else if($_POST['submit_type'] == 'pass'){
+				// pass circle
+				$model->table('circle')->where(array('circle_id'=>array('in', $id_array)))->update(array('circle_status'=>1));
+				showMessage(L('nc_common_op_succ'));
+			}
+		}
+		$circle_list = $model->table('circle')->where(array('circle_status'=>2))->page('10')->select();
+		Tpl::output('page', $model->showpage('2'));
+		Tpl::output('circle_list', $circle_list);
+		Tpl::showpage('circle.verify');
+	}
+	/**
+	 * 圈子新增
+	 */
+	public function circle_addOp(){
+		$model = Model();
+		// 保存
+		if(chksubmit()){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+					array("input"=>$_POST["c_name"], "require"=>"true", "message"=>L('circle_name_not_null')),
+			);
+			$error = $obj_validate->validate();
+			if($error != ''){
+				showMessage($error);
+			}else{
+				$insert = array();
+				$insert['circle_name']		= trim($_POST['c_name']);
+				$insert['circle_masterid']	= intval($_POST['masterid']);
+				$insert['circle_mastername']= trim($_POST['mastername']);
+				$insert['circle_desc']		= $_POST['c_desc'];
+				$insert['circle_tag']		= $_POST['c_tag'];
+				$insert['circle_notice']	= $_POST['c_notice'];
+				$insert['circle_status']	= intval($_POST['c_status']);
+				$insert['is_recommend']		= intval($_POST['c_recommend']);
+				$insert['class_id']			= intval($_POST['classid']);
+				$insert['circle_addtime']	= time();
+				$circleid = $model->table('circle')->insert($insert);
+				if($circleid){
+					// 把圈主信息加入圈子会员表
+					$insert = array();
+					$insert['member_id']	= intval($_POST['masterid']);
+					$insert['circle_id']	= $circleid;
+					$insert['circle_name']	= $_POST['c_name'];
+					$insert['member_name']	= $_POST['mastername'];
+					$insert['cm_applytime']	= $insert['cm_jointime'] = time();
+					$insert['cm_state']		= 1;
+					$insert['is_identity']	= 1;
+					$insert['cm_lastspeaktime'] = '';
+					$rs = $model->table('circle_member')->insert($insert);
+					if($rs){
+						$update['circle_mcount']	= 1;
+					}
+					if (!empty($_POST['c_img'])){
+						$update['circle_img']	= $circleid.'.jpg';
+						rename(BASE_UPLOAD_PATH.'/'.ATTACH_CIRCLE.'/group/'.$_POST['c_img'],BASE_UPLOAD_PATH.'/'.ATTACH_CIRCLE.'/group/'.$circleid.'.jpg');
+					}
+					$model->table('circle')->where(array('circle_id'=>$circleid))->update($update);
+					$this->log(L('nc_add_circle').'['.$circleid.']');
+					showMessage(L('nc_common_op_succ'));
+				}else{
+					showMessage(L('nc_common_op_fail'));
+				}
+			}
+		}
+		// 圈子分类
+		$class_list = $model->table('circle_class')->where(array('class_status'=>1))->order('class_sort asc')->select();
+		Tpl::output('class_list', $class_list);
+
+		Tpl::showpage('circle.add');
+	}
+	/**
+	 * 圈子编辑
+	 */
+	public function circle_editOp(){
+		$model = Model();
+		if(chksubmit()){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+					array("input"=>$_POST["c_name"], "require"=>"true", "message"=>L('circle_name_not_null')),
+			);
+			$error = $obj_validate->validate();
+			if($error != ''){
+				showMessage($error);
+			}else{
+				$update = array();
+				$update['circle_id']		= intval($_POST['c_id']);
+				$update['circle_name']		= trim($_POST['c_name']);
+				$update['circle_masterid']	= intval($_POST['masterid']);
+				$update['circle_mastername']= trim($_POST['mastername']);
+				$update['circle_desc']		= $_POST['c_desc'];
+				$insert['circle_tag']		= $_POST['c_tag'];
+				$update['circle_notice']	= $_POST['c_notice'];
+				$update['circle_status']	= intval($_POST['c_status']);
+				$update['circle_statusinfo']= $_POST['c_statusinfo'];
+				$update['is_recommend']		= intval($_POST['c_recommend']);
+				$update['class_id']			= intval($_POST['classid']);
+				$insert['circle_img']		= $_POST['c_img'];
+				$rs = $model->table('circle')->update($update);
+				if($rs){
+					// 更新圈子会员表 圈主信息。
+					$cminfo = $model->table('circle_member')->where(array('member_id'=>intval($_POST['masterid']), 'circle_id'=>intval($_POST['c_id'])))->find();
+					if(empty($cminfo)){
+						// 取消员圈主圈主身份
+						$model->table('circle_member')->where(array('circle_id'=>intval($_POST['c_id']), 'is_identity'=>1))->update(array('is_identity'=>3));
+						$model->table('circle_theme')->where(array('circle_id'=>intval($_POST['c_id']), 'is_identity'=>1))->update(array('is_identity'=>3));
+						// 把圈主信息加入圈子会员表
+						$insert = array();
+						$insert['member_id']	= intval($_POST['masterid']);
+						$insert['circle_id']	= intval($_POST['c_id']);
+						$insert['circle_name']	= $_POST['c_name'];
+						$insert['member_name']	= $_POST['mastername'];
+						$insert['cm_applytime']	= $insert['cm_jointime'] = time();
+						$insert['cm_state']		= 1;
+						$insert['is_identity']	= 1;
+						$insert['cm_lastspeaktime'] = '';
+						$model->table('circle_member')->insert($insert);
+					}else{
+						if($cminfo['is_identity'] != 1){
+							// 取消员圈主圈主身份
+							$model->table('circle_member')->where(array('circle_id'=>intval($_POST['c_id']), 'is_identity'=>1))->update(array('is_identity'=>3));
+							$model->table('circle_theme')->where(array('circle_id'=>intval($_POST['c_id']), 'is_identity'=>1))->update(array('is_identity'=>3));
+							// 任命新圈主
+							$model->table('circle_member')->where(array('member_id'=>intval($_POST['masterid']), 'circle_id'=>intval($_POST['c_id'])))->update(array('is_identity'=>1));
+							$model->table('circle_theme')->where(array('member_id'=>intval($_POST['masterid']), 'circle_id'=>intval($_POST['c_id'])))->update(array('is_identity'=>1));
+						}
+					}
+					// 更新圈子成员信息
+					$count = $model->table('circle_member')->where(array('circle_id'=>intval($_POST['c_id'])))->count();
+					$model->table('circle')->update(array('circle_id'=>intval($_POST['c_id']), 'circle_mcount'=>$count));
+
+					// 更新主题圈子名称字段
+					$model->table('circle_theme')->where(array('circle_id'=>intval($_POST['c_id'])))->update(array('circle_name'=>$_POST['c_name']));
+					$model->table('circle_member')->where(array('circle_id'=>intval($_POST['c_id'])))->update(array('circle_name'=>$_POST['c_name']));
+
+					$this->log(L('nc_edit_circle').'['.intval($_POST['c_id']).']');
+					showMessage(L('nc_common_op_succ'), 'index.php?act=circle_manage&op=circle_list');
+				}else{
+					showMessage(L('nc_common_op_fail'));
+				}
+			}
+		}
+		$id = intval($_GET['c_id']);
+		if($id <= 0){
+			showMessage(L('param_error'));
+		}
+		// 圈子详细
+		$circle_info = $model->table('circle')->find($id);
+		Tpl::output('circle_info', $circle_info);
+
+		// 圈子分类
+		$class_list = $model->table('circle_class')->where(array('class_status'=>1))->order('class_sort asc')->select();
+		Tpl::output('class_list', $class_list);
+
+		Tpl::showpage('circle.edit');
+	}
+	/**
+	 * 选择圈主
+	 */
+	public function choose_masterOp(){
+	    Tpl::output('search_url', (intval($_GET['c_id']) > 0) ? urlAdmin('circle_manage', 'search_member', array('c_id' => intval($_GET['c_id']))) : urlAdmin('circle_manage', 'search_member'));
+		Tpl::showpage('circle.choose_master', 'null_layout');
+	}
+	/**
+	 * 搜索会员
+	 */
+	public function search_memberOp(){
+		$model = Model();
+		$where = array();
+		if($_GET['name'] != ''){
+			$where['member_name'] = array('like', '%'.trim($_GET['name']).'%');
+		}
+		$member_list = $model->table('member')->field('member_id,member_name')->where($where)->select();
+		$member_list = array_under_reset($member_list, 'member_id', 1);
+
+		// 允许创建圈子验证
+		$where = array();
+		if(intval($_GET['c_id']) > 0){
+			$where = array('circle_id'=>array('neq',intval($_GET['c_id'])));
+		}
+		$count_array = $model->table('circle')->field('circle_masterid,count(*) as count')->where($where)->group('circle_masterid')->select();
+		if (!empty($count_array)){
+			foreach ($count_array as $val){
+				if(intval($val['count']) >= C('circle_createsum')) unset($member_list[$val['circle_masterid']]);
+			}
+		}
+
+		// 允许加入圈子验证
+		$where = array();
+		if(intval($_GET['c_id']) > 0){
+			$where = array('circle_id');
+		}
+		$count_array = $model->table('circle_member')->field('member_id,count(*) as count')->where($where)->group('member_id')->select();
+		if(!empty($count_array)){
+			foreach ($count_array as $val){
+				if(intval($val['count']) >= C('circle_joinsum')) unset($member_list[$val['member_id']]);
+			}
+		}
+
+		$member_list = array_values($member_list);
+		// 加入圈子数量验证
+		if(strtoupper(CHARSET) == 'GBK'){
+			$member_list = Language::getUTF8($member_list);
+		}
+		echo json_encode($member_list);die;
+	}
+	/**
+	 * 删除圈子
+	 */
+	public function circle_delOp(){
+		$id = intval($_GET['c_id']);
+		if($id <= 0){
+			showMessage(L('param_error'));
+		}
+		$model = Model();
+		$circle_info = $model->table('circle')->find($id);
+		if(!empty($circle_info)) @unlink(BASE_UPLOAD_PATH.DS.ATTACH_CIRCLE.'/group/'.$circle_info['circle_id'].'.jpg');
+
+		// 删除附件
+		$affix_list = $model->table('circle_affix')->where(array('circle_id'=>$id))->select();
+		if(!empty($affix_list)){
+			foreach ($affix_list as $val){
+				@unlink(themeImagePath($val['affix_filename']));
+				@unlink(themeImagePath($val['affix_filethumb']));
+			}
+			$model->table('circle_affix')->where(array('circle_id'=>$id))->delete();
+		}
+
+		// 删除商品
+		$model->table('circle_thg')->where(array('circle_id'=>$id))->delete();
+
+		// 删除赞表相关
+		$model->table('circle_like')->where(array('circle_id'=>$id))->delete();
+
+		// 删除回复
+		$model->table('circle_threply')->where(array('circle_id'=>$id))->delete();
+
+		// 删除话题
+		$model->table('circle_theme')->where(array('circle_id'=>$id))->delete();
+
+		// 删除成员
+		$model->table('circle_member')->where(array('circle_id'=>$id))->delete();
+
+		// 删除圈子
+		$model->table('circle')->delete($id);
+
+		$this->log(L('nc_del_circle').'['.$id.']');
+		showMessage(L('nc_common_op_succ'));
+	}
+	/**
+	 * 会员名称检测
+	 */
+	public function check_memberOp() {
+		$model = Model();
+		$member_info = Model('member')->table('member')->where(array('member_name'=>trim($_GET['name']), 'member_id'=>intval($_GET['id'])))->select();
+		if(empty($member_info)){
+			echo 'false';exit;
+		}else{
+			// 允许创建数量验证
+			$where = array();
+			$where['circle_masterid']	= intval($_GET['id']);
+			if(intval($_GET['c_id']) > 0){
+				$where['circle_id']		= array('neq', intval($_GET['c_id']));
+			}
+			$count = $model->table('circle')->where($where)->count();
+			if(intval($count) >= intval(C('circle_createsum'))){
+				echo 'false';exit;
+			}
+
+			// 允许加入圈子验证
+			$where = array();
+			$where['member_id']	= intval($_GET['id']);
+			if(intval($_GET['c_id']) > 0){
+				$where['circle_id']	= array('neq', intval($_GET['c_id']));
+			}
+			$count = $model->table('circle_member')->where($where)->count();
+			if(intval($count) >= intval(C('circle_joinsum'))){
+				echo 'false';exit;
+			}
+
+			echo 'true';exit;
+		}
+	}
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			case 'status':
+				$this->log(L('nc_circle_pass_cerify').'['.intval($_GET['id']).']');
+			case 'recommend':
+				$update = array(
+					'circle_id'=>intval($_GET['id']),
+					$_GET['column']=>$_GET['value']
+				);
+				Model()->table('circle')->update($update);
+				echo 'true';
+				break;
+			case 'name':
+				$where  = array(
+					'circle_id'=>intval($_GET['id'])
+				);
+				$update = array(
+					$_GET['column']=>$_GET['value']
+				);
+				Model()->table('circle')->where($where)->update($update);
+				Model()->table('circle_theme')->where($where)->update($update);
+				echo 'true';
+				break;
+
+		}
+	}
+	/**
+	 * ajax验证圈子名称
+	 */
+	public function check_circle_nameOp(){
+		$name = $_GET['name'];
+		if (strtoupper(CHARSET) == 'GBK'){
+			$name = Language::getGBK($name);
+		}
+		$where = array();
+		$where['circle_name']	= $name;
+		if(intval($_GET['id']) > 0){
+			$where['circle_id']	= array('neq', intval($_GET['id']));
+		}
+		$rs = Model()->table('circle')->where($where)->find();
+		if (!empty($rs)){
+			echo 'false';
+		}else{
+			echo 'true';
+		}
+	}
+}

+ 106 - 0
admin/control/circle_member.php

@@ -0,0 +1,106 @@
+<?php
+/**
+ * 圈子话题管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class circle_memberControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('circle');
+	}
+	/**
+	 * 成员列表
+	 */
+	public function member_listOp(){
+		$model = Model();
+		if(chksubmit()){
+			if (!empty($_POST['check_param']) && is_array($_POST['check_param'])){
+				foreach ($_POST['check_param'] as $val){
+					$param = explode('|', $val);
+					list($member_id, $circle_id) = $param;
+					$where['member_id'] = $member_id;
+					$where['circle_id'] = $circle_id;
+					Model()->table('circle_member')->where($where)->delete();
+				}
+			}
+			showMessage(L('nc_common_op_succ'));
+		}
+		$where = array();
+		if($_GET['searchname'] != ''){
+			$where['member_name'] = array('like', '%'.$_GET['searchname'].'%');
+		}
+		if($_GET['circlename'] != ''){
+			$where['circle_name'] = array('like', '%'.$_GET['circlename'].'%');
+		}
+		if($_GET['searchrecommend'] != '' && in_array(intval($_GET['searchrecommend']), array(0,1))){
+			$where['is_recommend'] = intval($_GET['searchrecommend']);
+		}
+		if ($_GET['searchidentity'] != '' && in_array(intval($_GET['searchidentity']), array(1,2,3))) {
+		    $where['is_identity'] = intval($_GET['searchidentity']);
+		}
+
+		$order = array();
+		if(intval($_GET['searchsort']) > 0){
+			switch (intval($_GET['searchsort'])){
+				case 1:
+					$order = 'cm_thcount desc';
+					break;
+				case 2:
+					$order = 'cm_comcount desc';
+					break;
+				default:
+					$order = 'cm_jointime desc';
+					break;
+			}
+		}
+		$member_list = $model->table('circle_member')->where($where)->page(10)->order($order)->select();
+		Tpl::output('show_page', $model->showpage('2'));
+		Tpl::output('member_list', $member_list);
+		Tpl::showpage('circle_member.list');
+	}
+	/**
+	 * 删除会员
+	 */
+	public function member_delOp(){
+	    if (chksubmit()) {
+	        $param = explode(',', $_GET['param']);
+	        foreach ($param as $value) {
+        		$tpl_param = explode('|', $value);
+        		list($member_id, $circle_id) = $tpl_param;
+        		$where['member_id'] = $member_id;
+        		$where['circle_id'] = $circle_id;
+        		Model()->table('circle_member')->where($where)->delete();
+
+        		if ($_POST['all']) {
+        		    Model()->table('circle_theme')->where($where)->delete();
+        		    Model()->table('circle_threply')->where($where)->delete();
+        		}
+	        }
+    		showMessage(L('nc_common_op_succ'));
+	    }
+	    Tpl::showpage('circle_member.del', 'null_layout');
+	}
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			case 'recommend':
+				$array = explode('|', $_GET['id']);
+				list($member_id, $circle_id) = $array;
+				$where = array();
+				$where['member_id']	= $member_id;
+				$where['circle_id']	= $circle_id;
+				$update = array(
+					$_GET['column']=>$_GET['value']
+				);
+				Model()->table('circle_member')->where($where)->update($update);
+				echo 'true';
+				break;
+		}
+	}
+}

+ 183 - 0
admin/control/circle_memberlevel.php

@@ -0,0 +1,183 @@
+<?php
+/**
+ * Circle Member Level
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class circle_memberlevelControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('circle_memberlevel');
+	}
+	/**
+	 * Members of the level set
+	 */
+	public function indexOp(){
+		$model = Model();
+		if(chksubmit()){
+			$insert_all = array();
+			foreach ($_POST['cmld'] as $key=>$val){
+				$insert_all[$key]['mld_id']	= $val['id'];
+				$insert_all[$key]['mld_name']	= $val['name'];
+				$insert_all[$key]['mld_exp']	= $val['exp'];
+			}
+			$insert_all = array_values($insert_all);
+			$rs = $model->table('circle_mldefault')->insertAll($insert_all,array(),true);
+			if($rs){
+				showMessage(L('nc_common_op_succ'));
+			}else{
+				showMessage(L('nc_common_op_fail'));
+			}
+		}
+		$mld_list = $model->table('circle_mldefault')->select();
+		$mld_list = array_under_reset($mld_list, 'mld_id');
+		Tpl::output('mld_list', $mld_list);
+		Tpl::showpage('circle_memberlevel');
+	}
+	/**
+	 * Reference Title list
+	 */
+	public function refOp(){
+		$model = Model();
+		if(chksubmit()){
+			$mlrefid_array = $_POST['del_id'];
+			if(empty($mlrefid_array)){
+				showMessage(L('param_error'));
+			}
+			$rs = $model->table('circle_mlref')->where(array('mlref_id'=>array('in', $mlrefid_array)))->delete();
+			if($rs){
+				showMessage(L('nc_common_op_succ'));
+			}else{
+				showMessage(L('nc_common_op_fail'));
+			}
+		}
+		$mlref_list = $model->table('circle_mlref')->select();
+		Tpl::output('mlref_list', $mlref_list);
+		Tpl::showpage('circle_memberlevel.ref');
+	}
+	/**
+	 * Add the Reference Title
+	 */
+	public function ref_addOp(){
+		if(chksubmit()){
+			$insert_array = array();
+			$insert_array['mlref_name']		= $_POST['mlref_name'];
+			$insert_array['mlref_addtime']	= time();
+			$insert_array['mlref_status']	= intval($_POST['mlref_status']);
+			$insert_array['mlref_1']		= $_POST['mlref_1'];
+			$insert_array['mlref_2']		= $_POST['mlref_2'];
+			$insert_array['mlref_3']		= $_POST['mlref_3'];
+			$insert_array['mlref_4']		= $_POST['mlref_4'];
+			$insert_array['mlref_5']		= $_POST['mlref_5'];
+			$insert_array['mlref_6']		= $_POST['mlref_6'];
+			$insert_array['mlref_7']		= $_POST['mlref_7'];
+			$insert_array['mlref_8']		= $_POST['mlref_8'];
+			$insert_array['mlref_9']		= $_POST['mlref_9'];
+			$insert_array['mlref_10']		= $_POST['mlref_10'];
+			$insert_array['mlref_11']		= $_POST['mlref_11'];
+			$insert_array['mlref_12']		= $_POST['mlref_12'];
+			$insert_array['mlref_13']		= $_POST['mlref_13'];
+			$insert_array['mlref_14']		= $_POST['mlref_14'];
+			$insert_array['mlref_15']		= $_POST['mlref_15'];
+			$insert_array['mlref_16']		= $_POST['mlref_16'];
+			$rs = Model()->table('circle_mlref')->insert($insert_array);
+			if($rs){
+				$url = array(
+						array(
+								'url'=>'index.php?act=circle_memberlevel&op=ref_add',
+								'msg'=>L('circle_continue_add'),
+						),
+						array(
+								'url'=>'index.php?act=circle_memberlevel&op=ref',
+								'msg'=>L('nc_backlist'),
+						)
+				);
+				showMessage(L('nc_common_op_succ'), $url);
+			}else{
+				showMessage(L('nc_common_op_fail'));
+			}
+		}
+		Tpl::showpage('circle_memberlevel.ref_add');
+	}
+	/**
+	 * Edit the Reference Title
+	 */
+	public function ref_editOp(){
+		$model = Model();
+		if(chksubmit()){
+			$update_array = array();
+			$update_array['mlref_id']		= intval($_POST['mlref_id']);
+			$update_array['mlref_name']		= $_POST['mlref_name'];
+			$update_array['mlref_status']	= intval($_POST['mlref_status']);
+			$update_array['mlref_1']		= $_POST['mlref_1'];
+			$update_array['mlref_2']		= $_POST['mlref_2'];
+			$update_array['mlref_3']		= $_POST['mlref_3'];
+			$update_array['mlref_4']		= $_POST['mlref_4'];
+			$update_array['mlref_5']		= $_POST['mlref_5'];
+			$update_array['mlref_6']		= $_POST['mlref_6'];
+			$update_array['mlref_7']		= $_POST['mlref_7'];
+			$update_array['mlref_8']		= $_POST['mlref_8'];
+			$update_array['mlref_9']		= $_POST['mlref_9'];
+			$update_array['mlref_10']		= $_POST['mlref_10'];
+			$update_array['mlref_11']		= $_POST['mlref_11'];
+			$update_array['mlref_12']		= $_POST['mlref_12'];
+			$update_array['mlref_13']		= $_POST['mlref_13'];
+			$update_array['mlref_14']		= $_POST['mlref_14'];
+			$update_array['mlref_15']		= $_POST['mlref_15'];
+			$update_array['mlref_16']		= $_POST['mlref_16'];
+			$rs = $model->table('circle_mlref')->update($update_array);
+			if($rs){
+				showMessage(L('nc_common_op_succ'), 'index.php?act=circle_memberlevel&op=ref');
+			}else{
+				showMessage(L('nc_common_op_fail'));
+			}
+		}
+		$mlref_info = $model->table('circle_mlref')->find(intval($_GET['mlref_id']));
+		if(empty($mlref_info)){
+			showMessage(L('param_error'));
+		}
+		Tpl::output('mlref_info', $mlref_info);
+		Tpl::showpage('circle_memberlevel.ref_edit');
+	}
+	/**
+	 * elete the Reference Title
+	 */
+	public function ref_delOp(){
+		$mlref_id = intval($_GET['mlref_id']);
+		if($mlref_id <= 0){
+			showMessage(L('param_error'));
+		}
+		$rs = Model()->table('circle_mlref')->delete($mlref_id);
+		if($rs){
+			showMessage(L('nc_common_op_succ'));
+		}else{
+			showMessage(L('nc_common_op_fail'));
+		}
+	}
+	/**
+	 * AJAX operations
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			case 'status':
+				$update_array = array();
+				$update_array['mlref_id']		= intval($_GET['id']);
+				$update_array[$_GET['column']]	= intval($_GET['value']);
+				Model()->table('circle_mlref')->update($update_array);
+				echo 'true';exit;
+				break;
+		}
+	}
+
+	/**
+	 * 更新圈子成员等级缓存
+	 */
+	public function update_cacheOp() {
+		dkcache('circle_level');
+		showMessage(L('nc_common_op_succ'), 'index.php?act=circle_memberlevel');
+
+	}
+}

+ 317 - 0
admin/control/circle_setting.php

@@ -0,0 +1,317 @@
+<?php
+/**
+ * 圈子分类管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class circle_settingControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('circle');
+	}
+	/**
+	 * 圈子设置
+	 */
+	public function indexOp(){
+		$model_setting = Model('setting');
+		if(chksubmit()){
+			$update = array();
+			$update['circle_isuse']		= intval($_POST['c_isuse']);
+			$update['circle_name']		= $_POST['c_name'];
+			$update['circle_createsum']	= intval($_POST['c_createsum']);
+			$update['circle_joinsum']	= intval($_POST['c_joinsum']);
+			$update['circle_managesum']	= intval($_POST['c_managesum']);
+			$update['circle_iscreate']	= intval($_POST['c_iscreate']);
+			$update['circle_istalk']	= intval($_POST['c_istalk']);
+			$update['circle_wordfilter']	= $_POST['c_wordfilter'];
+			$update['taobao_api_isuse']	= intval($_POST['taobao_api_isuse']);
+			$update['taobao_app_key']	= $_POST['taobao_app_key'];
+			$update['taobao_secret_key']= $_POST['taobao_secret_key'];
+			if (!empty($_FILES['c_logo']['name'])){
+				$upload = new UploadFile();
+				$upload->set('default_dir',ATTACH_CIRCLE);
+				$result = $upload->upfile('c_logo');
+				if ($result){
+					$update['circle_logo'] = $upload->file_name;
+				}else {
+					showMessage($upload->error,'','','error');
+				}
+			}
+			$list_setting = $model_setting->getListSetting();
+			$result = $model_setting->updateSetting($update);
+			if($result){
+				if($list_setting['circle_logo'] != '' && isset($update['circle_logo'])){
+					@unlink(BASE_UPLOAD_PATH.DS.ATTACH_CIRCLE.DS.$list_setting['circle_logo']);
+				}
+				if(intval($_POST['c_isuse']) == 1){
+					$this->log(L('nc_circle_open'));
+				}else{
+					$this->log(L('nc_circle_close'));
+				}
+				showMessage(L('nc_common_op_succ'));
+			}else{
+				showMessage(L('nc_common_op_fail'));
+			}
+		}
+		$list_setting = $model_setting->getListSetting();
+		Tpl::output('list_setting',$list_setting);
+		Tpl::showpage('circle_setting.index');
+	}
+	/**
+	 * SEO 设置
+	 */
+	public function seoOp(){
+		$model_setting = Model('setting');
+		if (chksubmit()){
+			$update = array();
+			$update['circle_seotitle']	= $_POST['c_seotitle'];
+			$update['circle_seokeywords']	= $_POST['c_seokeywords'];
+			$update['circle_seodescription']= $_POST['c_seodescription'];
+			$result = $model_setting->updateSetting($update);
+			if($result){
+				showMessage(L('nc_common_op_succ'));
+			}else{
+				showMessage(L('nc_common_op_fail'));
+			}
+		}
+		$list_setting = $model_setting->getListSetting();
+		Tpl::output('list_setting',$list_setting);
+		Tpl::showpage('circle_setting.seo');
+	}
+	/**
+	 * SEC 设置
+	 */
+	public function secOp(){
+		$model_setting = Model('setting');
+		if (chksubmit()){
+			$update = array();
+			$update['circle_intervaltime']		= intval($_POST['c_intervaltime']);
+			$update['circle_contentleast']		= intval($_POST['c_contentleast']);
+			$result = $model_setting->updateSetting($update);
+			if($result){
+				showMessage(L('nc_common_op_succ'));
+			}else{
+				showMessage(L('nc_common_op_fail'));
+			}
+		}
+		$list_setting = $model_setting->getListSetting();
+		Tpl::output('list_setting',$list_setting);
+		Tpl::showpage('circle_setting.sec');
+	}
+	/**
+	 * 成员等级
+	 */
+	public function expOp(){
+		$model_setting = Model('setting');
+		if(chksubmit()){
+			$update = array();
+			$update['circle_exprelease']	= intval($_POST['c_exprelease']);
+			$update['circle_expreply']		= intval($_POST['c_expreply']);
+			$update['circle_expreleasemax']	= intval($_POST['c_expreleasemax']);
+			$update['circle_expreplied']	= intval($_POST['c_expreplied']);
+			$update['circle_exprepliedmax']	= intval($_POST['c_exprepliedmax']);
+			$result = $model_setting->updateSetting($update);
+			if ($result){
+				showMessage(L('nc_common_op_succ'));
+			}else {
+				showMessage(L('nc_common_op_fail'));
+			}
+		}
+		$list_setting = $model_setting->getListSetting();
+		Tpl::output('list_setting',$list_setting);
+		Tpl::showpage('circle_setting.exp');
+	}
+	/**
+	 * 圈子首页广告
+	 */
+	public function adv_manageOp(){
+		$model_setting = Model('setting');
+		if (chksubmit()){
+			$input = array();
+			//上传图片
+			$upload = new UploadFile();
+			$upload->set('default_dir',ATTACH_CIRCLE);
+			$upload->set('thumb_ext',	'');
+			$upload->set('file_name','1.jpg');
+			$upload->set('ifremove',false);
+			if (!empty($_FILES['adv_pic1']['name'])){
+				$result = $upload->upfile('adv_pic1');
+				if (!$result){
+					showMessage($upload->error,'','','error');
+				}else{
+					$input[1]['pic'] = $upload->file_name;
+					$input[1]['url'] = $_POST['adv_url1'];
+				}
+			}elseif ($_POST['old_adv_pic1'] != ''){
+				$input[1]['pic'] = $_POST['old_adv_pic1'];
+				$input[1]['url'] = $_POST['adv_url1'];
+			}
+
+			$upload->set('default_dir',ATTACH_CIRCLE);
+			$upload->set('thumb_ext',	'');
+			$upload->set('file_name','2.jpg');
+			$upload->set('ifremove',false);
+			if (!empty($_FILES['adv_pic2']['name'])){
+				$result = $upload->upfile('adv_pic2');
+				if (!$result){
+					showMessage($upload->error,'','','error');
+				}else{
+					$input[2]['pic'] = $upload->file_name;
+					$input[2]['url'] = $_POST['adv_url2'];
+				}
+			}elseif ($_POST['old_adv_pic2'] != ''){
+				$input[2]['pic'] = $_POST['old_adv_pic2'];
+				$input[2]['url'] = $_POST['adv_url2'];
+			}
+
+			$upload->set('default_dir',ATTACH_CIRCLE);
+			$upload->set('thumb_ext', '');
+			$upload->set('file_name', '3.jpg');
+			$upload->set('ifremove', false);
+			if (!empty($_FILES['adv_pic3']['name'])){
+				$result = $upload->upfile('adv_pic3');
+				if (!$result){
+					showMessage($upload->error,'','','error');
+				}else{
+					$input[3]['pic'] = $upload->file_name;
+					$input[3]['url'] = $_POST['adv_url3'];
+				}
+			}elseif ($_POST['old_adv_pic3'] != ''){
+				$input[3]['pic'] = $_POST['old_adv_pic3'];
+				$input[3]['url'] = $_POST['adv_url3'];
+			}
+
+			$upload->set('default_dir',ATTACH_CIRCLE);
+			$upload->set('thumb_ext',	'');
+			$upload->set('file_name','4.jpg');
+			$upload->set('ifremove',false);
+			if (!empty($_FILES['adv_pic4']['name'])){
+				$result = $upload->upfile('adv_pic4');
+				if (!$result){
+					showMessage($upload->error,'','','error');
+				}else{
+					$input[4]['pic'] = $upload->file_name;
+					$input[4]['url'] = $_POST['adv_url4'];
+				}
+			}elseif ($_POST['old_adv_pic4'] != ''){
+				$input[4]['pic'] = $_POST['old_adv_pic4'];
+				$input[4]['url'] = $_POST['adv_url4'];
+			}
+
+			$update_array = array();
+			if (count($input) > 0){
+				$update_array['circle_loginpic'] = serialize($input);
+			}
+
+			$result = $model_setting->updateSetting($update_array);
+			if ($result === true){
+				$this->log(L('nc_edit,loginSettings'),1);
+				showMessage(L('nc_common_save_succ'));
+			}else {
+				$this->log(L('nc_edit,loginSettings'),0);
+				showMessage(L('nc_common_save_fail'));
+			}
+		}
+		$list_setting = $model_setting->getListSetting();
+		if ($list_setting['circle_loginpic'] != ''){
+			$list = unserialize($list_setting['circle_loginpic']);
+		}
+		Tpl::output('list', $list);
+		Tpl::showpage('circle_setting.adv');
+	}
+
+    /**
+     * 添加超级管理
+     */
+    public function superaddOp() {
+        if (chksubmit()) {
+            if (intval($_POST['member_id']) <= 0) {
+                showMessage(L('nc_common_op_fail'));
+            }
+            $insert = array();
+            $insert['member_id'] = intval($_POST['member_id']);
+            $insert['member_name'] = $_POST['member_name'];
+            $result = Model('circle_member')->addSuper($insert);
+            if ($result) {
+                showMessage(L('nc_common_op_succ'), urlAdmin('circle_setting', 'super_list'));
+            } else {
+                showMessage(L('nc_common_op_fail'));
+            }
+        }
+        Tpl::showpage('circle_setting.super_add');
+    }
+
+    /**
+     * 超级管理列表
+     */
+    public function super_listOp() {
+        $model_circlemember = Model('circle_member');
+        if (chksubmit()) {
+            $id_array = $_POST['del_id'];
+            if (empty($id_array)) {
+                showMessage(L('miss_argument'));
+            }
+            foreach ($id_array as $val) {
+                if (!is_numeric($val)) {
+                    showMessage(L('param_error'));
+                }
+            }
+            $result = $model_circlemember->delSuper(array('member_id' => array('in', $id_array)));
+            if ($result) {
+                showMessage(L('nc_common_del_succ'));
+            } else {
+                showMessage(L('nc_common_del_fail'));
+            }
+        }
+        $cm_list = $model_circlemember->getSuperList(array());
+        Tpl::output('cm_list', $cm_list);
+        Tpl::showpage('circle_setting.super_list');
+    }
+
+    /**
+     * 选择超管
+     */
+    public function choose_superOp(){
+        Tpl::output('search_url', urlAdmin('circle_setting', 'member_search'));
+        Tpl::showpage('circle.choose_master', 'null_layout');
+    }
+
+    /**
+     * 删除超级管理员
+     */
+    public function del_superOp() {
+        $member_id = intval($_GET['member_id']);
+        if ($member_id < 0) {
+            showMessage(L('param_error'));
+        }
+
+        $result = Model('circle_member')->delSuper(array('member_id' => $member_id));
+        if ($result) {
+            showMessage(L('nc_common_del_succ'));
+        } else {
+            showMessage(L('nc_common_del_fail'));
+        }
+    }
+
+    /**
+     * 搜索会员
+     */
+    public function member_searchOp() {
+        $cm_list = Model('circle_member')->getSuperList(array(), 'member_id');
+
+        $where = array();
+        if (!empty($_GET['name'])) {
+            $where['member_name'] = array('like', '%' . trim($_GET['name']) . '%');
+        }
+        if (!empty($cm_list)) {
+            $cm_list = array_under_reset($cm_list, member_id);
+            $memberid_array = array_keys($cm_list);
+            $where['member_id'] = array('not in', $memberid_array);
+        }
+        $member_list = Model('member')->getMemberList($where, 'member_id,member_name');
+        echo json_encode($member_list);die;
+    }
+}

+ 319 - 0
admin/control/circle_theme.php

@@ -0,0 +1,319 @@
+<?php
+/**
+ * 圈子话题管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class circle_themeControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('circle');
+	}
+	/**
+	 * 话题列表
+	 */
+	public function theme_listOp(){
+
+		$model = Model();
+		if (chksubmit()){
+			if (!empty($_POST['check_theme_id']) && is_array($_POST['check_theme_id'])){
+				foreach ($_POST['check_theme_id'] as $t_id){
+					$theme_info = $model->table('circle_theme')->where(array('theme_id'=>$t_id))->find();
+					if(empty($theme_info)){
+						continue;
+					}
+
+					// 删除附件
+					$affix_list = $model->table('circle_affix')->where(array('theme_id'=>$t_id))->select();
+					if(!empty($affix_list)){
+						foreach ($affix_list as $val){
+							@unlink(themeImagePath($val['affix_filename']));
+							@unlink(themeImagePath($val['affix_filethumb']));
+						}
+						$model->table('circle_affix')->where(array('theme_id'=>$t_id))->delete();
+					}
+
+					// 删除商品
+					$model->table('circle_thg')->where(array('theme_id'=>$t_id))->delete();
+
+					// 删除赞表相关
+					$model->table('circle_like')->where(array('theme_id'=>$t_id))->delete();
+
+					// 删除回复
+					$model->table('circle_threply')->where(array('theme_id'=>$t_id))->delete();
+
+					// 更新圈子主题数量
+					$model->table('circle')->update(array('circle_id'=>$theme_info['circle_id'], 'circle_thcount'=>array('exp','circle_thcount-1')));
+
+					// The recycle bin add delete records
+					$param = array();
+					$param['theme_id']	= $t_id;
+					$param['op_id']		= 0;
+					$param['op_name']	= L('cirlce_administrator');
+					$param['type']		= 'admintheme';
+					Model('circle_recycle')->saveRecycle($param, $theme_info);
+
+					// 删除话题
+					$model->table('circle_theme')->delete($t_id);
+
+					// Experience
+					if(intval($theme_info['theme_exp']) > 0){
+						$param = array();
+						$param['member_id']		= $theme_info['member_id'];
+						$param['member_name']	= $theme_info['member_name'];
+						$param['circle_id']		= $theme_info['circle_id'];
+						$param['itemid']		= $t_id;
+						$param['type']			= 'delRelease';
+						$param['exp']			= $theme_info['theme_exp'];
+						Model('circle_exp')->saveExp($param);
+					}
+				}
+			}
+			showMessage(L('nc_common_op_succ'), 'index.php?act=circle_theme&op=theme_list');
+		}
+		$where = array();
+		if($_GET['searchname'] != ''){
+			$where['theme_name'] = array('like', '%'.$_GET['searchname'].'%');
+		}
+		if($_GET['classname'] != ''){
+			$where['circle_name'] = array('like', '%'.$_GET['classname'].'%');
+		}
+		if($_GET['searchtop'] != '' && in_array($_GET['searchtop'], array(0,1))){
+			$where['is_stick'] = intval($_GET['searchtop']);
+		}
+		if($_GET['searchcream'] != '' && in_array($_GET['searchcream'], array(0,1))){
+			$where['is_digest']	= intval($_GET['searchcream']);
+		}
+		if($_GET['searchrecommend'] != '' && in_array($_GET['searchrecommend'], array(0,1))){
+			$where['is_recommend'] = intval($_GET['searchrecommend']);
+		}
+		$theme_list	= $model->table('circle_theme')->where($where)->order('theme_id desc')->page(10)->select();
+		if(!empty($theme_list)){
+			$theme_list = array_under_reset($theme_list, 'theme_id'); $themeid_array = array_keys($theme_list);
+
+			// 附件
+			$affix_list = $model->table('circle_affix')->where(array('theme_id'=>array('in', $themeid_array), 'affix_type'=>1))->group('theme_id')->select();
+			if(!empty($affix_list)) $affix_list = array_under_reset($affix_list, 'theme_id');
+
+
+			foreach ($theme_list as $key=>$val){
+				if(isset($affix_list[$val['theme_id']])) $theme_list[$key]['affix'] = themeImageUrl($affix_list[$val['theme_id']]['affix_filethumb']);
+			}
+		}
+		Tpl::output('theme_list', $theme_list);
+		Tpl::output('page', $model->showpage(2));
+		Tpl::showpage('circle_theme.list');
+	}
+	/**
+	 * 话题详细
+	 */
+	public function theme_infoOp(){
+		$model = Model();
+		$t_id = intval($_GET['t_id']);
+		$theme_info = $model->table('circle_theme')->find($t_id);
+		Tpl::output('theme_info', $theme_info);
+
+		if($theme_info['theme_special'] == 1){
+			$poll_info = $model->table('circle_thpoll')->find($t_id);
+			$option_list = $model->table('circle_thpolloption')->where(array('theme_id'=>$t_id))->order('pollop_sort asc')->select();
+			Tpl::output('poll_info', $poll_info);
+			Tpl::output('option_list', $option_list);
+		}
+		Tpl::showpage('circle_theme.info');
+	}
+	/**
+	 * 删除话题
+	 */
+	public function theme_delOp(){
+		$model = Model();
+		// 验证话题
+		$t_id = intval($_GET['t_id']); $c_id = intval($_GET['c_id']);
+		$theme_info = $model->table('circle_theme')->where(array('theme_id'=>$t_id, 'circle_id'=>$c_id))->find();
+		if(empty($theme_info)){
+			showMessage(L('param_error'));
+		}
+
+		// 删除附件
+		$affix_list = $model->table('circle_affix')->where(array('theme_id'=>$t_id))->select();
+		if(!empty($affix_list)){
+			foreach ($affix_list as $val){
+				@unlink(themeImagePath($val['affix_filename']));
+				@unlink(themeImagePath($val['affix_filethumb']));
+			}
+			$model->table('circle_affix')->where(array('theme_id'=>$t_id))->delete();
+		}
+
+		// 删除商品
+		$model->table('circle_thg')->where(array('theme_id'=>$t_id))->delete();
+
+		// 删除赞表相关
+		$model->table('circle_like')->where(array('theme_id'=>$t_id))->delete();
+
+		// 删除回复
+		$model->table('circle_threply')->where(array('theme_id'=>$t_id))->delete();
+
+		// The recycle bin add delete records
+		$param = array();
+		$param['theme_id']	= $t_id;
+		$param['op_id']		= 0;
+		$param['op_name']	= L('cirlce_administrator');
+		$param['type']		= 'admintheme';
+		Model('circle_recycle')->saveRecycle($param, $theme_info);
+
+		// 删除话题
+		$model->table('circle_theme')->delete($t_id);
+
+		// 更新圈子主题数量
+		$model->table('circle')->update(array('circle_id'=>$c_id, 'circle_thcount'=>array('exp','circle_thcount-1')));
+
+		// Experience
+		if(intval($theme_info['theme_exp']) > 0){
+			$param = array();
+			$param['member_id']		= $theme_info['member_id'];
+			$param['member_name']	= $theme_info['member_name'];
+			$param['circle_id']		= $theme_info['circle_id'];
+			$param['itemid']		= $t_id;
+			$param['type']			= 'delRelease';
+			$param['exp']			= $theme_info['theme_exp'];
+			Model('circle_exp')->saveExp($param);
+		}
+
+		showMessage(L('nc_common_op_succ'), 'index.php?act=circle_theme&op=theme_list');
+	}
+	/**
+	 * 话题回复
+	 */
+	public function theme_replyOp(){
+		$model = Model();
+		if(chksubmit()){
+			$t_id = intval($_POST['t_id']);
+			if (!empty($_POST['check_reply_id']) && is_array($_POST['check_reply_id'])){
+				foreach ($_POST['check_reply_id'] as $r_id){
+					// 验证回复
+					$reply_info = $model->table('circle_threply')->where(array('theme_id'=>$t_id, 'reply_id'=>$r_id))->find();
+					if(empty($reply_info)){
+						showMessage(L('param_error'));
+					}
+
+					// 删除附件
+					$affix_list = $model->table('circle_affix')->where(array('affix_type'=>2, 'theme_id'=>$t_id, 'reply_id'=>$r_id))->select();
+					if(!empty($affix_list)){
+						foreach ($affix_list as $val){
+							@unlink(themeImagePath($val['affix_filename']));
+							@unlink(themeImagePath($val['affix_filethumb']));
+						}
+						$model->table('circle_affix')->where(array('affix_type'=>2 ,'theme_id'=>$t_id, 'reply_id'=>$r_id))->delete();
+					}
+
+					// 删除商品
+					$model->table('circle_thg')->where(array('theme_id'=>$t_id, 'reply_id'=>$r_id))->delete();
+
+					// The recycle bin add delete records
+					$param = array();
+					$param['theme_id']	= $t_id;
+					$param['reply_id']	= $r_id;
+					$param['op_id']		= 0;
+					$param['op_name']	= L('cirlce_administrator');
+					$param['type']		= 'adminreply';
+					Model('circle_recycle')->saveRecycle($param, $reply_info);
+
+					// 删除回复
+					$model->table('circle_threply')->where(array('theme_id'=>$t_id, 'reply_id'=>$r_id))->delete();
+
+					// 更新话题回复数
+					$model->table('circle_theme')->update(array('theme_id'=>$t_id, 'theme_commentcount'=>array('exp', 'theme_commentcount-1')));
+					// Experience
+					if(intval($reply_info['reply_exp']) > 0){
+						$param = array();
+						$param['member_id']		= $reply_info['member_id'];
+						$param['member_name']	= $reply_info['member_name'];
+						$param['circle_id']		= $reply_info['circle_id'];
+						$param['itemid']		= $t_id.','.$r_id;
+						$param['type']			= 'delReplied';
+						$param['exp']			= $reply_info['reply_exp'];
+						Model('circle_exp')->saveExp($param);
+					}
+				}
+			}
+
+			showMessage(L('nc_common_op_succ'));
+		}
+		$t_id = intval($_GET['t_id']);
+		$reply_list = $model->table('circle_threply')->where(array('theme_id'=>$t_id))->page(10)->select();
+		Tpl::output('t_id', $t_id);
+		Tpl::output('page', $model->showpage(2));
+		Tpl::output('reply_list', $reply_list);
+		Tpl::showpage('circle_theme.reply');
+	}
+	/**
+	 * 话题回复删除
+	 */
+	public function theme_replydelOp(){
+		$t_id = intval($_GET['t_id']);
+		$r_id = intval($_GET['r_id']);
+		$model = Model();
+		// 验证回复
+		$reply_info = $model->table('circle_threply')->where(array('theme_id'=>$t_id, 'reply_id'=>$r_id))->find();
+		if(empty($reply_info)){
+			showMessage(L('param_error'));
+		}
+
+		// 删除附件
+		$affix_list = $model->table('circle_affix')->where(array('affix_type'=>2, 'theme_id'=>$t_id, 'reply_id'=>$r_id))->select();
+		if(!empty($affix_list)){
+			foreach ($affix_list as $val){
+				@unlink(themeImagePath($val['affix_filename']));
+				@unlink(themeImagePath($val['affix_filethumb']));
+			}
+			$model->table('circle_affix')->where(array('affix_type'=>2 ,'theme_id'=>$t_id, 'reply_id'=>$r_id))->delete();
+		}
+
+		// 删除商品
+		$model->table('circle_thg')->where(array('theme_id'=>$t_id, 'reply_id'=>$r_id))->delete();
+
+		// The recycle bin add delete records
+		$param = array();
+		$param['theme_id']	= $t_id;
+		$param['reply_id']	= $r_id;
+		$param['op_id']		= 0;
+		$param['op_name']	= L('cirlce_administrator');
+		$param['type']		= 'adminreply';
+		Model('circle_recycle')->saveRecycle($param, $reply_info);
+
+		// 删除回复
+		$model->table('circle_threply')->where(array('theme_id'=>$t_id, 'reply_id'=>$r_id))->delete();
+
+		// 更新话题回复数
+		$model->table('circle_theme')->update(array('theme_id'=>$t_id, 'theme_commentcount'=>array('exp', 'theme_commentcount-1')));
+		// Experience
+		if(intval($reply_info['reply_exp']) > 0){
+			$param = array();
+			$param['member_id']		= $reply_info['member_id'];
+			$param['member_name']	= $reply_info['member_name'];
+			$param['circle_id']		= $reply_info['circle_id'];
+			$param['itemid']		= $t_id.','.$r_id;
+			$param['type']			= 'delReplied';
+			$param['exp']			= $reply_info['reply_exp'];
+			Model('circle_exp')->saveExp($param);
+		}
+		showMessage(L('nc_common_op_succ'));
+	}
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			case 'recommend':
+				$update = array(
+					'theme_id'=>intval($_GET['id']),
+					$_GET['column']=>$_GET['value']
+				);
+				Model()->table('circle_theme')->update($update);
+				echo 'true';
+				break;
+		}
+	}
+}

+ 230 - 0
admin/control/cms_article.php

@@ -0,0 +1,230 @@
+<?php
+/**
+ * cms文章分类
+ *
+ *
+ *
+ *
+ */
+
+
+
+defined('InShopNC') or exit('Access Invalid!');
+class cms_articleControl extends SystemControl{
+    //文章状态草稿箱
+    const ARTICLE_STATE_DRAFT = 1;
+    //文章状态待审核
+    const ARTICLE_STATE_VERIFY = 2;
+    //文章状态已发布
+    const ARTICLE_STATE_PUBLISHED = 3;
+    //文章状态回收站
+    const ARTICLE_STATE_RECYCLE = 4;
+
+	public function __construct(){
+		parent::__construct();
+		Language::read('cms');
+	}
+
+	public function indexOp() {
+        $this->cms_article_listOp();
+	}
+
+    /**
+     * cms文章列表
+     **/
+    public function cms_article_listOp() {
+        $condition = array();
+        if(!empty($_GET['article_state'])) {
+            $condition['article_state'] = $_GET['article_state'];
+        }
+        $this->get_cms_article_list($condition, 'list');
+    }
+
+    /**
+     * 待审核文章列表
+     */
+    public function cms_article_list_verifyOp() {
+        $condition = array();
+        $condition['article_state'] = self::ARTICLE_STATE_VERIFY;
+        $this->get_cms_article_list($condition, 'list_verify');
+    }
+
+    /**
+     * 已发布文章列表
+     */
+    public function cms_article_list_publishedOp() {
+        $condition = array();
+        $condition['article_state'] = self::ARTICLE_STATE_PUBLISHED;
+        $this->get_cms_article_list($condition, 'list_published');
+    }
+
+    private function get_cms_article_list($condition, $menu_key) {
+        if(!empty($_GET['article_title'])) {
+            $condition['article_title'] = array('like', '%'.$_GET['article_title'].'%');
+        }
+        if(!empty($_GET['article_publisher_name'])) {
+            $condition['article_publisher_name'] = array('like', '%'.$_GET['article_publisher_name'].'%');
+        }
+
+        $model_article = Model('cms_article');
+        $article_list = $model_article->getList($condition, 10, 'article_id desc');
+        for ($i = 0, $j = count($article_list); $i < $j; $i++) {
+            if($article_list[$i]['article_state'] == self::ARTICLE_STATE_VERIFY) {
+                $article_list[$i]['verify_able'] = true;
+            }
+            if($article_list[$i]['article_state'] == self::ARTICLE_STATE_PUBLISHED) {
+                $article_list[$i]['callback_able'] = true;
+            }
+        }
+        $this->show_menu($menu_key);
+        Tpl::output('show_page',$model_article->showpage(2));
+        Tpl::output('list',$article_list);
+        Tpl::output('article_state_list', $this->get_article_state_list());
+        Tpl::showpage("cms_article.list");
+    }
+
+    /**
+     * cms文章审核
+     */
+    public function cms_article_verifyOp() {
+        if(intval($_POST['verify_state']) === 1) {
+            $this->cms_article_state_modify(self::ARTICLE_STATE_PUBLISHED);
+        } else {
+            $this->cms_article_state_modify(self::ARTICLE_STATE_DRAFT, array('article_verify_reason' => $_POST['verify_reason']));
+        }
+    }
+
+    /**
+     * cms文章收回
+     */
+    public function cms_article_callbackOp() {
+        $this->cms_article_state_modify(self::ARTICLE_STATE_DRAFT);
+    }
+
+    /**
+     * 修改文章状态
+     */
+    private function cms_article_state_modify($new_state, $param = array()) {
+        $article_id = $_POST['article_id'];
+        $model_article = Model('cms_article');
+        $param['article_state'] = $new_state;
+        $model_article->modify($param, array('article_id'=>array('in', $article_id)));
+        showMessage(Language::get('nc_common_op_succ'), '');
+    }
+
+    /**
+     * cms文章分类排序修改
+     */
+    public function update_article_sortOp() {
+        if(intval($_GET['id']) <= 0) {
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('param_error')));
+            die;
+        }
+        $new_sort = intval($_GET['value']);
+        if ($new_sort > 255){
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('class_sort_error')));
+            die;
+        } else {
+            $model_class = Model("cms_article");
+            $result = $model_class->modify(array('article_sort'=>$new_sort),array('article_id'=>$_GET['id']));
+            if($result) {
+                echo json_encode(array('result'=>TRUE,'message'=>'class_add_success'));
+                die;
+            } else {
+                echo json_encode(array('result'=>FALSE,'message'=>Language::get('class_add_fail')));
+                die;
+            }
+        }
+    }
+
+    /**
+     * cms文章分类排序修改
+     */
+    public function update_article_clickOp() {
+        if(intval($_GET['id']) <= 0 || intval($_GET['value']) < 0) {
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('param_error')));die;
+        }
+        $model_class = Model("cms_article");
+        $result = $model_class->modify(array('article_click'=>$_GET['value']),array('article_id'=>$_GET['id']));
+        if($result) {
+            echo json_encode(array('result'=>TRUE,'message'=>''));die;
+        } else {
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('param_error')));die;
+        }
+    }
+
+
+    /**
+     * cms文章删除
+     **/
+     public function cms_article_dropOp() {
+        $article_id = trim($_POST['article_id']);
+        $model_article = Model('cms_article');
+        $condition = array();
+        $condition['article_id'] = array('in',$article_id);
+        $result = $model_article->drop($condition);
+        if($result) {
+            $this->log(Language::get('cms_log_article_drop').$article_id, 1);
+            showMessage(Language::get('nc_common_del_succ'),'');
+        } else {
+            $this->log(Language::get('cms_log_article_drop').$article_id, 0);
+            showMessage(Language::get('nc_common_del_fail'),'','','error');
+        }
+     }
+
+    /**
+     * ajax操作
+     */
+    public function ajaxOp(){
+        if(intval($_GET['id']) > 0) {
+            $flag = FALSE;
+            switch ($_GET['branch']){
+            case 'article_commend':
+                $flag = TRUE;
+                break;
+            case 'article_commend_image':
+                $flag = TRUE;
+                break;
+            case 'article_comment':
+                $flag = TRUE;
+                break;
+            case 'article_attitude':
+                $flag = TRUE;
+                break;
+            }
+            if($flag) {
+                $model= Model('cms_article');
+                $update[$_GET['column']] = trim($_GET['value']);
+                $condition['article_id'] = intval($_GET['id']);
+                $model->modify($update,$condition);
+                echo 'true';die;
+            } else {
+                echo 'false';die;
+            }
+        }
+    }
+
+
+    /**
+     * 获取文章状态列表
+     */
+    private function get_article_state_list() {
+        $array = array();
+        $array[self::ARTICLE_STATE_DRAFT] = array('text'=>Language::get('cms_text_draft'));
+        $array[self::ARTICLE_STATE_VERIFY] = array('text'=>Language::get('cms_text_verify'));
+        $array[self::ARTICLE_STATE_PUBLISHED] = array('text'=>Language::get('cms_text_published'));
+        $array[self::ARTICLE_STATE_RECYCLE] = array('text'=>Language::get('cms_text_recycle'));
+        return $array;
+    }
+
+    private function show_menu($menu_key) {
+        $menu_array = array(
+            'list'=>array('menu_type'=>'link','menu_name'=>Language::get('nc_list'),'menu_url'=>'index.php?act=cms_article&op=cms_article_list'),
+            'list_verify'=>array('menu_type'=>'link','menu_name'=>Language::get('cms_article_list_verify'),'menu_url'=>'index.php?act=cms_article&op=cms_article_list_verify'),
+            'list_published'=>array('menu_type'=>'link','menu_name'=>Language::get('cms_article_list_published'),'menu_url'=>'index.php?act=cms_article&op=cms_article_list_published'),
+        );
+        $menu_array[$menu_key]['menu_type'] = 'text';
+        Tpl::output('menu',$menu_array);
+    }
+
+}

+ 158 - 0
admin/control/cms_article_class.php

@@ -0,0 +1,158 @@
+<?php
+/**
+ * cms文章分类
+ *
+ *
+ *
+ *
+ */
+
+
+
+defined('InShopNC') or exit('Access Invalid!');
+class cms_article_classControl extends SystemControl{
+
+	public function __construct(){
+		parent::__construct();
+		Language::read('cms');
+	}
+
+	public function indexOp() {
+        $this->cms_article_class_listOp();
+	}
+
+    /**
+     * cms文章分类列表
+     **/
+    public function cms_article_class_listOp() {
+        $model = Model('cms_article_class');
+        $list = $model->getList(TRUE);
+        $this->show_menu('list');
+        Tpl::output('list',$list);
+        Tpl::showpage("cms_article_class.list");
+    }
+
+    /**
+     * cms文章分类添加
+     **/
+    public function cms_article_class_addOp() {
+        $this->show_menu('add');
+        Tpl::showpage('cms_article_class.add');
+    }
+
+    /**
+     * cms文章分类保存
+     **/
+    public function cms_article_class_saveOp() {
+        $obj_validate = new Validate();
+        $validate_array = array(
+            array('input'=>$_POST['class_name'],'require'=>'true',"validator"=>"Length","min"=>"1","max"=>"10",'message'=>Language::get('class_name_error')),
+            array('input'=>$_POST['class_sort'],'require'=>'true','validator'=>'Range','min'=>0,'max'=>255,'message'=>Language::get('class_sort_error')),
+        );
+        $obj_validate->validateparam = $validate_array;
+        $error = $obj_validate->validate();
+        if ($error != ''){
+            showMessage(Language::get('error').$error,'','','error');
+        }
+
+        $param = array();
+        $param['class_name'] = trim($_POST['class_name']);
+        $param['class_sort'] = intval($_POST['class_sort']);
+        $model_class = Model('cms_article_class');
+        $result = $model_class->save($param);
+        if($result) {
+            $this->log(Language::get('cms_log_article_class_save').$result, 1);
+            showMessage(Language::get('class_add_success'),'index.php?act=cms_article_class&op=cms_article_class_list');
+        } else {
+            $this->log(Language::get('cms_log_article_class_save').$result, 0);
+            showMessage(Language::get('class_add_fail'),'index.php?act=cms_article_class&op=cms_article_class_list','','error');
+        }
+
+
+    }
+
+    /**
+     * cms文章分类排序修改
+     */
+    public function update_class_sortOp() {
+        if(intval($_GET['id']) <= 0) {
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('param_error')));
+            die;
+        }
+        $new_sort = intval($_GET['value']);
+        if ($new_sort > 255){
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('class_sort_error')));
+            die;
+        } else {
+            $model_class = Model("cms_article_class");
+            $result = $model_class->modify(array('class_sort'=>$new_sort),array('class_id'=>$_GET['id']));
+            if($result) {
+                echo json_encode(array('result'=>TRUE,'message'=>'class_add_success'));
+                die;
+            } else {
+                echo json_encode(array('result'=>FALSE,'message'=>Language::get('class_add_fail')));
+                die;
+            }
+        }
+    }
+
+    public function update_class_nameOp() {
+        $class_id = intval($_GET['id']);
+        if($class_id <= 0) {
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('param_error')));
+            die;
+        }
+
+        $new_name = trim($_GET['value']);
+        $obj_validate = new Validate();
+        $obj_validate->validateparam = array(
+            array('input'=>$new_name,'require'=>'true',"validator"=>"Length","min"=>"1","max"=>"10",'message'=>Language::get('class_name_error')),
+        );
+        $error = $obj_validate->validate();
+        if ($error != ''){
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('class_name_error')));
+            die;
+		} else {
+            $model_class = Model("cms_article_class");
+            $result = $model_class->modify(array('class_name'=>$new_name),array('class_id'=>$class_id));
+            if($result) {
+                echo json_encode(array('result'=>TRUE,'message'=>'class_add_success'));
+                die;
+            } else {
+                echo json_encode(array('result'=>FALSE,'message'=>Language::get('class_add_fail')));
+                die;
+            }
+        }
+
+    }
+
+    /**
+     * cms文章分类删除
+     **/
+     public function cms_article_class_dropOp() {
+        $class_id = trim($_POST['class_id']);
+        $model_class = Model('cms_article_class');
+        $condition = array();
+        $condition['class_id'] = array('in',$class_id);
+        $result = $model_class->drop($condition);
+        if($result) {
+            $this->log(Language::get('cms_log_article_class_drop').$_POST['class_id'], 1);
+            showMessage(Language::get('class_drop_success'),'');
+        } else {
+            $this->log(Language::get('cms_log_article_class_drop').$_POST['class_id'], 0);
+            showMessage(Language::get('class_drop_fail'),'','','error');
+        }
+
+     }
+
+    private function show_menu($menu_key) {
+        $menu_array = array(
+            'list'=>array('menu_type'=>'link','menu_name'=>Language::get('nc_list'),'menu_url'=>'index.php?act=cms_article_class&op=cms_article_class_list'),
+            'add'=>array('menu_type'=>'link','menu_name'=>Language::get('nc_new'),'menu_url'=>'index.php?act=cms_article_class&op=cms_article_class_add'),
+        );
+        $menu_array[$menu_key]['menu_type'] = 'text';
+        Tpl::output('menu',$menu_array);
+    }
+
+
+}

+ 144 - 0
admin/control/cms_base.php

@@ -0,0 +1,144 @@
+<?php
+/**
+ * cms公用
+ *
+ *
+ *
+ *
+ */
+
+
+
+defined('InShopNC') or exit('Access Invalid!');
+class cms_baseControl extends SystemControl{
+
+	public function __construct(){
+		parent::__construct();
+		Language::read('cms');
+	}
+
+    /**
+     * 获取文章列表
+     */
+    public function get_article_listOp() {
+        //获取文章列表
+		$condition = array();
+        if($_GET['search_type'] == 'article_id') {
+            $condition['article_id'] = intval($_GET['search_keyword']);
+        } else {
+            $condition['article_title'] = array('like','%'.trim($_GET['search_keyword']).'%');
+        }
+        $condition['article_state'] = 3;
+
+        $model_article = Model('cms_article');
+        $article_list = $model_article->getListWithClassName($condition, 5, 'article_id desc');
+        Tpl::output('show_page',$model_article->showpage(1));
+        Tpl::output('article_list', $article_list);
+		Tpl::showpage('cms_widget_article_list','null_layout');
+    }
+
+    /**
+     * 获取店铺列表
+     */
+    public function get_store_listOp() {
+        //获取店铺列表
+		$condition = array();
+        $condition['store_name'] = array('like', $_GET['search_keyword']);
+
+        $model_store = Model('store');
+        $store_list = $model_store->getStoreOnlineList($condition, 5);
+        Tpl::output('show_page',$model_store->showpage());
+        Tpl::output('store_list', $store_list);
+		Tpl::showpage('cms_widget_store_list', 'null_layout');
+    }
+
+    /**
+     * 获取会员列表
+     */
+    public function get_member_listOp() {
+        //获取店铺列表
+		$condition = array();
+        $condition['member_name'] = array('like', '%' . trim($_GET['search_keyword']) . '%');
+        $condition['member_state'] = 1;
+
+        $model_member = Model('member');
+        $member_list = $model_member->getMemberList($condition, '*', 5);
+        Tpl::output('show_page',$model_member->showpage());
+        Tpl::output('member_list', $member_list);
+		Tpl::showpage('cms_widget_member_list', 'null_layout');
+    }
+
+    /**
+     * 获取品牌列表
+     */
+    public function get_brand_listOp() {
+		$model_brand = Model('brand');
+		$brand_list = $model_brand->getBrandPassedList(array(), '*', 6);
+		Tpl::output('show_page',$model_brand->showpage());
+		Tpl::output('brand_list',$brand_list);
+		Tpl::showpage('cms_widget_brand_list','null_layout');
+    }
+
+    /**
+     * 商品分类列表
+     */
+    public function get_goods_class_list_jsonOp() {
+        $model_class = Model('goods_class');
+        $goods_class_list = $model_class->getTreeClassList(2);//商品分类父类列表,只取到第二级
+        $result = array();
+        if (is_array($goods_class_list) && !empty($goods_class_list)){
+            $i = 0;
+            foreach ($goods_class_list as $key => $value){
+                $result[$i]['gc_name'] = str_repeat("&nbsp;",$value['deep']*2).$value['gc_name'];
+                $result[$i]['gc_id'] = $value['gc_id'];
+                $i++;
+            }
+        }
+        echo json_encode($result);
+    }
+
+    /**
+     * 商品分类详细列表
+     */
+	public function get_goods_class_detailOp(){
+		$model_class = Model('goods_class');
+		$gc_parent_id = intval($_GET["class_id"]);
+		$gc_parent = $model_class->getGoodsClassInfoById($gc_parent_id);
+		$goods_class = $model_class->getGoodsClassListByParentId($gc_parent_id);
+		Tpl::output('gc_parent',$gc_parent);
+		Tpl::output('goods_class',$goods_class);
+		Tpl::showpage('cms_widget_goods_class_list','null_layout');
+	}
+
+    /**
+     * 图片商品添加
+     */
+    public function goods_info_by_urlOp() {
+        $url = urldecode($_GET['url']);
+        if(empty($url)) {
+            self::return_json(Language::get('param_error'),'false');
+        }
+        $model_goods_info = Model('goods_info_by_url');
+        $result = $model_goods_info->get_goods_info_by_url($url);
+        if($result) {
+            self::echo_json($result);
+        } else {
+            self::return_json(Language::get('param_error'),'false');
+        }
+    }
+
+	private function return_json($message,$result='true') {
+        $data = array();
+        $data['result'] = $result;
+        $data['message'] = $message;
+        self::echo_json($data);
+    }
+
+    private function echo_json($data) {
+        if (strtoupper(CHARSET) == 'GBK'){
+            $data = Language::getUTF8($data);//网站GBK使用编码时,转换为UTF-8,防止json输出汉字问题
+        }
+        echo json_encode($data);die;
+    }
+
+}

+ 89 - 0
admin/control/cms_comment.php

@@ -0,0 +1,89 @@
+<?php
+/**
+ * cms评论
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class cms_commentControl extends SystemControl{
+
+
+	public function __construct(){
+		parent::__construct();
+		Language::read('cms');
+	}
+
+	public function indexOp() {
+        $this->comment_manageOp();
+	}
+
+
+    /**
+     * 评论管理
+     */
+	public function comment_manageOp() {
+        $condition = array();
+        if(!empty($_GET['comment_id'])) {
+            $condition['comment_id'] = intval($_GET['comment_id']);
+        }
+        if(!empty($_GET['member_name'])) {
+            $condition['member_name'] = array('like','%'.trim($_GET['member_name']).'%');
+        }
+        if(!empty($_GET['comment_type'])) {
+            $condition['comment_type'] = intval($_GET['comment_type']);
+        }
+        if(!empty($_GET['comment_object_id'])) {
+            $condition['comment_object_id'] = intval($_GET['comment_object_id']);
+        }
+        if(!empty($_GET['comment_message'])) {
+            $condition['comment_message'] = array('like','%'.trim($_GET['comment_message']).'%');
+        }
+        $model_comment = Model("cms_comment");
+        $comment_list = $model_comment->getListWithUserInfo($condition,10,'comment_time desc');
+        Tpl::output('list',$comment_list);
+        Tpl::output('show_page',$model_comment->showpage(2));
+        $this->get_type_array();
+        $this->show_menu('comment_manage');
+        Tpl::showpage('cms_comment.manage');
+    }
+
+    /**
+     * 获取类型数组
+     */
+    private function get_type_array() {
+        $type_array = array();
+        $type_array[1] = array('name'=>Language::get('cms_text_artcile'),'key'=>'article');
+        $type_array[2] = array('name'=>Language::get('cms_text_picture'),'key'=>'picture');
+        Tpl::output('type_array',$type_array);
+    }
+
+
+    /**
+     * 评论删除
+     */
+    public function comment_dropOp() {
+        $model = Model('cms_comment');
+        $condition = array();
+        $condition['comment_id'] = array('in',trim($_POST['comment_id']));
+        $result = $model->drop($condition);
+        if($result) {
+            $this->log(Language::get('cms_log_comment_drop').$_POST['comment_id'], 1);
+            showMessage(Language::get('nc_common_del_succ'),'');
+        } else {
+            $this->log(Language::get('cms_log_comment_drop').$_POST['comment_id'], 0);
+            showMessage(Language::get('nc_common_del_fail'),'','','error');
+        }
+    }
+
+    private function show_menu($menu_key) {
+        $menu_array = array(
+            "{$menu_key}"=>array('menu_type'=>'link','menu_name'=>Language::get('nc_manage'),'menu_url'=>'index.php?act=cms_comment&op='.$menu_key),
+        );
+        $menu_array[$menu_key]['menu_type'] = 'text';
+        Tpl::output('menu',$menu_array);
+    }
+
+
+}

+ 458 - 0
admin/control/cms_index.php

@@ -0,0 +1,458 @@
+<?php
+/**
+ * cms首页管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class cms_indexControl extends SystemControl{
+
+	public function __construct(){
+		parent::__construct();
+		Language::read('cms');
+	}
+
+	public function indexOp() {
+        $this->cms_indexOp();
+	}
+
+	/**
+	 * cms首页管理
+	 */
+	public function cms_indexOp() {
+        $model_index_module = Model('cms_index_module');
+        $module_list = $model_index_module->getList(TRUE, null, 'module_state desc, module_sort asc');
+        Tpl::output('list', $module_list);
+
+        $model_module = Model('cms_module');
+        $module_list = $model_module->getList(TRUE, null);
+        Tpl::output('module_list', $module_list);
+
+        $this->show_menu('cms_index');
+        Tpl::showpage('cms_index');
+	}
+
+    /**
+     * 获取
+     */
+    public function get_module_frame_listOp() {
+        $data = array();
+
+        $model_module_frame = Model('cms_module_frame');
+        $module_frame_list = $model_module_frame->getList(TRUE, null);
+        $data['frame_list'] = $module_frame_list;
+
+        $model_module_assembly = Model('cms_module_assembly');
+        $module_assembly_list = $model_module_assembly->getList(TRUE, null);
+        $data['assembly_list'] = $module_assembly_list;
+
+        echo json_encode($data);
+    }
+
+    /**
+     * 模块添加
+     */
+    public function add_page_moduleOp() {
+        $data = array();
+        $data['result'] = TRUE;
+        if(empty($_POST['module_name'])) {
+            $data['result'] = FALSE;
+            $data['message'] = '参数错误';
+        } else {
+            $model_index_module = Model('cms_index_module');
+            $new_module = array();
+            $new_module['module_title'] = $_POST['module_title'];
+            $new_module['module_name'] = $_POST['module_name'];
+            $new_module['module_type'] = $_POST['module_type'];
+            $new_module['module_style'] = 'style1';
+            $new_module['module_view'] = 1;
+            $result = $model_index_module->save($new_module);
+            if($result) {
+                $data['module_id'] = $result;
+                $data['module_style'] = $new_module['module_style'];
+                $data['module_view'] = $new_module['module_view'];
+            } else {
+                $data['result'] = FALSE;
+                $data['message'] = '添加失败';
+            }
+        }
+        echo json_encode($data);
+    }
+
+    /**
+     * 模块删除
+     */
+    public function drop_page_moduleOp() {
+        $data = array();
+        $data['result'] = TRUE;
+        $module_id = intval($_POST['module_id']);
+        if(empty($module_id)) {
+            $data['result'] = FALSE;
+            $data['message'] = '参数错误';
+        } else {
+            $model_index_module = Model('cms_index_module');
+            $result = $model_index_module->drop(array('module_id'=>$module_id));
+            if(!$result) {
+                $data['result'] = FALSE;
+                $data['message'] = '删除失败';
+            }
+        }
+        echo json_encode($data);
+    }
+
+    /**
+     * 启用页面模块
+     */
+    public function update_page_module_showOp() {
+        $update = array('module_state'=>1);
+        $result = $this->update_page_module($update, $_POST['module_id']);
+        echo $result;
+    }
+
+    /**
+     * 关闭页面模块
+     */
+    public function update_page_module_hideOp() {
+        $update = array('module_state'=>0);
+        $result = $this->update_page_module($update, $_POST['module_id']);
+        echo $result;
+    }
+
+    /**
+     * 更新模块标题
+     */
+    public function update_page_module_titleOp() {
+        $new_title = $_POST['value'];
+        $obj_validate = new Validate();
+        $obj_validate->validateparam = array(
+            array('input'=>$new_title,'require'=>'true',"validator"=>"Length","min"=>"1","max"=>"20",'message'=>Language::get('class_name_error')),
+        );
+        $error = $obj_validate->validate();
+        if ($error != ''){
+            echo json_encode(array('result'=>FALSE,'message'=>'标题名称不能为空且必须小于10个字'));
+            die;
+		} else {
+            $update = array('module_title'=>$new_title);
+            $result = $this->update_page_module($update, $_POST['id']);
+            echo $result;
+        }
+
+    }
+
+    /**
+     * 更新模块主题
+     */
+    public function update_page_module_styleOp() {
+        $update = array('module_style'=>$_POST['module_style']);
+        $result = $this->update_page_module($update, $_POST['module_id']);
+        echo $result;
+    }
+
+    /**
+     * 更新模块显示样式
+     */
+    public function update_page_module_viewOp() {
+        $update = array('module_view'=>$_POST['module_view']);
+        $result = $this->update_page_module($update, $_POST['module_id']);
+        echo $result;
+    }
+
+    /**
+     * 更新页面模块
+     */
+    private function update_page_module($update, $module_id) {
+        $data = array();
+        $data['result'] = TRUE;
+        $module_id = intval($module_id);
+        if(empty($module_id)) {
+            $data['result'] = FALSE;
+            $data['message'] = '参数错误';
+        } else {
+            $model_index_module = Model('cms_index_module');
+            $result = $model_index_module->modify($update, array('module_id'=>$module_id));
+            if(!$result) {
+                $data['result'] = FALSE;
+                $data['message'] = '操作失败';
+            }
+        }
+        return json_encode($data);
+    }
+
+    /**
+     * 更新页面模块排序
+     */
+    public function update_page_module_indexOp() {
+        $data = array();
+        $data['result'] = TRUE;
+        $page_module_id_string = $_POST['page_module_id_string'];
+        if(!empty($page_module_id_string)) {
+            $model_index_module = Model('cms_index_module');
+            $page_module_id_array = explode(',', $page_module_id_string);
+            $index = 0;
+            foreach ($page_module_id_array as $module_id) {
+                $result = $model_index_module->modify(array('module_sort'=>$index), array('module_id'=>$module_id));
+                $index++;
+            }
+        }
+        echo json_encode($data);
+    }
+
+    public function cms_index_previewOp() {
+        $model_index_module = Model('cms_index_module');
+        $module_list = $model_index_module->getList(array('module_state'=>1), null,'module_sort asc');
+        for($i=0, $j=count($module_list); $i < $j; $i++) {
+            $module_list[$i]['module_template'] = $this->get_module_template_path($module_list[$i]);
+        }
+        Tpl::output('module_list', $module_list);
+		Tpl::showpage('cms_index.template', 'null_layout');
+    }
+
+    /**
+     * 首页静态文件生成
+     */
+    public function cms_index_buildOp() {
+        $data = array();
+        $data['result'] = TRUE;
+        $html_path = BASE_UPLOAD_PATH.DS.ATTACH_CMS.DS.'index_html'.DS;
+        if(!is_dir($html_path)){
+            if (!@mkdir($html_path, 0755)){
+                $data = array();
+                $data['result'] = FALSE;
+                $data['message'] = Language::get('cms_index_build_fail');
+                echo json_encode($data);die;
+            }
+        }
+        $model_index_module = Model('cms_index_module');
+        $module_list = $model_index_module->getList(array('module_state'=>1), null,'module_sort asc');
+        for($i=0, $j=count($module_list); $i < $j; $i++) {
+            $module_list[$i]['module_template'] = $this->get_module_template_path($module_list[$i]);
+        }
+        Tpl::output('module_list', $module_list);
+        ob_start();
+		Tpl::showpage('cms_index.template', 'null_layout');
+        $result = file_put_contents($html_path.'index.html', ob_get_clean());
+        if($result) {
+            $this->log(Language::get('cms_log_index_build'), 1);
+            $data['message'] = Language::get('cms_index_build_success');
+        } else {
+            $this->log(Language::get('cms_log_index_build'), 0);
+            $data['message'] = Language::get('cms_index_build_fail');
+        }
+        echo json_encode($data);die;
+    }
+
+    /**
+     * 保存自定义模块
+     */
+    public function save_moduleOp() {
+        $data = array();
+        $data['result'] = TRUE;
+        if(empty($_POST['frame_name'])) {
+            $data['result'] = FALSE;
+            $data['message'] = '参数错误';
+            echo json_encode($data);die;
+        }
+
+        //插入数据库
+        $new_module = array();
+        $new_module['module_title'] = empty($_POST['module_title'])?'自定义模块':$_POST['module_title'];
+        $new_module['module_name'] = 'model'.strval(time());
+        $new_module['module_type'] = $_POST['frame_name'];
+        $new_module['module_class'] = 2;
+        $model_module = Model('cms_module');
+        $new_module_id = $model_module->save($new_module);
+
+        //生成模板
+        $model_module_frame = Model('cms_module_frame');
+        $module_frame = $model_module_frame->getOne(array('frame_name'=>$_POST['frame_name']));
+        Tpl::output('frame_structure', json_decode($module_frame['frame_structure'], TRUE));
+        Tpl::output('frame_block', $_POST['frame_block']);
+        if($_POST['module_display_title_state'] !== 'disable') {
+            Tpl::output('module_display_title', TRUE);
+        } else {
+            Tpl::output('module_display_title', FALSE);
+        }
+        $html_path = BASE_UPLOAD_PATH.DS.ATTACH_CMS.DS.'module_template'.DS;
+        if(!is_dir($html_path)){
+            if (!@mkdir($html_path, 0755)){
+                $data = array();
+                $data['result'] = FALSE;
+                $data['message'] = Language::get('cms_index_build_fail');
+                echo json_encode($data);die;
+            }
+        }
+        ob_start();
+		Tpl::showpage('cms_module.template', 'null_layout');
+        $result = file_put_contents($html_path.'cms_module.'.$new_module['module_name'].'.php', ob_get_clean());
+
+        //返回数据
+        if($result) {
+            $new_module['module_id'] = $new_module_id;
+            $data['module_item'] = $new_module;
+            echo json_encode($data);die;
+        } else {
+            $data['result'] = FALSE;
+            $data['message'] = '模块添加失败';
+            echo json_encode($data);die;
+        }
+    }
+
+    /**
+     * 删除自定义模块
+     */
+    public function drop_moduleOp() {
+        $data = array();
+        $data['result'] = TRUE;
+        $module_id = intval($_POST['module_id']);
+        if($module_id <= 0) {
+            $this->return_error('参数错误');
+        }
+
+        $model_cms_module = Model('cms_module');
+        $module_detail = $model_cms_module->getOne(array('module_id'=>$module_id));
+
+        //模块不存在或者是系统自带模块
+        if(empty($module_detail) || intval($module_detail['module_class']) === 1) {
+            $this->return_error('参数错误');
+        }
+
+        //删除模块数据库记录
+        $model_cms_module->drop(array('module_id'=>$module_id));
+        $model_cms_index_module = Model('cms_index_module');
+        $model_cms_index_module->drop(array('module_name'=>$module_detail['module_name']));
+
+        //删除模板文件
+        $module_template = BASE_UPLOAD_PATH.DS.ATTACH_CMS.DS.'module_template'.DS.'cms_module.'.$module_detail['module_name'].'.php';
+        if(is_file($module_template)) {
+            @unlink($module_template);
+        }
+
+        $data['module_name'] = $module_detail['module_name'];
+        echo json_encode($data);die;
+    }
+
+	/**
+	 * cms首页模块编辑
+	 */
+	public function module_editOp() {
+        $module_id = intval($_GET['module_id']);
+        if(empty($module_id)) {
+            showMessage(Language::get('param_error'),'','','error');
+        }
+
+        $model_index_module = Model('cms_index_module');
+        $module_detail = $model_index_module->getOne(array('module_id'=>$module_id));
+        Tpl::output('module_detail', $module_detail);
+
+        //标签
+        $model_tag = Model('cms_tag');
+        $tag_list = $model_tag->getList(TRUE, null, 'tag_sort asc');
+        Tpl::output('tag_list', $tag_list);
+
+        //获取表单组件
+        Tpl::output('module_template', $this->get_module_template_path($module_detail));
+
+        //编辑标志,用于显示模板中的编辑功能
+        Tpl::output('edit_flag', TRUE);
+
+        $this->show_menu('module_edit');
+        Tpl::showpage('cms_index_module.edit');
+	}
+
+    /**
+     * cms首页模块保存
+     */
+    public function save_page_moduleOp() {
+        $module_content = array();
+        foreach($_POST as $key=>$value) {
+            if($key !== 'module_id' && $key !== 'module_drop_image') {
+                $module_content[$key] = stripslashes($value);
+            }
+        }
+
+        if(!empty($_POST['module_drop_image']) && is_array($_POST['module_drop_image'])) {
+            foreach ($_POST['module_drop_image'] as $value) {
+                $this->image_drop($value);
+            }
+        }
+
+        $model_cms_index_module = Model('cms_index_module');
+        $result = $model_cms_index_module->modify(array('module_content'=>base64_encode(serialize($module_content))), array('module_id'=>$_POST['module_id']));
+
+        if($result) {
+            $this->log(Language::get('cms_log_index_edit').$_POST['module_id'], 1);
+            showMessage(Language::get('nc_common_save_succ'), 'index.php?act=cms_index&op=cms_index');
+        } else {
+            $this->log(Language::get('cms_log_index_edit').$_POST['module_id'], 0);
+            showMessage(Language::get('nc_common_save_fail'), '', '','error');
+        }
+    }
+
+    /**
+     * 首页图片上传
+     */
+    public function image_uploadOp() {
+        $data = array();
+        $data['status'] = 'success';
+        if(!empty($_FILES['image_upload']['name'])) {
+            $upload	= new UploadFile();
+            $upload->set('default_dir',ATTACH_CMS.DS.'index');
+
+            $result = $upload->upfile('image_upload');
+            if(!$result) {
+                $data['status'] = 'fail';
+                $data['error'] = $upload->error;
+            }
+            $data['file_name'] = $upload->file_name;
+            $data['file_url'] = getCMSIndexImageUrl($upload->file_name);
+        }
+ 		if (strtoupper(CHARSET) == 'GBK'){
+			$data = Language::getUTF8($data);//网站GBK使用编码时,转换为UTF-8,防止json输出汉字问题
+		}
+        echo json_encode($data);
+    }
+
+    /**
+     * 首页图片删除
+     */
+    private function image_drop($image_name) {
+        $file = getCMSIndexImagePath($image_name);
+        if(is_file($file)) {
+            unlink($file);
+        }
+    }
+
+    /**
+     * 获取模块模板路径
+     */
+    private function get_module_template_path($module_detail) {
+        if($module_detail['module_type'] === $module_detail['module_name']) {
+            return 'cms_index_widget.'.$module_detail['module_type'].'.php';
+        } else {
+            return BASE_UPLOAD_PATH.DS.ATTACH_CMS.DS.'module_template'.DS.'cms_module.'.$module_detail['module_name'].'.php';
+        }
+    }
+
+    /**
+     * 返回错误信息
+     */
+    private function return_error($message) {
+        $data['result'] = FALSE;
+        $data['message'] = $message;
+        echo json_encode($data);die;
+    }
+
+    private function show_menu($menu_key) {
+        $menu_array = array(
+            'cms_index'=>array('menu_type'=>'link','menu_name'=>Language::get('nc_manage'),'menu_url'=>'index.php?act=cms_index&op=cms_index'),
+        );
+        if($menu_key == 'module_edit') {
+            $menu_array['module_edit'] = array('menu_type'=>'link','menu_name'=>Language::get('nc_edit'),'menu_url'=>'###');
+        }
+        $menu_array[$menu_key]['menu_type'] = 'text';
+        Tpl::output('menu',$menu_array);
+    }
+
+}

+ 81 - 0
admin/control/cms_manage.php

@@ -0,0 +1,81 @@
+<?php
+/**
+ * cms管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class cms_manageControl extends SystemControl{
+
+	public function __construct(){
+		parent::__construct();
+		Language::read('cms');
+	}
+
+	public function indexOp() {
+        $this->cms_settingOp();
+	}
+
+	/**
+	 * cms设置
+	 */
+	public function cms_manageOp() {
+        $model_setting = Model('setting');
+        $setting_list = $model_setting->getListSetting();
+        Tpl::output('setting',$setting_list);
+        $this->show_menu('cms_manage');
+        Tpl::showpage('cms_manage');
+	}
+
+	/**
+	 * cms设置保存
+	 */
+	public function cms_manage_saveOp() {
+        $model_setting = Model('setting');
+        $update_array = array();
+        $update_array['cms_isuse'] = intval($_POST['cms_isuse']);
+        if(!empty($_FILES['cms_logo']['name'])) {
+            $upload	= new UploadFile();
+            $upload->set('default_dir',ATTACH_CMS);
+            $result = $upload->upfile('cms_logo');
+            if(!$result) {
+                showMessage($upload->error);
+            }
+            $update_array['cms_logo'] = $upload->file_name;
+            $old_image = BASE_UPLOAD_PATH.DS.ATTACH_CMS.DS.C('microshop_logo');
+            if(is_file($old_image)) {
+                unlink($old_image);
+            }
+        }
+        $update_array['cms_submit_verify_flag'] = intval($_POST['cms_submit_verify_flag']);
+        $update_array['cms_comment_flag'] = intval($_POST['cms_comment_flag']);
+        $update_array['cms_attitude_flag'] = intval($_POST['cms_attitude_flag']);
+        $update_array['taobao_api_isuse'] = intval($_POST['taobao_api_isuse']);
+        $update_array['taobao_app_key'] = $_POST['taobao_app_key'];
+        $update_array['taobao_secret_key'] = $_POST['taobao_secret_key'];
+        $update_array['cms_seo_title'] = $_POST['cms_seo_title'];
+        $update_array['cms_seo_keywords'] = $_POST['cms_seo_keywords'];
+        $update_array['cms_seo_description'] = $_POST['cms_seo_description'];
+
+        $result = $model_setting->updateSetting($update_array);
+        if ($result === true){
+            $this->log(Language::get('cms_log_manage_save'), 0);
+            showMessage(Language::get('nc_common_save_succ'));
+        }else {
+            $this->log(Language::get('cms_log_manage_save'), 0);
+            showMessage(Language::get('nc_common_save_fail'));
+        }
+	}
+
+    private function show_menu($menu_key) {
+        $menu_array = array(
+            'cms_manage'=>array('menu_type'=>'link','menu_name'=>Language::get('nc_manage'),'menu_url'=>'index.php?act=cms_manage&op=cms_manage'),
+        );
+        $menu_array[$menu_key]['menu_type'] = 'text';
+        Tpl::output('menu',$menu_array);
+    }
+
+
+}

+ 199 - 0
admin/control/cms_navigation.php

@@ -0,0 +1,199 @@
+<?php
+/**
+ * cms文章分类
+ *
+ *
+ *
+ *
+ */
+
+
+
+defined('InShopNC') or exit('Access Invalid!');
+class cms_navigationControl extends SystemControl{
+
+	public function __construct(){
+		parent::__construct();
+		Language::read('cms');
+	}
+
+	public function indexOp() {
+        $this->cms_navigation_listOp();
+	}
+
+    /**
+     * cms文章分类列表
+     **/
+    public function cms_navigation_listOp() {
+        $model = Model('cms_navigation');
+        $list = $model->getList(TRUE);
+        $this->show_menu('list');
+        Tpl::output('list',$list);
+        Tpl::showpage("cms_navigation.list");
+    }
+
+    /**
+     * cms文章分类添加
+     **/
+    public function cms_navigation_addOp() {
+        $this->show_menu('add');
+        Tpl::showpage('cms_navigation.add');
+    }
+
+    /**
+     * cms文章分类保存
+     **/
+    public function cms_navigation_saveOp() {
+        $obj_validate = new Validate();
+        $validate_array = array(
+            array('input'=>$_POST['navigation_title'],'require'=>'true',"validator"=>"Length","min"=>"1","max"=>"20",'message'=>Language::get('navigation_title_error')),
+            array('input'=>$_POST['navigation_link'],'require'=>'true',"validator"=>"Length","min"=>"1","max"=>"255",'message'=>Language::get('navigation_link_error')),
+            array('input'=>$_POST['navigation_sort'],'require'=>'true','validator'=>'Range','min'=>0,'max'=>255,'message'=>Language::get('navigation_sort_error')),
+        );
+        $obj_validate->validateparam = $validate_array;
+        $error = $obj_validate->validate();
+        if ($error != ''){
+            showMessage(Language::get('error').$error,'','','error');
+        }
+
+        $param = array();
+        $param['navigation_title'] = trim($_POST['navigation_title']);
+        $param['navigation_link'] = trim($_POST['navigation_link']);
+        $param['navigation_sort'] = intval($_POST['navigation_sort']);
+        if(intval($_POST['navigation_open_type']) === 2) {
+            $param['navigation_open_type'] = 2;
+        } else {
+            $param['navigation_open_type'] = 1;
+        }
+        $model_class = Model('cms_navigation');
+        $result = $model_class->save($param);
+        if($result) {
+            $this->log(Language::get('cms_log_navigation_save').$result, 1);
+            showMessage(Language::get('navigation_add_success'),'index.php?act=cms_navigation&op=cms_navigation_list');
+        } else {
+            $this->log(Language::get('cms_log_navigation_save').$result, 0);
+            showMessage(Language::get('navigation_add_fail'),'index.php?act=cms_navigation&op=cms_navigation_list','','error');
+        }
+
+    }
+
+    /**
+     * cms导航排序修改
+     */
+    public function update_navigation_sortOp() {
+        $new_sort = intval($_GET['value']);
+        if ($new_sort > 255){
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('class_sort_error')));
+            die;
+        } else {
+            $this->update_navigation('navigation_sort', $new_sort);
+        }
+    }
+
+    /**
+     * cms导航标题修改
+     */
+    public function update_navigation_titleOp() {
+        $new_value = trim($_GET['value']);
+        $obj_validate = new Validate();
+        $obj_validate->validateparam = array(
+            array('input'=>$new_value,'require'=>'true',"validator"=>"Length","min"=>"1","max"=>"10",'message'=>Language::get('navigation_title_error')),
+        );
+        $error = $obj_validate->validate();
+        if ($error != ''){
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('navigation_title_error')));
+            die;
+		} else {
+            $this->update_navigation('navigation_title', $new_value);
+        }
+    }
+
+    /**
+     * cms导航链接修改
+     */
+    public function update_navigation_linkOp() {
+        $new_value = trim($_GET['value']);
+        $obj_validate = new Validate();
+        $obj_validate->validateparam = array(
+            array('input'=>$new_value,'require'=>'true',"validator"=>"Length","min"=>"1","max"=>"255",'message'=>Language::get('navigation_link_error')),
+        );
+        $error = $obj_validate->validate();
+        if ($error != ''){
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('navigation_link_error')));
+            die;
+		} else {
+            $this->update_navigation('navigation_link', $new_value);
+        }
+    }
+
+    /**
+     * cms导航修改
+     */
+    private function update_navigation($column, $new_value) {
+        $navigation_id = intval($_GET['id']);
+        if($navigation_id <= 0) {
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('param_error')));
+            die;
+        }
+
+        $model = Model("cms_navigation");
+        $result = $model->modify(array($column=>$new_value),array('navigation_id'=>$navigation_id));
+        if($result) {
+            echo json_encode(array('result'=>TRUE, 'message'=>'success'));
+            die;
+        } else {
+            echo json_encode(array('result'=>FALSE, 'message'=>Language::get('nc_common_save_fail')));
+            die;
+        }
+    }
+
+    /**
+     * cms导航删除
+     **/
+     public function cms_navigation_dropOp() {
+        $navigation_id = trim($_POST['navigation_id']);
+        $model = Model('cms_navigation');
+        $condition = array();
+        $condition['navigation_id'] = array('in',$navigation_id);
+        $result = $model->drop($condition);
+        if($result) {
+            $this->log(Language::get('cms_log_navigation_drop').$_POST['navigation_id'], 1);
+            showMessage(Language::get('navigation_drop_success'),'');
+        } else {
+            $this->log(Language::get('cms_log_navigation_drop').$_POST['navigation_id'], 0);
+            showMessage(Language::get('navigation_drop_fail'),'','','error');
+        }
+
+     }
+
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+
+		switch ($_GET['branch']){
+			case 'navigation_open_type':
+                if(intval($_GET['id']) > 0) {
+                    $model= Model('cms_navigation');
+                    $condition['navigation_id'] = intval($_GET['id']);
+                    $update[$_GET['column']] = trim($_GET['value']);
+                    $model->modify($update,$condition);
+                    echo 'true';die;
+                } else {
+                    echo 'false';die;
+                }
+                break;
+		}
+	}
+
+    private function show_menu($menu_key) {
+        $menu_array = array(
+            'list'=>array('menu_type'=>'link','menu_name'=>Language::get('nc_list'),'menu_url'=>'index.php?act=cms_navigation&op=cms_navigation_list'),
+            'add'=>array('menu_type'=>'link','menu_name'=>Language::get('nc_new'),'menu_url'=>'index.php?act=cms_navigation&op=cms_navigation_add'),
+        );
+        $menu_array[$menu_key]['menu_type'] = 'text';
+        Tpl::output('menu',$menu_array);
+    }
+
+
+}

+ 225 - 0
admin/control/cms_picture.php

@@ -0,0 +1,225 @@
+<?php
+/**
+ * cms文章分类
+ *
+ *
+ *
+ *
+ */
+
+
+
+defined('InShopNC') or exit('Access Invalid!');
+class cms_pictureControl extends SystemControl{
+    //文章状态草稿箱
+    const ARTICLE_STATE_DRAFT = 1;
+    //文章状态待审核
+    const ARTICLE_STATE_VERIFY = 2;
+    //文章状态已发布
+    const ARTICLE_STATE_PUBLISHED = 3;
+    //文章状态回收站
+    const ARTICLE_STATE_RECYCLE = 4;
+
+	public function __construct(){
+		parent::__construct();
+		Language::read('cms');
+	}
+
+	public function indexOp() {
+        $this->cms_picture_listOp();
+	}
+
+    /**
+     * cms文章列表
+     **/
+    public function cms_picture_listOp() {
+        $condition = array();
+        if(!empty($_GET['picture_state'])) {
+            $condition['picture_state'] = $_GET['picture_state'];
+        }
+        $this->get_cms_picture_list($condition, 'list');
+    }
+
+    /**
+     * 待审核文章列表
+     */
+    public function cms_picture_list_verifyOp() {
+        $condition = array();
+        $condition['picture_state'] = self::ARTICLE_STATE_VERIFY;
+        $this->get_cms_picture_list($condition, 'list_verify');
+    }
+
+    /**
+     * 已发布文章列表
+     */
+    public function cms_picture_list_publishedOp() {
+        $condition = array();
+        $condition['picture_state'] = self::ARTICLE_STATE_PUBLISHED;
+        $this->get_cms_picture_list($condition, 'list_published');
+    }
+
+
+    private function get_cms_picture_list($condition, $menu_key) {
+        if(!empty($_GET['picture_title'])) {
+            $condition['picture_title'] = array('like', '%'.$_GET['picture_title'].'%');
+        }
+        if(!empty($_GET['picture_publisher_name'])) {
+            $condition['picture_publisher_name'] = array('like', '%'.$_GET['picture_publisher_name'].'%');
+        }
+
+        $model_picture = Model('cms_picture');
+        $picture_list = $model_picture->getList($condition, 10, 'picture_id desc');
+        for ($i = 0, $j = count($picture_list); $i < $j; $i++) {
+            if($picture_list[$i]['picture_state'] == self::ARTICLE_STATE_VERIFY) {
+                $picture_list[$i]['verify_able'] = true;
+            }
+            if($picture_list[$i]['picture_state'] == self::ARTICLE_STATE_PUBLISHED) {
+                $picture_list[$i]['callback_able'] = true;
+            }
+        }
+        $this->show_menu($menu_key);
+        Tpl::output('show_page',$model_picture->showpage(2));
+        Tpl::output('list',$picture_list);
+        Tpl::output('picture_state_list', $this->get_picture_state_list());
+        Tpl::showpage("cms_picture.list");
+    }
+
+    /**
+     * cms文章审核
+     */
+    public function cms_picture_verifyOp() {
+        if(intval($_POST['verify_state']) === 1) {
+            $this->cms_picture_state_modify(self::ARTICLE_STATE_PUBLISHED);
+        } else {
+            $this->cms_picture_state_modify(self::ARTICLE_STATE_DRAFT, array('picture_verify_reason' => $_POST['verify_reason']));
+        }
+    }
+
+    /**
+     * cms文章回收
+     */
+    public function cms_picture_callbackOp() {
+        $this->cms_picture_state_modify(self::ARTICLE_STATE_DRAFT);
+    }
+
+    /**
+     * 修改文章状态
+     */
+    private function cms_picture_state_modify($new_state, $param = array()) {
+        $picture_id = $_POST['picture_id'];
+        $model_picture = Model('cms_picture');
+        $param['picture_state'] = $new_state;
+        $model_picture->modify($param,array('picture_id'=>array('in',$picture_id)));
+        showMessage(Language::get('nc_common_op_succ'),'');
+    }
+
+    /**
+     * cms文章分类排序修改
+     */
+    public function update_picture_sortOp() {
+        if(intval($_GET['id']) <= 0) {
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('param_error')));
+            die;
+        }
+        $new_sort = intval($_GET['value']);
+        if ($new_sort > 255){
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('picture_sort_error')));
+            die;
+        } else {
+            $model_class = Model("cms_picture");
+            $result = $model_class->modify(array('picture_sort'=>$new_sort),array('class_id'=>$_GET['id']));
+            if($result) {
+                echo json_encode(array('result'=>TRUE,'message'=>'class_add_success'));
+                die;
+            } else {
+                echo json_encode(array('result'=>FALSE,'message'=>Language::get('class_add_fail')));
+                die;
+            }
+        }
+    }
+
+    /**
+     * cms文章分类排序修改
+     */
+    public function update_picture_clickOp() {
+        if(intval($_GET['id']) <= 0 || intval($_GET['value']) < 0) {
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('param_error')));die;
+        }
+        $model_class = Model("cms_picture");
+        $result = $model_class->modify(array('picture_click'=>$_GET['value']),array('picture_id'=>$_GET['id']));
+        if($result) {
+            echo json_encode(array('result'=>TRUE,'message'=>''));die;
+        } else {
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('param_error')));die;
+        }
+    }
+
+
+    /**
+     * cms文章删除
+     **/
+     public function cms_picture_dropOp() {
+        $picture_id = trim($_POST['picture_id']);
+        $model_picture = Model('cms_picture');
+        $condition = array();
+        $condition['picture_id'] = array('in',$picture_id);
+        $result = $model_picture->drop($condition);
+        if($result) {
+            $this->log(Language::get('cms_log_picture_drop').$picture_id, 1);
+            showMessage(Language::get('nc_common_del_succ'),'');
+        } else {
+            $this->log(Language::get('cms_log_picture_drop').$picture_id, 0);
+            showMessage(Language::get('nc_common_del_fail'),'','','error');
+        }
+     }
+
+    /**
+     * ajax操作
+     */
+    public function ajaxOp(){
+        if(intval($_GET['id']) > 0) {
+            $flag = FALSE;
+            switch ($_GET['branch']){
+            case 'picture_commend':
+                $flag = TRUE;
+                break;
+            case 'picture_comment':
+                $flag = TRUE;
+                break;
+            }
+            if($flag) {
+                $model= Model('cms_picture');
+                $update[$_GET['column']] = trim($_GET['value']);
+                $condition['picture_id'] = intval($_GET['id']);
+                $model->modify($update,$condition);
+                echo 'true';die;
+            } else {
+                echo 'false';die;
+            }
+        }
+    }
+
+
+    /**
+     * 获取文章状态列表
+     */
+    private function get_picture_state_list() {
+        $array = array();
+        $array[self::ARTICLE_STATE_DRAFT] = array('text'=>Language::get('cms_text_draft'));
+        $array[self::ARTICLE_STATE_VERIFY] = array('text'=>Language::get('cms_text_verify'));
+        $array[self::ARTICLE_STATE_PUBLISHED] = array('text'=>Language::get('cms_text_published'));
+        $array[self::ARTICLE_STATE_RECYCLE] = array('text'=>Language::get('cms_text_recycle'));
+        return $array;
+    }
+
+    private function show_menu($menu_key) {
+        $menu_array = array(
+            'list'=>array('menu_type'=>'link','menu_name'=>Language::get('nc_list'),'menu_url'=>'index.php?act=cms_picture&op=cms_picture_list'),
+            'list_verify'=>array('menu_type'=>'link','menu_name'=>Language::get('cms_article_list_verify'),'menu_url'=>'index.php?act=cms_picture&op=cms_picture_list_verify'),
+            'list_published'=>array('menu_type'=>'link','menu_name'=>Language::get('cms_article_list_published'),'menu_url'=>'index.php?act=cms_picture&op=cms_picture_list_published'),
+        );
+        $menu_array[$menu_key]['menu_type'] = 'text';
+        Tpl::output('menu',$menu_array);
+    }
+
+}

+ 158 - 0
admin/control/cms_picture_class.php

@@ -0,0 +1,158 @@
+<?php
+/**
+ * cms画报分类
+ *
+ *
+ *
+ *
+ */
+
+
+
+defined('InShopNC') or exit('Access Invalid!');
+class cms_picture_classControl extends SystemControl{
+
+	public function __construct(){
+		parent::__construct();
+		Language::read('cms');
+	}
+
+	public function indexOp() {
+        $this->cms_picture_class_listOp();
+	}
+
+    /**
+     * cms画报分类列表
+     **/
+    public function cms_picture_class_listOp() {
+        $model = Model('cms_picture_class');
+        $list = $model->getList(TRUE);
+        $this->show_menu('list');
+        Tpl::output('list',$list);
+        Tpl::showpage("cms_picture_class.list");
+    }
+
+    /**
+     * cms画报分类添加
+     **/
+    public function cms_picture_class_addOp() {
+        $this->show_menu('add');
+        Tpl::showpage('cms_picture_class.add');
+    }
+
+    /**
+     * cms画报分类保存
+     **/
+    public function cms_picture_class_saveOp() {
+        $obj_validate = new Validate();
+        $validate_array = array(
+            array('input'=>$_POST['class_name'],'require'=>'true',"validator"=>"Length","min"=>"1","max"=>"10",'message'=>Language::get('class_name_error')),
+            array('input'=>$_POST['class_sort'],'require'=>'true','validator'=>'Range','min'=>0,'max'=>255,'message'=>Language::get('class_sort_error')),
+        );
+        $obj_validate->validateparam = $validate_array;
+        $error = $obj_validate->validate();
+        if ($error != ''){
+            showMessage(Language::get('error').$error,'','','error');
+        }
+
+        $param = array();
+        $param['class_name'] = trim($_POST['class_name']);
+        $param['class_sort'] = intval($_POST['class_sort']);
+        $model_class = Model('cms_picture_class');
+        $result = $model_class->save($param);
+        if($result) {
+            $this->log(Language::get('cms_log_picture_class_save').$result, 1);
+            showMessage(Language::get('class_add_success'),'index.php?act=cms_picture_class&op=cms_picture_class_list');
+        } else {
+            $this->log(Language::get('cms_log_picture_class_save').$result, 0);
+            showMessage(Language::get('class_add_fail'),'index.php?act=cms_picture_class&op=cms_picture_class_list','','error');
+        }
+
+
+    }
+
+    /**
+     * cms画报分类排序修改
+     */
+    public function update_class_sortOp() {
+        if(intval($_GET['id']) <= 0) {
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('param_error')));
+            die;
+        }
+        $new_sort = intval($_GET['value']);
+        if ($new_sort > 255){
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('class_sort_error')));
+            die;
+        } else {
+            $model_class = Model("cms_picture_class");
+            $result = $model_class->modify(array('class_sort'=>$new_sort),array('class_id'=>$_GET['id']));
+            if($result) {
+                echo json_encode(array('result'=>TRUE,'message'=>'class_add_success'));
+                die;
+            } else {
+                echo json_encode(array('result'=>FALSE,'message'=>Language::get('class_add_fail')));
+                die;
+            }
+        }
+    }
+
+    public function update_class_nameOp() {
+        $class_id = intval($_GET['id']);
+        if($class_id <= 0) {
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('param_error')));
+            die;
+        }
+
+        $new_name = trim($_GET['value']);
+        $obj_validate = new Validate();
+        $obj_validate->validateparam = array(
+            array('input'=>$new_name,'require'=>'true',"validator"=>"Length","min"=>"1","max"=>"10",'message'=>Language::get('class_name_error')),
+        );
+        $error = $obj_validate->validate();
+        if ($error != ''){
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('class_name_error')));
+            die;
+		} else {
+            $model_class = Model("cms_picture_class");
+            $result = $model_class->modify(array('class_name'=>$new_name),array('class_id'=>$class_id));
+            if($result) {
+                echo json_encode(array('result'=>TRUE,'message'=>'class_add_success'));
+                die;
+            } else {
+                echo json_encode(array('result'=>FALSE,'message'=>Language::get('class_add_fail')));
+                die;
+            }
+        }
+
+    }
+
+    /**
+     * cms画报分类删除
+     **/
+     public function cms_picture_class_dropOp() {
+        $class_id = trim($_POST['class_id']);
+        $model_class = Model('cms_picture_class');
+        $condition = array();
+        $condition['class_id'] = array('in',$class_id);
+        $result = $model_class->drop($condition);
+        if($result) {
+            $this->log(Language::get('cms_log_picture_class_drop').$result, 1);
+            showMessage(Language::get('class_drop_success'),'');
+        } else {
+            $this->log(Language::get('cms_log_picture_class_drop').$result, 0);
+            showMessage(Language::get('class_drop_fail'),'','','error');
+        }
+
+     }
+
+    private function show_menu($menu_key) {
+        $menu_array = array(
+            'list'=>array('menu_type'=>'link','menu_name'=>Language::get('nc_list'),'menu_url'=>'index.php?act=cms_picture_class&op=cms_picture_class_list'),
+            'add'=>array('menu_type'=>'link','menu_name'=>Language::get('nc_new'),'menu_url'=>'index.php?act=cms_picture_class&op=cms_picture_class_add'),
+        );
+        $menu_array[$menu_key]['menu_type'] = 'text';
+        Tpl::output('menu',$menu_array);
+    }
+
+
+}

+ 323 - 0
admin/control/cms_special.php

@@ -0,0 +1,323 @@
+<?php
+/**
+ * cms文章专题
+ *
+ *
+ *
+ *
+ */
+
+
+
+defined('InShopNC') or exit('Access Invalid!');
+class cms_specialControl extends SystemControl{
+
+    const LINK_CMS_SPECIAL = 'index.php?act=cms_special&op=cms_special_list';
+    //专题状态草稿箱
+    const SPECIAL_STATE_DRAFT = 1;
+    //专题状态待审核
+    const SPECIAL_STATE_PUBLISHED = 2;
+
+	public function __construct(){
+		parent::__construct();
+		Language::read('cms');
+	}
+
+	public function indexOp() {
+        $this->cms_special_listOp();
+	}
+
+    /**
+     * cms专题列表
+     **/
+    public function cms_special_listOp() {
+        $model_special = Model('cms_special');
+        $condition = array();
+        $special_list = $model_special->getList($condition, 10, 'special_id desc');
+        Tpl::output('show_page',$model_special->showpage(2));
+        Tpl::output('list',$special_list);
+        $this->show_menu('special_list');
+        Tpl::output('special_state_list', $this->get_special_state_list());
+        Tpl::showpage("cms_special.list");
+    }
+
+    /**
+     * cms专题添加
+     **/
+    public function cms_special_addOp() {
+        $model_special = Model('cms_special');
+        $this->show_menu('special_add');
+        Tpl::output('special_type_array', $model_special->getSpecialTypeArray());
+        Tpl::showpage('cms_special.add');
+    }
+
+    /**
+     * cms专题编辑
+     */
+    public function cms_special_editOp() {
+        $special_id = intval($_GET['special_id']);
+        if(empty($special_id)) {
+            showMessage(Language::get('param_error'),'','','error');
+        }
+
+        $model_special = Model('cms_special');
+        $special_detail = $model_special->getOne(array('special_id'=>$special_id));
+        if(empty($special_detail)) {
+            showMessage(Language::get('param_error'),'','','error');
+        }
+
+        Tpl::output('special_detail', $special_detail);
+        Tpl::output('special_type_array', $model_special->getSpecialTypeArray());
+        $this->show_menu('special_edit');
+        Tpl::showpage('cms_special.add');
+    }
+
+    /**
+     * cms专题保存
+     **/
+    public function cms_special_saveOp() {
+        $param = array();
+        $param['special_title'] = $_POST['special_title'];
+        $special_image = $this->cms_special_image_upload('special_image');
+        if(!empty($special_image)) {
+            $param['special_image'] = $special_image;
+            if(!empty($_POST['old_special_image'])) {
+                $this->cms_special_image_drop($_POST['old_special_image']);
+            }
+        }
+        $special_background = $this->cms_special_image_upload('special_background');
+        if(!empty($special_background)) {
+            $param['special_background'] = $special_background;
+            if(!empty($_POST['old_special_background'])) {
+                $this->cms_special_image_drop($_POST['old_special_background']);
+            }
+        }
+        if(!empty($_POST['special_image_all'])) {
+            $special_image_all = array();
+            foreach ($_POST['special_image_all'] as $value) {
+                $image = array();
+                $image['image_name'] = $value;
+                $special_image_all[] = $image;
+            }
+            $param['special_image_all'] = serialize($special_image_all);
+        } else {
+            $param['special_image_all'] = '';
+        }
+        $param['special_margin_top'] = intval($_POST['special_margin_top']);
+        $param['special_content'] = $_POST['special_content'];
+        $param['special_background_color'] = empty($_POST['special_background_color'])?'#FFFFFF':$_POST['special_background_color'];
+        $param['special_repeat'] = empty($_POST['special_repeat'])?'no-repeat':$_POST['special_repeat'];
+        $param['special_modify_time'] = time();
+        $param['special_type'] = intval($_POST['special_type']);
+        $admin_info = $this->getAdminInfo();
+        $param['special_publish_id'] = $admin_info['id'];
+        if($_POST['special_state'] == 'publish') {
+            $param['special_state'] = 2;
+        } else {
+            $param['special_state'] = 1;
+        }
+        $model_special = Model('cms_special');
+        if(empty($_POST['special_id'])) {
+            $result = $model_special->save($param);
+        } else {
+            $model_special->modify($param, array('special_id'=>$_POST['special_id']));
+            $result = $_POST['special_id'];
+        }
+        if($result) {
+            if($_POST['special_state'] == 'publish') {
+                $this->generate_html($result);
+            }
+            $this->log(Language::get('cms_log_special_save').$result, 1);
+            showMessage(Language::get('nc_common_save_succ'), self::LINK_CMS_SPECIAL);
+        } else {
+            $this->log(Language::get('cms_log_special_save').$result, 0);
+            showMessage(Language::get('nc_common_save_fail'), self::LINK_CMS_SPECIAL);
+        }
+    }
+
+    /**
+     * 专题详细页
+     */
+    public function cms_special_detailOp() {
+        $this->get_cms_special_detail($_GET['special_id']);
+    }
+
+    private function get_cms_special_detail($special_id) {
+        $model_special = Model('cms_special');
+        $special_detail = $model_special->getOne(array('special_id'=>$special_id));
+        Tpl::output('special_detail', $special_detail);
+        Tpl::showpage('cms_special.detail', 'null_layout');
+    }
+
+    /**
+     * cms生成静态文件
+     */
+    private function generate_html($special_id) {
+        $html_path = BASE_UPLOAD_PATH.DS.ATTACH_CMS.DS.'special_html'.DS;
+        if(!is_dir($html_path)){
+            if (!@mkdir($html_path, 0755)){
+                showMessage(Language::get('cms_special_build_fail'),'','','error');
+            }
+        }
+
+        ob_start();
+        $this->get_cms_special_detail($special_id);
+        $result = file_put_contents($html_path.md5('special'.$special_id).'.html', ob_get_clean());
+        if(!$result) {
+            showMessage(Language::get('cms_special_build_fail'),'','','error');
+        }
+    }
+
+    /**
+     * cms专题删除
+     */
+    public function cms_special_dropOp() {
+        $condition = array();
+        $condition['special_id'] = array('in', $_POST['special_id']);
+        $model_special = Model('cms_special');
+        $special_list = $model_special->getList($condition);
+        if(!empty($special_list)) {
+            $html_path = BASE_UPLOAD_PATH.DS.ATTACH_CMS.DS.'special_html'.DS;
+            foreach ($special_list as $value) {
+                //删除图片
+                $this->cms_special_image_drop($value['special_background']);
+                $this->cms_special_image_drop($value['special_image']);
+                $special_image_list = unserialize($value['special_image_all']);
+                if(!empty($special_image_list)) {
+                    foreach ($special_image_list as $value_image) {
+                        $this->cms_special_image_drop($value_image['image_name']);
+                    }
+                }
+                //删除静态文件
+                $static_file = $html_path.md5('special'.$value['special_id']).'.html';
+                if(is_file($static_file)) {
+                    unlink($static_file);
+                }
+            }
+        }
+        $result = $model_special->drop($condition);
+        if($result) {
+            $this->log(Language::get('cms_log_special_drop').$_POST['special_id'], 1);
+            showMessage(Language::get('nc_common_del_succ'),'');
+        } else {
+            $this->log(Language::get('cms_log_special_drop').$_POST['special_id'], 0);
+            showMessage(Language::get('nc_common_del_fail'),'');
+        }
+    }
+
+    /**
+     * 上传图片
+     */
+    private function cms_special_image_upload($image) {
+        if(!empty($_FILES[$image]['name'])) {
+            $upload	= new UploadFile();
+            $upload->set('default_dir',ATTACH_CMS.DS.'special');
+            $result = $upload->upfile($image);
+            if(!$result) {
+                showMessage($upload->error);
+            }
+            return $upload->file_name;
+        }
+    }
+
+    /**
+     * 图片删除
+     */
+    private function cms_special_image_drop($image) {
+        $file = getCMSSpecialImagePath($image);
+        if(is_file($file)) {
+            unlink($file);
+        }
+    }
+
+    /**
+     * 专题图片上传
+     */
+    public function special_image_uploadOp() {
+        $data = array();
+        $data['status'] = 'success';
+        if(!empty($_FILES['special_image_upload']['name'])) {
+            $upload	= new UploadFile();
+            $upload->set('default_dir',ATTACH_CMS.DS.'special');
+
+            $result = $upload->upfile('special_image_upload');
+            if(!$result) {
+                $data['status'] = 'fail';
+                $data['error'] = $upload->error;
+            }
+            $data['file_name'] = $upload->file_name;
+            $data['origin_file_name'] = $_FILES['special_image_upload']['name'];
+            $data['file_url'] = getCMSSpecialImageUrl($upload->file_name);
+        }
+ 		if (strtoupper(CHARSET) == 'GBK'){
+			$data = Language::getUTF8($data);//网站GBK使用编码时,转换为UTF-8,防止json输出汉字问题
+		}
+        echo json_encode($data);
+    }
+
+    /**
+     * 专题图片删除
+     */
+    public function special_image_dropOp() {
+        $data = array();
+        $data['status'] = 'success';
+        $this->cms_special_image_drop($_GET['image_name']);
+        echo json_encode($data);
+    }
+
+    /**
+     * 图片商品添加
+     */
+    public function goods_info_by_urlOp() {
+        $url = urldecode($_GET['url']);
+        if(empty($url)) {
+            self::return_json(Language::get('param_error'),'false');
+        }
+        $model_goods_info = Model('goods_info_by_url');
+        $result = $model_goods_info->get_goods_info_by_url($url);
+        if($result) {
+            self::echo_json($result);
+        } else {
+            self::return_json(Language::get('param_error'),'false');
+        }
+    }
+
+    /**
+     * 获取专题状态列表
+     */
+    private function get_special_state_list() {
+        $array = array();
+        $array[self::SPECIAL_STATE_DRAFT] = Language::get('cms_text_draft');
+        $array[self::SPECIAL_STATE_PUBLISHED] = Language::get('cms_text_published');
+        return $array;
+    }
+
+
+	private function return_json($message,$result='true') {
+        $data = array();
+        $data['result'] = $result;
+        $data['message'] = $message;
+        self::echo_json($data);
+    }
+
+    private function echo_json($data) {
+        if (strtoupper(CHARSET) == 'GBK'){
+            $data = Language::getUTF8($data);//网站GBK使用编码时,转换为UTF-8,防止json输出汉字问题
+        }
+        echo json_encode($data);
+    }
+
+    private function show_menu($menu_key) {
+        $menu_array = array(
+            'special_list'=>array('menu_type'=>'link','menu_name'=>Language::get('nc_manage'),'menu_url'=>'index.php?act=cms_special&op=cms_special_list'),
+            'special_add'=>array('menu_type'=>'link','menu_name'=>Language::get('nc_new'),'menu_url'=>'index.php?act=cms_special&op=cms_special_add'),
+            'special_edit'=>array('menu_type'=>'link','menu_name'=>Language::get('nc_edit'),'menu_url'=>'###'),
+        );
+        if($menu_key != 'special_edit') {
+            unset($menu_array['special_edit']);
+        }
+        $menu_array[$menu_key]['menu_type'] = 'text';
+        Tpl::output('menu',$menu_array);
+    }
+
+}

+ 155 - 0
admin/control/cms_tag.php

@@ -0,0 +1,155 @@
+<?php
+/**
+ * cms文章分类
+ *
+ *
+ *
+ *
+ */
+
+
+
+defined('InShopNC') or exit('Access Invalid!');
+class cms_tagControl extends SystemControl{
+
+	public function __construct(){
+		parent::__construct();
+		Language::read('cms');
+	}
+
+	public function indexOp() {
+        $this->cms_tag_listOp();
+	}
+
+    /**
+     * cms文章分类列表
+     **/
+    public function cms_tag_listOp() {
+        $model = Model('cms_tag');
+        $list = $model->getList(TRUE, null, 'tag_id desc');
+        $this->show_menu('list');
+        Tpl::output('list',$list);
+        Tpl::showpage("cms_tag.list");
+    }
+
+    /**
+     * cms文章分类添加
+     **/
+    public function cms_tag_addOp() {
+        $this->show_menu('add');
+        Tpl::showpage('cms_tag.add');
+    }
+
+    /**
+     * cms文章分类保存
+     **/
+    public function cms_tag_saveOp() {
+        $obj_validate = new Validate();
+        $validate_array = array(
+            array('input'=>$_POST['tag_name'],'require'=>'true',"validator"=>"Length","min"=>"1","max"=>"20",'message'=>Language::get('tag_name_error')),
+            array('input'=>$_POST['tag_sort'],'require'=>'true','validator'=>'Range','min'=>0,'max'=>255,'message'=>Language::get('tag_sort_error')),
+        );
+        $obj_validate->validateparam = $validate_array;
+        $error = $obj_validate->validate();
+        if ($error != ''){
+            showMessage(Language::get('error').$error,'','','error');
+        }
+
+        $param = array();
+        $param['tag_name'] = trim($_POST['tag_name']);
+        $param['tag_sort'] = intval($_POST['tag_sort']);
+        $model_class = Model('cms_tag');
+        $result = $model_class->save($param);
+        if($result) {
+            $this->log(Language::get('cms_log_tag_save').$result, 1);
+            showMessage(Language::get('tag_add_success'),'index.php?act=cms_tag&op=cms_tag_list');
+        } else {
+            $this->log(Language::get('cms_log_tag_save').$result, 0);
+            showMessage(Language::get('tag_add_fail'),'index.php?act=cms_tag&op=cms_tag_list','','error');
+        }
+
+
+    }
+
+    /**
+     * cms标签排序修改
+     */
+    public function update_tag_sortOp() {
+        $new_sort = intval($_GET['value']);
+        if ($new_sort > 255){
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('class_sort_error')));
+            die;
+        } else {
+            $this->update_tag('tag_sort', $new_sort);
+        }
+    }
+
+    /**
+     * cms标签标题修改
+     */
+    public function update_tag_nameOp() {
+        $new_value = trim($_GET['value']);
+        $obj_validate = new Validate();
+        $obj_validate->validateparam = array(
+            array('input'=>$new_value,'require'=>'true',"validator"=>"Length","min"=>"1","max"=>"10",'message'=>Language::get('tag_name_error')),
+        );
+        $error = $obj_validate->validate();
+        if ($error != ''){
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('tag_name_error')));
+            die;
+		} else {
+            $this->update_tag('tag_name', $new_value);
+        }
+    }
+
+    /**
+     * cms标签修改
+     */
+    private function update_tag($column, $new_value) {
+        $tag_id = intval($_GET['id']);
+        if($tag_id <= 0) {
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('param_error')));
+            die;
+        }
+
+        $model = Model("cms_tag");
+        $result = $model->modify(array($column=>$new_value),array('tag_id'=>$tag_id));
+        if($result) {
+            echo json_encode(array('result'=>TRUE, 'message'=>'success'));
+            die;
+        } else {
+            echo json_encode(array('result'=>FALSE, 'message'=>Language::get('nc_common_save_fail')));
+            die;
+        }
+    }
+
+    /**
+     * cms标签删除
+     **/
+     public function cms_tag_dropOp() {
+        $tag_id = trim($_POST['tag_id']);
+        $model = Model('cms_tag');
+        $condition = array();
+        $condition['tag_id'] = array('in',$tag_id);
+        $result = $model->drop($condition);
+        if($result) {
+            $this->log(Language::get('cms_log_tag_drop').$_POST['tag_id'], 1);
+            showMessage(Language::get('tag_drop_success'),'');
+        } else {
+            $this->log(Language::get('cms_log_tag_drop').$_POST['tag_id'], 0);
+            showMessage(Language::get('tag_drop_fail'),'','','error');
+        }
+
+     }
+
+    private function show_menu($menu_key) {
+        $menu_array = array(
+            'list'=>array('menu_type'=>'link','menu_name'=>Language::get('nc_list'),'menu_url'=>'index.php?act=cms_tag&op=cms_tag_list'),
+            'add'=>array('menu_type'=>'link','menu_name'=>Language::get('nc_new'),'menu_url'=>'index.php?act=cms_tag&op=cms_tag_add'),
+        );
+        $menu_array[$menu_key]['menu_type'] = 'text';
+        Tpl::output('menu',$menu_array);
+    }
+
+
+}

+ 123 - 0
admin/control/common.php

@@ -0,0 +1,123 @@
+<?php
+/**
+ * 通用页面
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+
+class commonControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+	}
+
+	/**
+	 * 图片上传
+	 *
+	 */
+	public function pic_uploadOp(){
+		if (chksubmit()){
+			//上传图片
+			$upload = new UploadFile();
+			$upload->set('thumb_width',	500);
+			$upload->set('thumb_height',499);
+			$upload->set('thumb_ext','_small');
+			$upload->set('max_size',C('image_max_filesize')?C('image_max_filesize'):1024);
+			$upload->set('ifremove',true);
+			$upload->set('default_dir',$_GET['uploadpath']);
+
+			if (!empty($_FILES['_pic']['tmp_name'])){
+				$result = $upload->upfile('_pic');
+				if ($result){
+					exit(json_encode(array('status'=>1,'url'=>UPLOAD_SITE_URL.'/'.$_GET['uploadpath'].'/'.$upload->thumb_image)));
+				}else {
+					exit(json_encode(array('status'=>0,'msg'=>$upload->error)));
+				}
+			}
+		}
+	}
+
+	/**
+	 * 图片裁剪
+	 *
+	 */
+	public function pic_cutOp(){
+		Language::read('admin_common');
+		$lang = Language::getLangContent();
+		import('function.thumb');
+		if (chksubmit()){
+			$thumb_width = $_POST['x'];
+			$x1 = $_POST["x1"];
+			$y1 = $_POST["y1"];
+			$x2 = $_POST["x2"];
+			$y2 = $_POST["y2"];
+			$w = $_POST["w"];
+			$h = $_POST["h"];
+			$scale = $thumb_width/$w;
+			$src = str_ireplace(UPLOAD_SITE_URL,BASE_UPLOAD_PATH,$_POST['url']);
+			if (strpos($src, '..') !== false || strpos($src, BASE_UPLOAD_PATH) !== 0) {
+			    exit();
+			}
+			if (!empty($_POST['filename'])){
+// 				$save_file2 = BASE_UPLOAD_PATH.'/'.$_POST['filename'];
+				$save_file2 = str_ireplace(UPLOAD_SITE_URL,BASE_UPLOAD_PATH,$_POST['filename']);
+			}else{
+				$save_file2 = str_replace('_small.','_sm.',$src);
+			}
+			$cropped = resize_thumb($save_file2, $src,$w,$h,$x1,$y1,$scale);
+			@unlink($src);
+			$pathinfo = pathinfo($save_file2);
+			exit($pathinfo['basename']);
+		}
+		$save_file = str_ireplace(UPLOAD_SITE_URL,BASE_UPLOAD_PATH,$_GET['url']);
+		$_GET['resize'] = $_GET['resize'] == '0' ? '0' : '1';
+		Tpl::output('height',get_height($save_file));
+		Tpl::output('width',get_width($save_file));
+		Tpl::showpage('common.pic_cut','null_layout');
+	}
+
+	/**
+	 * 查询每月的周数组
+	 */
+	public function getweekofmonthOp(){
+	    import('function.datehelper');
+	    $year = $_GET['y'];
+	    $month = $_GET['m'];
+	    $week_arr = getMonthWeekArr($year, $month);
+	    echo json_encode($week_arr);
+	    die;
+	}
+	/**
+     * AJAX查询品牌
+     */
+    public function ajax_get_brandOp() {
+        $initial = trim($_GET['letter']);
+        $keyword = trim($_GET['keyword']);
+        $type = trim($_GET['type']);
+        if (!in_array($type, array('letter', 'keyword')) || ($type == 'letter' && empty($initial)) || ($type == 'keyword' && empty($keyword))) {
+            echo json_encode(array());die();
+        }
+
+        // 实例化模型
+        $model_type = Model('type');
+        $where = array();
+        // 验证类型是否关联品牌
+        if ($type == 'letter') {
+            switch ($initial) {
+            	case 'all':
+            	    break;
+            	case '0-9':
+            	    $where['brand_initial'] = array('in', array(0,1,2,3,4,5,6,7,8,9));
+            	    break;
+            	default:
+            	    $where['brand_initial'] = $initial;
+            	    break;
+            }
+        } else {
+            $where['brand_name|brand_initial'] = array('like', '%' . $keyword . '%');
+        }
+        $brand_array = Model('brand')->getBrandPassedList($where, 'brand_id,brand_name,brand_initial', 0, 'brand_initial asc, brand_sort asc');
+        echo json_encode($brand_array);die();
+    }
+}

+ 569 - 0
admin/control/complain.php

@@ -0,0 +1,569 @@
+<?php
+/**
+ * 投诉管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class complainControl extends SystemControl {
+    //定义投诉状态常量
+    const STATE_NEW = 10;
+    const STATE_APPEAL = 20;
+    const STATE_TALK = 30;
+    const STATE_HANDLE = 40;
+    const STATE_FINISH = 99;
+    const STATE_ACTIVE = 2;
+    const STATE_UNACTIVE = 1;
+
+    public function __construct() {
+        parent::__construct();
+        Language::read('complain');
+    }
+
+    /*
+     * 默认操作列出新投诉
+     */
+    public function indexOp() {
+        $this->complain_new_listOp();
+    }
+
+    /*
+     * 未处理的投诉列表
+     */
+    public function complain_new_listOp() {
+        $this->get_complain_list(self::STATE_NEW,'complain_new_list');
+    }
+
+    /*
+     * 待申诉的投诉列表
+     */
+    public function complain_appeal_listOp() {
+        $this->get_complain_list(self::STATE_APPEAL,'complain_appeal_list');
+    }
+
+    /*
+     * 对话的投诉列表
+     */
+    public function complain_talk_listOp() {
+        $this->get_complain_list(self::STATE_TALK,'complain_talk_list');
+    }
+
+    /*
+     * 待仲裁的投诉列表
+     */
+    public function complain_handle_listOp() {
+        $this->get_complain_list(self::STATE_HANDLE,'complain_handle_list');
+    }
+
+    /*
+     * 已关闭的投诉列表
+     */
+    public function complain_finish_listOp() {
+        $this->get_complain_list(self::STATE_FINISH,'complain_finish_list');
+    }
+
+    /*
+     * 获取投诉列表
+     */
+    private function get_complain_list($complain_state,$op) {
+        $page = new Page();
+        $page->setEachNum(10) ;
+        $page->setStyle('admin') ;
+        $model_complain = Model('complain') ;
+        //搜索条件
+        $condition = array();
+        $condition['complain_accuser'] = trim($_GET['input_complain_accuser']);
+        $condition['complain_accused'] = trim($_GET['input_complain_accused']);
+        $condition['complain_subject_content'] = trim($_GET['input_complain_subject_content']);
+        $condition['complain_datetime_start'] = strtotime($_GET['input_complain_datetime_start']);
+        $condition['complain_datetime_end'] = strtotime($_GET['input_complain_datetime_end']);
+        if($op === 'complain_finish_list') {
+            $condition['order'] = 'complain_id desc';
+        } else {
+            $condition['order'] = 'complain_id asc';
+        }
+        $condition['complain_state'] = $complain_state;
+        $complain_list = $model_complain->getComplain($condition,$page) ;
+        $this->show_menu($op);
+        Tpl::output('op',$op);
+        Tpl::output('list', $complain_list) ;
+        Tpl::output('show_page',$page->show()) ;
+        Tpl::showpage('complain.list') ;
+    }
+
+    /*
+     * 进行中的投诉
+     */
+    public function complain_progressOp() {
+        $complain_id = intval($_GET['complain_id']);
+        //获取投诉详细信息
+        $complain_info = $this->get_complain_info($complain_id);
+        //获取订单详细信息
+        $order_info = $this->get_order_info($complain_info['order_id']);
+        //获取投诉的商品列表
+        $complain_goods_list = $this->get_complain_goods_list($complain_info['order_goods_id']);
+        Tpl::output('complain_goods_list',$complain_goods_list);
+        if(intval($complain_info['complain_subject_id']) == 1) {//退款信息
+            $model_refund = Model('refund_return');
+            $model_refund->getRefundStateArray();//向模板页面输出退款退货状态
+            $list = $model_refund->getComplainRefundList($order_info, $complain_info['order_goods_id']);
+            Tpl::output('refund_list',$list['refund']);//已退或处理中商品
+            Tpl::output('refund_goods',$list['goods']);//可退商品
+        }
+        $this->show_menu('complain_progress');
+        Tpl::output('order_info',$order_info);
+        Tpl::output('complain_info',$complain_info);
+        Tpl::showpage('complain.info');
+    }
+
+    /*
+     * 审核提交的投诉
+     */
+    public function complain_verifyOp() {
+        $complain_id = intval($_POST['complain_id']);
+        $complain_info = $this->get_complain_info($complain_id);
+        if(intval($complain_info['complain_state']) === self::STATE_NEW) {
+            $model_complain = Model('complain');
+            $update_array = array();
+            $update_array['complain_state'] = self::STATE_APPEAL;
+            $update_array['complain_handle_datetime'] = time();
+            $update_array['complain_handle_member_id'] = $this->get_admin_id();
+            $update_array['complain_active'] = self::STATE_ACTIVE;
+            $where_array = array();
+            $where_array['complain_id'] = $complain_id;
+            if($model_complain->updateComplain($update_array,$where_array)) {
+                $this->log(L('complain_verify_success').'['.$complain_id.']',1);
+
+                // 发送商家消息
+                $param = array();
+                $param['code'] = 'complain';
+                $param['store_id'] = $complain_info['accused_id'];
+                $param['param'] = array(
+                    'complain_id' => $complain_id
+                );
+                QueueClient::push('sendStoreMsg', $param);
+
+                showMessage(Language::get('complain_verify_success'),'index.php?act=complain&op=complain_new_list');
+            } else {
+                showMessage(Language::get('complain_verify_fail'),'index.php?act=complain&op=complain_new_list');
+            }
+        } else {
+            showMessage(Language::get('param_error'),'');
+        }
+    }
+
+    /*
+     * 关闭投诉
+     */
+    public function complain_closeOp() {
+        //获取输入的数据
+        $complain_id = intval($_POST['complain_id']);
+        $final_handle_message = trim($_POST['final_handle_message']);
+        //验证输入的数据
+        $obj_validate = new Validate();
+        $obj_validate->validateparam = array(
+            array("input"=>$final_handle_message, "require"=>"true","validator"=>"Length","min"=>"1","max"=>"255","message"=>Language::get('final_handle_message_error')),
+        );
+        $error = $obj_validate->validate();
+        if ($error != '') {
+            showMessage($error);
+        }
+        $complain_info = $this->get_complain_info($complain_id);
+        $current_state = intval($complain_info['complain_state']);
+        if($current_state !== self::STATE_FINISH) {
+            $model_complain = Model('complain');
+            $update_array = array();
+            $update_array['complain_state'] = self::STATE_FINISH;
+            $update_array['final_handle_message'] = $final_handle_message;
+            $update_array['final_handle_datetime'] = time();
+            $update_array['final_handle_member_id'] = $this->get_admin_id();
+            $where_array = array();
+            $where_array['complain_id'] = $complain_id;
+            if($model_complain->updateComplain($update_array,$where_array)) {
+            	if(intval($complain_info['complain_subject_id']) == 1) {//退款信息
+                    $order = $this->get_order_info($complain_info['order_id']);
+            	    $model_refund = Model('refund_return');
+            	    $list = $model_refund->getComplainRefundList($order, $complain_info['order_goods_id']);
+            	    $refund_goods = $list['goods'];//可退商品
+            	    if (!empty($refund_goods) && is_array($refund_goods)) {
+            	        $checked_goods = $_POST['checked_goods'];
+            	        foreach ($refund_goods as $key => $value) {
+            	            $goods_id = $value['rec_id'];//订单商品表编号
+            	            if (!empty($checked_goods) && array_key_exists($goods_id,$checked_goods)) {//验证提交的商品属于订单
+            	                $refund_array = array();
+            	                $refund_array['refund_type'] = '1';//类型:1为退款,2为退货
+            	                $refund_array['seller_state'] = '2';//卖家处理状态:1为待审核,2为同意,3为不同意
+            	                $refund_array['refund_state'] = '2';//状态:1为处理中,2为待管理员处理,3为已完成
+            	                $refund_array['order_lock'] = '1';//锁定类型:1为不用锁定,2为需要锁定
+            	                $refund_array['refund_amount'] = ncPriceFormat($value['goods_refund']);
+            	                $refund_array['reason_id'] = '0';
+            	                $refund_array['reason_info'] = '投诉成功';
+            	                $refund_array['buyer_message'] = '投诉成功,待管理员确认退款';
+            	                $refund_array['seller_message'] = '投诉成功,待管理员确认退款';
+            	                $refund_array['add_time'] = time();
+            	                $refund_array['seller_time'] = time();
+            	                $model_refund->addRefundReturn($refund_array,$order,$value);
+            	            }
+            	        }
+            	    }
+            	}
+            	$this->log(L('complain_close_success').'['.$complain_id.']',1);
+                showMessage(Language::get('complain_close_success'),$this->get_complain_state_link($current_state));
+            } else {
+                showMessage(Language::get('complain_close_fail'),$this->get_complain_state_link($current_state));
+            }
+        } else {
+            showMessage(Language::get('param_error'),'');
+        }
+    }
+
+    /*
+     * 投诉主题列表
+     */
+    public function complain_subject_listOp() {
+        /*
+         * 实例化分页
+         */
+        $page = new Page();
+        $page->setEachNum(10) ;
+        $page->setStyle('admin') ;
+        /*
+         * 获得举报主题列表
+         */
+        $model_complain_subject = Model('complain_subject') ;
+        //搜索条件
+        $condition = array();
+        $condition['order'] = 'complain_subject_id asc';
+        $condition['complain_subject_state'] = 1;
+        $complain_subject_list = $model_complain_subject->getComplainSubject($condition,$page) ;
+        $this->show_menu('complain_subject_list');
+        Tpl::output('list', $complain_subject_list) ;
+        Tpl::output('show_page',$page->show()) ;
+        Tpl::showpage('complain_subject.list') ;
+    }
+
+    /*
+     * 添加投诉主题页面
+     */
+    public function complain_subject_addOp() {
+        $this->show_menu('complain_subject_add');
+        Tpl::showpage('complain_subject.add') ;
+    }
+
+    /*
+     * 保存添加的投诉主题
+     */
+    public function complain_subject_saveOp() {
+        //获取提交的内容
+        $input['complain_subject_content'] = trim($_POST['complain_subject_content']);
+        $input['complain_subject_desc'] = trim($_POST['complain_subject_desc']);
+        //验证提交的内容
+        $obj_validate = new Validate();
+        $obj_validate->validateparam = array(
+            array("input"=>$input['complain_subject_content'], "require"=>"true","validator"=>"Length","min"=>"1","max"=>"50","message"=>Language::get('complain_subject_content_error')),
+            array("input"=>$input['complain_subject_desc'], "require"=>"true","validator"=>"Length","min"=>"1","max"=>"100","message"=>Language::get('complain_subject_desc_error')),
+        );
+        $error = $obj_validate->validate();
+        if ($error != '') {
+            showMessage($error);
+        } else {
+            //验证成功保存
+            $input['complain_subject_state'] = 1;
+            $model_complain_subject = Model('complain_subject');
+            $model_complain_subject->saveComplainSubject($input);
+            $this->log(L('complain_subject_add_success').'['.$_POST['complain_subject_content'].']',1);
+            showMessage(Language::get('complain_subject_add_success'),'index.php?act=complain&op=complain_subject_list');
+        }
+    }
+
+    /*
+     * 删除投诉主题,伪删除只是修改标记
+     */
+    public function complain_subject_dropOp() {
+        $complain_subject_id = trim($_POST['complain_subject_id']);
+        if(empty($complain_subject_id)) {
+            showMessage(Language::get('param_error'),'index.php?act=complain');
+        }
+        $model_complain_subject= Model('complain_subject');
+        $update_array = array();
+        $update_array['complain_subject_state'] = 2;
+        $where_array = array();
+        $where_array['in_complain_subject_id'] = "'".implode("','", explode(',', $complain_subject_id))."'";
+        if($model_complain_subject->updateComplainSubject($update_array,$where_array)) {
+        	$this->log(L('complain_subject_delete_success').'[ID:'.$_POST['complain_subject_id'].']',1);
+            showMessage(Language::get('complain_subject_delete_success'),'index.php?act=complain&op=complain_subject_list');
+        } else {
+            showMessage(Language::get('complain_subject_delete_fail'),'index.php?act=complain&op=complain_subject_list');
+        }
+    }
+
+    /*
+     * 根据投诉id获取投诉对话列表
+     */
+    public function get_complain_talkOp() {
+        $complain_id = intval($_POST['complain_id']);
+        $complain_info = $this->get_complain_info($complain_id);
+        $complain_talk_list = $this->get_talk_list($complain_id);
+        $talk_list = array();
+        $i=0;
+        foreach($complain_talk_list as $talk) {
+            $talk_list[$i]['css'] = $talk['talk_member_type'];
+            $talk_list[$i]['talk'] = date("Y-m-d",$talk['talk_datetime']);
+            switch($talk['talk_member_type']) {
+                case 'accuser':
+                    $talk_list[$i]['talk'] .= Language::get('complain_accuser');
+                    break;
+                case 'accused':
+                    $talk_list[$i]['talk'] .= Language::get('complain_accused');
+                    break;
+                case 'admin':
+                    $talk_list[$i]['talk'] .= Language::get('complain_admin');
+                    break;
+                default:
+                    $talk_list[$i]['talk'] .= Language::get('complain_unknow');
+            }
+            if(intval($talk['talk_state']) === 2) {
+                $talk['talk_content'] = Language::get('talk_forbit_message');
+                $forbit_link = '';
+            } else {
+                $forbit_link = "&nbsp;&nbsp;<a href='#' onclick=forbit_talk(".$talk['talk_id'].")>".Language::get('complain_text_forbit')."</a>";
+            }
+            $talk_list[$i]['talk'].= '('.$talk['talk_member_name'].')'.Language::get('complain_text_say').':'.$talk['talk_content'].$forbit_link;
+            $i++;
+        }
+        if (strtoupper(CHARSET) == 'GBK') {
+            $talk_list = Language::getUTF8($talk_list);
+		}
+        echo json_encode($talk_list);
+    }
+
+    /*
+     * 发布投诉对话
+     */
+    public function publish_complain_talkOp() {
+        $complain_id = intval($_POST['complain_id']);
+        $complain_talk = trim($_POST['complain_talk']);
+        $talk_len = strlen($complain_talk);
+        if($talk_len > 0 && $talk_len < 255) {
+            $complain_info = $this->get_complain_info($complain_id);
+            $model_complain_talk = Model('complain_talk');
+            $param = array();
+            $param['complain_id'] = $complain_id;
+            $param['talk_member_id'] = $this->get_admin_id();
+            $param['talk_member_name'] = $this->get_admin_name();
+            $param['talk_member_type'] = 'admin';
+            if (strtoupper(CHARSET) == 'GBK') {
+                $complain_talk = Language::getGBK($complain_talk);
+            }
+            $param['talk_content'] = $complain_talk;
+            $param['talk_state'] =1;
+            $param['talk_admin'] = 0;
+            $param['talk_datetime'] = time();
+            if($model_complain_talk->saveComplainTalk($param)) {
+                echo json_encode('success');
+            } else {
+                echo json_encode('error2');
+            }
+        } else {
+            echo json_encode('error1');
+        }
+    }
+
+    /*
+     * 屏蔽对话
+     */
+    public function forbit_talkOp() {
+        $talk_id = intval($_POST['talk_id']);
+        if(!empty($talk_id)&&is_integer($talk_id)) {
+            $model_complain_talk = Model('complain_talk');
+            $update_array = array();
+            $update_array['talk_state'] = 2;
+            $update_array['talk_admin'] = $this->get_admin_id();
+            $where_array = array();
+            $where_array['talk_id'] = $talk_id;
+            if($model_complain_talk->updateComplainTalk($update_array,$where_array)) {
+                echo json_encode('success');
+            } else {
+                echo json_encode('error2');
+            }
+        } else {
+            echo json_encode('error1');
+        }
+    }
+
+    /**
+     * 投诉设置
+     **/
+    public function complain_settingOp() {
+		//读取设置内容 $list_setting
+		$model_setting = Model('setting');
+		$list_setting = $model_setting->getListSetting();
+		Tpl::output('list_setting',$list_setting);
+        $this->show_menu('complain_setting');
+        Tpl::showpage('complain.setting') ;
+    }
+
+    /**
+     * 投诉设置保存
+     **/
+    public function complain_setting_saveOp() {
+		$model_setting = Model('setting');
+        $complain_time_limit = intval($_POST['complain_time_limit']);
+        if(empty($complain_time_limit)) {
+            //如果输入不合法默认30天
+            $complain_time_limit = 2592000;
+        } else {
+            $complain_time_limit = $complain_time_limit*86400;
+        }
+        $update_array['complain_time_limit'] = $complain_time_limit;
+        if($model_setting->updateSetting($update_array)) {
+        	$this->log(L('complain_setting_save_success'),1);
+            showMessage(Language::get('complain_setting_save_success'),'');
+        } else {
+            showMessage(Language::get('complain_setting_save_fail'),'');
+        }
+    }
+
+    /*
+     * 获取订单信息
+     */
+    private function get_order_info($order_id) {
+        $model_order = Model('order');
+        $order_info = $model_order->getOrderInfo(array('order_id' => $order_id),array('order_goods'));
+        if(empty($order_info)) {
+            showMessage(Language::get('param_error'));
+        }
+        $order_info['order_state_text'] = orderState($order_info);
+        return $order_info;
+    }
+
+    /*
+     * 获取投诉信息
+     */
+    private function get_complain_info($complain_id) {
+        $model_complain = Model('complain');
+        $complain_info = $model_complain->getoneComplain($complain_id);
+        if(empty($complain_info)) {
+            showMessage(Language::get('param_error'));
+        }
+        $complain_info['complain_state_text'] = $this->get_complain_state_text($complain_info['complain_state']);
+        return $complain_info;
+    }
+
+    /*
+     * 获取投诉商品列表
+     */
+    private function get_complain_goods_list($order_goods_id) {
+        $model_order = Model('order');
+        $param = array();
+        $param['rec_id'] = $order_goods_id;
+        $complain_goods_list = $model_order->getOrderGoodsList($param);
+        return $complain_goods_list;
+    }
+
+    /*
+     * 获取对话列表
+     */
+    private function get_talk_list($complain_id) {
+        $model_complain_talk = Model('complain_talk');
+        $param = array();
+        $param['complain_id'] = $complain_id;
+        $talk_list = $model_complain_talk->getComplainTalk($param);
+        return $talk_list;
+    }
+
+    /*
+     * 获得投诉状态文本
+     */
+    private function get_complain_state_text($complain_state) {
+        switch(intval($complain_state)) {
+            case self::STATE_NEW:
+                return Language::get('complain_state_new');
+                break;
+            case self::STATE_APPEAL:
+                return Language::get('complain_state_appeal');
+                break;
+            case self::STATE_TALK:
+                return Language::get('complain_state_talk');
+                break;
+            case self::STATE_HANDLE:
+                return Language::get('complain_state_handle');
+                break;
+            case self::STATE_FINISH:
+                return Language::get('complain_state_finish');
+                break;
+            default:
+                showMessage(Language::get('param_error'),'');
+        }
+    }
+
+    /*
+     * 获得投诉状态文本
+     */
+    private function get_complain_state_link($complain_state) {
+        switch(intval($complain_state)) {
+            case self::STATE_NEW:
+                return 'index.php?act=complain&op=complain_new_list';
+                break;
+            case self::STATE_APPEAL:
+                return 'index.php?act=complain&op=complain_appeal_list';
+                break;
+            case self::STATE_TALK:
+                return 'index.php?act=complain&op=complain_talk_list';
+                break;
+            case self::STATE_HANDLE:
+                return 'index.php?act=complain&op=complain_handle_list';
+                break;
+            case self::STATE_FINISH:
+                return 'index.php?act=complain&op=complain_finish_list';
+                break;
+            default:
+                showMessage(Language::get('param_error'));
+        }
+    }
+
+    /*
+     * 获得管理员id
+     */
+    private function get_admin_id() {
+        $admin_info = $this->getAdminInfo();
+        return $admin_info['id'];
+    }
+
+    /*
+     * 获得管理员name
+     */
+    private function get_admin_name() {
+        $admin_info = $this->getAdminInfo();
+        return $admin_info['name'];
+    }
+
+	/**
+	 * 用户中心右边,小导航
+	 *
+	 * @param string	$menu_type	导航类型
+	 * @param string 	$menu_key	当前导航的menu_key
+	 * @param array 	$array		附加菜单
+	 * @return
+	 */
+	private function show_menu($menu_key) {
+		$menu_array = array(
+			'complain_new_list'=>array('menu_type'=>'link','menu_name'=>Language::get('complain_new_list'),'menu_url'=>'index.php?act=complain&op=complain_new_list'),
+			'complain_appeal_list'=>array('menu_type'=>'link','menu_name'=>Language::get('complain_appeal_list'),'menu_url'=>'index.php?act=complain&op=complain_appeal_list'),
+			'complain_talk_list'=>array('menu_type'=>'link','menu_name'=>Language::get('complain_talk_list'),'menu_url'=>'index.php?act=complain&op=complain_talk_list'),
+			'complain_handle_list'=>array('menu_type'=>'link','menu_name'=>Language::get('complain_handle_list'),'menu_url'=>'index.php?act=complain&op=complain_handle_list'),
+			'complain_finish_list'=>array('menu_type'=>'link','menu_name'=>Language::get('complain_finish_list'),'menu_url'=>'index.php?act=complain&op=complain_finish_list'),
+			'complain_subject_list'=>array('menu_type'=>'link','menu_name'=>Language::get('complain_subject_list'),'menu_url'=>'index.php?act=complain&op=complain_subject_list'),
+			'complain_subject_add'=>array('menu_type'=>'link','menu_name'=>Language::get('complain_subject_add'),'menu_url'=>'index.php?act=complain&op=complain_subject_add'),
+			'complain_setting'=>array('menu_type'=>'link','menu_name'=>Language::get('complain_setting'),'menu_url'=>'index.php?act=complain&op=complain_setting'),
+			'complain_progress'=>array('menu_type'=>'link','menu_name'=>Language::get('complain_progress'),'menu_url'=>'###'),
+		);
+        if($menu_key !== 'complain_progress') {
+            unset($menu_array['complain_progress']);
+        }
+        $menu_array[$menu_key]['menu_type'] = 'text';
+		Tpl::output('menu',$menu_array);
+    }
+}

+ 212 - 0
admin/control/consulting.php

@@ -0,0 +1,212 @@
+<?php
+/**
+ * 咨询管理
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+
+class consultingControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('consulting');
+	}
+
+	/**
+	 * 咨询管理
+	 */
+	public function consultingOp(){
+		$condition	= array();
+		if(chksubmit()){
+		    $member_name = trim($_GET['member_name']);
+			if($member_name != ''){
+				$condition['member_name'] = array('like', '%' . $member_name . '%');
+                Tpl::output('member_name', $member_name);
+			}
+			$consult_content = trim($_GET['consult_content']);
+			if($consult_content != ''){
+				$condition['consult_content'] = array('like', '%' . $consult_content . '%');
+				Tpl::output('consult_content', $consult_content);
+			}
+			$ctid = intval($_GET['ctid']);
+            if ($ctid > 0) {
+                $condition['ct_id'] = $ctid;
+                Tpl::output('ctid', $ctid);
+            }
+		}
+		$model_consult	= Model('consult');
+		$consult_list	= $model_consult->getConsultList($condition,'*', 0, 10);
+		Tpl::output('show_page',$model_consult->showpage());
+		Tpl::output('consult_list',$consult_list);
+
+
+		// 咨询类型
+		$consult_type = rkcache('consult_type', true);
+		Tpl::output('consult_type', $consult_type);
+
+		Tpl::showpage('consulting.index');
+	}
+
+	public function deleteOp(){
+		if(empty($_REQUEST['consult_id'])){
+			showMessage(Language::get('nc_common_del_fail'));
+		}
+		$array_id	= array();
+		if(!empty($_GET['consult_id'])){
+			$array_id[]	= intval($_GET['consult_id']);
+		}
+		if(!empty($_POST['consult_id'])){
+			$array_id	= $_POST['consult_id'];
+		}
+		$consult	= Model('consult');
+		if($consult->delConsult(array('consult_id' => array('in', $array_id)))){
+			$this->log(L('nc_delete,consulting').'[ID:'.$array_id.']',null);
+			showMessage(Language::get('nc_common_del_succ'));
+		}else{
+			showMessage(Language::get('nc_common_del_fail'));
+		}
+	}
+
+    /**
+     * 咨询设置
+     */
+    public function settingOp() {
+        $model_setting = Model('setting');
+        if (chksubmit()){
+            $update_array = array();
+            $update_array['consult_prompt'] = $_POST['consult_prompt'];
+            $result = $model_setting->updateSetting($update_array);
+            if ($result === true){
+                $this->log('编辑咨询文字提示',1);
+                showMessage(L('nc_common_save_succ'));
+            }else {
+                $this->log('编辑咨询文字提示',0);
+                showMessage(L('nc_common_save_fail'));
+            }
+        }
+        $setting_list = $model_setting->getListSetting();
+        Tpl::output('setting_list', $setting_list);
+
+        Tpl::showpage('consulting.setting');
+    }
+
+    /**
+     * 咨询类型列表
+     */
+    public function type_listOp() {
+        $model_ct = Model('consult_type');
+        if (chksubmit()) {
+            $ctid_array = $_POST['del_id'];
+            if (!is_array($ctid_array)) {
+                showMessage(L('param_error'));
+            }
+            foreach ($ctid_array as $val){
+                if (!is_numeric($val)) {
+                    showMessage(L('param_error'));
+                }
+            }
+
+            $result = $model_ct->delConsultType(array('ct_id' => array('in', $ctid_array)));
+
+            if ($result) {
+                $this->log('删除咨询类型 ID:'.implode(',', $ctid_array), 1);
+                showMessage(L('nc_common_del_succ'));
+            } else {
+                $this->log('删除咨询类型 ID:'.implode(',', $ctid_array), 0);
+                showMessage(L('nc_common_del_fail'));
+            }
+        }
+        $type_list = $model_ct->getConsultTypeList(array(), 'ct_id,ct_name,ct_sort');
+        Tpl::output('type_list', $type_list);
+        Tpl::showpage('consulting.type_list');
+    }
+
+    /**
+     * 新增咨询类型
+     */
+    public function type_addOp() {
+        if (chksubmit()) {
+            // 验证
+            $obj_validate = new Validate();
+            $obj_validate->validateparam = array(
+                array("input"=>$_POST["ct_name"], "require"=>"true", "message"=>'请填写咨询类型名称'),
+                array("input"=>$_POST["ct_sort"], "require"=>"true", 'validator'=>'Number', "message"=>'请正确填写咨询类型排序'),
+            );
+            $error = $obj_validate->validate();
+            if ($error != ''){
+                showMessage(Language::get('error').$error,'','','error');
+            }
+            $insert = array();
+            $insert['ct_name'] = trim($_POST['ct_name']);
+            $insert['ct_sort'] = intval($_POST['ct_sort']);
+            $insert['ct_introduce'] = $_POST['ct_introduce'];
+            $result = Model('consult_type')->addConsultType($insert);
+            if ($result){
+                $this->log('新增咨询类型',1);
+                showMessage(L('nc_common_save_succ'), urlAdmin('consulting', 'type_list'));
+            }else {
+                $this->log('新增咨询类型',0);
+                showMessage(L('nc_common_save_fail'));
+            }
+        }
+        Tpl::showpage('consulting.type_add');
+    }
+
+    /**
+     * 编辑咨询类型
+     */
+    public function type_editOp() {
+        $model_ct = Model('consult_type');
+        if (chksubmit()) {
+            // 验证
+            $obj_validate = new Validate();
+            $obj_validate->validateparam = array(
+                    array("input"=>$_POST["ct_name"], "require"=>"true", "message"=>'请填写咨询类型名称'),
+                    array("input"=>$_POST["ct_sort"], "require"=>"true", 'validator'=>'Number', "message"=>'请正确填写咨询类型排序'),
+            );
+            $error = $obj_validate->validate();
+            if ($error != ''){
+                showMessage(Language::get('error').$error,'','','error');
+            }
+            $where = array();
+            $where['ct_id'] = intval($_POST['ct_id']);
+            $update = array();
+            $update['ct_name'] = trim($_POST['ct_name']);
+            $update['ct_sort'] = intval($_POST['ct_sort']);
+            $update['ct_introduce'] = $_POST['ct_introduce'];
+            $result = $model_ct->editConsultType($where, $update);
+            if ($result){
+                $this->log('编辑咨询类型 ID:'.$where['ct_id'],1);
+                showMessage(L('nc_common_op_succ'), urlAdmin('consulting', 'type_list'));
+            }else {
+                $this->log('编辑咨询类型 ID:'.$where['ct_id'],0);
+                showMessage(L('nc_common_op_fail'));
+            }
+        }
+
+        $ct_id = intval($_GET['ct_id']);
+        if ($ct_id <= 0) {
+            showMessage(L('param_error'));
+        }
+        $ct_info = $model_ct->getConsultTypeInfo(array('ct_id' => $ct_id));
+        Tpl::output('ct_info', $ct_info);
+        Tpl::showpage('consulting.type_edit');
+    }
+
+    /**
+     * 删除咨询类型
+     */
+    public function type_delOp() {
+        $ct_id = intval($_GET['ct_id']);
+        if ($ct_id <= 0) {
+            showMessage(L('param_error'));
+        }
+        $result = Model('consult_type')->delConsultType(array('ct_id' => $ct_id));
+        if ($result) {
+            $this->log('删除咨询类型 ID:'.$ct_id, 1);
+            showMessage(L('nc_common_del_succ'));
+        } else {
+            $this->log('删除咨询类型 ID:'.$ct_id, 0);
+            showMessage(L('nc_common_del_fail'));
+        }
+    }
+}

+ 314 - 0
admin/control/control.php

@@ -0,0 +1,314 @@
+<?php
+/**
+ * 系统后台公共方法
+ *
+ * 包括系统后台父类
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class SystemControl{
+
+	/**
+	 * 管理员资料 name id group
+	 */
+	protected $admin_info;
+
+	/**
+	 * 权限内容
+	 */
+	protected $permission;
+	protected function __construct(){
+		Language::read('common,layout');
+		/**
+		 * 验证用户是否登录
+		 * $admin_info 管理员资料 name id
+		 */
+		$this->admin_info = $this->systemLogin();
+		if ($this->admin_info['id'] != 1){
+			// 验证权限
+			$this->checkPermission();
+		}
+		//转码  防止GBK下用ajax调用时传汉字数据出现乱码
+		if (($_GET['branch']!='' || $_GET['op']=='ajax') && strtoupper(CHARSET) == 'GBK'){
+			$_GET = Language::getGBK($_GET);
+		}
+	}
+
+	/**
+	 * 取得当前管理员信息
+	 *
+	 * @param
+	 * @return 数组类型的返回结果
+	 */
+	protected final function getAdminInfo(){
+		return $this->admin_info;
+	}
+
+	/**
+	 * 系统后台登录验证
+	 *
+	 * @param
+	 * @return array 数组类型的返回结果
+	 */
+	protected final function systemLogin(){
+		//取得cookie内容,解密,和系统匹配
+		$user = unserialize(decrypt(cookie('sys_key'),MD5_KEY));
+		if (!key_exists('gid',(array)$user) || !isset($user['sp']) || (empty($user['name']) || empty($user['id']))){
+			@header('Location: index.php?act=login&op=login');exit;
+		}else {
+			$this->systemSetKey($user);
+		}
+		return $user;
+	}
+
+	/**
+	 * 系统后台 会员登录后 将会员验证内容写入对应cookie中
+	 *
+	 * @param string $name 用户名
+	 * @param int $id 用户ID
+	 * @return bool 布尔类型的返回结果
+	 */
+	protected final function systemSetKey($user){
+		setNcCookie('sys_key',encrypt(serialize($user),MD5_KEY),3600,'',null);
+	}
+
+	/**
+	 * 验证当前管理员权限是否可以进行操作
+	 *
+	 * @param string $link_nav
+	 * @return
+	 */
+	protected final function checkPermission($link_nav = null){
+		if ($this->admin_info['sp'] == 1) return true;
+
+		$act = $_GET['act']?$_GET['act']:$_POST['act'];
+		$op = $_GET['op']?$_GET['op']:$_POST['op'];
+		if (empty($this->permission)){
+			$gadmin = Model('gadmin')->getby_gid($this->admin_info['gid']);
+			$permission = decrypt($gadmin['limits'],MD5_KEY.md5($gadmin['gname']));
+			$this->permission = $permission = explode('|',$permission);
+		}else{
+			$permission = $this->permission;
+		}
+		//显示隐藏小导航,成功与否都直接返回
+		if (is_array($link_nav)){
+			if (!in_array("{$link_nav['act']}.{$link_nav['op']}",$permission) && !in_array($link_nav['act'],$permission)){
+				return false;
+			}else{
+				return true;
+			}
+		}
+
+		//以下几项不需要验证
+		$tmp = array('index','dashboard','login','common','cms_base');
+		if (in_array($act,$tmp)) return true;
+		if (in_array($act,$permission) || in_array("$act.$op",$permission)){
+			return true;
+		}else{
+			$extlimit = array('ajax','export_step1');
+			if (in_array($op,$extlimit) && (in_array($act,$permission) || strpos(serialize($permission),'"'.$act.'.'))){
+				return true;
+			}
+			//带前缀的都通过
+			foreach ($permission as $v) {
+				if (!empty($v) && strpos("$act.$op",$v.'_') !== false) {
+					return true;break;
+				}
+			}
+		}
+		showMessage(Language::get('nc_assign_right'),'','html','succ',0);
+	}
+
+	/**
+	 * 取得后台菜单
+	 *
+	 * @param string $permission
+	 * @return
+	 */
+	protected final function getNav($permission = '',&$top_nav,&$left_nav,&$map_nav){
+
+		$act = $_GET['act']?$_GET['act']:$_POST['act'];
+		$op = $_GET['op']?$_GET['op']:$_POST['op'];
+		if ($this->admin_info['sp'] != 1 && empty($this->permission)){
+			$gadmin = Model('gadmin')->getby_gid($this->admin_info['gid']);
+			$permission = decrypt($gadmin['limits'],MD5_KEY.md5($gadmin['gname']));
+			$this->permission = $permission = explode('|',$permission);
+		}
+		Language::read('common');
+		$lang = Language::getLangContent();
+		$array = require(BASE_PATH.'/include/menu.php');
+		$array = $this->parseMenu($array);
+		//管理地图
+		$map_nav = $array['left'];
+		unset($map_nav[0]);
+
+		$model_nav = "<li><a class=\"link actived\" id=\"nav__nav_\" href=\"javascript:;\" onclick=\"openItem('_args_');\"><span>_text_</span></a></li>\n";
+		$top_nav = '';
+
+		//顶部菜单
+		foreach ($array['top'] as $k=>$v) {
+			$v['nav'] = $v['args'];
+			$top_nav .= str_ireplace(array('_args_','_text_','_nav_'),$v,$model_nav);
+		}
+		$top_nav = str_ireplace("\n<li><a class=\"link actived\"","\n<li><a class=\"link\"",$top_nav);
+
+		//左侧菜单
+		$model_nav = "
+          <ul id=\"sort__nav_\">
+            <li>
+              <dl>
+                <dd>
+                  <ol>
+                    list_body
+                  </ol>
+                </dd>
+              </dl>
+            </li>
+          </ul>\n";
+		$left_nav = '';
+		foreach ($array['left'] as $k=>$v) {
+			$left_nav .= str_ireplace(array('_nav_'),array($v['nav']),$model_nav);
+			$model_list = "<li nc_type='_pkey_'><a href=\"JavaScript:void(0);\" name=\"item__opact_\" id=\"item__opact_\" onclick=\"openItem('_args_');\">_text_</a></li>";
+			$tmp_list = '';
+
+			$current_parent = '';//当前父级key
+
+			foreach ($v['list'] as $key=>$value) {
+				$model_list_parent = '';
+				$args = explode(',',$value['args']);
+				if ($admin_array['admin_is_super'] != 1){
+					if (!@in_array($args[1],$permission)){
+						//continue;
+					}
+				}
+
+				if (!empty($value['parent'])){
+					if (empty($current_parent) || $current_parent != $value['parent']){
+						$model_list_parent = "<li nc_type='parentli' dataparam='{$value['parent']}'><dt>{$value['parenttext']}</dt><dd style='display:block;'></dd></li>";
+					}
+					$current_parent = $value['parent'];
+				}
+
+				$value['op'] = $args[0];
+				$value['act'] = $args[1];
+				//$tmp_list .= str_ireplace(array('_args_','_text_','_op_'),$value,$model_list);
+				$tmp_list .= str_ireplace(array('_args_','_text_','_opact_','_pkey_'),array($value['args'],$value['text'],$value['op'].$value['act'],$value['parent']),$model_list_parent.$model_list);
+			}
+
+			$left_nav = str_replace('list_body',$tmp_list,$left_nav);
+
+		}
+	}
+
+	/**
+	 * 过滤掉无权查看的菜单
+	 *
+	 * @param array $menu
+	 * @return array
+	 */
+	private final function parseMenu($menu = array()){
+		if ($this->admin_info['sp'] == 1) return $menu;
+		foreach ($menu['left'] as $k=>$v) {
+			foreach ($v['list'] as $xk=>$xv) {
+				$tmp = explode(',',$xv['args']);
+				//以下几项不需要验证
+				$except = array('index','dashboard','login','common');
+				if (in_array($tmp[1],$except)) continue;
+				if (!in_array($tmp[1],$this->permission) && !in_array($tmp[1].'.'.$tmp[0],$this->permission)){
+					unset($menu['left'][$k]['list'][$xk]);
+				}
+			}
+			if (empty($menu['left'][$k]['list'])) {
+				unset($menu['top'][$k]);unset($menu['left'][$k]);
+			}
+		}
+		return $menu;
+	}
+
+	/**
+	 * 取得顶部小导航
+	 *
+	 * @param array $links
+	 * @param 当前页 $actived
+	 */
+	protected final function sublink($links = array(), $actived = '', $file='index.php'){
+		$linkstr = '';
+		foreach ($links as $k=>$v) {
+			parse_str($v['url'],$array);
+			if (!$this->checkPermission($array)) continue;
+			$href = ($array['op'] == $actived ? null : "href=\"{$file}?{$v['url']}\"");
+			$class = ($array['op'] == $actived ? "class=\"current\"" : null);
+			$lang = L($v['lang']);
+			$linkstr .= sprintf('<li><a %s %s><span>%s</span></a></li>',$href,$class,$lang);
+		}
+		return "<ul class=\"tab-base\">{$linkstr}</ul>";
+	}
+
+	/**
+	 * 记录系统日志
+	 *
+	 * @param $lang 日志语言包
+	 * @param $state 1成功0失败null不出现成功失败提示
+	 * @param $admin_name
+	 * @param $admin_id
+	 */
+	protected final function log($lang = '', $state = 1, $admin_name = '', $admin_id = 0){
+		if (!C('sys_log') || !is_string($lang)) return;
+		if ($admin_name == ''){
+			$admin = unserialize(decrypt(cookie('sys_key'),MD5_KEY));
+			$admin_name = $admin['name'];
+			$admin_id = $admin['id'];
+		}
+		$data = array();
+		if (is_null($state)){
+			$state = null;
+		}else{
+//			$state = $state ? L('nc_succ') : L('nc_fail');
+			$state = $state ? '' : L('nc_fail');
+		}
+		$data['content'] 	= $lang.$state;
+		$data['admin_name'] = $admin_name;
+		$data['createtime'] = TIMESTAMP;
+		$data['admin_id'] 	= $admin_id;
+		$data['ip']			= getIp();
+		$data['url']		= $_REQUEST['act'].'&'.$_REQUEST['op'];
+		return Model('admin_log')->insert($data);
+	}
+
+	/**
+	 * 添加到任务队列
+	 *
+	 * @param array $goods_array
+	 * @param boolean $ifdel 是否删除以原记录
+	 */
+	protected function addcron($data = array(), $ifdel = false) {
+	    $model_cron = Model('cron');
+	    if (isset($data[0])) { // 批量插入
+	        $where = array();
+	        foreach ($data as $k => $v) {
+	            if (isset($v['content'])) {
+	                $data[$k]['content'] = serialize($v['content']);
+	            }
+	            // 删除原纪录条件
+	            if ($ifdel) {
+	                $where[] = '(type = ' . $data['type'] . ' and exeid = ' . $data['exeid'] . ')';
+	            }
+	        }
+	        // 删除原纪录
+	        if ($ifdel) {
+	            $model_cron->delCron(implode(',', $where));
+	        }
+	        $model_cron->addCronAll($data);
+	    } else { // 单条插入
+	        if (isset($data['content'])) {
+	            $data['content'] = serialize($data['content']);
+	        }
+	        // 删除原纪录
+	        if ($ifdel) {
+                $model_cron->delCron(array('type' => $data['type'], 'exeid' => $data['exeid']));
+	        }
+	        $model_cron->addCron($data);
+	    }
+	}
+}

+ 172 - 0
admin/control/dashboard.php

@@ -0,0 +1,172 @@
+<?php
+/**
+ * 控制台
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+
+class dashboardControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('dashboard');
+	}
+	/**
+	 * 欢迎页面
+	 */
+	public function welcomeOp(){
+		/**
+		 * 管理员信息
+		 */
+		$model_admin = Model('admin');
+		$tmp = $this->getAdminInfo();
+		$condition['admin_id'] = $tmp['id'];
+		$admin_info = $model_admin->infoAdmin($condition);
+		$admin_info['admin_login_time'] = date('Y-m-d H:i:s',($admin_info['admin_login_time'] == '' ? time() : $admin_info['admin_login_time']));
+		/**
+		 * 系统信息
+		 */
+		$version = C('version');
+		$setup_date = C('setup_date');
+		$statistics['os'] = PHP_OS;
+		$statistics['web_server'] = $_SERVER['SERVER_SOFTWARE'];
+		$statistics['php_version'] = PHP_VERSION;
+		$statistics['sql_version'] = Db::getServerInfo();
+		$statistics['shop_version'] = $version;
+		$statistics['setup_date'] = substr($setup_date,0,10);
+
+        // 33hao c extension
+        try {
+            $r = new ReflectionExtension('shopnc');
+            $statistics['php_version'] .= ' / ' . $r->getVersion();
+        } catch (ReflectionException $ex) {
+        }
+
+		Tpl::output('statistics',$statistics);
+		Tpl::output('admin_info',$admin_info);
+		Tpl::showpage('welcome');
+	}
+
+	/**
+	 * 关于我们
+	 */
+	public function aboutusOp(){
+
+		Tpl::showpage('aboutus');
+	}
+
+	/**
+	 * 统计
+	 */
+	public function statisticsOp(){
+        $statistics = array();
+        // 本周开始时间点
+        $tmp_time = mktime(0,0,0,date('m'),date('d'),date('Y'))-(date('w')==0?7:date('w')-1)*24*60*60;
+        /**
+         * 会员
+         */
+        $model_member = Model('member');
+        // 会员总数
+        $statistics['member'] = $model_member->getMemberCount(array());
+        // 新增会员数
+        $statistics['week_add_member'] = $model_member->getMemberCount(array('member_time' => array('egt', $tmp_time)));
+        // 预存款提现
+        $statistics['cashlist'] = Model('predeposit')->getPdCashCount(array('pdc_payment_state'=>0));
+
+        /**
+         * 店铺
+         */
+        $model_store = Model('store');
+        // 店铺总数
+        $statistics['store'] = Model('store')->getStoreCount(array());
+        // 店铺申请数
+        $statistics['store_joinin'] = Model('store_joinin')->getStoreJoininCount(array('joinin_state' => array('in', array(10, 11))));
+        //经营类目申请
+        $statistics['store_bind_class_applay'] = Model('store_bind_class')->getStoreBindClassCount(array('state'=>0));
+        //店铺续签申请
+        $statistics['store_reopen_applay'] = Model('store_reopen')->getStoreReopenCount(array('re_state'=>1));
+        // 即将到期
+        $statistics['store_expire'] = $model_store->getStoreCount(array('store_state'=>1, 'store_end_time'=>array('between', array(TIMESTAMP, TIMESTAMP + 864000))));
+        // 已经到期
+        $statistics['store_expired'] = $model_store->getStoreCount(array('store_state'=>1, 'store_end_time'=>array('between', array(1, TIMESTAMP))));
+
+        /**
+         * 商品
+         */
+        $model_goods = Model('goods');
+        // 商品总数
+        $statistics['goods'] = $model_goods->getGoodsCommonCount(array());
+        // 新增商品数
+        $statistics['week_add_product'] = $model_goods->getGoodsCommonCount(array('goods_addtime' => array('egt', $tmp_time)));
+        // 等待审核
+        $statistics['product_verify'] = $model_goods->getGoodsCommonWaitVerifyCount(array());
+        // 举报
+        $statistics['inform_list'] = Model('inform')->getInformCount(array('inform_state'=>1));
+        // 品牌申请
+        $statistics['brand_apply'] = Model('brand')->getBrandCount(array('brand_apply' => '0'));
+
+        /**
+         * 交易
+         */
+        $model_order = Model('order');
+        $model_refund_return = Model('refund_return');
+        $model_vr_refund = Model('vr_refund');
+        $model_complain = Model('complain');
+        // 订单总数
+        $statistics['order'] = $model_order->getOrderCount(array());
+        // 退款
+        $statistics['refund'] = $model_refund_return->getRefundReturn(array('refund_type' => 1, 'refund_state' => 2));
+        // 退货
+        $statistics['return'] = $model_refund_return->getRefundReturn(array('refund_type' => 2, 'refund_state' => 2));
+        // 虚拟订单退款
+        $statistics['vr_refund'] = $model_vr_refund->getRefundCount(array('admin_state' => 1));
+        // 投诉
+        $statistics['complain_new_list'] = $model_complain->getComplainCount(array('complain_state'=>10));
+        // 待仲裁
+		$statistics['complain_handle_list'] = $model_complain->getComplainCount(array('complain_state'=>40));
+
+		/**
+         * 运营
+		 */
+		// 抢购数量
+		$statistics['groupbuy_verify_list'] = Model('groupbuy')->getGroupbuyCount(array('state'=>10));
+		// 积分订单
+		$statistics['points_order'] = Model()->cls()->table('points_order')->where(array('point_orderstate'=>array('in',array(11,20))))->count();
+		//待审核账单
+		$model_bill = Model('bill');
+		$model_vr_bill = Model('vr_bill');
+		$condition = array();
+		$condition['ob_state'] = BILL_STATE_STORE_COFIRM;
+		$statistics['check_billno'] = $model_bill->getOrderBillCount($condition);
+		$statistics['check_billno'] += $model_vr_bill->getOrderBillCount($condition);
+		//待支付账单
+		$condition = array();
+		$condition['ob_state'] = BILL_STATE_SYSTEM_CHECK;
+		$statistics['pay_billno'] = $model_bill->getOrderBillCount($condition);
+		$statistics['pay_billno'] += $model_vr_bill->getOrderBillCount($condition);
+		// 平台客服
+		$statistics['mall_consult'] = Model('mall_consult')->getMallConsultCount(array('is_reply' => 0));
+        // 服务站
+        $statistics['delivery_point'] = Model('delivery_point')->getDeliveryPointWaitVerifyCount(array());
+        /**
+         * CMS
+         */
+        if (C('cms_isuse')) {
+            // 文章审核
+            $statistics['cms_article_verify'] = Model('cms_article')->getCmsArticleCount(array('article_state' => 2));
+            // 画报审核
+            $statistics['cms_picture_verify'] = Model('cms_picture')->getCmsPictureCount(array('picture_state' => 2));
+        }
+        /**
+         * 圈子
+         */
+        if (C('circle_isuse')) {
+            $statistics['circle_verify'] = Model('circle')->getCircleUnverifiedCount();
+        }
+
+        echo json_encode($statistics);
+		exit;
+	}
+}

+ 307 - 0
admin/control/db.php

@@ -0,0 +1,307 @@
+<?php
+/**
+ * 数据库备份
+ *
+ * 
+ *
+
+ */
+defined('InShopNC') or exit('Access Invalid!');
+class dbControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('db');
+	}
+	/**
+	 * 数据库管理
+	 */
+	public function dbOp(){
+		$lang 	= Language::getLangContent();
+		$model_db = Model('db');
+		$this->outputdb();
+
+		/**
+		 * 保存数据库备份参数到session中
+		 */
+		if ($_POST['form_submit'] == 'ok'){
+			/**
+			 * 验证分卷大小
+			 */
+			if (intval($_POST['file_size']) < 10){
+				showMessage($lang['db_index_min_size']);
+			}
+			/**
+			 * 验证文件夹是否重复
+			 */
+			if (is_dir(BASE_ROOT_PATH.DS.'sql_back'.DS.$_POST['backup_name'])) {
+				showMessage($lang['db_index_name_exists']);
+			}
+			
+			/**
+			 * 表列表
+			 */
+			if ($_POST['backup_type'] == 'all'){
+				$table_list = $model_db->getTableList('all');
+			}
+			if ($_POST['backup_type'] == 'custom'){
+				/**
+				 * 验证是否未选
+				 */
+				if (empty($_POST['tables'])){
+					showMessage($lang['db_index_choose']);
+				}
+				if (is_array($_POST['tables'])){
+					foreach ($_POST['tables'] as $k => $v){
+						$table_list[] = $v;
+					}
+				}
+			}
+			/**
+			 * 将相关内容写入session
+			 */
+			$_SESSION['db_backup'] = array();
+			$_SESSION['db_backup']['size'] = intval($_POST['file_size'])*1024;
+			$_SESSION['db_backup']['table_name'] = '';
+			$_SESSION['db_backup']['op'] = 'create';
+			$_SESSION['db_backup']['back_file'] = $_POST['backup_name'];
+			$_SESSION['db_backup']['backup_tables'] = $table_list;
+			$_SESSION['db_backup']['limit'] = 0;
+			$_SESSION['db_backup']['md5'] = substr(md5(microtime(true)),0,5);
+			
+			showMessage($lang['db_index_backup_to_wait'],'index.php?act=db&op=db&step=1');
+		}
+		/**
+		 * 数据库备份步骤
+		 */
+		if (intval($_GET['step']) >= 1){
+			/**
+			 * 备份
+			 */
+			$model_db->backUp(intval($_GET['step']));
+			/**
+			 * 判断是否备份完毕
+			 */
+			if (
+				$_SESSION['db_backup']['op'] == 'insert' && 
+				$_SESSION['db_backup']['backup_tables'][count($_SESSION['db_backup']['backup_tables'])-1] == $_SESSION['db_backup']['table_name'] && 
+				intval($_GET['step']) > 1 && 
+				$_SESSION['db_backup']['limit'] == 0){
+				/**
+				 * 销毁
+				 */
+				unset($_SESSION['db_backup']);
+				/**
+				 * 跳转
+				 */
+				$url = array(
+					array(
+						'url'=>'index.php?act=db&op=db',
+						'msg'=>$lang['db_index_back_to_db']
+					),
+				);
+				showMessage($lang['db_index_backup_succ'],$url);
+			}else {
+				/**
+				 * 跳转
+				 */
+				$url = array(
+					array(
+						'url'=>'index.php?act=db&op=db&step='.(intval($_GET['step'])+1),
+						'msg'=>$lang['db_index_backuping']
+					),
+				);
+				
+				showMessage($lang['db_index_backup_succ1'].intval($_GET['step']).$lang['db_index_backup_succ2'],$url);
+			}
+			
+		}
+		/**
+		 * 数据库列表
+		 */
+		$table_list = $model_db->getTableList('all');
+		/**
+		 * 取备份文件夹目录名
+		 */
+		$back_dir = $model_db->getBackDir();
+		
+		Tpl::output('back_dir',$back_dir);
+		Tpl::output('table_list',$table_list);
+		Tpl::showpage('db.index');
+	}
+	
+	 /**
+     * 数据库遍历
+     */
+	private function outputdb() {
+    	$db_id = intval($_GET['db_id']);
+	    $db_id = intval($_GET['db_id']);
+        if($_GET['type'] == 'html') {
+            $html_path = $model_special->getdbSpecialHtmlPath($db_id);
+            if(!is_file($html_path)) {
+                ob_start();
+                Tpl::output('list', $data);
+                Tpl::showpage('db_id');
+                file_put_contents($html_path, ob_get_clean());
+            }
+            header('Location: ' . $model_special->getdblist($db_id));
+            die;
+        } 
+	}
+	
+	/**
+	 * 数据库恢复
+	 */
+	public function db_restoreOp(){
+		$lang 	= Language::getLangContent();
+		/**
+		 * 删除
+		 */
+		if ($_POST['form_submit'] == 'ok'){
+			if (!empty($_POST['dir_name']) && is_array($_POST['dir_name'])){
+				$dir = BASE_ROOT_PATH.DS.'sql_back';
+				foreach ($_POST['dir_name'] as $k => $v){
+					if (file_exists(BASE_ROOT_PATH.DS.'sql_back'.DS.$v)){
+						$file_list  = array();
+						readFileList($dir.DS.$v,$file_list);
+						/**
+						 * 删除文件
+						 */
+						if (is_array($file_list)){
+							foreach ($file_list as $k_file => $v_file){
+								@unlink($dir.DS.$v.DS.$v_file);
+							}
+						}
+						/**
+						 * 删除目录
+						 */
+						@rmdir($dir.DS.$v);
+					}else {
+						showMessage($lang['db_restore_file_not_exists']);
+					}
+				}
+				showMessage($lang['db_restore_del_succ']);
+			}else {
+				showMessage($lang['db_restore_choose_file_to_del']);
+			}
+		}
+		$tmp_list = readDirList(BASE_ROOT_PATH.DS.'sql_back');
+		/**
+		 * 整理内容
+		 */
+		$dir_list = array();
+		if (is_array($tmp_list)){
+			foreach ($tmp_list as $k => $v){
+				$dir_list[$k]['name'] = $v;
+				$dir_list[$k]['make_time'] = date('Y-m-d H:i:s',filemtime(BASE_ROOT_PATH.DS.'sql_back'.DS.$v));
+				$dir_list[$k]['size'] = number_format((getDirSize(BASE_ROOT_PATH.DS.'sql_back'.DS.$v)/1024),2).'KB';
+				$dir_list[$k]['file_num'] = count(glob(BASE_ROOT_PATH.DS.'sql_back'.DS.$v.DS."*.sql"));
+			}
+		}
+		Tpl::output('dir_list',$dir_list);
+		Tpl::showpage('db.restore');
+	}
+	
+	/**
+	 * 数据库备份导入
+	 */
+	public function db_importOp(){
+		$lang 	= Language::getLangContent();
+		if ($_GET['dir_name'] != '' && file_exists(BASE_ROOT_PATH.DS.'sql_back'.DS.$_GET['dir_name'])){
+			$model_db = Model('db');
+			$result = $model_db->import($_GET['dir_name'],intval($_GET['step']));
+			/**
+			 * 导入成功,返回列表
+			 */
+			if ($result == 'succ'){
+				$url = array(
+					array(
+						'url'=>'index.php?act=db&op=db_restore',
+						'msg'=>$lang['db_import_back_to_list']
+					),
+				);
+				showMessage($lang['db_import_succ'],$url);
+			}
+			/**
+			 * 继续导入
+			 */
+			if ($result == 'continue'){
+				$url = array(
+					array(
+						'url'=>'index.php?act=db&op=db_import&dir_name='.$_GET['dir_name'].'&step='.(intval($_GET['step'])+1),
+						'msg'=>$lang['db_import_going']
+					),
+				);
+				showMessage($lang['db_index_backup_succ1'].intval($_GET['step']).$lang['db_import_succ2'],$url);
+			}
+			/**
+			 * 导入失败
+			 */
+			if ($result == false){
+				showMessage($lang['db_import_fail']	);
+			}
+		}else {
+			showMessage($lang['db_import_file_not_exists']);
+		}
+	}
+	
+	/**
+	 * 数据库 删除
+	 */
+	public function db_delOp(){
+		$lang 	= Language::getLangContent();
+		if ($_GET['dir_name'] != '' && file_exists(BASE_ROOT_PATH.DS.'sql_back'.DS.$_GET['dir_name'])){
+			$dir = BASE_ROOT_PATH.DS.'sql_back'.DS.$_GET['dir_name'];
+			$file_list = array();
+			readFileList($dir,$file_list);
+			/**
+			 * 删除文件
+			 */
+			if (is_array($file_list)){
+				foreach ($file_list as $k => $v){
+					@unlink($v);
+				}
+			}
+			/**
+			 * 删除目录
+			 */
+			@rmdir(BASE_ROOT_PATH.DS.'sql_back'.DS.$_GET['dir_name']);
+			showMessage($lang['db_del_succ']);
+		}else {
+			showMessage($lang['db_restore_file_not_exists']);
+		}
+	}
+	
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			/**
+			 * 数据库 sql列表
+			 */
+			case 'db_file':
+				if ($_GET['dir_name'] != '.' && $_GET['dir_name'] != '..' && is_dir(BASE_ROOT_PATH.DS.'sql_back'.DS.$_GET['dir_name'])){
+					$dir = BASE_ROOT_PATH.DS.'sql_back'.DS.$_GET['dir_name'];
+					$tmp = array();
+					readFileList($dir,$tmp);
+					/**
+					 * 整理内容
+					 */
+					if (is_array($tmp)){
+						$file_list = array();
+						foreach ($tmp as $k => $v){
+							$file_list[$k]['name'] = $v;
+							$file_list[$k]['make_time'] = date('Y-m-d H:i:s',filemtime($dir.DS.$v));
+							$file_list[$k]['size'] = number_format((filesize($dir.DS.$v)/1024),2).'KB';
+						}
+						$output = json_encode($file_list);
+						print_r($output);
+					}
+					exit;
+				}else {
+					echo 'false';exit;
+				}
+				break;
+		}
+	}
+}

+ 138 - 0
admin/control/delivery.php

@@ -0,0 +1,138 @@
+<?php
+/**
+ * 物流自提服务站管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class deliveryControl extends SystemControl{
+    public function __construct() {
+        parent::__construct();
+    }
+    /**
+     * 物流自提服务站列表
+     */
+    public function indexOp() {
+        $model_dp = Model('delivery_point');
+        $where = array();
+        if ($_GET['search_name'] != '') {
+            $where['dlyp_truename'] = array('like', '%' . $_GET['search_name'] . '%');
+            Tpl::output('search_name', $_GET['search_name']);
+        }
+        if ($_GET['sign'] == 'verify') {
+            Tpl::output('sign', 'verify');
+            $dp_list = $model_dp->getDeliveryPointWaitVerifyList($where, 10);
+        }else {
+            $dp_list = $model_dp->getDeliveryPointList($where, 10);
+        }
+        Tpl::output('show_page', $model_dp->showpage());
+        Tpl::output('dp_list', $dp_list);
+
+        Tpl::output('delivery_state', $model_dp->getDeliveryState());
+        
+        Tpl::showpage('delivery.index');
+    }
+    /**
+     * 物流自提服务站设置
+     */
+    public function settingOp() {
+        $list_setting = Model('setting')->getListSetting();
+        Tpl::output('list_setting',$list_setting);
+        Tpl::showpage('delivery.setting');
+    }
+    /**
+     * 提说站设置保存
+     */
+    public function save_settingOp() {
+        if (!chksubmit()){
+            showMessage(L('nc_common_save_fail'));
+        }
+        $update_array = array();
+        $update_array['delivery_isuse'] = intval($_POST['delivery_isuse']);
+        $result = Model('setting')->updateSetting($update_array);
+        if ($result === true){
+            $log = '开启';
+            if ($update_array['delivery_isuse'] == 0) {
+                $log = '关闭';
+                // 删除相关联的收货地址
+                Model('address')->delAddress(array('dlyp_id' => array('neq', 0)));
+            }
+            $this->log($log.'物流自提服务站功能', 1);
+            showMessage(L('nc_common_save_succ'));
+        }else {
+            $this->log($log.'物流自提服务站功能', 0);
+            showMessage(L('nc_common_save_fail'));
+        }
+    }
+    /**
+     * 编辑物流自提服务站信息
+     */
+    public function edit_deliveryOp() {
+        $dlyp_id = intval($_GET['d_id']);
+        if ($dlyp_id <= 0) {
+            showMessage(L('param_error'));
+        }
+        $dlyp_info = Model('delivery_point')->getDeliveryPointInfo(array('dlyp_id' => $dlyp_id));
+        if (empty($dlyp_info)) {
+            showMessage(L('param_error'));
+        }
+        Tpl::output('dlyp_info', $dlyp_info);
+        Tpl::showpage('delivery.edit');
+    }
+    /**
+     * 编辑保存
+     */
+    public function save_editOp() {
+        $dlyp_id = intval($_POST['did']);
+        if (!chksubmit() || $dlyp_id <= 0) {
+            showMessage(L('param_error'));
+        }
+        $where = array('dlyp_id' => $dlyp_id);
+        $update = array();
+        $update['dlyp_mobile']          = $_POST['dmobile'];
+        $update['dlyp_telephony']       = $_POST['dtelephony'];
+        $update['dlyp_address_name']    = $_POST['daddressname'];
+        $update['dlyp_address']         = $_POST['daddress'];
+        if ($_POST['dpasswd'] != '') {
+            $update['dlyp_passwd']      = md5($_POST['dpasswd']);
+        }
+        $update['dlyp_state']           = intval($_POST['dstate']);
+        $update['dlyp_fail_reason']     = $_POST['fail_reason'];
+        $result = Model('delivery_point')->editDeliveryPoint($update, $where);
+        if ($result) {
+            // 删除相关联的收货地址
+            Model('address')->delAddress(array('dlyp_id' => $dlyp_id));
+            $this->log('编辑物流自提服务站功能,ID:'.$dlyp_id, 1);
+            showMessage(L('nc_common_op_succ'), urlAdmin('delivery', 'index'));
+        } else {
+            $this->log('编辑物流自提服务站功能,ID:'.$dlyp_id, 0);
+            showMessage(L('nc_common_op_fail'));
+        }
+    }
+    /**
+     * 订单列表
+     */
+    public function order_listOp() {
+        $dlyp_id = intval($_GET['d_id']);
+        if ($dlyp_id <= 0) {
+            showMessage(L('param_error'));
+        }
+        $model_do = Model('delivery_order');
+        $where = array();
+        $where['dlyp_id'] = $dlyp_id;
+        if ($_GET['search_name'] != '') {
+            $where['order_sn|shipping_code'] = array('like', '%' . $_GET['search_name'] . '%');
+            Tpl::output('search_name', $_GET['search_name']);
+        }
+        $dorder_list = $model_do->getDeliveryOrderList($where, 10);
+        Tpl::output('dorder_list', $dorder_list);
+        Tpl::output('show_page', $model_do->showpage());
+        
+        $dorder_state = $model_do->getDeliveryOrderState();
+        Tpl::output('dorder_state', $dorder_state);
+        
+        Tpl::showpage('delivery.order_list');
+    }
+}

+ 196 - 0
admin/control/document.php

@@ -0,0 +1,196 @@
+<?php
+/**
+ * 系统文章管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class documentControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('document');
+	}
+
+	/**
+	 * 系统文章管理首页
+	 */
+	public function indexOp(){
+		$this->documentOp();
+		exit;
+	}
+
+	/**
+	 * 系统文章列表
+	 */
+	public function documentOp(){
+		$model_doc	= Model('document');
+		$doc_list	= $model_doc->getList();
+		Tpl::output('doc_list',$doc_list);
+		Tpl::showpage('document.index');
+	}
+
+	/**
+	 * 系统文章编辑
+	 */
+	public function editOp(){
+		$lang	= Language::getLangContent();
+		/**
+		 * 更新
+		 */
+		if(chksubmit()){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["doc_title"], "require"=>"true", "message"=>$lang['document_index_title_null']),
+				array("input"=>$_POST["doc_content"], "require"=>"true", "message"=>$lang['document_index_content_null'])
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+
+				$param	= array();
+				$param['doc_id']	= intval($_POST['doc_id']);
+				$param['doc_title']	= trim($_POST['doc_title']);
+				$param['doc_content']= trim($_POST['doc_content']);
+				$param['doc_time']	= time();
+				$model_doc	= Model('document');
+
+				$result	= $model_doc->update($param);
+
+				if ($result){
+					/**
+					 * 更新图片信息ID
+					 */
+					$model_upload = Model('upload');
+					if (is_array($_POST['file_id'])){
+						foreach ($_POST['file_id'] as $k => $v){
+							$v = intval($v);
+							$update_array = array();
+							$update_array['upload_id'] = $v;
+							$update_array['item_id'] = intval($_POST['doc_id']);
+							$model_upload->update($update_array);
+							unset($update_array);
+						}
+					}
+
+					$url = array(
+						array(
+							'url'=>'index.php?act=document&op=document',
+							'msg'=>$lang['document_edit_back_to_list']
+						),
+						array(
+							'url'=>'index.php?act=document&op=edit&doc_id='.intval($_POST['doc_id']),
+							'msg'=>$lang['document_edit_again']
+						),
+					);
+					$this->log(L('nc_edit,document_index_document').'[ID:'.$_POST['doc_id'].']',1);
+					showMessage($lang['nc_common_save_succ'],$url);
+				}else {
+					showMessage($lang['nc_common_save_fail']);
+				}
+			}
+		}
+		/**
+		 * 编辑
+		 */
+		if(empty($_GET['doc_id'])){
+			showMessage($lang['miss_argument']);
+		}
+		$model_doc	= Model('document');
+		$doc	= $model_doc->getOneById(intval($_GET['doc_id']));
+
+		/**
+		 * 模型实例化
+		 */
+		$model_upload = Model('upload');
+		$condition['upload_type'] = '4';
+		$condition['item_id'] = $doc['doc_id'];
+		$file_upload = $model_upload->getUploadList($condition);
+		if (is_array($file_upload)){
+			foreach ($file_upload as $k => $v){
+				$file_upload[$k]['upload_path'] = UPLOAD_SITE_URL.'/'.ATTACH_ARTICLE.'/'.$file_upload[$k]['file_name'];
+			}
+		}
+
+		Tpl::output('PHPSESSID',session_id());
+		Tpl::output('file_upload',$file_upload);
+		Tpl::output('doc',$doc);
+		Tpl::showpage('document.edit');
+	}
+
+	/**
+	 * 系统文章图片上传
+	 */
+	public function document_pic_uploadOp(){
+	    /**
+	     * 上传图片
+	     */
+	    $upload = new UploadFile();
+	    $upload->set('default_dir',ATTACH_ARTICLE);
+
+	    $result = $upload->upfile('fileupload');
+	    if ($result){
+	        $_POST['pic'] = $upload->file_name;
+	    }else {
+	        echo 'error';exit;
+	    }
+	    /**
+	     * 模型实例化
+	     */
+	    $model_upload = Model('upload');
+	    /**
+	     * 图片数据入库
+	    */
+	    $insert_array = array();
+	    $insert_array['file_name'] = $_POST['pic'];
+	    $insert_array['upload_type'] = '4';
+	    $insert_array['file_size'] = $_FILES['fileupload']['size'];
+	    $insert_array['item_id'] = intval($_POST['item_id']);
+	    $insert_array['upload_time'] = time();
+	    $result = $model_upload->add($insert_array);
+	    if ($result){
+	        $data = array();
+	        $data['file_id'] = $result;
+	        $data['file_name'] = $_POST['pic'];
+	        $data['file_path'] = $_POST['pic'];
+	        /**
+	         * 整理为json格式
+	         */
+	        $output = json_encode($data);
+	        echo $output;
+	    }
+
+	}
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			/**
+			 * 删除文章图片
+			 */
+			case 'del_file_upload':
+				if (intval($_GET['file_id']) > 0){
+					$model_upload = Model('upload');
+					/**
+					 * 删除图片
+					 */
+					$file_array = $model_upload->getOneUpload(intval($_GET['file_id']));
+					@unlink(BASE_UPLOAD_PATH.DS.ATTACH_ARTICLE.DS.$file_array['file_name']);
+					/**
+					 * 删除信息
+					 */
+					$model_upload->del(intval($_GET['file_id']));
+					echo 'true';exit;
+				}else {
+					echo 'false';exit;
+				}
+				break;
+		}
+	}
+}

+ 158 - 0
admin/control/domain.php

@@ -0,0 +1,158 @@
+<?php
+/**
+ * 二级域名
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class domainControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('store');
+	}
+
+	/**
+	 * 二级域名设置
+	 *
+	 * @param
+	 * @return
+	 */
+	public function store_domain_settingOp(){
+		/**
+		 * 读取语言包
+		 */
+		$lang	= Language::getLangContent();
+
+		/**
+		 * 实例化模型
+		 */
+		$model_setting = Model('setting');
+		/**
+		 * 保存信息
+		 */
+		if (chksubmit()){
+			$update_array = array();
+			$update_array['enabled_subdomain'] = intval($_POST['enabled_subdomain']);
+			$update_array['subdomain_reserved'] = trim($_POST['subdomain_reserved']);
+			$update_array['subdomain_length'] = trim($_POST['subdomain_length']);
+			$update_array['subdomain_edit'] = intval($_POST['subdomain_edit']);
+			$update_array['subdomain_times'] = intval($_POST['subdomain_times']);
+			$subdomain_length = explode('-',$update_array['subdomain_length']);
+			$subdomain_length[0] = intval($subdomain_length[0]);
+			$subdomain_length[1] = intval($subdomain_length[1]);
+			if ($subdomain_length[0] < 1 || $subdomain_length[0] >= $subdomain_length[1]){//域名长度
+				$update_array['subdomain_length'] = '3-12';
+			}
+			$result = $model_setting->updateSetting($update_array);
+			if ($result === true){
+				$this->log(L('nc_edit,nc_domain_manage'),1);
+				showMessage($lang['nc_common_save_succ']);
+			}else {
+				showMessage($lang['nc_common_save_fail']);
+			}
+		}
+
+		$list_setting = $model_setting->getListSetting();
+
+		Tpl::output('list_setting',$list_setting);
+		Tpl::showpage('store_domain.setting');
+	}
+
+	/**
+	 * 店铺二级域名列表
+	 */
+	public function store_domain_listOp(){
+
+		$lang = Language::getLangContent();
+
+		$condition = array();
+		$condition['store_state']	= array('neq', 2);
+		if(trim($_GET['store_name']) != ''){
+			$condition['store_name']	= array('like', '%'.trim($_GET['store_name']).'%');
+		}
+		if(trim($_GET['store_domain']) != ''){
+			$condition['store_domain']	= array(array('neq', ''), array('like', '%'.trim($_GET['store_domain']).'%'), 'and');
+		}else{
+			$condition['store_domain']	= array('neq', '');
+		}
+		$model_store = Model('store');
+		$store_list = $model_store->where($condition)->order('store_sort asc')->page(10)->select();
+
+		if(!empty($store_list)){
+			foreach ($store_list as $k => $v){
+				$store_list[$k]['state'] = ($v['store_state'] == 1)?$lang['open']:$lang['close'];
+			}
+		}
+		Tpl::output('store_list',$store_list);
+		Tpl::output('page',$model_store->showpage('2'));
+		Tpl::showpage('store_domain.index');
+	}
+
+	/**
+	 * 二级域名编辑
+	 */
+	public function store_domain_editOp(){
+
+		/**
+		 * 取店铺信息
+		 */
+		$model_store = Model('store');
+		$store_array = $model_store->getStoreInfoByID(intval($_GET['store_id']));
+
+		// $setting_config = $GLOBALS['setting_config'];
+		$config_subdomain_times = C('subdomain_times');
+		$config_subdomain_length = C('subdomain_length');
+		$config_subdomain_reserved = C('subdomain_reserved');
+
+		$subdomain_times = intval($config_subdomain_times);//系统设置二级域名可修改次数
+		$subdomain_length = explode('-',$config_subdomain_length);
+		$subdomain_length[0] = intval($subdomain_length[0]);
+		$subdomain_length[1] = intval($subdomain_length[1]);
+		if ($subdomain_length[0] < 1 || $subdomain_length[0] >= $subdomain_length[1]){//域名长度
+			$subdomain_length[0] = 3;
+			$subdomain_length[1] = 12;
+		}
+		Tpl::output('subdomain_length',$subdomain_length);
+
+		if (chksubmit()){
+			$store_domain_times = intval($_POST['store_domain_times']);//店铺已修改次数
+			$store_domain = trim($_POST['store_domain']);
+			$store_id = intval($_POST['store_id']);
+			$store_domain = strtolower($store_domain);
+			$param = array();
+			$param['store_domain_times'] = $store_domain_times;
+			$param['store_domain'] = '';
+			if (!empty($store_domain)){
+				$store_domain_count = strlen($store_domain);
+				if ($store_domain_count < $subdomain_length[0] || $store_domain_count > $subdomain_length[1]){
+					showMessage(Language::get('store_domain_length_error').': '.$config_subdomain_length);
+				}
+				if (!preg_match('/^[\w-]+$/i',$store_domain)){//判断域名是否正确
+					showMessage(Language::get('store_domain_invalid'));
+				}
+				$store_info = $model_store->getStoreInfo(array(
+					'store_domain'=>$store_domain
+				));
+				//二级域名存在,则提示错误
+				if (!empty($store_info) && ($store_id != $store_info['store_id'])){
+					showMessage(Language::get('store_domain_exists'));
+				}
+				//判断二级域名是否为系统禁止
+				$subdomain_reserved = @explode(',',$config_subdomain_reserved);
+				if(!empty($subdomain_reserved) && is_array($subdomain_reserved)){
+						if (in_array($store_domain,$subdomain_reserved)){
+							showMessage(Language::get('store_domain_sys'));
+						}
+				}
+				$param['store_domain'] = $store_domain;//所有验证通过后更新
+			}
+			$model_store->editStore($param, array('store_id'=> $store_id));
+			$this->log(L('nc_edit,nc_domain_manage').'['.$store_domain.']',1);
+			showMessage(Language::get('nc_common_save_succ'),'index.php?act=domain&op=store_domain_list');//保存成功
+		}
+		Tpl::output('store_array',$store_array);
+		Tpl::showpage('store_domain.edit');
+	}
+}

+ 105 - 0
admin/control/evaluate.php

@@ -0,0 +1,105 @@
+<?php
+/**
+ * 商品评价
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class evaluateControl extends SystemControl{
+	public function __construct() {
+		parent::__construct();
+		Language::read('evaluate');
+	}
+
+	public function indexOp() {
+		$this->evalgoods_listOp();
+	}
+
+	/**
+	 * 商品来自买家的评价列表
+	 */
+	public function evalgoods_listOp() {
+		$model_evaluate_goods = Model('evaluate_goods');
+
+		$condition = array();
+		//商品名称
+		if (!empty($_GET['goods_name'])) {
+			$condition['geval_goodsname'] = array('like', '%'.$_GET['goods_name'].'%');
+		}
+		//店铺名称
+		if (!empty($_GET['store_name'])) {
+			$condition['geval_storename'] = array('like', '%'.$_GET['store_name'].'%');
+		}
+        $condition['geval_addtime'] = array('time', array(strtotime($_GET['stime']), strtotime($_GET['etime'])));
+		$evalgoods_list	= $model_evaluate_goods->getEvaluateGoodsList($condition, 10);
+
+		Tpl::output('show_page',$model_evaluate_goods->showpage());
+		Tpl::output('evalgoods_list',$evalgoods_list);
+		Tpl::showpage('evalgoods.index');
+	}
+
+	/**
+	 * 删除商品评价
+	 */
+	public function evalgoods_delOp() {
+		$geval_id = intval($_POST['geval_id']);
+		if ($geval_id <= 0) {
+			showMessage(Language::get('param_error'),'','','error');
+		}
+
+		$model_evaluate_goods = Model('evaluate_goods');
+
+		$result = $model_evaluate_goods->delEvaluateGoods(array('geval_id'=>$geval_id));
+
+		if ($result) {
+            $this->log('删除商品评价,评价编号'.$geval_id);
+			showMessage(Language::get('nc_common_del_succ'),'','','error');
+		} else {
+			showMessage(Language::get('nc_common_del_fail'),'','','error');
+		}
+	}
+
+	/**
+	 * 店铺动态评价列表
+	 */
+	public function evalstore_listOp() {
+        $model_evaluate_store = Model('evaluate_store');
+
+		$condition = array();
+		//评价人
+		if (!empty($_GET['from_name'])) {
+			$condition['seval_membername'] = array('like', '%'.$_GET['from_name'].'%');
+		}
+		//店铺名称
+		if (!empty($_GET['store_name'])) {
+			$condition['seval_storename'] = array('like', '%'.$_GET['store_name'].'%');
+		}
+        $condition['seval_addtime_gt'] = array('time', array(strtotime($_GET['stime']), strtotime($_GET['etime'])));
+
+		$evalstore_list	= $model_evaluate_store->getEvaluateStoreList($condition, 10);
+		Tpl::output('show_page',$model_evaluate_store->showpage());
+		Tpl::output('evalstore_list',$evalstore_list);
+		Tpl::showpage('evalstore.index');
+	}
+
+	/**
+	 * 删除店铺评价
+	 */
+	public function evalstore_delOp() {
+		$seval_id = intval($_POST['seval_id']);
+		if ($seval_id <= 0) {
+			showMessage(Language::get('param_error'),'','','error');
+		}
+
+		$model_evaluate_store = Model('evaluate_store');
+
+		$result = $model_evaluate_store->delEvaluateStore(array('seval_id'=>$seval_id));
+
+		if ($result) {
+            $this->log('删除店铺评价,评价编号'.$geval_id);
+			showMessage(Language::get('nc_common_del_succ'),'','','error');
+		} else {
+			showMessage(Language::get('nc_common_del_fail'),'','','error');
+		}
+	}
+}

+ 145 - 0
admin/control/exppoints.php

@@ -0,0 +1,145 @@
+<?php
+/**
+ * 经验值管理
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class exppointsControl extends SystemControl{
+    const EXPORT_SIZE = 5000;
+	public function __construct(){
+		parent::__construct();		
+	}
+	/**
+	 * 设置经验值获取规则
+	 */
+	public function expsettingOp(){
+	    $model_setting = Model('setting');
+		if (chksubmit()){
+		    $exp_arr = array();
+		    $exp_arr['exp_login'] = intval($_POST['exp_login'])?$_POST['exp_login']:0;
+		    $exp_arr['exp_comments'] = intval($_POST['exp_comments'])?$_POST['exp_comments']:0;
+		    $exp_arr['exp_orderrate'] = intval($_POST['exp_orderrate'])?$_POST['exp_orderrate']:0;
+		    $exp_arr['exp_ordermax'] = intval($_POST['exp_ordermax'])?$_POST['exp_ordermax']:0;
+			$result = $model_setting->updateSetting(array('exppoints_rule'=>serialize($exp_arr)));
+			if ($result === true){
+				$this->log(L('nc_edit,nc_exppoints_manage,nc_exppoints_setting'),1);
+				showMessage(L('nc_common_save_succ'));
+			}else {
+				showMessage(L('nc_common_save_fail'));
+			}			
+		}
+		$list_setting = $model_setting->getListSetting();
+		$list_setting['exppoints_rule'] = $list_setting['exppoints_rule']?unserialize($list_setting['exppoints_rule']):array();
+	    Tpl::output('list_setting',$list_setting);
+		Tpl::showpage('exppoints.setting');
+	}
+	/**
+	 * 积分日志列表
+	 */
+	public function indexOp(){
+		$where = array();
+		$search_mname = trim($_GET['mname']);
+		$where['exp_membername'] = array('like',"%{$search_mname}%");
+		if ($_GET['stage']){
+			$where['exp_stage'] = trim($_GET['stage']);
+		}
+		$stime = $_GET['stime']?strtotime($_GET['stime']):0;
+		$etime = $_GET['etime']?strtotime($_GET['etime']):0;
+		if ($stime > 0 && $etime>0){
+		    $where['exp_addtime'] = array('between',array($stime,$etime));
+		}elseif ($stime > 0){
+		    $where['exp_addtime'] = array('egt',$stime);
+		}elseif ($etime > 0){
+		    $where['exp_addtime'] = array('elt',$etime);
+		}
+		$search_desc = trim($_GET['description']);
+		$where['exp_desc'] = array('like',"%$search_desc%");
+		
+		//查询积分日志列表
+		$model = Model('exppoints');
+		$list_log = $model->getExppointsLogList($where, '*', 20, 0, 'exp_id desc');
+		//信息输出
+		Tpl::output('stage_arr',$model->getStage());
+		Tpl::output('show_page',$model->showpage(2));
+		Tpl::output('list_log',$list_log);
+		Tpl::showpage('exppoints.log');
+	}
+	/**
+	 * 积分日志列表导出
+	 */
+	public function export_step1Op(){
+		$where = array();
+		$search_mname = trim($_GET['mname']);
+		$where['exp_membername'] = array('like',"%{$search_mname}%");
+	    if ($_GET['stage']){
+			$where['exp_stage'] = trim($_GET['stage']);
+		}
+		$stime = $_GET['stime']?strtotime($_GET['stime']):0;
+		$etime = $_GET['etime']?strtotime($_GET['etime']):0;
+		if ($stime > 0 && $etime>0){
+		    $where['exp_addtime'] = array('between',array($stime,$etime));
+		}elseif ($stime > 0){
+		    $where['exp_addtime'] = array('egt',$stime);
+		}elseif ($etime > 0){
+		    $where['exp_addtime'] = array('elt',$etime);
+		}
+		$search_desc = trim($_GET['description']);
+		$where['exp_desc'] = array('like',"%$search_desc%");
+		
+		//查询积分日志列表
+		$model = Model('exppoints');
+		$list_log = $model->getExppointsLogList($where, '*', self::EXPORT_SIZE, 0, 'exp_id desc');
+		if (!is_numeric($_GET['curpage'])){
+			$count = $model->getExppointsLogCount($where);
+			$array = array();
+			if ($count > self::EXPORT_SIZE ){	//显示下载链接
+				$page = ceil($count/self::EXPORT_SIZE);
+				for ($i=1;$i<=$page;$i++){
+					$limit1 = ($i-1)*self::EXPORT_SIZE + 1;
+					$limit2 = $i*self::EXPORT_SIZE > $count ? $count : $i*self::EXPORT_SIZE;
+					$array[$i] = $limit1.' ~ '.$limit2 ;
+				}
+				Tpl::output('list',$array);				
+				Tpl::showpage('export.excel');
+			}else{	//如果数量小,直接下载
+				$this->createExcel($list_log);
+			}
+		}else{	//下载
+			$this->createExcel($list_log);
+		}
+	}
+
+	/**
+	 * 生成excel
+	 *
+	 * @param array $data
+	 */
+	private function createExcel($data = array()){
+		import('libraries.excel');
+		$excel_obj = new Excel();
+		$excel_data = array();
+		//设置样式
+		$excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1')));
+		//header
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>'会员名称');
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>'经验值');
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>'添加时间');
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>'操作阶段');
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>'描述');
+		$stage_arr = Model('exppoints')->getStage();
+		foreach ((array)$data as $k=>$v){
+			$tmp = array();
+			$tmp[] = array('data'=>$v['exp_membername']);
+			$tmp[] = array('format'=>'Number','data'=>ncPriceFormat($v['exp_points']));
+			$tmp[] = array('data'=>date('Y-m-d H:i:s',$v['exp_addtime']));
+			$tmp[] = array('data'=>$stage_arr[$v['exp_stage']]);
+			$tmp[] = array('data'=>$v['exp_desc']);
+			$excel_data[] = $tmp;
+		}
+		$excel_data = $excel_obj->charset($excel_data,CHARSET);
+		$excel_obj->addArray($excel_data);
+		$excel_obj->addWorksheet($excel_obj->charset('经验值明细',CHARSET));
+		$excel_obj->generateXML($excel_obj->charset('经验值明细',CHARSET).$_GET['curpage'].'-'.date('Y-m-d-H',time()));
+	}
+}

+ 68 - 0
admin/control/express.php

@@ -0,0 +1,68 @@
+<?php
+/**
+ * 快递公司
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class expressControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('express');
+	}
+
+	public function indexOp(){
+		$lang	= Language::getLangContent();
+		$model = Model('express');
+		if (preg_match('/^[A-Z]$/',$_GET['letter'])){
+			$model->where(array('e_letter'=>$_GET['letter']));
+		}
+		$list = $model->page(10)->order('e_order,e_state desc,id')->select();
+		Tpl::output('page',$model->showpage());
+		Tpl::output('list',$list);
+		Tpl::showpage('express.index');
+	}
+
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			case 'state':
+				$model_brand = Model('express');
+				$update_array = array();
+				$update_array['id'] = intval($_GET['id']);
+				$update_array[$_GET['column']] = trim($_GET['value']);
+				$model_brand->update($update_array);
+				dkcache('express');
+				$this->log(L('nc_edit,express_name,express_state').'[ID:'.intval($_GET['id']).']',1);
+				echo 'true';exit;
+				break;
+			case 'order':
+				$_GET['value'] = $_GET['value'] == 0? 2:1;
+				$model_brand = Model('express');
+				$update_array = array();
+				$update_array['id'] = intval($_GET['id']);
+				$update_array[$_GET['column']] = trim($_GET['value']);
+				$model_brand->update($update_array);
+				dkcache('express');
+				$this->log(L('nc_edit,express_name,express_state').'[ID:'.intval($_GET['id']).']',1);
+				echo 'true';exit;
+				break;
+    		case 'e_zt_state':
+    		    $model_brand = Model('express');
+    		    $update_array = array();
+    		    $update_array['id'] = intval($_GET['id']);
+    		    $update_array[$_GET['column']] = trim($_GET['value']);
+    		    $model_brand->update($update_array);
+				dkcache('express');
+    		    $this->log(L('nc_edit,express_name,express_state').'[ID:'.intval($_GET['id']).']',1);
+    		    echo 'true';exit;
+    		    break;
+		}
+		dkcache('express');
+	}
+
+}

+ 88 - 0
admin/control/flea.php

@@ -0,0 +1,88 @@
+<?php
+/**
+
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ */
+defined('InShopNC') or exit('Access Invalid!');
+class fleaControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('flea_index,goods');
+		/**
+		 * 判断系统是否开启闲置市场
+		 */
+		if ($GLOBALS['setting_config']['flea_isuse'] != 1 ){
+			showMessage(Language::get('flea_index_unable'),'index.php?act=dashboard&op=welcome');
+			// showMessage(Language::get('admin_ztc_unavailable'),'index.php?act=dashboard&op=welcome');
+		}
+	}
+	/**
+	 * 商品管理
+	 */
+	public function fleaOp(){
+		$lang	= Language::getLangContent();
+		$model_goods = Model('flea');
+		/**
+		 * 推荐,编辑,删除
+		 */
+		if ($_POST['form_submit'] == 'ok'){
+			if (!empty($_POST['del_id'])){
+				$model_goods->dropGoods(implode(',',$_POST['del_id']));
+				showMessage($lang['goods_index_del_succ']);
+			}else {
+				showMessage($lang['goods_index_choose_del']);
+			}
+			showMessage($lang['goods_index_argument_invalid']);
+		}
+		
+		/**
+		 * 排序
+		 */
+		$condition['keyword'] = trim($_GET['search_goods_name']);
+		$condition['like_member_name'] = trim($_GET['search_store_name']); //店铺名称
+		$condition['brand_id'] = intval($_GET['search_brand_id']);
+		$condition['gc_id'] = intval($_GET['cate_id']);
+		
+		/**
+		 * 分页
+		 */
+		$page	= new Page();
+		$page->setEachNum(10);
+		$page->setStyle('admin');
+		$goods_list = $model_goods->listGoods($condition,$page);
+		/**
+		 * 商品类别
+		 */
+		/**
+		 * 商品分类
+		 */
+		$model_class = Model('flea_class');
+		$goods_class = $model_class->getTreeClassList(1);
+		
+		Tpl::output('search',$_GET);
+		Tpl::output('goods_class',$goods_class);
+		Tpl::output('goods_list',$goods_list);
+		Tpl::output('page',$page->show());
+	
+		Tpl::showpage('flea.index');
+	}
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			/**
+			 * 商品名称
+			 */
+			case 'goods_name':
+				$model_goods = Model('flea');
+				$update_array = array();
+				$update_array[$_GET['column']] = $_GET['value'];
+				$model_goods->updateGoods($update_array,$_GET['id']);
+				echo 'true';exit;
+				break;
+		}
+	}
+	
+}

+ 492 - 0
admin/control/flea_class.php

@@ -0,0 +1,492 @@
+<?php
+/**
+ */
+defined('InShopNC') or exit('Access Invalid!');
+class flea_classControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('flea_class');
+		if($GLOBALS['setting_config']['flea_isuse']!='1'){
+			showMessage(Language::get('flea_isuse_off_tips'),'index.php?act=dashboard&op=welcome');
+		}
+	}
+	public function indexOp(){
+		$this->flea_classOp();
+	}
+	public function goods_classOp(){
+		$this->flea_classOp();
+	}
+	/**
+	 * 分类管理
+	 */
+	public function flea_classOp(){
+		$lang	= Language::getLangContent();
+		$model_class = Model('flea_class');
+		/**
+		 * 删除,编辑
+		 */
+		if ($_POST['form_submit'] == 'ok'){
+			/**
+			 * 删除
+			 */
+			if ($_POST['submit_type'] == 'del'){
+				if (!empty($_POST['check_gc_id'])){
+					if (is_array($_POST['check_gc_id'])){
+						$del_array = $model_class->getChildClass($_POST['check_gc_id']);
+						if (is_array($del_array)){
+							foreach ($del_array as $k => $v){
+								$model_class->del($v['gc_id']);
+							}
+						}
+					}
+					showMessage($lang['goods_class_index_del_succ']);
+				}else {
+					showMessage($lang['goods_class_index_choose_del']);
+				}
+			}
+			/**
+			 * 编辑
+			 */
+			if ($_POST['submit_type'] == 'brach_edit'){
+				if (!empty($_POST['check_gc_id'])){
+					Tpl::output('id',implode(',',$_POST['check_gc_id']));
+					Tpl::showpage('flea_class.brach_edit');
+				}else {
+					showMessage($lang['goods_class_index_choose_edit']);
+				}
+			}
+			/**
+			 * 首页显示
+			 */
+			if($_POST['submit_type'] == 'index_show' or $_POST['submit_type'] == 'index_hide'){
+				if (!empty($_POST['check_gc_id'])){
+					if (is_array($_POST['check_gc_id'])){
+						$param	= array();
+						$param['gc_index_show']	= $_POST['submit_type'] == 'index_show'?'1':'0';
+						foreach ($_POST['check_gc_id'] as $k=>$v){
+							$param['gc_id']	= $v;
+							$model_class->update($param);
+						}
+					}
+					showMessage($lang['goods_class_index_in_homepage'].($_POST['submit_type'] == 'index_show'?$lang['goods_class_index_display']:$lang['goods_class_index_hide']).$lang['goods_class_index_succ']);
+				}else {
+					showMessage($lang['goods_class_index_choose_in_homepage'].($_POST['submit_type'] == 'index_show'?$lang['goods_class_index_display']:$lang['goods_class_index_hide']).$lang['goods_class_index_content']);
+				}
+			}
+		}
+		/**
+		 * 父ID
+		 */
+		$parent_id = $_GET['gc_parent_id']?$_GET['gc_parent_id']:0;
+		/**
+		 * 列表
+		 */
+		$tmp_list = $model_class->getTreeClassList(4);
+		if (is_array($tmp_list)){
+			foreach ($tmp_list as $k => $v){
+				if ($v['gc_parent_id'] == $parent_id){
+					/**
+					 * 判断是否有子类
+					 */
+					if ($tmp_list[$k+1]['deep'] > $v['deep']){
+						$v['have_child'] = 1;
+					}
+					$class_list[] = $v;
+				}
+			}
+		}
+		if ($_GET['ajax'] == '1'){
+			/**
+			 * 转码
+			 */
+			if (strtoupper(CHARSET) == 'GBK'){
+				$class_list = Language::getUTF8($class_list);
+			}
+			$output = json_encode($class_list);
+			print_r($output);
+			exit;
+		}else {
+			Tpl::output('class_list',$class_list);
+			Tpl::showpage('flea_class.index');
+		}
+	}
+	
+	/**
+	 * 保存批量修改分类
+	 */
+	public function brach_edit_saveOp(){
+		$lang	= Language::getLangContent();
+		if ($_POST['gc_show'] == '-1'){
+			showMessage($lang['goods_class_batch_edit_succ'],'index.php?act=flea_class&op=flea_class');
+		}
+		if ($_POST['form_submit'] == 'ok'){
+			$model_class = Model('flea_class');
+			
+			$array = explode(',',$_POST['id']);
+			if (is_array($array)){
+				foreach ($array as $k => $v){
+					$update_array = array();
+					$update_array['gc_id'] = $v;
+					$update_array['gc_show'] = $_POST['gc_show'];
+					
+					$model_class->update($update_array);
+				}
+				showMessage($lang['goods_class_batch_edit_succ']);
+			}else {
+				showMessage($lang['goods_class_batch_edit_wrong_content']);
+			}
+		}else {
+			showMessage($lang['goods_class_batch_edit_wrong_content']);
+		}
+	}
+	/**
+	 * 商品分类添加
+	 */
+	public function goods_class_addOp(){
+		$lang	= Language::getLangContent();
+		$model_class = Model('flea_class');
+		if ($_POST['form_submit'] == 'ok'){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["gc_name"], "require"=>"true", "message"=>$lang['goods_class_add_name_null']),
+				array("input"=>$_POST["gc_sort"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['goods_class_add_sort_int']),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				
+				$insert_array = array();
+				$insert_array['gc_name'] = $_POST['gc_name'];
+				$insert_array['gc_parent_id'] = $_POST['gc_parent_id'];
+				$insert_array['gc_sort'] = $_POST['gc_sort'];
+				$insert_array['gc_show'] = $_POST['gc_show'];
+				$insert_array['gc_index_show'] = $_POST['gc_index_show'];
+				
+				$result = $model_class->add($insert_array);
+				if ($result){
+					$url = array(
+						array(
+							'url'=>'index.php?act=flea_class&op=goods_class_add&gc_parent_id='.$_POST['gc_parent_id'],
+							'msg'=>$lang['goods_class_add_again'],
+						),
+						array(
+							'url'=>'index.php?act=flea_class&op=flea_class',
+							'msg'=>$lang['goods_class_add_back_to_list'],
+						)
+					);
+					showMessage($lang['goods_class_add_succ'],$url);
+				}else {
+					showMessage($lang['goods_class_add_fail']);
+				}
+			}
+		}
+		/**
+		 * 父类列表,只取到第三级
+		 */
+		$parent_list = $model_class->getTreeClassList(3);
+		if (is_array($parent_list)){
+			foreach ($parent_list as $k => $v){
+				$parent_list[$k]['gc_name'] = str_repeat("&nbsp;",$v['deep']*2).$v['gc_name'];
+			}
+		}
+		
+		Tpl::output('gc_parent_id',$_GET['gc_parent_id']);
+		Tpl::output('parent_list',$parent_list);
+		Tpl::showpage('flea_class.add');
+	}
+	
+	/**
+	 * 编辑
+	 */
+	public function goods_class_editOp(){
+		$lang	= Language::getLangContent();
+		$model_class = Model('flea_class');
+		
+		if ($_POST['form_submit'] == 'ok'){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["gc_name"], "require"=>"true", "message"=>$lang['goods_class_add_name_null']),
+				array("input"=>$_POST["gc_sort"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['goods_class_add_sort_int']),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				
+				$update_array = array();
+				$update_array['gc_id'] = $_POST['gc_id'];
+				$update_array['gc_name'] = $_POST['gc_name'];
+				$update_array['gc_parent_id'] = $_POST['gc_parent_id'];
+				$update_array['gc_sort'] = $_POST['gc_sort'];
+				$update_array['gc_show'] = $_POST['gc_show'];
+				$update_array['gc_index_show'] = $_POST['gc_index_show'];
+				
+				$result = $model_class->update($update_array);
+				if ($result){
+					$url = array(
+						array(
+							'url'=>'index.php?act=flea_class&op=goods_class_edit&gc_id='.$_POST['gc_id'],
+							'msg'=>$lang['goods_class_batch_edit_again'],
+						),
+						array(
+							'url'=>'index.php?act=flea_class&op=flea_class',
+							'msg'=>$lang['goods_class_add_back_to_list'],
+						)
+					);
+					showMessage($lang['goods_class_batch_edit_ok'],$url);
+				}else {
+					showMessage($lang['goods_class_batch_edit_fail']);
+				}
+			}
+		}
+				
+		$class_array = $model_class->getOneGoodsClass($_GET['gc_id']);
+		if (empty($class_array)){
+			showMessage($lang['goods_class_batch_edit_paramerror']);
+		}
+
+		/**
+		 * 父类列表,只取到第三级
+		 */
+		$parent_list = $model_class->getTreeClassList(3);
+		if (is_array($parent_list)){
+			$unset_sign = false;
+			foreach ($parent_list as $k => $v){
+				if ($v['gc_id'] == $class_array['gc_id']){
+					$deep = $v['deep'];
+					$unset_sign = true;
+				}
+				if ($unset_sign == true){
+					if ($v['deep'] == $deep && $v['gc_id'] != $class_array['gc_id']){
+						$unset_sign = false;
+					}
+					if ($v['deep'] > $deep || $v['gc_id'] == $class_array['gc_id']){
+						unset($parent_list[$k]);
+					}
+				}else {
+					$parent_list[$k]['gc_name'] = str_repeat("&nbsp;",$v['deep']*2).$v['gc_name'];
+				}
+			}
+		}
+		
+		Tpl::output('parent_list',$parent_list);
+		Tpl::output('class_array',$class_array);
+		Tpl::showpage('flea_class.edit');
+	}
+	
+	/**
+	 * 分类导入
+	 */
+	public function goods_class_importOp(){
+		$lang	= Language::getLangContent();
+		/**
+		 * 实例化模型
+		 */
+		$model_class = Model('flea_class');
+		/**
+		 * 导入
+		 */
+		if ($_POST['form_submit'] == 'ok'){
+			/**
+			 * 得到导入文件后缀名
+			 */
+			$file_type = end(explode('.',$_FILES['csv']['name']));
+			if (!empty($_FILES['csv']) && !empty($_FILES['csv']['name']) && $file_type == 'csv'){
+				$fp = @fopen($_FILES['csv']['tmp_name'],'rb');
+				/**
+				 * 父ID
+				 */
+				$parent_id_1 = 0;
+				
+				while (!feof($fp)) {
+					$data = fgets($fp, 4096);
+					switch (strtoupper($_POST['charset'])){
+						case 'UTF-8':
+							if (strtoupper(CHARSET) !== 'UTF-8'){
+								$data = iconv('UTF-8',strtoupper(CHARSET),$data);
+							}
+							break;
+						case 'GBK':
+							if (strtoupper(CHARSET) !== 'GBK'){
+								$data = iconv('GBK',strtoupper(CHARSET),$data);
+							}
+							break;
+					}
+					
+					if (!empty($data)){
+						$data	= str_replace('"','',$data);
+						/**
+						 * 逗号去除
+						 */
+						$tmp_array = array();
+						$tmp_array = explode(',',$data);
+						if($tmp_array[0] == 'sort_order')continue;
+						/**
+						 * 第一位是序号,后面的是内容,最后一位名称
+						 */
+						$tmp_deep = 'parent_id_'.(count($tmp_array)-1);
+						
+						$insert_array = array();
+						$insert_array['gc_sort'] = $tmp_array[0];
+						$insert_array['gc_parent_id'] = $$tmp_deep;
+						$insert_array['gc_name'] = $tmp_array[count($tmp_array)-1];
+						$gc_id = $model_class->add($insert_array);
+						/**
+						 * 赋值这个深度父ID
+						 */
+						$tmp = 'parent_id_'.count($tmp_array);
+						$$tmp = $gc_id;
+					}
+				}
+				/**
+				 * 重新生成缓存
+				 */
+				showMessage($lang['goods_class_import_succ'],'index.php?act=flea_class&op=flea_class');
+			}else {
+				showMessage($lang['goods_class_import_csv_null']);
+			}
+		}
+		Tpl::showpage('flea_class.import');
+	}
+	
+	/**
+	 * 分类导出
+	 */
+	public function goods_class_exportOp(){
+		/**
+		 * 导出
+		 */
+		if ($_POST['form_submit'] == 'ok'){
+			/**
+			 * 实例化模型
+			 */
+			$model_class = Model('flea_class');
+			/**
+			 * 分类信息
+			 */
+			$class_list = $model_class->getTreeClassList();
+			
+			@header("Content-type: application/unknown");
+        	@header("Content-Disposition: attachment; filename=flea_class.csv");
+			if (is_array($class_list)){
+				foreach ($class_list as $k => $v){
+					$tmp = array();
+					/**
+					 * 序号
+					 */
+					$tmp['gc_sort'] = $v['gc_sort'];
+					/**
+					 * 深度
+					 */
+					for ($i=1; $i<=($v['deep']-1); $i++){
+						$tmp[] = '';
+					}
+					/**
+					 * 分类名称
+					 */
+					$tmp['gc_name'] = $v['gc_name'];
+					/**
+					 * 转码 utf-gbk
+					 */
+					if (strtoupper(CHARSET) == 'UTF-8'){
+						switch ($_POST['if_convert']){
+							case '1':
+								$tmp_line = iconv('UTF-8','GB2312//IGNORE',join(',',$tmp));
+								break;
+							case '0':
+								$tmp_line = join(',',$tmp);
+								break;
+						}
+					}else {
+						$tmp_line = join(',',$tmp);
+					}
+					$tmp_line = str_replace("\r\n",'',$tmp_line);
+					echo $tmp_line."\r\n";
+				}
+			}
+			exit;
+		}
+		Tpl::showpage('flea_class.export');
+	}
+	
+	/**
+	 * 删除分类
+	 */
+	public function goods_class_delOp(){
+		$lang	= Language::getLangContent();
+		$model_class = Model('flea_class');
+		if (intval($_GET['gc_id']) > 0){
+			/**
+			 * 删除分类
+			 */
+			$model_class->del($_GET['gc_id']);
+			showMessage($lang['goods_class_index_del_succ'],'index.php?act=flea_class&op=flea_class');
+		}else {
+			showMessage($lang['goods_class_index_choose_del'],'index.php?act=flea_class&op=flea_class');
+		}
+	}
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			/**
+			 * 验证是否有重复的名称
+			 */
+			case 'goods_class_name':
+				$model_class = Model('flea_class');
+				$class_array = $model_class->getOneGoodsClass($_GET['id']);
+				
+				$condition['gc_name'] = $_GET['value'];
+				$condition['gc_parent_id'] = $class_array['gc_parent_id'];
+				$condition['no_gc_id'] = $_GET['id'];
+				$class_list = $model_class->getClassList($condition);
+				if (empty($class_list)){
+					$update_array = array();
+					$update_array['gc_id'] = $_GET['id'];
+					$update_array['gc_name'] = $_GET['value'];
+					$model_class->update($update_array);
+					echo 'true';exit;
+				}else {
+					echo 'false';exit;
+				}
+				break;
+			/**
+			 * 分类 排序 显示 设置
+			 */
+			case 'goods_class_sort':
+			case 'goods_class_show':
+			case 'goods_class_index_show':
+				$model_class = Model('flea_class');
+				$update_array = array();
+				$update_array['gc_id'] = $_GET['id'];
+				$update_array[$_GET['column']] = $_GET['value'];
+				$model_class->update($update_array);
+				echo 'true';exit;
+				break;
+			/**
+			 * 添加、修改操作中 检测类别名称是否有重复
+			 */
+			case 'check_class_name':
+				$model_class = Model('flea_class');
+				$condition['gc_name'] = $_GET['gc_name'];
+				$condition['gc_parent_id'] = $_GET['gc_parent_id'];
+				$condition['no_gc_id'] = $_GET['gc_id'];
+				$class_list = $model_class->getClassList($condition);
+				if (empty($class_list)){
+					echo 'true';exit;
+				}else {
+					echo 'false';exit;
+				}
+				break;
+		}
+	}
+	
+}

+ 62 - 0
admin/control/flea_class_index.php

@@ -0,0 +1,62 @@
+<?php
+/**
+
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ */
+defined('InShopNC') or exit('Access Invalid!');
+class flea_class_indexControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('setting,flea_class');
+		if($GLOBALS['setting_config']['flea_isuse']!='1'){
+			showMessage(Language::get('flea_isuse_off_tips'),'index.php?act=dashboard&op=welcome');
+		}
+	}
+	/**
+	 * 设置
+	 */
+	public function flea_class_indexOp(){
+		/**
+		 * 加载语言包
+		 */
+		$lang	= Language::getLangContent();
+		/**
+		 * 实例化商品分类模型
+		 */
+		$model_class		= Model('flea_class');
+		$goods_class		= $model_class->getTreeClassList(1);
+		Tpl::output('goods_class',$goods_class);
+		/**
+		 * 获取设置信息
+		 */
+		$fc_index = $model_class->getFleaIndexClass(array());
+		if(is_array($fc_index)&&!empty($fc_index)){
+			foreach ($fc_index as $value){
+				Tpl::output($value['fc_index_code'],$value);
+			}
+		}
+		
+		if($_POST['form_submit']=='ok'){
+			$a = $model_class->setFleaIndexClass(array('fc_index_code'=>'shuma','fc_index_id1'=>$_POST['shuma_cid1'],'fc_index_id2'=>$_POST['shuma_cid2'],'fc_index_id3'=>$_POST['shuma_cid3'],'fc_index_id4'=>$_POST['shuma_cid4']));
+			$b = $model_class->setFleaIndexClass(array('fc_index_code'=>'zhuangban','fc_index_id1'=>$_POST['zhuangban_cid1'],'fc_index_id2'=>$_POST['zhuangban_cid2'],'fc_index_id3'=>$_POST['zhuangban_cid3'],'fc_index_id4'=>$_POST['zhuangban_cid4']));
+			$c = $model_class->setFleaIndexClass(array('fc_index_code'=>'jujia','fc_index_id1'=>$_POST['jujia_cid1'],'fc_index_id2'=>$_POST['jujia_cid2'],'fc_index_id3'=>$_POST['jujia_cid3'],'fc_index_id4'=>$_POST['jujia_cid4']));
+			$d = $model_class->setFleaIndexClass(array('fc_index_code'=>'xingqu','fc_index_id1'=>$_POST['xingqu_cid1'],'fc_index_id2'=>$_POST['xingqu_cid2'],'fc_index_id3'=>$_POST['xingqu_cid3'],'fc_index_id4'=>$_POST['xingqu_cid4']));
+			$e = $model_class->setFleaIndexClass(array('fc_index_code'=>'muying','fc_index_id1'=>$_POST['muying_cid1'],'fc_index_id2'=>$_POST['muying_cid2'],'fc_index_id3'=>$_POST['muying_cid3'],'fc_index_id4'=>$_POST['muying_cid4']));
+			if($a && $b && $c && $d && e){
+				$a = $model_class->setFleaIndexClass(array('fc_index_code'=>'shuma','fc_index_name1'=>$_POST['shuma_cname1'],'fc_index_name2'=>$_POST['shuma_cname2'],'fc_index_name3'=>$_POST['shuma_cname3'],'fc_index_name4'=>$_POST['shuma_cname4']));
+				$b = $model_class->setFleaIndexClass(array('fc_index_code'=>'zhuangban','fc_index_name1'=>$_POST['zhuangban_cname1'],'fc_index_name2'=>$_POST['zhuangban_cname2'],'fc_index_name3'=>$_POST['zhuangban_cname3'],'fc_index_name4'=>$_POST['zhuangban_cname4']));
+				$c = $model_class->setFleaIndexClass(array('fc_index_code'=>'jujia','fc_index_name1'=>$_POST['jujia_cname1'],'fc_index_name2'=>$_POST['jujia_cname2'],'fc_index_name3'=>$_POST['jujia_cname3'],'fc_index_name4'=>$_POST['jujia_cname4']));
+				$d = $model_class->setFleaIndexClass(array('fc_index_code'=>'xingqu','fc_index_name1'=>$_POST['xingqu_cname1'],'fc_index_name2'=>$_POST['xingqu_cname2'],'fc_index_name3'=>$_POST['xingqu_cname3'],'fc_index_name4'=>$_POST['xingqu_cname4']));
+				$e = $model_class->setFleaIndexClass(array('fc_index_code'=>'muying','fc_index_name1'=>$_POST['muying_cname1'],'fc_index_name2'=>$_POST['muying_cname2'],'fc_index_name3'=>$_POST['muying_cname3'],'fc_index_name4'=>$_POST['muying_cname4']));
+				if($a && $b && $c && $d && e){
+					showMessage(Language::get('flea_class_setting_ok'));
+				}
+			}else{
+				showMessage(Language::get('flea_class_setting_error'));
+			}
+		}
+		Tpl::showpage('flea_class_index');
+	}
+}

+ 166 - 0
admin/control/flea_index.php

@@ -0,0 +1,166 @@
+<?php
+/**
+
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ */
+defined('InShopNC') or exit('Access Invalid!');
+class flea_indexControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('setting,flea_index_setting');
+		if($GLOBALS['setting_config']['flea_isuse']!='1'){
+			showMessage(Language::get('flea_isuse_off_tips'),'index.php?act=dashboard&op=welcome');
+		}
+	}
+	function flea_indexOp(){
+		/**
+		 * 读取语言包
+		 */
+		$lang	= Language::getLangContent();
+		
+		/**
+		 * 实例化模型
+		 */
+		$model_setting = Model('setting');
+		/**
+		 * 保存信息
+		 */
+		if ($_POST['form_submit'] == 'ok'){
+			$update_array = array();
+			$update_array['flea_site_name'] = trim($_POST['flea_site_name']);
+			$update_array['flea_site_title'] = trim($_POST['flea_site_title']);
+			$update_array['flea_site_description'] = trim($_POST['flea_site_description']);
+			$update_array['flea_site_keywords'] = trim($_POST['flea_site_keywords']);
+			$update_array['flea_hot_search'] = str_replace(',',',',trim($_POST['flea_hot_search']));
+
+			$result = $model_setting->updateSetting($update_array);
+			if ($result === true){
+				showMessage($lang['nc_common_save_succ']);
+			}else {
+				showMessage($lang['nc_common_save_fail']);
+			}
+		}
+		/**
+		 * 读取设置内容 $list_setting
+		 */
+		$list_setting = $model_setting->getListSetting();
+		/**
+		 * 模板输出
+		 */
+		Tpl::output('list_setting',$list_setting);
+		Tpl::showpage('setting.flea_index');	
+	}
+	/**
+	 * 闲置首页广告
+	 */
+	public function adv_manageOp(){
+		$model_setting = Model('setting');
+		if (chksubmit()){
+			$input = array();
+			//上传图片
+			$upload = new UploadFile();
+			$upload->set('default_dir',ATTACH_PATH);
+			$upload->set('thumb_ext',	'');
+			$upload->set('file_name','flea_1.jpg');
+			$upload->set('ifremove',false);
+			if (!empty($_FILES['adv_pic1']['name'])){
+				$result = $upload->upfile('adv_pic1');
+				if (!$result){
+					showMessage($upload->error,'','','error');
+				}else{
+					$input[1]['pic'] = $upload->file_name;
+					$input[1]['url'] = $_POST['adv_url1'];
+				}
+			}elseif ($_POST['old_adv_pic1'] != ''){
+				$input[1]['pic'] = $_POST['old_adv_pic1'];
+				$input[1]['url'] = $_POST['adv_url1'];
+			}
+			$upload->set('default_dir',ATTACH_PATH);
+			$upload->set('thumb_ext',	'');
+			$upload->set('file_name','flea_2.jpg');
+			$upload->set('ifremove',false);
+			if (!empty($_FILES['adv_pic2']['name'])){
+				$result = $upload->upfile('adv_pic2');
+				if (!$result){
+					showMessage($upload->error,'','','error');
+				}else{
+					$input[2]['pic'] = $upload->file_name;
+					$input[2]['url'] = $_POST['adv_url2'];
+				}
+			}elseif ($_POST['old_adv_pic2'] != ''){
+				$input[2]['pic'] = $_POST['old_adv_pic2'];
+				$input[2]['url'] = $_POST['adv_url2'];
+			}
+			$upload->set('default_dir',ATTACH_PATH);
+			$upload->set('thumb_ext', '');
+			$upload->set('file_name', 'flea_3.jpg');
+			$upload->set('ifremove', false);
+			if (!empty($_FILES['adv_pic3']['name'])){
+				$result = $upload->upfile('adv_pic3');
+				if (!$result){
+					showMessage($upload->error,'','','error');
+				}else{
+					$input[3]['pic'] = $upload->file_name;
+					$input[3]['url'] = $_POST['adv_url3'];
+				}
+			}elseif ($_POST['old_adv_pic3'] != ''){
+				$input[3]['pic'] = $_POST['old_adv_pic3'];
+				$input[3]['url'] = $_POST['adv_url3'];
+			}
+			$upload->set('default_dir',ATTACH_PATH);
+			$upload->set('thumb_ext',	'');
+			$upload->set('file_name','flea_4.jpg');
+			$upload->set('ifremove',false);
+			if (!empty($_FILES['adv_pic4']['name'])){
+				$result = $upload->upfile('adv_pic4');
+				if (!$result){
+					showMessage($upload->error,'','','error');
+				}else{
+					$input[4]['pic'] = $upload->file_name;
+					$input[4]['url'] = $_POST['adv_url4'];
+				}
+			}elseif ($_POST['old_adv_pic4'] != ''){
+				$input[4]['pic'] = $_POST['old_adv_pic4'];
+				$input[4]['url'] = $_POST['adv_url4'];
+			}
+			
+			$upload->set('default_dir',ATTACH_PATH);
+			$upload->set('thumb_ext',	'');
+			$upload->set('file_name','flea_5.jpg');
+			$upload->set('ifremove',false);
+			if (!empty($_FILES['adv_pic5']['name'])){
+				$result = $upload->upfile('adv_pic5');
+				if (!$result){
+					showMessage($upload->error,'','','error');
+				}else{
+					$input[5]['pic'] = $upload->file_name;
+					$input[5]['url'] = $_POST['adv_url5'];
+				}
+			}elseif ($_POST['old_adv_pic4'] != ''){
+				$input[5]['pic'] = $_POST['old_adv_pic5'];
+				$input[5]['url'] = $_POST['adv_url5'];
+			}
+			$update_array = array();
+			if (count($input) > 0){
+				$update_array['flea_loginpic'] = serialize($input);
+			}
+			$result = $model_setting->updateSetting($update_array);
+			if ($result === true){
+				$this->log(L('nc_edit,loginSettings'),1);
+				showMessage(L('nc_common_save_succ'));
+			}else {
+				$this->log(L('nc_edit,loginSettings'),0);
+				showMessage(L('nc_common_save_fail'));
+			}
+		}
+		$list_setting = $model_setting->getListSetting();
+		if ($list_setting['flea_loginpic'] != ''){
+			$list = unserialize($list_setting['flea_loginpic']);
+		}
+		Tpl::output('list', $list);
+		Tpl::showpage('flea_setting.adv');
+	}
+	
+}

+ 293 - 0
admin/control/flea_region.php

@@ -0,0 +1,293 @@
+<?php
+/**
+
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ */
+defined('InShopNC') or exit('Access Invalid!');
+class flea_regionControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('region,flea_index');
+		if ($GLOBALS['setting_config']['flea_isuse'] != 1 ){
+			showMessage(Language::get('flea_index_unable'),'index.php?act=dashboard&op=welcome');
+			// showMessage(Language::get('admin_ztc_unavailable'),'index.php?act=dashboard&op=welcome');
+		}
+	}
+	/**
+	 * 地区列表
+	 *
+	 * @param 
+	 * @return 
+	 */
+	public function flea_regionOp(){
+		require_once(BASE_DATA_PATH.DS.'cache'.DS.'flea_cache.php');
+		$lang	= Language::getLangContent();
+		/**
+		 * 实例化模型
+		 */
+		$model_area = Model('flea_area');
+		/**
+		 * 增加 修改 地区信息
+		 */
+		if ($_POST['form_submit'] == 'ok'){
+			/**
+			 * 是否生成缓存的标识
+			 */
+			$new_cache = true;
+			/**
+			 * 新增地区
+			 */
+			if (is_array($_POST['new_area_name'])){
+				foreach ($_POST['new_area_name'] as $k => $v){
+					if (!empty($v)){
+						$insert_array = array();
+						$insert_array['flea_area_name'] = $v;
+						$insert_array['flea_area_parent_id'] = $_POST['flea_area_parent_id'];
+						$insert_array['flea_area_sort'] = intval($_POST['new_area_sort'][$k]);
+						$insert_array['flea_area_deep'] = $_POST['child_area_deep'];
+						$model_area->add($insert_array);
+						$new_cache = true;
+					}
+				}
+			}
+			/**
+			 * 修改地区
+			 */
+			if (is_array($_POST['area_name'])){
+				foreach ($_POST['area_name'] as $k => $v){
+					if (!empty($v)){
+						$insert_array = array();
+						$insert_array['flea_area_id'] = $k;
+						$insert_array['flea_area_name'] = $v;
+						$insert_array['flea_area_sort'] = intval($_POST['area_sort'][$k]);
+						$model_area->update($insert_array);
+						$new_cache = true;
+					}
+				}
+			}
+			/**
+			 * 删除地区
+			 */
+			if (!empty($_POST['hidden_del_id'])){
+				$_POST['hidden_del_id'] = trim($_POST['hidden_del_id'],'|');
+				$del_id = explode('|',$_POST['hidden_del_id']);
+				$model_area->del($del_id,$_POST['child_area_deep']);
+				$new_cache = true;
+			}
+
+			/**
+			 * 更新缓存
+			 */
+			if ($new_cache === true){
+				flea_Cache::getCache('flea_area',array('deep'=>$_POST['child_area_deep'],'new'=>'1'));
+				
+			}
+
+			showMessage($lang['region_index_modify_succ']);
+		}
+		/**
+		 * 导航地区内容
+		 */
+		/**
+		 * 一级
+		 */
+		
+		$province_list = flea_Cache::getCache('flea_area',array('deep'=>'1'));
+		$child_area_deep = 1;
+		/**
+		 * 二级
+		 */
+		if(!empty($_GET['province'])){
+			$cache_data = flea_Cache::getCache('flea_area',array('deep'=>'2'));
+			if (is_array($cache_data)){
+				$city_list = array();
+				foreach ($cache_data as $k => $v){
+					if ($v['flea_area_parent_id'] == intval($_GET['province'])){
+						$city_list[] = $v;
+					}
+				}
+			}
+			unset($cache_data);
+			$child_area_deep = 2;
+			/**
+			 * 三级
+			 */
+			if(!empty($_GET['city'])){
+				$cache_data = flea_Cache::getCache('flea_area',array('deep'=>'3'));
+				if (is_array($cache_data)){
+					$district_list = array();
+					foreach ($cache_data as $k => $v){
+						if ($v['flea_area_parent_id'] == intval($_GET['city'])){
+							$district_list[] = $v;
+						}
+					}
+				}
+				unset($cache_data);
+				$child_area_deep = 3;
+				/**
+				 * 四级
+				 */
+				if(!empty($_GET['district'])){
+					$child_area_deep = 4;
+				}
+			}
+		}
+		/**
+		 * 地区列表
+		 */
+		
+		$condition['flea_area_parent_id'] = $_GET['flea_area_parent_id']?$_GET['flea_area_parent_id']:'0';
+		$area_list = $model_area->getListArea($condition,'flea_area_sort asc');
+		Tpl::output('province',$_GET['province']?$_GET['province']:'');
+		Tpl::output('city',$_GET['city']);
+		Tpl::output('district',$_GET['district']);
+
+		Tpl::output('province_list',$province_list);
+		Tpl::output('city_list',$city_list);
+		Tpl::output('district_list',$district_list);
+		Tpl::output('flea_area_parent_id',$_GET['flea_area_parent_id']?$_GET['flea_area_parent_id']:'0');
+		Tpl::output('area_list',$area_list);
+		Tpl::output('child_area_deep',$child_area_deep);
+		Tpl::showpage('flea_region.index');
+	}
+
+	/**
+	 * 导入地区
+	 *
+	 * @param 
+	 * @return 
+	 */
+	public function flea_region_importOp(){
+		require_once(BASE_DATA_PATH.DS.'cache'.DS.'flea_cache.php');
+		$lang	= Language::getLangContent();
+		/**
+		 * 实例化模型
+		 */
+		$model_area = Model('flea_area');
+		/**
+		 * 导入
+		 */
+		if ($_POST['form_submit'] == 'ok'){
+			if (!empty($_FILES['csv'])){
+				$fp = @fopen($_FILES['csv']['tmp_name'],'rb');
+				/**
+				 * 父ID
+				 */
+				$area_parent_id_1 = 0;
+
+				while (!feof($fp)) {
+					$data = fgets($fp, 4096);
+					switch (strtoupper($_POST['charset'])){
+						case 'UTF-8':
+							if (strtoupper(CHARSET) !== 'UTF-8'){
+								$data = iconv('UTF-8',strtoupper(CHARSET),$data);
+							}
+							break;
+						case 'GBK':
+							if (strtoupper(CHARSET) !== 'GBK'){
+								$data = iconv('GBK',strtoupper(CHARSET),$data);
+							}
+							break;
+					}
+					if (!empty($data)){
+						$data	= str_replace('"','',$data);
+						/**
+						 * 逗号去除
+						 */
+						$tmp_array = array();
+						$tmp_array = explode(',',$data);
+						/**
+						 * 第一位是序号,后面的是内容,最后一位名称
+						 */
+						$tmp_deep = 'flea_area_parent_id_'.(count($tmp_array)-1);
+						$insert_array = array();
+						$insert_array['flea_area_sort'] = $tmp_array[0];
+						$insert_array['flea_area_parent_id'] = $$tmp_deep;
+						$insert_array['flea_area_name'] = $tmp_array[count($tmp_array)-1];
+						$insert_array['flea_area_deep'] = count($tmp_array)-1;
+						$area_id = $model_area->add($insert_array);
+						/**
+						 * 赋值这个深度父ID
+						 */
+						$tmp = 'flea_area_parent_id_'.count($tmp_array);
+						$$tmp = $area_id;
+					}
+				}
+				/**
+				 * 重新生成缓存
+				 */
+				for ($i=1;$i<=4;$i++){
+					$tmp = 'flea_area_parent_id_'.$i;
+					if (intval($$tmp) >= 0){
+						flea_Cache::getCache('flea_area',array('deep'=>intval($i),'new'=>'1'));
+					}
+				}
+				showMessage($lang['region_import_succ'],'index.php?act=flea_region&op=flea_region');
+			}else {
+				showMessage($lang['region_import_csv_null']);
+			}
+		}
+		Tpl::showpage('flea_region.import');
+	}
+	/**
+	 * 导入默认地区
+	 *
+	 * @param 
+	 * @return 
+	 */
+	public function flea_import_default_areaOp() {
+		$lang	= Language::getLangContent();
+		
+		$file = BASE_DATA_PATH.'/resource/examples/flea_area.sql';
+		if (!is_file($file)){
+			showMessage($lang['region_import_csv_null']);
+		}
+
+		$handle = @fopen($file, "r");
+		$tmp_sql = '';
+		if ($handle) {
+			
+			Db::query("TRUNCATE TABLE `".DBPRE."flea_area`");
+		    while (!feof($handle)) {
+			
+		        $buffer = fgets($handle);
+		        if (trim($buffer) != ''){
+		        	$tmp_sql .= $buffer;
+			        if (substr(rtrim($buffer),-1) == ';'){
+			        	if (preg_match('/^(INSERT)\s+(INTO)\s+/i', ltrim($tmp_sql)) && substr(rtrim($buffer),-2) == ');'){
+			        		//标准的SQL语句,将被执行
+			        	}else{
+			        		//不能组成标准的SQL语句,继续向下一行取内容,直到组成合法的SQL为止
+			        		continue;
+			        	}
+			        	if (!empty($tmp_sql)){
+									if (strtoupper(CHARSET) == 'GBK'){
+										$tmp_sql = iconv('UTF-8',strtoupper(CHARSET),$tmp_sql);
+									}
+			        		$tmp_sql = str_replace("`33hao_flea_area`","`".DBPRE."flea_area`",$tmp_sql);
+			        		Db::query($tmp_sql);
+			        		unset($tmp_sql);
+			        	}
+			        }
+		        }
+		    }
+	    	@fclose($handle);
+			/**
+			 * 重新生成缓存
+			 */
+			require_once(BASE_DATA_PATH.DS.'cache'.DS.'flea_cache.php');
+			for ($i=1;$i<=4;$i++){
+				$tmp = 'flea_area_parent_id_'.$i;
+				if (intval($$tmp) >= 0){
+					flea_Cache::getCache('flea_area',array('deep'=>intval($i),'new'=>'1'));
+				}
+			}	    	
+	    	
+			showMessage($lang['region_import_succ'],'index.php?act=flea_region&op=flea_region');
+		}else {
+			showMessage($lang['region_import_csv_null']);
+		}
+	}
+}

+ 234 - 0
admin/control/goods.php

@@ -0,0 +1,234 @@
+<?php
+/**
+ * 商品栏目管理
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class goodsControl extends SystemControl{
+    const EXPORT_SIZE = 5000;
+    public function __construct() {
+        parent::__construct ();
+        Language::read('goods');
+    }
+
+    /**
+     * 商品设置
+     */
+    public function goods_setOp() {
+		$model_setting = Model('setting');
+		if (chksubmit()){
+			$update_array = array();
+			$update_array['goods_verify'] = $_POST['goods_verify'];
+			$result = $model_setting->updateSetting($update_array);
+			if ($result === true){
+				$this->log(L('nc_edit,nc_goods_set'),1);
+				showMessage(L('nc_common_save_succ'));
+			}else {
+				$this->log(L('nc_edit,nc_goods_set'),0);
+				showMessage(L('nc_common_save_fail'));
+			}
+		}
+		$list_setting = $model_setting->getListSetting();
+		Tpl::output('list_setting',$list_setting);
+        Tpl::showpage('goods.setting');
+    }
+    /**
+     * 商品管理
+     */
+    public function goodsOp() {
+        $model_goods = Model ( 'goods' );
+        /**
+         * 处理商品分类
+         */
+        $choose_gcid = ($t = intval($_REQUEST['choose_gcid']))>0?$t:0;
+        $gccache_arr = Model('goods_class')->getGoodsclassCache($choose_gcid,3);
+	    Tpl::output('gc_json',json_encode($gccache_arr['showclass']));
+		Tpl::output('gc_choose_json',json_encode($gccache_arr['choose_gcid']));
+
+        /**
+         * 查询条件
+         */
+        $where = array();
+        if ($_GET['search_goods_name'] != '') {
+            $where['goods_name'] = array('like', '%' . trim($_GET['search_goods_name']) . '%');
+        }
+        if (intval($_GET['search_commonid']) > 0) {
+            $where['goods_commonid'] = intval($_GET['search_commonid']);
+        }
+        if ($_GET['search_store_name'] != '') {
+            $where['store_name'] = array('like', '%' . trim($_GET['search_store_name']) . '%');
+        }
+        if (intval($_GET['b_id']) > 0) {
+            $where['brand_id'] = intval($_GET['b_id']);
+        }
+        if ($choose_gcid > 0){
+		    $where['gc_id_'.($gccache_arr['showclass'][$choose_gcid]['depth'])] = $choose_gcid;
+		}
+        if (in_array($_GET['search_state'], array('0','1','10'))) {
+            $where['goods_state'] = $_GET['search_state'];
+        }
+        if (in_array($_GET['search_verify'], array('0','1','10'))) {
+            $where['goods_verify'] = $_GET['search_verify'];
+        }
+
+        switch ($_GET['type']) {
+            // 禁售
+            case 'lockup':
+                $goods_list = $model_goods->getGoodsCommonLockUpList($where);
+                break;
+            // 等待审核
+            case 'waitverify':
+                $goods_list = $model_goods->getGoodsCommonWaitVerifyList($where, '*', 10, 'goods_verify desc, goods_commonid desc');
+                break;
+            // 全部商品
+            default:
+                $goods_list = $model_goods->getGoodsCommonList($where);
+                break;
+        }
+
+        Tpl::output('goods_list', $goods_list);
+        Tpl::output('page', $model_goods->showpage(2));
+
+        $storage_array = $model_goods->calculateStorage($goods_list);
+        Tpl::output('storage_array', $storage_array);
+
+        // 品牌
+        $brand_list = Model('brand')->getBrandPassedList(array());
+
+        Tpl::output('search', $_GET);
+        Tpl::output('brand_list', $brand_list);
+
+        Tpl::output('state', array('1' => '出售中', '0' => '仓库中', '10' => '违规下架'));
+
+        Tpl::output('verify', array('1' => '通过', '0' => '未通过', '10' => '等待审核'));
+
+        Tpl::output('ownShopIds', array_fill_keys(Model('store')->getOwnShopIds(), true));
+
+        switch ($_GET['type']) {
+            // 禁售
+            case 'lockup':
+                Tpl::showpage('goods.close');
+                break;
+            // 等待审核
+            case 'waitverify':
+                Tpl::showpage('goods.verify');
+                break;
+            // 全部商品
+            default:
+                Tpl::showpage('goods.index');
+                break;
+        }
+    }
+
+    /**
+     * 违规下架
+     */
+    public function goods_lockupOp() {
+        if (chksubmit()) {
+            $commonids = $_POST['commonids'];
+            $commonid_array = explode(',', $commonids);
+            foreach ($commonid_array as $value) {
+                if (!is_numeric($value)) {
+                    showDialog(L('nc_common_op_fail'), 'reload');
+                }
+            }
+            $update = array();
+            $update['goods_stateremark'] = trim($_POST['close_reason']);
+
+            $where = array();
+            $where['goods_commonid'] = array('in', $commonid_array);
+
+            Model('goods')->editProducesLockUp($update, $where);
+            showDialog(L('nc_common_op_succ'), 'reload', 'succ');
+        }
+        Tpl::output('commonids', $_GET['id']);
+        Tpl::showpage('goods.close_remark', 'null_layout');
+    }
+
+    /**
+     * 删除商品
+     */
+    public function goods_delOp() {
+        $common_id = intval($_GET['goods_id']);
+        if ($common_id <= 0) {
+            showDialog(L('nc_common_op_fail'), 'reload');
+        }
+        Model('goods')->delGoodsAll(array('goods_commonid' => $common_id));
+        showDialog(L('nc_common_op_succ'), 'reload', 'succ');
+    }
+
+    /**
+     * 审核商品
+     */
+    public function goods_verifyOp(){
+        if (chksubmit()) {
+            $commonids = $_POST['commonids'];
+            $commonid_array = explode(',', $commonids);
+            foreach ($commonid_array as $value) {
+                if (!is_numeric($value)) {
+                    showDialog(L('nc_common_op_fail'), 'reload');
+                }
+            }
+            $update2 = array();
+            $update2['goods_verify'] = intval($_POST['verify_state']);
+
+            $update1 = array();
+            $update1['goods_verifyremark'] = trim($_POST['verify_reason']);
+            $update1 = array_merge($update1, $update2);
+            $where = array();
+            $where['goods_commonid'] = array('in', $commonid_array);
+
+            $model_goods = Model('goods');
+            if (intval($_POST['verify_state']) == 0) {
+                $model_goods->editProducesVerifyFail($where, $update1, $update2);
+            } else {
+                $model_goods->editProduces($where, $update1, $update2);
+            }
+            showDialog(L('nc_common_op_succ'), 'reload', 'succ');
+        }
+        Tpl::output('commonids', $_GET['id']);
+        Tpl::showpage('goods.verify_remark', 'null_layout');
+    }
+
+    /**
+     * ajax获取商品列表
+     */
+    public function get_goods_list_ajaxOp() {
+        $commonid = $_GET['commonid'];
+        if ($commonid <= 0) {
+            echo 'false';exit();
+        }
+        $model_goods = Model('goods');
+        $goodscommon_list = $model_goods->getGoodeCommonInfoByID($commonid, 'spec_name');
+        if (empty($goodscommon_list)) {
+            echo 'false';exit();
+        }
+        $goods_list = $model_goods->getGoodsList(array('goods_commonid' => $commonid), 'goods_id,goods_spec,store_id,goods_price,goods_serial,goods_storage,goods_image');
+        if (empty($goods_list)) {
+            echo 'false';exit();
+        }
+
+        $spec_name = array_values((array)unserialize($goodscommon_list['spec_name']));
+        foreach ($goods_list as $key => $val) {
+            $goods_spec = array_values((array)unserialize($val['goods_spec']));
+            $spec_array = array();
+            foreach ($goods_spec as $k => $v) {
+                $spec_array[] = '<div class="goods_spec">' . $spec_name[$k] . L('nc_colon') . '<em title="' . $v . '">' . $v .'</em>' . '</div>';
+            }
+            $goods_list[$key]['goods_image'] = thumb($val, '60');
+            $goods_list[$key]['goods_spec'] = implode('', $spec_array);
+            $goods_list[$key]['url'] = urlShop('goods', 'index', array('goods_id' => $val['goods_id']));
+        }
+
+        /**
+         * 转码
+         */
+        if (strtoupper(CHARSET) == 'GBK') {
+            Language::getUTF8($goods_list);
+        }
+        echo json_encode($goods_list);
+    }
+
+}

+ 180 - 0
admin/control/goods_album.php

@@ -0,0 +1,180 @@
+<?php
+/**
+ * 相册管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+
+class goods_albumControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('goods_album');
+	}
+	/**
+	 * 相册列表
+	 */
+	public function listOp(){
+		$model = Model();
+		if (chksubmit()){
+			if (is_array($_POST['aclass_id'])){
+				foreach ($_POST['aclass_id'] as $k=>$v) {
+					if (!is_numeric($v)){
+						unset($_POST['aclass_id'][$k]);
+					}
+				}
+			}
+			if (!empty($_POST['aclass_id'])){
+				$pic = $model->table('album_pic')->field('apic_cover')->where(array('aclass_id'=>array('in',$_POST['aclass_id'])))->select();
+				if (is_array($pic)){
+					foreach ($pic as $v) {
+						$this->del_file($v['apic_cover']);
+					}
+				}
+				$model->table('album_pic')->where(array('aclass_id'=>array('in',$_POST['aclass_id'])))->delete();
+				$model->table('album_class')->where(array('aclass_id'=>array('in',$_POST['aclass_id'])))->delete();
+				$this->log(L('nc_delete,g_album_one').'[ID:'.implode(',',$_POST['aclass_id']).']',1);
+				showMessage(Language::get('nc_common_del_succ'));
+			}
+		}
+		$condiiton = array();
+		if (is_numeric($_GET['keyword'])){
+			$condiiton['store.store_id'] = $_GET['keyword'];
+			$store_name = $model->table('store')->getfby_store_id($_GET['keyword'],'store_name');
+		}elseif (!empty($_GET['keyword'])){
+			$store_name = $_GET['keyword'];
+			$store_id = $model->table('store')->getfby_store_name($_GET['keyword'],'store_id');
+			if (is_numeric($store_id)){
+				$condiiton['store.store_id'] = $store_id;
+			}else{
+				$condiiton['store.store_id'] = 0;
+			}
+		}
+
+		$model->table('album_class,store')->where($condiiton)->join('inner')->on('album_class.store_id=store.store_id');
+		$list = $model->field('album_class.*,store.store_name')->page(10)->select();
+		Tpl::output('page',$model->showpage());
+
+		$model->cls()->table('album_pic')->field('aclass_id,count(*) as pcount')->group('aclass_id');
+		if (is_array($list) && !empty($list)){
+			foreach ($list as $v) {
+				$class[] = $v['aclass_id'];
+			}
+			$model->where(array('aclass_id'=>array('in',implode(',',$class))));
+		}
+		$count = $model->select();
+		if (is_array($count)){
+			foreach ($count as $v) {
+				$pic_count[$v['aclass_id']] = $v['pcount'];
+			}
+		}
+		Tpl::output('pic_count',$pic_count);
+		Tpl::output('list',$list);
+		Tpl::output('store_name',$store_name);
+		Tpl::showpage('goods_album.index');
+	}
+
+	/**
+	 * 图片列表
+	 */
+	public function pic_listOp(){
+		$model = Model();
+		$condiiton = array();
+		if (is_numeric($_GET['keyword'])){
+			$condiiton['store_id'] = $_GET['keyword'];
+			$store_name = $model->table('store')->getfby_store_id($_GET['keyword'],'store_name');
+		}elseif (!empty($_GET['keyword'])){
+			$store_name = $_GET['keyword'];
+			$store_id = $model->table('store')->getfby_store_name($_GET['keyword'],'store_id');
+			if (is_numeric($store_id)){
+				$condiiton['store_id'] = $store_id;
+			}else{
+				$condiiton['store_id'] = 0;
+			}
+		}elseif (is_numeric($_GET['aclass_id'])){
+			$condiiton['aclass_id'] = $_GET['aclass_id'];
+		}
+		$list = $model->table('album_pic')->where($condiiton)->order('apic_id desc')->page(40)->select();
+		$show_page = $model->showpage();
+		Tpl::output('page',$show_page);
+		Tpl::output('list',$list);
+		Tpl::output('store_name',$store_name);
+		Tpl::showpage('goods_album.pic_list');
+	}
+
+	/**
+	 * 删除相册
+	 */
+	public function aclass_delOp(){
+		$aclass_id = intval($_GET['aclass_id']);
+		if (!is_numeric($aclass_id)){
+			showMessage(Language::get('param_error'));
+		}
+		$model = Model();
+		$pic = $model->table('album_pic')->field('apic_cover')->where(array('aclass_id'=>$aclass_id))->select();
+		if (is_array($pic)){
+			foreach ($pic as $v) {
+				$this->del_file($v['apic_cover']);
+			}
+		}
+		$model->table('album_pic')->where(array('aclass_id'=>$aclass_id))->delete();
+		$model->table('album_class')->where(array('aclass_id'=>$aclass_id))->delete();
+		$this->log(L('nc_delete,g_album_one').'[ID:'.intval($_GET['aclass_id']).']',1);
+		showMessage(Language::get('nc_common_del_succ'));
+	}
+
+	/**
+	 * 删除一张图片及其对应记录
+	 *
+	 */
+	public function del_album_picOp(){
+		list($apic_id,$filename) = @explode('|',$_GET['key']);
+		if (!is_numeric($apic_id) || empty($filename)) exit('0');
+		$this->del_file($filename);
+		Model('album_pic')->where(array('apic_id'=>$apic_id))->delete();
+		$this->log(L('nc_delete,g_album_pic_one').'[ID:'.$apic_id.']',1);
+		exit('1');
+	}
+
+	/**
+	 * 删除多张图片
+	 *
+	 */
+	public function del_more_picOp(){
+		$model= Model('album_pic');
+		$list = $model->where(array('apic_id'=>array('in',$_POST['delbox'])))->select();
+		if (is_array($list)){
+			foreach ($list as $v) {
+				$this->del_file($v['apic_cover']);
+			}
+		}
+		$model->where(array('apic_id'=>array('in',$_POST['delbox'])))->delete();
+		$this->log(L('nc_delete,g_album_pic_one').'[ID:'.implode(',',$_POST['delbox']).']',1);
+		redirect();
+	}
+
+	/**
+	 * 删除图片文件
+	 *
+	 */
+	private function del_file($filename){
+		//取店铺ID
+		if (preg_match('/^(\d+_)/',$filename)){
+			$store_id = substr($filename,0,strpos($filename,'_'));
+		}else{
+			$store_id = Model()->cls()->table('album_pic')->getfby_apic_cover($filename,'store_id');
+		}
+		$path = BASE_UPLOAD_PATH.'/'.ATTACH_GOODS.'/'.$store_id.'/'.$filename;
+
+		$ext = strrchr($path, '.');
+		$type = array('_tiny','_small','_mid','_max','_240x240');
+		foreach ($type as $v) {
+			if (is_file($fpath = $path.$v.$ext)){
+				unlink($fpath);
+			}
+		}
+		if (is_file($path)) unlink($path);
+	}
+}

+ 667 - 0
admin/control/goods_class.php

@@ -0,0 +1,667 @@
+<?php
+/**
+ * 商品分类管理
+ *
+ *
+ *
+ **by 好商城V3 www.33hao.com 运营版*/
+
+defined('InShopNC') or exit('Access Invalid!');
+class goods_classControl extends SystemControl{
+	private $links = array(
+		array('url'=>'act=goods_class&op=goods_class','lang'=>'nc_manage'),
+		array('url'=>'act=goods_class&op=goods_class_add','lang'=>'nc_new'),
+		array('url'=>'act=goods_class&op=goods_class_export','lang'=>'goods_class_index_export'),
+		array('url'=>'act=goods_class&op=goods_class_import','lang'=>'goods_class_index_import'),
+		array('url'=>'act=goods_class&op=tag','lang'=>'goods_class_index_tag'),
+	);
+	public function __construct(){
+		parent::__construct();
+		Language::read('goods_class');
+	}
+
+	/**
+	 * 分类管理
+	 */
+	public function goods_classOp(){
+		$lang	= Language::getLangContent();
+		$model_class = Model('goods_class');
+		if (chksubmit()){
+			//删除
+			if ($_POST['submit_type'] == 'del'){
+			    $gcids = implode(',', $_POST['check_gc_id']);
+				if (!empty($_POST['check_gc_id'])){
+					if (!is_array($_POST['check_gc_id'])){
+    					$this->log(L('nc_delete,goods_class_index_class').'[ID:'.$gcids.']',0);
+    					showMessage($lang['nc_common_del_fail']);
+					}
+					$del_array = $model_class->delGoodsClassByGcIdString($gcids);
+					$this->log(L('nc_delete,goods_class_index_class').'[ID:'.$gcids.']',1);
+					showMessage($lang['nc_common_del_succ']);
+				}else {
+					$this->log(L('nc_delete,goods_class_index_class').'[ID:'.$gcids.']',0);
+					showMessage($lang['nc_common_del_fail']);
+				}
+			}
+		}
+
+		//父ID
+		$parent_id = $_GET['gc_parent_id']?intval($_GET['gc_parent_id']):0;
+
+		//列表
+		$tmp_list = $model_class->getTreeClassList(3);
+		if (is_array($tmp_list)){
+			foreach ($tmp_list as $k => $v){
+				if ($v['gc_parent_id'] == $parent_id){
+					//判断是否有子类
+					if ($tmp_list[$k+1]['deep'] > $v['deep']){
+						$v['have_child'] = 1;
+					}
+					$class_list[] = $v;
+				}
+			}
+		}
+		if ($_GET['ajax'] == '1'){
+			//转码
+			if (strtoupper(CHARSET) == 'GBK'){
+				$class_list = Language::getUTF8($class_list);
+			}
+			$output = json_encode($class_list);
+			print_r($output);
+			exit;
+		}else {
+			Tpl::output('class_list',$class_list);
+			Tpl::output('top_link',$this->sublink($this->links,'goods_class'));
+			Tpl::showpage('goods_class.index');
+		}
+	}
+
+	/**
+	 * 商品分类添加
+	 */
+	public function goods_class_addOp(){
+		$lang	= Language::getLangContent();
+		$model_class = Model('goods_class');
+		if (chksubmit()){
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["gc_name"], "require"=>"true", "message"=>$lang['goods_class_add_name_null']),
+				array("input"=>$_POST["gc_sort"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['goods_class_add_sort_int']),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				$insert_array = array();
+				$insert_array['gc_name']		= $_POST['gc_name'];
+				$insert_array['type_id']		= intval($_POST['t_id']);
+				$insert_array['type_name']		= trim($_POST['t_name']);
+				$insert_array['gc_parent_id']	= intval($_POST['gc_parent_id']);
+				$insert_array['commis_rate']    = intval($_POST['commis_rate']);
+				$insert_array['gc_sort']		= intval($_POST['gc_sort']);
+                $insert_array['gc_virtual']     = intval($_POST['gc_virtual']);
+				$result = $model_class->addGoodsClass($insert_array);
+				if ($result){
+    				if ($insert_array['gc_parent_id'] == 0) {
+            			if (!empty($_FILES['pic']['name'])) {//上传图片
+            				$upload = new UploadFile();
+                			$upload->set('default_dir',ATTACH_COMMON);
+                			$upload->set('file_name','category-pic-'.$result.'.jpg');
+            				$upload->upfile('pic');
+            			}
+    				}
+					$url = array(
+						array(
+							'url'=>'index.php?act=goods_class&op=goods_class_add&gc_parent_id='.$_POST['gc_parent_id'],
+							'msg'=>$lang['goods_class_add_again'],
+						),
+						array(
+							'url'=>'index.php?act=goods_class&op=goods_class',
+							'msg'=>$lang['goods_class_add_back_to_list'],
+						)
+					);
+					$this->log(L('nc_add,goods_class_index_class').'['.$_POST['gc_name'].']',1);
+					showMessage($lang['nc_common_save_succ'],$url);
+				}else {
+					$this->log(L('nc_add,goods_class_index_class').'['.$_POST['gc_name'].']',0);
+					showMessage($lang['nc_common_save_fail']);
+				}
+			}
+		}
+
+		//父类列表,只取到第二级
+		$parent_list = $model_class->getTreeClassList(2);
+		$gc_list = array();
+		if (is_array($parent_list)){
+			foreach ($parent_list as $k => $v){
+				$parent_list[$k]['gc_name'] = str_repeat("&nbsp;",$v['deep']*2).$v['gc_name'];
+				if($v['deep'] == 1) $gc_list[$k] = $v;
+			}
+		}
+		Tpl::output('gc_list', $gc_list);
+		//类型列表
+		$model_type	= Model('type');
+		$type_list	= $model_type->typeList(array('order'=>'type_sort asc'), '', 'type_id,type_name,class_id,class_name');
+		$t_list = array();
+		if(is_array($type_list) && !empty($type_list)){
+			foreach($type_list as $k=>$val){
+				$t_list[$val['class_id']]['type'][$k] = $val;
+				$t_list[$val['class_id']]['name'] = $val['class_name']==''?L('nc_default'):$val['class_name'];
+			}
+		}
+		ksort($t_list);
+
+		Tpl::output('type_list',$t_list);
+		Tpl::output('gc_parent_id',$_GET['gc_parent_id']);
+		Tpl::output('parent_list',$parent_list);
+		Tpl::output('top_link',$this->sublink($this->links,'goods_class_add'));
+		Tpl::showpage('goods_class.add');
+	}
+
+	/**
+	 * 编辑
+	 */
+	public function goods_class_editOp(){
+		$lang	= Language::getLangContent();
+		$model_class = Model('goods_class');
+
+		if (chksubmit()){
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["gc_name"], "require"=>"true", "message"=>$lang['goods_class_add_name_null']),
+			    array("input"=>$_POST["commis_rate"], "require"=>"true", 'validator'=>'range','max'=>100,'min'=>0, "message"=>$lang['goods_class_add_commis_rate_error']),
+				array("input"=>$_POST["gc_sort"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['goods_class_add_sort_int']),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}
+
+			// 更新分类信息
+			$where = array('gc_id' => intval($_POST['gc_id']));
+			$update_array = array();
+			$update_array['gc_name'] 		= $_POST['gc_name'];
+			$update_array['type_id']		= intval($_POST['t_id']);
+			$update_array['type_name']		= trim($_POST['t_name']);
+			$update_array['commis_rate']    = intval($_POST['commis_rate']);
+			$update_array['gc_sort']		= intval($_POST['gc_sort']);
+            $update_array['gc_virtual']     = intval($_POST['gc_virtual']);
+            //好商城 v3-b10
+	    $update_array['gc_parent_id']	= intval($_POST['gc_parent_id']);
+			$result = $model_class->editGoodsClass($update_array, $where);
+			if (!$result){
+				$this->log(L('nc_edit,goods_class_index_class').'['.$_POST['gc_name'].']',0);
+				showMessage($lang['goods_class_batch_edit_fail']);
+			}
+
+			if (!empty($_FILES['pic']['name'])) {//上传图片
+				$upload = new UploadFile();
+    			$upload->set('default_dir',ATTACH_COMMON);
+    			$upload->set('file_name','category-pic-'.intval($_POST['gc_id']).'.jpg');
+				$upload->upfile('pic');
+			}
+
+            // 检测是否需要关联自己操作,统一查询子分类
+            if ($_POST['t_commis_rate'] == '1' || $_POST['t_associated'] == '1' || $_POST['t_gc_virtual'] == '1') {
+                $gc_id_list = $model_class->getChildClass($_POST['gc_id']);
+                $gc_ids = array();
+                if (is_array($gc_id_list) && !empty($gc_id_list)) {
+                    foreach ($gc_id_list as $val){
+                        $gc_ids[] = $val['gc_id'];
+                    }
+                }
+            }
+
+			// 更新该分类下子分类的所有分佣比例
+			if ($_POST['t_commis_rate'] == '1' && !empty($gc_ids)){
+	            $model_class->editGoodsClass(array('commis_rate'=>$update_array['commis_rate']),array('gc_id'=>array('in',$gc_ids)));
+			}
+
+			// 更新该分类下子分类的所有类型
+			if ($_POST['t_associated'] == '1' && !empty($gc_ids)){
+			    $where = array();
+			    $where['gc_id'] = array('in', $gc_ids);
+			    $update = array();
+			    $update['type_id'] = intval($_POST['t_id']);
+			    $update['type_name'] = trim($_POST['t_name']);
+			    $model_class->editGoodsClass($update, $where);
+			}
+
+            // 虚拟商品
+            if ($_POST['t_gc_virtual'] == '1' && !empty($gc_ids)) {
+                $model_class->editGoodsClass(array('gc_virtual'=>$update_array['gc_virtual']),array('gc_id'=>array('in',$gc_ids)));
+            }
+
+			$url = array(
+				array(
+					'url'=>'index.php?act=goods_class&op=goods_class_edit&gc_id='.intval($_POST['gc_id']),
+					'msg'=>$lang['goods_class_batch_edit_again'],
+				),
+				array(
+					'url'=>'index.php?act=goods_class&op=goods_class',
+					'msg'=>$lang['goods_class_add_back_to_list'],
+				)
+			);
+			$this->log(L('nc_edit,goods_class_index_class').'['.$_POST['gc_name'].']',1);
+			showMessage($lang['goods_class_batch_edit_ok'],$url,'html','succ',1,5000);
+		}
+
+		$class_array = $model_class->getGoodsClassInfoById(intval($_GET['gc_id']));
+		if (empty($class_array)){
+			showMessage($lang['goods_class_batch_edit_paramerror']);
+		}
+
+		//类型列表
+		$model_type	= Model('type');
+		$type_list	= $model_type->typeList(array('order'=>'type_sort asc'), '', 'type_id,type_name,class_id,class_name');
+		$t_list = array();
+		if(is_array($type_list) && !empty($type_list)){
+			foreach($type_list as $k=>$val){
+				$t_list[$val['class_id']]['type'][$k] = $val;
+				$t_list[$val['class_id']]['name'] = $val['class_name']==''?L('nc_default'):$val['class_name'];
+			}
+		}
+		ksort($t_list);
+		//父类列表,只取到第二级
+		$parent_list = $model_class->getTreeClassList(2);
+		if (is_array($parent_list)){
+			foreach ($parent_list as $k => $v){
+				$parent_list[$k]['gc_name'] = str_repeat("&nbsp;",$v['deep']*2).$v['gc_name'];
+			}
+		}
+		Tpl::output('parent_list',$parent_list);
+		// 一级分类列表
+		$gc_list = Model('goods_class')->getGoodsClassListByParentId(0);
+		Tpl::output('gc_list', $gc_list);
+	    $pic_name = BASE_UPLOAD_PATH.'/'.ATTACH_COMMON.'/category-pic-'.$class_array['gc_id'].'.jpg';
+	    if (file_exists($pic_name)) {
+	        $class_array['pic'] = UPLOAD_SITE_URL.'/'.ATTACH_COMMON.'/category-pic-'.$class_array['gc_id'].'.jpg';
+	    }
+
+		Tpl::output('type_list',$t_list);
+		Tpl::output('class_array',$class_array);
+		$this->links[] = array('url'=>'act=goods_class&op=goods_class_edit','lang'=>'nc_edit');
+		Tpl::output('top_link',$this->sublink($this->links,'goods_class_edit'));
+		Tpl::showpage('goods_class.edit');
+	}
+
+	/**
+	 * 分类导入
+	 */
+	public function goods_class_importOp(){
+		$lang	= Language::getLangContent();
+		$model_class = Model('goods_class');
+		//导入
+		if (chksubmit()){
+			//得到导入文件后缀名
+			$csv_array = explode('.',$_FILES['csv']['name']);
+			$file_type = end($csv_array);
+			if (!empty($_FILES['csv']) && !empty($_FILES['csv']['name']) && $file_type == 'csv'){
+				$fp = @fopen($_FILES['csv']['tmp_name'],'rb');
+				// 父ID
+				$parent_id_1 = 0;
+
+				while (!feof($fp)) {
+					$data = fgets($fp, 4096);
+					switch (strtoupper($_POST['charset'])){
+						case 'UTF-8':
+							if (strtoupper(CHARSET) !== 'UTF-8'){
+								$data = iconv('UTF-8',strtoupper(CHARSET),$data);
+							}
+							break;
+						case 'GBK':
+							if (strtoupper(CHARSET) !== 'GBK'){
+								$data = iconv('GBK',strtoupper(CHARSET),$data);
+							}
+							break;
+					}
+
+					if (!empty($data)){
+						$data	= str_replace('"','',$data);
+						//逗号去除
+						$tmp_array = array();
+						$tmp_array = explode(',',$data);
+						if($tmp_array[0] == 'sort_order')continue;
+						//第一位是序号,后面的是内容,最后一位名称
+						$tmp_deep = 'parent_id_'.(count($tmp_array)-1);
+
+						$insert_array = array();
+						$insert_array['gc_sort'] = $tmp_array[0];
+						$insert_array['gc_parent_id'] = $$tmp_deep;
+						$insert_array['gc_name'] = $tmp_array[count($tmp_array)-1];
+						$gc_id = $model_class->addGoodsClass($insert_array);
+						//赋值这个深度父ID
+						$tmp = 'parent_id_'.count($tmp_array);
+						$$tmp = $gc_id;
+					}
+				}
+				$this->log(L('goods_class_index_import,goods_class_index_class'),1);
+				showMessage($lang['nc_common_op_succ'],'index.php?act=goods_class&op=goods_class');
+			}else {
+				$this->log(L('goods_class_index_import,goods_class_index_class'),0);
+				showMessage($lang['goods_class_import_csv_null']);
+			}
+		}
+		Tpl::output('top_link',$this->sublink($this->links,'goods_class_import'));
+		Tpl::showpage('goods_class.import');
+	}
+
+	/**
+	 * 分类导出
+	 */
+	public function goods_class_exportOp(){
+		if (chksubmit()){
+			$model_class = Model('goods_class');
+			$class_list = $model_class->getTreeClassList();
+
+			@header("Content-type: application/unknown");
+        	@header("Content-Disposition: attachment; filename=goods_class.csv");
+			if (is_array($class_list)){
+				foreach ($class_list as $k => $v){
+					$tmp = array();
+					//序号
+					$tmp['gc_sort'] = $v['gc_sort'];
+					//深度
+					for ($i=1; $i<=($v['deep']-1); $i++){
+						$tmp[] = '';
+					}
+					//分类名称
+					$tmp['gc_name'] = $v['gc_name'];
+					//转码 utf-gbk
+					if (strtoupper(CHARSET) == 'UTF-8'){
+						switch ($_POST['if_convert']){
+							case '1':
+								$tmp_line = iconv('UTF-8','GB2312//IGNORE',join(',',$tmp));
+								break;
+							case '0':
+								$tmp_line = join(',',$tmp);
+								break;
+						}
+					}else {
+						$tmp_line = join(',',$tmp);
+					}
+					$tmp_line = str_replace("\r\n",'',$tmp_line);
+					echo $tmp_line."\r\n";
+				}
+			}
+			$this->log(L('goods_class_index_export,goods_class_index_class'),1);
+			exit;
+		}
+		Tpl::output('top_link',$this->sublink($this->links,'goods_class_export'));
+		Tpl::showpage('goods_class.export');
+	}
+
+	/**
+	 * 删除分类
+	 */
+	public function goods_class_delOp(){
+		$lang	= Language::getLangContent();
+		$model_class = Model('goods_class');
+		if (intval($_GET['gc_id']) > 0){
+			//删除分类
+			$model_class->delGoodsClassByGcIdString(intval($_GET['gc_id']));
+			$this->log(L('nc_delete,goods_class_index_class') . '[ID:' . intval($_GET['gc_id']) . ']',1);
+			showMessage($lang['nc_common_del_succ'],'index.php?act=goods_class&op=goods_class');
+		}else {
+			$this->log(L('nc_delete,goods_class_index_class') . '[ID:' . intval($_GET['gc_id']) . ']',0);
+			showMessage($lang['nc_common_del_fail'],'index.php?act=goods_class&op=goods_class');
+		}
+	}
+
+	/**
+	 * tag列表
+	 */
+	public function tagOp(){
+		$lang	= Language::getLangContent();
+
+		/**
+		 * 处理商品分类
+		 */
+		$choose_gcid = ($t = intval($_REQUEST['choose_gcid']))>0?$t:0;
+		$gccache_arr = Model('goods_class')->getGoodsclassCache($choose_gcid,3);
+		Tpl::output('gc_json',json_encode($gccache_arr['showclass']));
+		Tpl::output('gc_choose_json',json_encode($gccache_arr['choose_gcid']));
+
+		$model_class_tag = Model('goods_class_tag');
+
+		if (chksubmit()){
+			//删除
+			if ($_POST['submit_type'] == 'del'){
+				if (is_array($_POST['tag_id']) && !empty($_POST['tag_id'])){
+					//删除TAG
+					$model_class_tag->delTagByIds(implode(',',$_POST['tag_id']));
+					$this->log(L('nc_delete').'tag[ID:'.implode(',',$_POST['tag_id']).']',1);
+					showMessage($lang['nc_common_del_succ']);
+				}else {
+					$this->log(L('nc_delete').'tag',0);
+					showMessage($lang['nc_common_del_fail']);
+				}
+			}
+		}
+
+		$page	= new Page();
+		$page->setEachNum(10);
+		$page->setStyle('admin');
+		$where = array();
+		if ($choose_gcid > 0){
+		    $where['gc_id_'.($gccache_arr['showclass'][$choose_gcid]['depth'])] = $choose_gcid;
+		}
+		$tag_list = $model_class_tag->getTagList($where, $page);
+		Tpl::output('tag_list', $tag_list);
+		Tpl::output('page',$page->show());
+		Tpl::output('top_link',$this->sublink($this->links,'tag'));
+		Tpl::showpage('goods_class_tag.index');
+	}
+
+	/**
+	 * 重置TAG
+	 */
+	public function tag_resetOp(){
+		$lang	= Language::getLangContent();
+		//实例化模型
+		$model_class = Model('goods_class');
+		$model_class_tag = Model('goods_class_tag');
+
+		//清空TAG
+		$return = $model_class_tag->clearTag();
+		if(!$return){
+			showMessage($lang['goods_class_reset_tag_fail'], 'index.php?act=goods_class&op=tag');
+		}
+
+		//商品分类
+		$goods_class		= $model_class->getTreeClassList(3);
+		//格式化分类。组成三维数组
+		if(is_array($goods_class) and !empty($goods_class)) {
+			$goods_class_array = array();
+			foreach ($goods_class as $val) {
+				//一级分类
+				if($val['gc_parent_id'] == 0) {
+					$goods_class_array[$val['gc_id']]['gc_name']	= $val['gc_name'];
+					$goods_class_array[$val['gc_id']]['gc_id']		= $val['gc_id'];
+					$goods_class_array[$val['gc_id']]['type_id']	= $val['type_id'];
+				}else {
+					//二级分类
+					if(isset($goods_class_array[$val['gc_parent_id']])){
+						$goods_class_array[$val['gc_parent_id']]['sub_class'][$val['gc_id']]['gc_name']			= $val['gc_name'];
+						$goods_class_array[$val['gc_parent_id']]['sub_class'][$val['gc_id']]['gc_id']			= $val['gc_id'];
+						$goods_class_array[$val['gc_parent_id']]['sub_class'][$val['gc_id']]['gc_parent_id']	= $val['gc_parent_id'];
+						$goods_class_array[$val['gc_parent_id']]['sub_class'][$val['gc_id']]['type_id']			= $val['type_id'];
+					}else{
+						foreach ($goods_class_array as $v){
+							//三级分类
+							if(isset($v['sub_class'][$val['gc_parent_id']])){
+								$goods_class_array[$v['sub_class'][$val['gc_parent_id']]['gc_parent_id']]['sub_class'][$val['gc_parent_id']]['sub_class'][$val['gc_id']]['gc_name']	= $val['gc_name'];
+								$goods_class_array[$v['sub_class'][$val['gc_parent_id']]['gc_parent_id']]['sub_class'][$val['gc_parent_id']]['sub_class'][$val['gc_id']]['gc_id']	= $val['gc_id'];
+								$goods_class_array[$v['sub_class'][$val['gc_parent_id']]['gc_parent_id']]['sub_class'][$val['gc_parent_id']]['sub_class'][$val['gc_id']]['type_id']	= $val['type_id'];
+							}
+						}
+					}
+				}
+			}
+
+			$return = $model_class_tag->tagAdd($goods_class_array);
+
+			if($return){
+				$this->log(L('nc_reset').'tag',1);
+				showMessage($lang['nc_common_op_succ'], 'index.php?act=goods_class&op=tag');
+			}else{
+				$this->log(L('nc_reset').'tag',0);
+				showMessage($lang['nc_common_op_fail'], 'index.php?act=goods_class&op=tag');
+			}
+		}else{
+			$this->log(L('nc_reset').'tag',0);
+			showMessage($lang['goods_class_reset_tag_fail_no_class'], 'index.php?act=goods_class&op=tag');
+		}
+	}
+
+	/**
+	 * 更新TAG名称
+	 */
+	public function tag_updateOp(){
+		$lang	= Language::getLangContent();
+		$model_class = Model('goods_class');
+		$model_class_tag = Model('goods_class_tag');
+
+		//需要更新的TAG列表
+		$tag_list = $model_class_tag->getTagList(array(), '', 'gc_tag_id,gc_id_1,gc_id_2,gc_id_3');
+		if(is_array($tag_list) && !empty($tag_list)){
+			foreach ($tag_list as $val){
+				//查询分类信息
+				$in_gc_id = array();
+				if($val['gc_id_1'] != '0'){
+					$in_gc_id[] = $val['gc_id_1'];
+				}
+				if($val['gc_id_2'] != '0'){
+					$in_gc_id[] = $val['gc_id_2'];
+				}
+				if($val['gc_id_3'] != '0'){
+					$in_gc_id[] = $val['gc_id_3'];
+				}
+				$gc_list	= $model_class->getGoodsClassListByIds($in_gc_id);
+
+				//更新TAG信息
+				$update_tag					= array();
+				if(isset($gc_list['0']['gc_id']) && $gc_list['0']['gc_id'] != '0'){
+					$update_tag['gc_id_1']		= $gc_list['0']['gc_id'];
+					$update_tag['gc_tag_name']	.= $gc_list['0']['gc_name'];
+				}
+				if(isset($gc_list['1']['gc_id']) && $gc_list['1']['gc_id'] != '0'){
+					$update_tag['gc_id_2']		= $gc_list['1']['gc_id'];
+					$update_tag['gc_tag_name']	.= "&nbsp;&gt;&nbsp;".$gc_list['1']['gc_name'];
+				}
+				if(isset($gc_list['2']['gc_id']) && $gc_list['2']['gc_id'] != '0'){
+					$update_tag['gc_id_3']		= $gc_list['2']['gc_id'];
+					$update_tag['gc_tag_name']	.= "&nbsp;&gt;&nbsp;".$gc_list['2']['gc_name'];
+				}
+				unset($gc_list);
+				$update_tag['gc_tag_id']	= $val['gc_tag_id'];
+				$return = $model_class_tag->updateTag($update_tag);
+				if(!$return){
+					$this->log(L('nc_update').'tag',0);
+					showMessage($lang['nc_common_op_fail'], 'index.php?act=goods_class&op=tag');
+				}
+			}
+			$this->log(L('nc_update').'tag',1);
+			showMessage($lang['nc_common_op_succ'], 'index.php?act=goods_class&op=tag');
+		}else{
+			$this->log(L('nc_update').'tag',0);
+			showMessage($lang['goods_class_update_tag_fail_no_class'], 'index.php?act=goods_class&op=tag');
+		}
+
+	}
+
+	/**
+	 * 删除TAG
+	 */
+	public function tag_delOp(){
+		$id = intval($_GET['tag_id']);
+		$lang	= Language::getLangContent();
+		$model_class_tag = Model('goods_class_tag');
+		if ($id > 0){
+			/**
+			 * 删除TAG
+			 */
+			$model_class_tag->delTagByIds($id);
+			$this->log(L('nc_delete').'tag[ID:'.$id.']',1);
+			showMessage($lang['nc_common_op_succ']);
+		}else {
+			$this->log(L('nc_delete').'tag[ID:'.$id.']',0);
+			showMessage($lang['nc_common_op_fail']);
+		}
+	}
+
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			/**
+			 * 更新分类
+			 */
+			case 'goods_class_name':
+				$model_class = Model('goods_class');
+				$class_array = $model_class->getGoodsClassInfoById(intval($_GET['id']));
+
+				$condition['gc_name'] = trim($_GET['value']);
+				$condition['gc_parent_id'] = $class_array['gc_parent_id'];
+				$condition['gc_id'] = array('neq' => intval($_GET['id']));
+				$class_list = $model_class->getGoodsClassList($condition);
+				if (empty($class_list)){
+				    $where = array('gc_id' => intval($_GET['id']));
+					$update_array = array();
+					$update_array['gc_name'] = trim($_GET['value']);
+					$model_class->editGoodsClass($update_array, $where);
+					echo 'true';exit;
+				}else {
+					echo 'false';exit;
+				}
+				break;
+			/**
+			 * 分类 排序 显示 设置
+			 */
+			case 'goods_class_sort':
+			case 'goods_class_show':
+			case 'goods_class_index_show':
+				$model_class = Model('goods_class');
+			    $where = array('gc_id' => intval($_GET['id']));
+				$update_array = array();
+				$update_array[$_GET['column']] = $_GET['value'];
+				$model_class->editGoodsClass($update_array, $where);
+				echo 'true';exit;
+				break;
+			/**
+			 * 添加、修改操作中 检测类别名称是否有重复
+			 */
+			case 'check_class_name':
+				$model_class = Model('goods_class');
+				$condition['gc_name'] = trim($_GET['gc_name']);
+				$condition['gc_parent_id'] = intval($_GET['gc_parent_id']);
+				$condition['gc_id'] = array('neq', intval($_GET['gc_id']));
+				$class_list = $model_class->getGoodsClassList($condition);
+				if (empty($class_list)){
+					echo 'true';exit;
+				}else {
+					echo 'false';exit;
+				}
+				break;
+			/**
+			 * TAG值编辑
+			 */
+			case 'goods_class_tag_value':
+				$model_class_tag = Model('goods_class_tag');
+				$update_array = array();
+				$update_array['gc_tag_id'] = intval($_GET['id']);
+				/**
+				 * 转码  防止GBK下用中文逗号截取不正确
+				 */
+				$comma = ',';
+				if (strtoupper(CHARSET) == 'GBK'){
+					$comma = Language::getGBK($comma);
+				}
+				$update_array[$_GET['column']] = trim(str_replace($comma,',',$_GET['value']));
+				$model_class_tag->updateTag($update_array);
+				echo 'true';exit;
+				break;
+		}
+	}
+}

+ 614 - 0
admin/control/groupbuy.php

@@ -0,0 +1,614 @@
+<?php
+/**
+ * 抢购管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class groupbuyControl extends SystemControl{
+
+    public function __construct(){
+        parent::__construct();
+        Language::read('groupbuy');
+
+		//如果是执行开启抢购操作,直接返回
+		if ($_GET['groupbuy_open'] == 1) return true;
+
+        //检查抢购功能是否开启
+        if (C('groupbuy_allow') != 1){
+ 			$url = array(
+ 				array(
+					'url'=>'index.php?act=dashboard&op=welcome',
+					'msg'=>Language::get('close'),
+				),
+				array(
+					'url'=>'index.php?act=groupbuy&op=groupbuy_template_list&groupbuy_open=1',
+					'msg'=>Language::get('open'),
+				),
+			);
+			showMessage(Language::get('admin_groupbuy_unavailable'),$url,'html','succ',1,6000);
+        }
+    }
+
+    public function indexOp() {
+        $this->groupbuy_listOp();
+    }
+
+    /**
+     * 进行中抢购列表,只可推荐
+     *
+     */
+    public function groupbuy_listOp(){
+        $model_groupbuy = Model('groupbuy');
+
+        $condition = array();
+        if(!empty($_GET['groupbuy_name'])) {
+            $condition['groupbuy_name'] = array('like', '%'.$_GET['groupbuy_name'].'%');
+        }
+        if(!empty($_GET['store_name'])) {
+            $condition['store_name'] = array('like', '%'.$_GET['store_name'].'%');
+        }
+        if(!empty($_GET['groupbuy_state'])) {
+            $condition['state'] = $_GET['groupbuy_state'];
+        }
+        $groupbuy_list = $model_groupbuy->getGroupbuyExtendList($condition, 10);
+        Tpl::output('groupbuy_list',$groupbuy_list);
+        Tpl::output('show_page',$model_groupbuy->showpage());
+        Tpl::output('groupbuy_state_array', $model_groupbuy->getGroupbuyStateArray());
+
+        $this->show_menu('groupbuy_list');
+
+        // 输出自营店铺IDS
+        Tpl::output('flippedOwnShopIds', array_flip(model('store')->getOwnShopIds()));
+        Tpl::showpage('groupbuy.list');
+    }
+
+    /**
+     * 审核通过
+     */
+    public function groupbuy_review_passOp(){
+        $groupbuy_id = intval($_POST['groupbuy_id']);
+
+        $model_groupbuy = Model('groupbuy');
+        $result = $model_groupbuy->reviewPassGroupbuy($groupbuy_id);
+        if($result) {
+        	$this->log('通过抢购活动申请,抢购编号'.$groupbuy_id,null);
+            // 添加队列
+            $groupbuy_info = $model_groupbuy->getGroupbuyInfo(array('groupbuy_id' => $groupbuy_id));
+            $this->addcron(array('exetime' => $groupbuy_info['start_time'], 'exeid' => $groupbuy_info['goods_commonid'], 'type' => 5));
+            $this->addcron(array('exetime' => $groupbuy_info['end_time'], 'exeid' => $groupbuy_info['goods_commonid'], 'type' => 6));
+            showMessage(L('nc_common_op_succ'), '');
+        } else {
+            showMessage(L('nc_common_op_fail'), '');
+        }
+    }
+
+    /**
+     * 审核失败
+     */
+    public function groupbuy_review_failOp(){
+        $groupbuy_id = intval($_POST['groupbuy_id']);
+
+        $model_groupbuy = Model('groupbuy');
+        $result = $model_groupbuy->reviewFailGroupbuy($groupbuy_id);
+        if($result) {
+        	$this->log('拒绝抢购活动申请,抢购编号'.$groupbuy_id,null);
+            showMessage(L('nc_common_op_succ'), '');
+        } else {
+            showMessage(L('nc_common_op_fail'), '');
+        }
+    }
+
+    /**
+     * 取消
+     */
+    public function groupbuy_cancelOp() {
+        $groupbuy_id = intval($_POST['groupbuy_id']);
+
+        $model_groupbuy = Model('groupbuy');
+        $result = $model_groupbuy->cancelGroupbuy($groupbuy_id);
+        if($result) {
+        	$this->log('取消抢购活动,抢购编号'.$groupbuy_id,null);
+            showMessage(L('nc_common_op_succ'), '');
+        } else {
+            showMessage(L('nc_common_op_fail'), '');
+        }
+    }
+
+    /**
+     * 删除
+     */
+    public function groupbuy_delOp(){
+        $groupbuy_id = intval($_POST['groupbuy_id']);
+
+        $model_groupbuy = Model('groupbuy');
+        $result = $model_groupbuy->delGroupbuy(array('groupbuy_id' => $groupbuy_id));
+        if($result) {
+        	$this->log('删除抢购活动,抢购编号'.$groupbuy_id,null);
+            showMessage(L('nc_common_op_succ'), '');
+        } else {
+            showMessage(L('nc_common_op_fail'), '');
+        }
+    }
+
+    /**
+     * ajax修改抢购信息
+     */
+    public function ajaxOp(){
+
+        $result = true;
+        $update_array = array();
+        $where_array = array();
+
+        switch ($_GET['branch']){
+        case 'class_sort':
+            $model= Model('groupbuy_class');
+            $update_array['sort'] = $_GET['value'];
+            $where_array['class_id'] = $_GET['id'];
+            $result = $model->update($update_array,$where_array);
+            // 删除抢购分类缓存
+            Model('groupbuy')->dropCachedData('groupbuy_classes');
+            break;
+        case 'class_name':
+            $model= Model('groupbuy_class');
+            $update_array['class_name'] = $_GET['value'];
+            $where_array['class_id'] = $_GET['id'];
+            $result = $model->update($update_array,$where_array);
+            // 删除抢购分类缓存
+            Model('groupbuy')->dropCachedData('groupbuy_classes');
+            $this->log(L('groupbuy_class_edit_success').'[ID:'.$_GET['id'].']', null);
+            break;
+         case 'recommended':
+            $model= Model('groupbuy');
+            $update_array['recommended'] = $_GET['value'];
+            $where_array['groupbuy_id'] = $_GET['id'];
+            $result = $model->editGroupbuy($update_array, $where_array);
+            break;
+        }
+        if($result) {
+            echo 'true';exit;
+        }
+        else {
+            echo 'false';exit;
+        }
+
+    }
+
+    /**
+     * 套餐管理
+     **/
+    public function groupbuy_quotaOp() {
+        $model_groupbuy_quota = Model('groupbuy_quota');
+
+        $condition = array();
+        $condition['store_name'] = array('like', '%'.$_GET['store_name'].'%');
+        $list = $model_groupbuy_quota->getGroupbuyQuotaList($condition, 10, 'end_time desc');
+        Tpl::output('list',$list);
+        Tpl::output('show_page',$model_groupbuy_quota->showpage());
+
+        $this->show_menu('groupbuy_quota');
+        Tpl::showpage('groupbuy_quota.list');
+    }
+
+    /**
+     * 抢购类别列表
+     */
+    public function class_listOp() {
+
+        $model_groupbuy_class = Model('groupbuy_class');
+        $param = array();
+        $param['order'] = 'sort asc';
+        $groupbuy_class_list = $model_groupbuy_class->getTreeList($param);
+
+        $this->show_menu('class_list');
+        Tpl::output('list',$groupbuy_class_list);
+        Tpl::showpage('groupbuy_class.list');
+    }
+
+    /**
+     * 添加抢购分类页面
+     */
+    public function class_addOp() {
+
+        $model_groupbuy_class = Model('groupbuy_class');
+        $param = array();
+        $param['order'] = 'sort asc';
+        $param['class_parent_id'] = 0;
+        $groupbuy_class_list = $model_groupbuy_class->getList($param);
+        Tpl::output('list',$groupbuy_class_list);
+
+        $this->show_menu('class_add');
+        Tpl::output('parent_id',$_GET['parent_id']);
+        Tpl::showpage('groupbuy_class.add');
+
+    }
+
+    /**
+     * 保存添加的抢购类别
+     */
+    public function class_saveOp() {
+
+        $class_id = intval($_POST['class_id']);
+        $param = array();
+        $param['class_name'] = trim($_POST['input_class_name']);
+        if(empty($param['class_name'])) {
+            showMessage(Language::get('class_name_error'),'');
+        }
+        $param['sort'] = intval($_POST['input_sort']);
+        $param['class_parent_id'] = intval($_POST['input_parent_id']);
+
+        $model_groupbuy_class = Model('groupbuy_class');
+
+        // 删除抢购分类缓存
+        Model('groupbuy')->dropCachedData('groupbuy_classes');
+
+        if(empty($class_id)) {
+            //新增
+            if($model_groupbuy_class->save($param)) {
+            	$this->log(L('groupbuy_class_add_success').'[ID:'.$class_id.']', null);
+                showMessage(Language::get('groupbuy_class_add_success'),'index.php?act=groupbuy&op=class_list');
+            }
+            else {
+                showMessage(Language::get('groupbuy_class_add_fail'),'index.php?act=groupbuy&op=class_list');
+            }
+        }
+        else {
+            //编辑
+            if($model_groupbuy_class->update($param,array('class_id'=>$class_id))) {
+            	$this->log(L('groupbuy_class_edit_success').'[ID:'.$class_id.']', null);
+                showMessage(Language::get('groupbuy_class_edit_success'),'index.php?act=groupbuy&op=class_list');
+            }
+            else {
+                showMessage(Language::get('groupbuy_class_edit_fail'),'index.php?act=groupbuy&op=class_list');
+            }
+        }
+
+    }
+
+    /**
+     * 删除抢购类别
+     */
+    public function class_dropOp() {
+
+        $class_id = trim($_POST['class_id']);
+        if(empty($class_id)) {
+            showMessage(Language::get('param_error'),'');
+        }
+
+        $model_groupbuy_class = Model('groupbuy_class');
+        //获得所有下级类别编号
+        $all_class_id = $model_groupbuy_class->getAllClassId(explode(',',$class_id));
+        $param = array();
+        $param['in_class_id'] = implode(',',$all_class_id);
+        if($model_groupbuy_class->drop($param)) {
+            // 删除抢购分类缓存
+            Model('groupbuy')->dropCachedData('groupbuy_classes');
+
+        	$this->log(L('groupbuy_class_drop_success').'[ID:'.$param['in_class_id'].']',null);
+            showMessage(Language::get('groupbuy_class_drop_success'),'');
+        }
+        else {
+            showMessage(Language::get('groupbuy_class_drop_fail'),'');
+        }
+
+    }
+
+    /**
+     * 抢购价格区间列表
+     */
+    public function price_listOp() {
+
+        $model= Model('groupbuy_price_range');
+        $groupbuy_price_list = $model->getList();
+        Tpl::output('list',$groupbuy_price_list);
+
+        $this->show_menu('price_list');
+        Tpl::showpage('groupbuy_price.list');
+    }
+
+    /**
+     * 添加抢购价格区间页面
+     */
+    public function price_addOp() {
+
+        $this->show_menu('price_add');
+        Tpl::showpage('groupbuy_price.add');
+
+    }
+
+    /**
+     * 编辑抢购价格区间页面
+     */
+    public function price_editOp() {
+
+        $range_id = intval($_GET['range_id']);
+        if(empty($range_id)) {
+            showMessage(Language::get('param_error'),'');
+        }
+
+        $model = Model('groupbuy_price_range');
+
+        $price_info = $model->getOne($range_id);
+        if(empty($price_info)) {
+            showMessage(Language::get('param_error'),'');
+        }
+        Tpl::output('price_info',$price_info);
+
+        $this->show_menu('price_edit');
+        Tpl::showpage('groupbuy_price.add');
+
+    }
+
+    /**
+     * 保存添加的抢购价格区间
+     */
+    public function price_saveOp() {
+
+        $range_id = intval($_POST['range_id']);
+        $param = array();
+        $param['range_name'] = trim($_POST['range_name']);
+        if(empty($param['range_name'])) {
+            showMessage(Language::get('range_name_error'),'');
+        }
+        $param['range_start'] = intval($_POST['range_start']);
+        $param['range_end'] = intval($_POST['range_end']);
+
+        $model = Model('groupbuy_price_range');
+
+        if(empty($range_id)) {
+            //新增
+            if($model->save($param)) {
+            	dkcache('groupbuy_price');
+            	$this->log(L('groupbuy_price_range_add_success').'['.$_POST['range_name'].']',null);
+                showMessage(Language::get('groupbuy_price_range_add_success'),'index.php?act=groupbuy&op=price_list');
+            }
+            else {
+                showMessage(Language::get('groupbuy_price_range_add_fail'),'index.php?act=groupbuy&op=price_list');
+            }
+        }
+        else {
+            //编辑
+            if($model->update($param,array('range_id'=>$range_id))) {
+            	dkcache('groupbuy_price');
+            	$this->log(L('groupbuy_price_range_edit_success').'['.$_POST['range_name'].']',null);
+                showMessage(Language::get('groupbuy_price_range_edit_success'),'index.php?act=groupbuy&op=price_list');
+            }
+            else {
+                showMessage(Language::get('groupbuy_price_range_edit_fail'),'index.php?act=groupbuy&op=price_list');
+            }
+        }
+
+    }
+
+    /**
+     * 删除抢购价格区间
+     */
+    public function price_dropOp() {
+
+        $range_id = trim($_POST['range_id']);
+        if(empty($range_id)) {
+            showMessage(Language::get('param_error'),'');
+        }
+
+        $model = Model('groupbuy_price_range');
+        $param = array();
+        $param['in_range_id'] = "'".implode("','", explode(',', $range_id))."'";
+        if($model->drop($param)) {
+        	dkcache('groupbuy_price');
+        	$this->log(L('groupbuy_price_range_drop_success').'[ID:'.$range_id.']',null);
+            showMessage(Language::get('groupbuy_price_range_drop_success'),'');
+        }
+        else {
+            showMessage(Language::get('groupbuy_price_range_drop_fail'),'');
+        }
+    }
+
+    /**
+     * 设置
+     **/
+    public function groupbuy_settingOp() {
+
+        $model_setting = Model('setting');
+        $setting = $model_setting->GetListSetting();
+        Tpl::output('setting',$setting);
+
+        $this->show_menu('groupbuy_setting');
+        Tpl::showpage('groupbuy.setting');
+    }
+
+    public function groupbuy_setting_saveOp() {
+        $groupbuy_price = intval($_POST['groupbuy_price']);
+        if($groupbuy_price < 0) {
+            $groupbuy_price = 0;
+        }
+
+        $groupbuy_review_day = intval($_POST['groupbuy_review_day']);
+        if($groupbuy_review_day< 0) {
+            $groupbuy_review_day = 0;
+        }
+
+        $model_setting = Model('setting');
+        $update_array = array();
+        $update_array['groupbuy_price'] = $groupbuy_price;
+        $update_array['groupbuy_review_day'] = $groupbuy_review_day;
+        $result = $model_setting->updateSetting($update_array);
+        if ($result){
+            $this->log('修改抢购套餐价格为'.$groupbuy_price.'元');
+            showMessage(Language::get('nc_common_op_succ'),'');
+        }else {
+            showMessage(Language::get('nc_common_op_fail'),'');
+        }
+    }
+
+    /**
+     * 幻灯片设置
+     */
+    public function sliderOp()
+    {
+        $model_setting = Model('setting');
+        if (chksubmit()) {
+            $update = array();
+            if (!empty($_FILES['live_pic1']['name'])) {
+                $upload = new UploadFile();
+                $upload->set('default_dir',ATTACH_LIVE);
+                $result = $upload->upfile('live_pic1');
+                if ($result) {
+                    $update['live_pic1'] = $upload->file_name;
+                }else {
+                    showMessage($upload->error, '', '', 'error');
+                }
+            }
+
+            if (!empty($_POST['live_link1'])) {
+                $update['live_link1'] = $_POST['live_link1'];
+            }
+
+            if (!empty($_FILES['live_pic2']['name'])) {
+                $upload = new UploadFile();
+                $upload->set('default_dir',ATTACH_LIVE);
+                $result = $upload->upfile('live_pic2');
+                if ($result) {
+                    $update['live_pic2'] = $upload->file_name;
+                } else {
+                    showMessage($upload->error, '', '', 'error');
+                }
+            }
+
+            if (!empty($_POST['live_link2'])) {
+                $update['live_link2'] = $_POST['live_link2'];
+            }
+
+            if (!empty($_FILES['live_pic3']['name'])) {
+                $upload = new UploadFile();
+                $upload->set('default_dir',ATTACH_LIVE);
+                $result = $upload->upfile('live_pic3');
+                if ($result) {
+                    $update['live_pic3'] = $upload->file_name;
+                } else {
+                    showMessage($upload->error, '', '', 'error');
+                }
+            }
+
+            if (!empty($_POST['live_link3'])) {
+                $update['live_link3'] = $_POST['live_link3'];
+            }
+
+            if (!empty($_FILES['live_pic4']['name'])) {
+                $upload = new UploadFile();
+                $upload->set('default_dir',ATTACH_LIVE);
+                $result = $upload->upfile('live_pic4');
+                if ($result) {
+                    $update['live_pic4'] = $upload->file_name;
+                } else {
+                    showMessage($upload->error, '', '', 'error');
+                }
+            }
+
+            if (!empty($_POST['live_link4'])) {
+                $update['live_link4'] = $_POST['live_link4'];
+            }
+
+            $list_setting = $model_setting->getListSetting();
+            $result = $model_setting->updateSetting($update);
+            if ($result) {
+                if($list_setting['live_pic1'] != '' && isset($update['live_pic1'])){
+                    @unlink(BASE_UPLOAD_PATH.DS.ATTACH_LIVE.DS.$list_setting['live_pic1']);
+                }
+
+                if($list_setting['live_pic2'] != '' && isset($update['live_pic2'])){
+                    @unlink(BASE_UPLOAD_PATH.DS.ATTACH_LIVE.DS.$list_setting['live_pic2']);
+                }
+
+                if($list_setting['live_pic3'] != '' && isset($update['live_pic3'])){
+                    @unlink(BASE_UPLOAD_PATH.DS.ATTACH_LIVE.DS.$list_setting['live_pic3']);
+                }
+
+                if($list_setting['live_pic4'] != '' && isset($update['live_pic4'])){
+                    @unlink(BASE_UPLOAD_PATH.DS.ATTACH_LIVE.DS.$list_setting['live_pic4']);
+                }
+
+                dkcache('setting');
+                $this->log('修改抢购幻灯片设置', 1);
+                showMessage('编辑成功', '', '', 'succ');
+            } else {
+                showMessage('编辑失败', '', '', 'error');
+            }
+        }
+
+        $list_setting = $model_setting->getListSetting();
+        Tpl::output('list_setting', $list_setting);
+
+        $this->show_menu('slider');
+        Tpl::showpage('groupbuy.slider');
+    }
+
+    /**
+     * 幻灯片清空
+     */
+    public function slider_clearOp()
+    {
+        $model_setting = Model('setting');
+        $update = array();
+        $update['live_pic1'] = '';
+        $update['live_link1'] = '';
+        $update['live_pic2'] = '';
+        $update['live_link2'] = '';
+        $update['live_pic3'] = '';
+        $update['live_link3'] = '';
+        $update['live_pic4'] = '';
+        $update['live_link4'] = '';
+        $res = $model_setting->updateSetting($update);
+        if ($res) {
+            dkcache('setting');
+            $this->log('清空抢购幻灯片设置', 1);
+            echo json_encode(array('result'=>'true'));
+        } else {
+            echo json_encode(array('result'=>'false'));
+        }
+        exit;
+    }
+
+    /**
+     * 页面内导航菜单
+     *
+     * @param string 	$menu_key	当前导航的menu_key
+     * @param array 	$array		附加菜单
+     * @return
+     */
+    private function show_menu($menu_key) {
+        $menu_array = array(
+            'groupbuy_list'=>array('menu_type'=>'link','menu_name'=>'抢购活动','menu_url'=>'index.php?act=groupbuy&op=groupbuy_list'),
+            'groupbuy_quota'=>array('menu_type'=>'link','menu_name'=>'套餐管理','menu_url'=>'index.php?act=groupbuy&op=groupbuy_quota'),
+            'class_list'=>array('menu_type'=>'link','menu_name'=>Language::get('groupbuy_class_list'),'menu_url'=>'index.php?act=groupbuy&op=class_list'),
+            'class_add'=>array('menu_type'=>'link','menu_name'=>Language::get('groupbuy_class_add'),'menu_url'=>'index.php?act=groupbuy&op=class_add'),
+            'price_list'=>array('menu_type'=>'link','menu_name'=>Language::get('groupbuy_price_list'),'menu_url'=>'index.php?act=groupbuy&op=price_list'),
+            'price_add'=>array('menu_type'=>'link','menu_name'=>Language::get('groupbuy_price_add'),'menu_url'=>'index.php?act=groupbuy&op=price_add'),
+            'price_edit'=>array('menu_type'=>'link','menu_name'=>Language::get('groupbuy_price_edit'),'menu_url'=>'index.php?act=groupbuy&op=price_edit'),
+            'groupbuy_setting'=>array('menu_type'=>'link','menu_name'=>'设置','menu_url'=>urlAdmin('groupbuy', 'groupbuy_setting')),
+            'slider'=>array('menu_type'=>'link','menu_name'=>'幻灯片管理','menu_url'=>urlAdmin('groupbuy', 'slider')),
+        );
+        switch ($menu_key) {
+            case 'class_add':
+                unset($menu_array['price_add']);
+                unset($menu_array['price_edit']);
+                break;
+            case 'price_add':
+                unset($menu_array['class_add']);
+                unset($menu_array['price_edit']);
+                break;
+            case 'price_edit':
+                unset($menu_array['class_add']);
+                unset($menu_array['price_add']);
+                break;
+            default:
+                unset($menu_array['class_add']);
+                unset($menu_array['price_add']);
+                unset($menu_array['price_edit']);
+                break;
+        }
+        $menu_array[$menu_key]['menu_type'] = 'text';
+        Tpl::output('menu',$menu_array);
+    }
+}

+ 252 - 0
admin/control/help_store.php

@@ -0,0 +1,252 @@
+<?php
+/**
+ * 店铺帮助管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class help_storeControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+	}
+
+	/**
+	 * 帮助列表
+	 */
+	public function help_storeOp() {
+		$model_help = Model('help');
+		$condition = array();
+		$condition['help_id'] = array('gt','99');//内容列表不显示系统自动添加的数据
+		if (trim($_GET['key']) != '') {
+			$condition['help_title'] = array('like','%'.$_GET['key'].'%');
+		}
+		$type_id = intval($_GET['type_id']);
+		if ($type_id > 0) {
+			$condition['type_id'] = $type_id;
+		}
+		$help_list = $model_help->getStoreHelpList($condition,10);
+		Tpl::output('help_list',$help_list);
+		Tpl::output('show_page',$model_help->showpage());
+
+		$type_list = $model_help->getStoreHelpTypeList();
+		Tpl::output('type_list',$type_list);
+
+		Tpl::showpage('help_store.list');
+	}
+
+	/**
+	 * 帮助类型
+	 */
+	public function help_typeOp() {
+		$model_help = Model('help');
+		$condition = array();
+
+		$type_list = $model_help->getStoreHelpTypeList($condition,10);
+		Tpl::output('type_list',$type_list);
+		Tpl::output('show_page',$model_help->showpage());
+
+		Tpl::showpage('help_store_type.list');
+	}
+
+	/**
+	 * 新增帮助
+	 *
+	 */
+	public function add_helpOp() {
+		$model_help = Model('help');
+		if (chksubmit()) {
+		    $help_array = array();
+		    $help_array['help_title'] = $_POST['help_title'];
+		    $help_array['help_url'] = $_POST['help_url'];
+		    $help_array['help_info'] = $_POST['content'];
+		    $help_array['help_sort'] = intval($_POST['help_sort']);
+		    $help_array['type_id'] = intval($_POST['type_id']);
+		    $help_array['update_time'] = time();
+		    $help_array['page_show'] = '1';//页面类型:1为店铺,2为会员
+		    $state = $model_help->addHelp($help_array);
+			if ($state) {
+			    if (!empty($_POST['file_id']) && is_array($_POST['file_id'])){
+			        $model_help->editHelpPic($state, $_POST['file_id']);
+			    }
+			    $this->log('新增店铺帮助,编号'.$state);
+				showMessage(Language::get('nc_common_save_succ'),'index.php?act=help_store&op=help_store');
+			} else {
+				showMessage(Language::get('nc_common_save_fail'));
+			}
+		}
+		$type_list = $model_help->getStoreHelpTypeList();
+		Tpl::output('type_list',$type_list);
+		$condition = array();
+		$condition['item_id'] = '0';
+		$pic_list = $model_help->getHelpPicList($condition);
+		Tpl::output('pic_list',$pic_list);
+	    Tpl::showpage('help_store.add');
+	}
+
+	/**
+	 * 编辑帮助
+	 *
+	 */
+	public function edit_helpOp() {
+		$model_help = Model('help');
+		$condition = array();
+		$help_id = intval($_GET['help_id']);
+		$condition['help_id'] = $help_id;
+		$help_list = $model_help->getStoreHelpList($condition);
+		$help = $help_list[0];
+		Tpl::output('help',$help);
+		if (chksubmit()) {
+		    $help_array = array();
+		    $help_array['help_title'] = $_POST['help_title'];
+		    $help_array['help_url'] = $_POST['help_url'];
+		    $help_array['help_info'] = $_POST['content'];
+		    $help_array['help_sort'] = intval($_POST['help_sort']);
+		    $help_array['type_id'] = intval($_POST['type_id']);
+		    $help_array['update_time'] = time();
+		    $state = $model_help->editHelp($condition, $help_array);
+			if ($state) {
+			    $this->log('编辑店铺帮助,编号'.$help_id);
+				showMessage(Language::get('nc_common_save_succ'),'index.php?act=help_store&op=help_store');
+			} else {
+				showMessage(Language::get('nc_common_save_fail'));
+			}
+		}
+		$type_list = $model_help->getStoreHelpTypeList();
+		Tpl::output('type_list',$type_list);
+		$condition = array();
+		$condition['item_id'] = $help_id;
+		$pic_list = $model_help->getHelpPicList($condition);
+		Tpl::output('pic_list',$pic_list);
+	    Tpl::showpage('help_store.edit');
+	}
+
+	/**
+	 * 删除帮助
+	 *
+	 */
+	public function del_helpOp() {
+		$model_help = Model('help');
+		$condition = array();
+		$condition['help_id'] = intval($_GET['help_id']);
+		$state = $model_help->delHelp($condition,array($condition['help_id']));
+		if ($state) {
+		    $this->log('删除店铺帮助,编号'.$condition['help_id']);
+		    showMessage(Language::get('nc_common_del_succ'),'index.php?act=help_store&op=help_store');
+		} else {
+		    showMessage(Language::get('nc_common_del_fail'));
+		}
+	}
+
+	/**
+	 * 新增帮助类型
+	 *
+	 */
+	public function add_typeOp() {
+		$model_help = Model('help');
+		if (chksubmit()) {
+		    $type_array = array();
+		    $type_array['type_name'] = $_POST['type_name'];
+		    $type_array['type_sort'] = intval($_POST['type_sort']);
+		    $type_array['help_show'] = intval($_POST['help_show']);//是否显示,0为否,1为是
+		    $type_array['page_show'] = '1';//页面类型:1为店铺,2为会员
+
+		    $state = $model_help->addHelpType($type_array);
+			if ($state) {
+			    $this->log('新增店铺帮助类型,编号'.$state);
+				showMessage(Language::get('nc_common_save_succ'),'index.php?act=help_store&op=help_type');
+			} else {
+				showMessage(Language::get('nc_common_save_fail'));
+			}
+		}
+		Tpl::showpage('help_store_type.add');
+	}
+
+	/**
+	 * 编辑帮助类型
+	 *
+	 */
+	public function edit_typeOp() {
+		$model_help = Model('help');
+		$condition = array();
+		$condition['type_id'] = intval($_GET['type_id']);
+		$type_list = $model_help->getHelpTypeList($condition);
+		$type = $type_list[0];
+		if (chksubmit()) {
+		    $type_array = array();
+		    $type_array['type_name'] = $_POST['type_name'];
+		    $type_array['type_sort'] = intval($_POST['type_sort']);
+		    $type_array['help_show'] = intval($_POST['help_show']);//是否显示,0为否,1为是
+			$state = $model_help->editHelpType($condition, $type_array);
+			if ($state) {
+			    $this->log('编辑店铺帮助类型,编号'.$condition['type_id']);
+				showMessage(Language::get('nc_common_save_succ'),'index.php?act=help_store&op=help_type');
+			} else {
+				showMessage(Language::get('nc_common_save_fail'));
+			}
+		}
+		Tpl::output('type',$type);
+		Tpl::showpage('help_store_type.edit');
+	}
+
+	/**
+	 * 删除帮助类型
+	 *
+	 */
+	public function del_typeOp() {
+		$model_help = Model('help');
+		$condition = array();
+		$condition['type_id'] = intval($_GET['type_id']);
+		$state = $model_help->delHelpType($condition);
+		if ($state) {
+		    $this->log('删除店铺帮助类型,编号'.$condition['type_id']);
+		    showMessage(Language::get('nc_common_del_succ'),'index.php?act=help_store&op=help_type');
+		} else {
+		    showMessage(Language::get('nc_common_del_fail'));
+		}
+	}
+
+	/**
+	 * 上传图片
+	 */
+	public function upload_picOp() {
+	    $data = array();
+		if (!empty($_FILES['fileupload']['name'])) {//上传图片
+		    $fprefix = 'help_store';
+			$upload = new UploadFile();
+			$upload->set('default_dir',ATTACH_ARTICLE);
+			$upload->set('fprefix',$fprefix);
+			$upload->upfile('fileupload');
+		    $model_upload = Model('upload');
+		    $file_name = $upload->file_name;
+		    $insert_array = array();
+		    $insert_array['file_name'] = $file_name;
+		    $insert_array['file_size'] = $_FILES['fileupload']['size'];
+		    $insert_array['upload_time'] = time();
+		    $insert_array['item_id'] = intval($_GET['item_id']);
+		    $insert_array['upload_type'] = '2';
+		    $result = $model_upload->add($insert_array);
+			if ($result) {
+			    $data['file_id'] = $result;
+			    $data['file_name'] = $file_name;
+			}
+		}
+	    echo json_encode($data);exit;
+	}
+
+	/**
+	 * 删除图片
+	 */
+	public function del_picOp() {
+		$condition = array();
+		$condition['upload_id'] = intval($_GET['file_id']);
+	    $model_help = Model('help');
+	    $state = $model_help->delHelpPic($condition);
+		if ($state) {
+		    echo 'true';exit;
+		} else {
+		    echo 'false';exit;
+		}
+	}
+}

+ 68 - 0
admin/control/index.php

@@ -0,0 +1,68 @@
+<?php
+/**
+ * 默认展示页面
+ *
+ * 默认展示页面
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+
+class indexControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('index');
+	}
+	public function indexOp(){
+		//输出管理员信息
+		Tpl::output('admin_info',$this->getAdminInfo());
+		//输出菜单
+		$this->getNav('',$top_nav,$left_nav,$map_nav);
+		Tpl::output('top_nav',$top_nav);
+		Tpl::output('left_nav',$left_nav);
+		Tpl::output('map_nav',$map_nav);
+
+		Tpl::showpage('index','index_layout');
+	}
+
+	/**
+	 * 退出
+	 */
+	public function logoutOp(){
+		setNcCookie('sys_key','',-1,'',null);
+		@header("Location: index.php");
+		exit;
+	}
+	/**
+	 * 修改密码
+	 */
+	public function modifypwOp(){
+		if (chksubmit()){
+			if (trim($_POST['new_pw']) !== trim($_POST['new_pw2'])){
+				//showMessage('两次输入的密码不一致,请重新输入');
+				showMessage(Language::get('index_modifypw_repeat_error'));
+			}
+			$admininfo = $this->getAdminInfo();
+			//查询管理员信息
+			$admin_model = Model('admin');
+			$admininfo = $admin_model->getOneAdmin($admininfo['id']);
+			if (!is_array($admininfo) || count($admininfo)<= 0){
+				showMessage(Language::get('index_modifypw_admin_error'));
+			}
+			//旧密码是否正确
+			if ($admininfo['admin_password'] != md5(trim($_POST['old_pw']))){
+				showMessage(Language::get('index_modifypw_oldpw_error'));
+			}
+			$new_pw = md5(trim($_POST['new_pw']));
+			$result = $admin_model->updateAdmin(array('admin_password'=>$new_pw,'admin_id'=>$admininfo['admin_id']));
+			if ($result){
+				showMessage(Language::get('index_modifypw_success'));
+			}else{
+				showMessage(Language::get('index_modifypw_fail'));
+			}
+		}else{
+			Language::read('admin');
+			Tpl::showpage('admin.modifypw');
+		}
+	}
+}

+ 405 - 0
admin/control/inform.php

@@ -0,0 +1,405 @@
+<?php
+/**
+ * 举报管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class informControl extends SystemControl{
+    public function __construct(){
+        parent::__construct();
+        Language::read('inform');
+    }
+
+    /*
+     * 默认操作列出未处理的举报
+     */
+    public function indexOp(){
+        $this->inform_listOp();
+    }
+
+
+    /*
+     * 未处理的举报列表
+     */
+    public function inform_listOp(){
+
+        $this->get_inform_list(1,'inform.list','inform_list');
+    }
+
+    /*
+     * 已处理的举报列表
+     */
+    public function inform_handled_listOp(){
+
+        $this->get_inform_list(2,'inform_handled.list','inform_handled_list');
+    }
+
+
+    /*
+     * 获取举报列表
+     */
+    private function get_inform_list($type,$template,$op){
+
+        //实例化分页
+        $page = new Page();
+        $page->setEachNum(10) ;
+        $page->setStyle('admin') ;
+
+        //获得举报列表
+        $model_inform = Model('inform') ;
+
+        //搜索条件
+        $condition = array();
+        $condition['inform_goods_name'] = trim($_GET['input_inform_goods_name']);
+        $condition['inform_member_name'] = trim($_GET['input_inform_member_name']);
+        $condition['inform_type'] = trim($_GET['input_inform_type']);
+        $condition['inform_subject'] = trim($_GET['input_inform_subject']);
+        $condition['inform_datetime_start'] = strtotime($_GET['input_inform_datetime_start']);
+        $condition['inform_datetime_end'] = strtotime($_GET['input_inform_datetime_end']);
+        if($type === 1) {
+           $condition['order'] = 'inform_id asc';
+        }
+        else {
+           $condition['order'] = 'inform_id desc';
+        }
+        $condition['inform_state'] = $type;
+        $inform_list = $model_inform->getInform($condition,$page) ;
+
+        $this->show_menu($op);
+        Tpl::output('list', $inform_list) ;
+        Tpl::output('show_page',$page->show()) ;
+        Tpl::showpage($template) ;
+    }
+
+
+
+    /*
+     * 举报类型列表
+     */
+    public function inform_subject_type_listOp() {
+
+        //实例化分页
+        $page = new Page();
+        $page->setEachNum(10) ;
+        $page->setStyle('admin') ;
+
+        //获得有效举报类型列表
+        $model_inform_subject_type = Model('inform_subject_type') ;
+        $inform_type_list = $model_inform_subject_type->getActiveInformSubjectType($page) ;
+
+        $this->show_menu('inform_subject_type_list');
+        Tpl::output('list', $inform_type_list) ;
+        Tpl::output('show_page',$page->show()) ;
+        Tpl::showpage('inform_subject_type.list') ;
+    }
+
+
+    /*
+     * 举报主题列表
+     */
+    public function inform_subject_listOp(){
+
+        //实例化分页
+        $page = new Page();
+        $page->setEachNum(10) ;
+        $page->setStyle('admin') ;
+
+        //获得举报主题列表
+        $model_inform_subject = Model('inform_subject') ;
+
+        //搜索条件
+        $condition = array();
+        $condition['order'] = 'inform_subject_id asc';
+        $condition['inform_subject_type_id'] = trim($_GET['inform_subject_type_id']);
+        $condition['inform_subject_state'] = 1;
+        $inform_subject_list = $model_inform_subject->getInformSubject($condition,$page) ;
+
+        //获取有效举报类型
+        $model_inform_subject_type = Model('inform_subject_type');
+        $type_list= $model_inform_subject_type->getActiveInformSubjectType();
+
+        $this->show_menu('inform_subject_list');
+        Tpl::output('list', $inform_subject_list) ;
+        Tpl::output('type_list', $type_list) ;
+        Tpl::output('show_page',$page->show()) ;
+        Tpl::showpage('inform_subject.list') ;
+    }
+
+    /*
+     * 添加举报类型页面
+     */
+    public function inform_subject_type_addOp(){
+
+        $this->show_menu('inform_subject_type_add');
+        Tpl::showpage('inform_subject_type.add') ;
+
+    }
+
+    /*
+     * 保存添加的举报类型
+     */
+    public function inform_subject_type_saveOp(){
+
+        //获取提交的内容
+        $input['inform_type_name'] = trim($_POST['inform_type_name']);
+        $input['inform_type_desc']	= trim($_POST['inform_type_desc']);
+
+        //验证提交的内容
+        $obj_validate = new Validate();
+        $obj_validate->validateparam = array(
+            array("input"=>$input['inform_type_name'], "require"=>"true","validator"=>"Length","min"=>"1","max"=>"50","message"=>Language::get('inform_type_null')),
+            array("input"=>$input['inform_type_desc'], "require"=>"true","validator"=>"Length","min"=>"1","max"=>"100","message"=>Language::get('inform_type_desc_null')),
+        );
+        $error = $obj_validate->validate();
+
+        if ($error != ''){
+            showMessage($error);
+        }
+        else {
+            //验证成功保存
+            $input['inform_type_state'] = 1;
+            $model_inform_subject_type = Model('inform_subject_type');
+            $model_inform_subject_type->saveInformSubjectType($input);
+            $this->log(L('nc_add,inform_type').'['.$_POST['inform_type_name'].']',1);
+            showMessage(Language::get('nc_common_save_succ'),'index.php?act=inform&op=inform_subject_type_list');
+        }
+    }
+
+    /*
+     * 删除举报类型,伪删除只是修改标记
+     */
+    public function inform_subject_type_dropOp(){
+
+        $inform_type_id = trim($_POST['inform_type_id']);
+        $inform_type_id = "'".implode("','", explode(',', $inform_type_id))."'";
+        if(empty($inform_type_id)) {
+            showMessage(Language::get('param_error'),'index.php?act=inform');
+        }
+
+        //删除分类
+        $model_inform_subject_type = Model('inform_subject_type');
+        $update_array = array();
+        $update_array['inform_type_state'] = 2;
+        $where_array = array();
+        $where_array['in_inform_type_id'] = $inform_type_id;
+        $model_inform_subject_type->updateInformSubjectType($update_array,$where_array);
+
+        //删除分类下边的主题
+        $model_inform_subject= Model('inform_subject');
+        $update_subject_array = array();
+        $update_subject_array['inform_subject_state'] = 2;
+        $where_subject_array = array();
+        $where_subject_array['in_inform_subject_type_id'] = $inform_type_id;
+        $model_inform_subject->updateInformSubject($update_subject_array,$where_subject_array);
+		$this->log(L('nc_del,inform_type').'[ID:'.$_POST['inform_type_id'].']',1);
+        showMessage(Language::get('nc_common_del_succ'),'index.php?act=inform&op=inform_subject_type_list');
+
+    }
+
+
+    /*
+     * 添加举报主题页面
+     */
+    public function inform_subject_addOp(){
+
+        //获得可用举报类型列表
+        $model_inform_subject_type = Model('inform_subject_type');
+        $inform_type_list = $model_inform_subject_type->getActiveInformSubjectType();
+
+        if(empty($inform_type_list)) {
+            showMessage(Language::get('inform_type_error'));
+        }
+
+        $this->show_menu('inform_subject_add');
+        Tpl::output('list', $inform_type_list) ;
+        Tpl::showpage('inform_subject.add') ;
+
+    }
+
+    /*
+     * 保存添加的举报主题
+     */
+    public function inform_subject_saveOp(){
+
+        //获取提交的内容
+        list($input['inform_subject_type_id'],$input['inform_subject_type_name']) = explode(',',trim($_POST['inform_subject_type']));
+        $input['inform_subject_content'] = trim($_POST['inform_subject_content']);
+
+        //验证提交的内容
+        $obj_validate = new Validate();
+        $obj_validate->validateparam = array(
+            array("input"=>$input['inform_subject_type_name'], "require"=>"true","validator"=>"Length","min"=>"1","max"=>"50","message"=>Language::get('inform_subject_null')),
+            array("input"=>$input['inform_subject_content'], "require"=>"true","validator"=>"Length","min"=>"1","max"=>"50","message"=>Language::get('inform_content_null')),
+            array("input"=>$input['inform_subject_type_id'], "require"=>"true","validator"=>"Number","message"=>Language::get('param_error')),
+        );
+        $error = $obj_validate->validate();
+
+        if ($error != ''){
+            showMessage($error);
+        }
+        else {
+            //验证成功保存
+            $input['inform_subject_state'] = 1;
+            $model_inform_subject = Model('inform_subject');
+            $model_inform_subject->saveInformSubject($input);
+            $this->log(L('nc_add,inform_subject').'['.$input['inform_subject_type_name'].']',1);
+            showMessage(Language::get('nc_common_save_succ'),'index.php?act=inform&op=inform_subject_list');
+        }
+    }
+
+    /*
+     * 删除举报主题,伪删除只是修改标记
+     */
+    public function inform_subject_dropOp(){
+
+        $inform_subject_id = trim($_POST['inform_subject_id']);
+        if(empty($inform_subject_id)) {
+            showMessage(Language::get('param_error'),'index.php?act=inform');
+        }
+        $model_inform_subject= Model('inform_subject');
+        $update_array = array();
+        $update_array['inform_subject_state'] = 2;
+        $where_array = array();
+        $where_array['in_inform_subject_id'] = "'".implode("','", explode(',', $inform_subject_id))."'";
+        $model_inform_subject->updateInformSubject($update_array,$where_array);
+        $this->log(L('nc_del,inform_subject').'['.$_POST['inform_subject_id'].']',1);
+        showMessage(Language::get('nc_common_del_succ'),'index.php?act=inform&op=inform_subject_list');
+    }
+
+	/*
+	 * 显示处理举报
+	 */
+    public function show_handle_pageOp() {
+    	$this->show_menu('inform_list');
+        $inform_id = intval($_GET['inform_id']);
+        $inform_goods_name = urldecode($_GET['inform_goods_name']);
+
+        if(strtoupper(CHARSET) == 'GBK') {
+            $inform_goods_name = Language::getGBK($inform_goods_name);
+        }
+
+        TPL::output('inform_id',$inform_id);
+        TPL::output('inform_goods_name',$inform_goods_name);
+        Tpl::showpage('inform.handle');
+    }
+
+    /*
+     * 处理举报
+     */
+    public function inform_handleOp(){
+
+        $inform_id = intval($_POST['inform_id']);
+        $inform_handle_type = intval($_POST['inform_handle_type']);
+        $inform_handle_message = trim($_POST['inform_handle_message']);
+
+        if(empty($inform_id)||empty($inform_handle_type)) {
+            showMessage(Language::get('param_error'),'');
+        }
+
+        //验证输入的数据
+        $obj_validate = new Validate();
+        $obj_validate->validateparam = array(
+
+            array("input"=>$inform_handle_message, "require"=>"true","validator"=>"Length","min"=>"1","max"=>"100","message"=>Language::get('inform_handle_message_null')),
+        );
+        $error = $obj_validate->validate();
+        if ($error != ''){
+            showMessage($error);
+        }
+
+        $model_inform = Model('inform');
+        $inform_info = $model_inform->getoneInform($inform_id);
+        if(empty($inform_info)||intval($inform_info['inform_state'])===2) {
+            showMessage(Language::get('param_error'));
+        }
+
+        $update_array = array();
+        $where_array = array();
+
+        //根据选择处理
+        switch($inform_handle_type) {
+
+            case 1:
+                $where_array['inform_id'] = $inform_id;
+                break;
+            case 2:
+                //恶意举报,清理所有该用户的举报,设置该用户禁止举报
+                $where_array['inform_member_id'] = $inform_info['inform_member_id'];
+                $this->denyMemberInform($inform_info['inform_member_id']);
+                break;
+            case 3:
+                //有效举报,商品禁售
+                $where_array['inform_id'] = $inform_id;
+                $this->denyGoods($inform_info['inform_goods_id']);
+                break;
+            default:
+                showMessage(Language::get('param_error'));
+
+        }
+
+        $update_array['inform_state'] = 2;
+        $update_array['inform_handle_type'] = $inform_handle_type;
+        $update_array['inform_handle_message'] = $inform_handle_message;
+        $update_array['inform_handle_datetime'] = time();
+        $admin_info = $this->getAdminInfo();
+        $update_array['inform_handle_member_id'] = $admin_info['id'];
+        $where_array['inform_state'] = 1;
+
+        if($model_inform->updateInform($update_array,$where_array)) {
+        	$this->log(L('inform_text_handle,inform').'[ID:'.$inform_id.']',1);
+            showMessage(Language::get('nc_common_op_succ'),'index.php?act=inform&op=inform_list');
+        }
+        else {
+            showMessage(Language::get('nc_common_op_fail'));
+        }
+    }
+
+    /*
+     * 禁止该用户举报
+     */
+    private function denyMemberInform($member_id) {
+
+        $model_member = Model('member');
+        $param = array();
+        $param['inform_allow'] = 2;
+        return $model_member->editMember(array('member_id'=>$member_id),$param);
+    }
+
+    /*
+     * 禁止商品销售
+     */
+    private function denyGoods($goods_id) {
+        //修改商品状态
+        $model_goods = Model('goods');
+        $goods_info = $model_goods->getGoodsInfoByID($goods_id, 'goods_commonid');
+        if (empty($goods_info)) {
+            return true;
+        }
+        return Model('goods')->editProducesLockUp(array('goods_stateremark' => '商品被举报,平台禁售'),array('goods_commonid' => $goods_info['goods_commonid']));
+
+    }
+
+	/**
+	 * 用户中心右边,小导航
+	 *
+	 * @param string	$menu_type	导航类型
+	 * @param string 	$menu_key	当前导航的menu_key
+	 * @param array 	$array		附加菜单
+	 * @return
+	 */
+	private function show_menu($menu_key) {
+		$menu_array = array(
+			'inform_list'=>array('menu_type'=>'link','menu_name'=>Language::get('inform_state_unhandle'),'menu_url'=>'index.php?act=inform&op=inform_list'),
+			'inform_handled_list'=>array('menu_type'=>'link','menu_name'=>Language::get('inform_state_handled'),'menu_url'=>'index.php?act=inform&op=inform_handled_list'),
+			'inform_subject_type_list'=>array('menu_type'=>'link','menu_name'=>Language::get('inform_type'),'menu_url'=>'index.php?act=inform&op=inform_subject_type_list'),
+			'inform_subject_type_add'=>array('menu_type'=>'link','menu_name'=>Language::get('inform_type_add'),'menu_url'=>'index.php?act=inform&op=inform_subject_type_add'),
+			'inform_subject_list'=>array('menu_type'=>'link','menu_name'=>Language::get('inform_subject'),'menu_url'=>'index.php?act=inform&op=inform_subject_list'),
+			'inform_subject_add'=>array('menu_type'=>'link','menu_name'=>Language::get('inform_subject_add'),'menu_url'=>'index.php?act=inform&op=inform_subject_add'),
+		);
+        $menu_array[$menu_key]['menu_type'] = 'text';
+		Tpl::output('menu',$menu_array);
+    }
+}

+ 260 - 0
admin/control/link.php

@@ -0,0 +1,260 @@
+<?php
+/**
+ * 合作伙伴管理
+ */
+defined('InShopNC') or exit('Access Invalid!');
+class linkControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('link');
+	}
+	/**
+	 * 合作伙伴
+	 */
+	public function linkOp(){
+		$lang	= Language::getLangContent();
+		$model_link = Model('link');
+		/**
+		 * 删除
+		 */
+		if ($_POST['form_submit'] == 'ok'){
+			if (is_array($_POST['del_id']) && !empty($_POST['del_id'])){
+				foreach ($_POST['del_id'] as $k => $v){
+					/**
+					 * 删除图片
+					 */
+					$v = intval($v);
+					$tmp = $model_link->getOneLink($v);
+					if (!empty($tmp['link_pic'])){
+						@unlink(BasePath.DS.ATTACH_LINK.DS.$tmp['link_pic']);
+					}
+					unset($tmp);
+					$model_link->del($v);
+				}
+				//H('link',null);;
+				showMessage($lang['link_index_del_succ']);
+			}else {
+				showMessage($lang['link_index_choose_del']);
+			}
+		}
+		
+		/**
+		 * 检索条件
+		 */
+		$condition['like_link_title'] = $_GET['search_link_title'];
+		$condition['order'] = 'link_sort asc';
+		Tpl::output('search_link_title',$_GET['search_link_title']);
+		/**
+		 * 分页
+		 */
+		$page	= new Page();
+		$page->setEachNum(10);
+		$page->setStyle('admin');
+		if ($_GET['type'] == '0'){
+			$condition['link_pic'] = 'yes';
+		}
+		if ($_GET['type'] == '1'){
+			$condition['link_pic'] = 'no';
+		}
+		$link_list = $model_link->getLinkList($condition,$page);
+		/**
+		 * 整理图片链接
+		 */
+		if (is_array($link_list)){
+			foreach ($link_list as $k => $v){
+				if (!empty($v['link_pic'])){
+					$link_list[$k]['link_pic'] = UPLOAD_SITE_URL.'/'.ATTACH_PATH.'/common/'.DS.$v['link_pic'];
+				}
+			}
+		}
+		
+		Tpl::output('link_list',$link_list);
+		Tpl::output('page',$page->show());
+		Tpl::showpage('link.index');
+	}
+	
+	/**
+	 * 合作伙伴删除
+	 */
+	public function link_delOp(){
+		$lang	= Language::getLangContent();
+		if (intval($_GET['link_id']) > 0){
+			$model_link = Model('link');
+			/**
+			 * 删除图片
+			 */
+			$tmp = $model_link->getOneLink(intval($_GET['link_id']));
+			if (!empty($tmp['link_pic'])){
+				@unlink(BASE_UPLOAD_PATH.DS.ATTACH_COMMON.DS.$tmp['link_pic']);
+			}
+			$model_link->del($tmp['link_id']);
+			//H('link',null);;
+			showMessage($lang['link_index_del_succ'],'index.php?act=link&op=link');
+		}else {
+			showMessage($lang['link_index_choose_del'],'index.php?act=link&op=link');
+		}
+	}
+	
+	/**
+	 * 合作伙伴 添加
+	 */
+	public function link_addOp(){
+		$lang	= Language::getLangContent();
+		$model_link = Model('link');
+		if ($_POST['form_submit'] == 'ok'){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["link_title"], "require"=>"true", "message"=>$lang['link_add_title_null']),
+				//array("input"=>$_POST["link_url"], "require"=>"true", 'validator'=>'Url', "message"=>$lang['link_add_url_wrong']),
+				array("input"=>$_POST["link_sort"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['link_add_sort_int']),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				/**
+				 * 上传图片
+				 */
+				if ($_FILES['link_pic']['name'] != ''){
+					$upload = new UploadFile();
+					$upload->set('default_dir',ATTACH_COMMON);
+					
+					$result = $upload->upfile('link_pic');
+					if ($result){
+						$_POST['link_pic'] = $upload->file_name;
+					}else {
+						showMessage($upload->error);
+					}
+				}
+				
+				$insert_array = array();
+				$insert_array['link_title'] = trim($_POST['link_title']);
+				$insert_array['link_url'] = trim($_POST['link_url']);
+				$insert_array['link_pic'] = trim($_POST['link_pic']);
+				$insert_array['link_sort'] = trim($_POST['link_sort']);
+				
+				$result = $model_link->add($insert_array);
+				if ($result){
+					//H('link',null);;
+					$url = array(
+						array(
+							'url'=>'index.php?act=link&op=link_add',
+							'msg'=>$lang['link_add_again'],
+						),
+						array(
+							'url'=>'index.php?act=link&op=link',
+							'msg'=>$lang['link_add_back_to_list'],
+						)
+					);
+					showMessage($lang['link_add_succ'],$url);
+				}else {
+					showMessage($lang['link_add_fail']);
+				}
+			}
+		}
+		
+		Tpl::showpage('link.add');
+	}
+	
+	/**
+	 * 合作伙伴 编辑
+	 */
+	public function link_editOp(){
+		$lang	= Language::getLangContent();
+		$model_link = Model('link');
+		
+		if ($_POST['form_submit'] == 'ok'){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["link_title"], "require"=>"true", "message"=>$lang['link_add_title_null']),
+				//array("input"=>$_POST["link_url"], "require"=>"true", 'validator'=>'Url', "message"=>$lang['link_add_url_wrong']),
+				array("input"=>$_POST["link_sort"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['link_add_sort_int']),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				/**
+				 * 上传图片
+				 */
+				if ($_FILES['link_pic']['name'] != ''){
+					$upload = new UploadFile();
+					$upload->set('default_dir',ATTACH_PATH.'/common');
+					
+					$result = $upload->upfile('link_pic');
+					if ($result){
+						$_POST['link_pic'] = $upload->file_name;
+					}else {
+						showMessage($upload->error);
+					}
+				}
+				
+				$update_array = array();
+				$update_array['link_id'] = intval($_POST['link_id']);
+				$update_array['link_title'] = trim($_POST['link_title']);
+				$update_array['link_url'] = trim($_POST['link_url']);
+				if ($_POST['link_pic']){
+					$update_array['link_pic'] = $_POST['link_pic'];
+				}
+				$update_array['link_sort'] = trim($_POST['link_sort']);
+				
+				$result = $model_link->update($update_array);
+				if ($result){
+					//H('link',null);;
+					/**
+					 * 删除图片
+					 */
+					if (!empty($_POST['link_pic']) && !empty($_POST['old_link_pic'])){
+						@unlink(BASE_UPLOAD_PATH.DS.ATTACH_COMMON.DS.$_POST['old_link_pic']);
+					}
+					$url = array(
+						array(
+							'url'=>'index.php?act=link&op=link_edit&link_id='.intval($_POST['link_id']),
+							'msg'=>$lang['link_edit_again']
+						),
+						array(
+							'url'=>'index.php?act=link&op=link',
+							'msg'=>$lang['link_add_back_to_list'],
+						)
+					);
+					showMessage($lang['link_edit_succ'],$url);
+				}else {
+					showMessage($lang['link_edit_fail']);
+				}
+			}
+		}
+		
+		$link_array = $model_link->getOneLink(intval($_GET['link_id']));
+		if (empty($link_array)){
+			showMessage($lang['wrong_argument']);
+		}
+		
+		Tpl::output('link_array',$link_array);
+		Tpl::showpage('link.edit');
+	}
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			/**
+			 * 合作伙伴 排序
+			 */
+			case 'link_sort':
+				$model_link = Model('link');
+				$update_array = array();
+				$update_array['link_id'] = intval($_GET['id']);
+				$update_array[$_GET['column']] = trim($_GET['value']);
+				$result = $model_link->update($update_array);
+				//H('link',null);;
+				echo 'true';exit;
+				break;
+		}
+	}
+}

+ 219 - 0
admin/control/live_area.php

@@ -0,0 +1,219 @@
+<?php
+/**
+ *
+ *	城市管理
+ *
+ *
+ *
+ * */
+
+defined('InShopNC') or exit('Access Invalid!');
+class live_areaControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('live');
+	}
+
+	public function indexOp(){
+		$this->live_areaOp();
+	}
+
+	/*
+	 * 区域列表
+	 */
+	public function live_areaOp(){
+
+		$condition 		= array();//搜索条件
+		$condition['parent_area_id'] = 0;
+		if(isset($_GET['live_area_name']) && !empty($_GET['live_area_name'])){
+			$condition['live_area_name'] = array('like',"%{$_GET['live_area_name']}%");
+			Tpl::output('live_area_name',$_GET['live_area_name']);
+		}
+
+		if(isset($_GET['first_letter']) && !empty($_GET['first_letter'])){
+			$condition['first_letter'] = $_GET['first_letter'];
+			Tpl::output('first_letter',$_GET['first_letter']);
+		}
+
+		$model_live_area = Model('live_area');
+		$area = $model_live_area->getList($condition);
+		Tpl::output('list',$area);//区域列表
+		Tpl::output('show_page',$model_live_area->showpage());
+
+		//城市首字母
+		$letterArr	=	array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
+		Tpl::output('letter',$letterArr);
+
+		Tpl::showpage("livearea.list");
+	}
+
+
+	/*
+	 * 添加区域
+	 */
+	public function area_addOp(){
+		if(isset($_POST) && !empty($_POST)){
+			//数据验证
+			$obj_validate = new Validate();
+			$validate_array = array(
+				array('input'=>$_POST['live_area_name'],'require'=>'true','message'=>'区域名称不能为空'),
+				array('input'=>$_POST['first_letter'],'require'=>'true','message'=>'首字母不能为空'),
+			);
+			$obj_validate->validateparam = $validate_array;
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage(Language::get('error').$error,'','','error');
+			}
+
+			$params	=	array(
+				'live_area_name'		=>	trim($_POST['live_area_name']),
+				'parent_area_id'=>	isset($_POST['parent_area_id'])&&!empty($_POST['parent_area_id'])?$_POST['parent_area_id']:0,
+				'add_time'		=>	time(),
+				'first_letter'	=>	$_POST['first_letter'],
+				'area_number'	=>	trim($_POST['area_number']),
+				'post'			=>	trim($_POST['post']),
+				'hot_city'		=>	intval($_POST['is_hot'])
+			);
+
+			$model_live_area = Model('live_area');
+			$res = $model_live_area->add($params);
+
+			if($res){
+				$this->log('添加线下抢区域[ID:'.$res.']',1);
+				showMessage('添加成功','index.php?act=live_area','','succ');
+			}else{
+				showMessage('添加失败','index.php?act=live_area','','error');
+			}
+		}
+		//城市首字母
+		$letterArr	=	array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
+		Tpl::output('letter',$letterArr);
+
+		if(isset($_GET['live_area_id'])){
+			$model_live_area = Model('live_area');
+			$area = $model_live_area->live_areaInfo(array('live_area_id'=>intval($_GET['live_area_id'])));
+
+			Tpl::output('live_area_name',$area['live_area_name']);
+			Tpl::output('live_area_id',$area['live_area_id']);
+		}else{
+			Tpl::output('live_area_name',Language::get('live_area_first_area'));
+			Tpl::output('live_area_id',0);
+		}
+		Tpl::showpage("livearea.add");
+	}
+
+	/*
+	 * 编辑区域
+	 */
+	public function area_editOp(){
+		if(isset($_POST) && !empty($_POST)){
+			//数据验证
+			$obj_validate = new Validate();
+			$validate_array = array(
+				array('input'=>$_POST['live_area_name'],'require'=>'true','message'=>'区域名称不能为空'),
+				array('input'=>$_POST['first_letter'],'require'=>'true','message'=>'首字母不能为空'),
+			);
+			$obj_validate->validateparam = $validate_array;
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage(Language::get('error').$error,'','','error');
+			}
+
+			$params	=	array(
+				'live_area_name'	=> trim($_POST['live_area_name']),
+				'add_time'			=> time(),
+				'first_letter'		=> $_POST['first_letter'],
+				'area_number'		=> trim($_POST['area_number']),
+				'post'				=> trim($_POST['post']),
+				'hot_city'			=> intval($_POST['is_hot'])
+			);
+
+			$condition 	= array();
+			$condition['live_area_id'] = intval($_POST['live_area_id']);
+
+			$model_live_area = Model('live_area');
+			$res = $model_live_area->edit($condition,$params);
+			if($res){
+				H('city',null);//清除缓存
+				delCacheFile('city');
+				$this->log('编辑线下抢区域[ID:'.intval($_POST['live_area_id']).']',1);
+				showMessage('编辑成功','index.php?act=live_area','','succ');
+			}else{
+				showMessage('编辑失败','index.php?act=live_area','','error');
+			}
+		}
+
+		//城市首字母
+		$letterArr	=	array('A','B','C','D','E','F','G','H','J','K','L','M','N','P','Q','R','S','T','W','X','Y','Z');
+		Tpl::output('letter',$letterArr);
+
+		$model_area = Model('live_area');
+
+		$model = Model();
+		$area = $model->table('live_area')->where(array('live_area_id'=>intval($_GET['live_area_id'])))->find();
+		Tpl::output('area',$area);
+
+		$parent_area = $model->table('live_area')->where(array('live_area_id'=>$area['parent_area_id']))->find();
+		if(!empty($parent_area)){
+			Tpl::output('parent_area_name',$parent_area['live_area_name']);
+		}else{
+			Tpl::output('parent_area_name',Language::get('live_area_first_area'));
+		}
+
+		Tpl::showpage("livearea.edit");
+	}
+
+
+	/*
+	 *  查看区域
+	 */
+	public function view_areaOp(){
+		//获取区域信息
+		$model = Model();
+		$area_list = $model->table('live_area')->where(array('parent_area_id'=>intval($_GET['parent_area_id'])))->select();
+		Tpl::output('show_page',$model->showpage());
+		Tpl::output('list',$area_list);
+
+		$area = $model->table('live_area')->where(array('live_area_id'=>intval($_GET['parent_area_id'])))->find();
+		//print_r($area);exit;
+		Tpl::output('parent_area',$area);
+		Tpl::showpage("livedistrict.list");
+	}
+
+
+	/*
+	 * 查看商区
+	 */
+	public function view_mall_streetOp(){
+		//获取区域信息
+		$model = Model();
+		$mall_list = $model->table('live_area')->where(array('parent_area_id'=>intval($_GET['parent_area_id'])))->select();
+		Tpl::output('show_page',$model->showpage());
+		Tpl::output('list',$mall_list);
+
+		$mall = $model->table('live_area')->where(array('live_area_id'=>intval($_GET['parent_area_id'])))->find();
+		Tpl::output('parent_area',$mall);
+
+		Tpl::showpage("livemall.list");
+	}
+
+	/*
+	 * 删除区域
+	 */
+	public function area_dropOp(){
+		$model = Model();
+		$res = $model->table('live_area')->where(array('live_area_id'=>array('in',intval($_POST['live_area_id']))))->delete();
+
+		if($res){
+			H('city',null);//清除缓存
+			delCacheFile('city');
+			$this->log('删除线下抢区域[ID:'.intval($_POST['live_area_id']).']',1);
+			showMessage('删除成功','index.php?act=live_area','','succ');
+		}else{
+			showMessage('删除失败','index.php?act=live_area','','error');
+		}
+	}
+
+
+
+}

+ 178 - 0
admin/control/live_class.php

@@ -0,0 +1,178 @@
+<?php
+/**
+ * 下线抢购分类
+ *
+ *
+ *
+ *
+ * */
+
+defined('InShopNC') or exit('Access Invalid!');
+class live_classControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('live');
+	}
+
+	public function indexOp(){
+		$this->live_classOp();
+	}
+
+	/*
+	 * 线下抢分类
+	 */
+	public function live_classOp(){
+		$model_live_class = Model('live_class');
+		$list = $model_live_class->getList();
+		Tpl::output('list',$list);
+		Tpl::showpage('live.groupbuyclass');
+	}
+
+	/*
+	 * 添加分类
+	 */
+	public function add_classOp(){
+		if(chksubmit()){//添加线下抢购分类
+			//数据验证
+			$obj_validate = new Validate();
+			$validate_array = array(
+				array('input'=>$_POST['live_class_name'],'require'=>'true',"validator"=>"Length","min"=>"1","max"=>"10",'message'=>Language::get('live_groupbuy_class_name_is_not_null')),
+				array('input'=>$_POST['live_class_name'],'require'=>'true','validator'=>'Range','min'=>0,'max'=>255,'message'=>Language::get('live_groupbuy_class_sort_is_not_null')),
+			);
+			$obj_validate->validateparam = $validate_array;
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage(Language::get('error').$error,'','','error');
+			}
+
+			$params = array();
+			$params['live_class_name'] = trim($_POST['live_class_name']);
+			$params['live_class_sort'] = intval($_POST['live_class_sort']);
+			if(isset($_POST['parent_class_id']) && intval($_POST['parent_class_id']) > 0){
+				$params['parent_class_id'] = $_POST['parent_class_id'];
+			}else{
+				$params['parent_class_id'] = 0;
+			}
+
+			$model_live_class = Model('live_class');
+			$res = $model_live_class->add($params);//添加分类
+			if($res){
+				H('live_class',null);//清除缓存
+				delCacheFile('live_class');
+				$this->log('添加抢购分类[ID:'.$res.']',1);
+				showMessage('添加成功','index.php?act=live_class','','succ');
+			}else{
+				showMessage('添加失败','index.php?act=live_class','','error');
+			}
+		}
+		$model_live_class = Model('live_class');//一级分类
+		$list = $model_live_class->getList(array('parent_class_id'=>0));
+		Tpl::output('list',$list);
+
+		Tpl::output('parent_class_id',isset($_GET['parent_class_id'])?intval($_GET['parent_class_id']):0);
+		Tpl::showpage('live.groupbuyclass.add');
+	}
+
+	/*
+	 * 编辑分类
+	 */
+	public function edit_classOp(){
+		if(chksubmit()){
+			//数据验证
+			$obj_validate = new Validate();
+			$validate_array = array(
+					array('input'=>$_POST['live_class_name'],'require'=>'true',"validator"=>"Length","min"=>"1","max"=>"10",'message'=>Language::get('live_groupbuy_class_name_is_not_null')),
+					array('input'=>$_POST['live_class_sort'],'require'=>'true','validator'=>'Range','min'=>0,'max'=>255,'message'=>Language::get('live_groupbuy_class_sort_is_not_null')),
+			);
+			$obj_validate->validateparam = $validate_array;
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage(Language::get('error').$error,'','','error');
+			}
+
+			$params = array();
+			$params['live_class_name'] = trim($_POST['live_class_name']);
+			$params['live_class_sort'] = intval($_POST['live_class_sort']);
+			if(isset($_POST['parent_class_id']) && intval($_POST['parent_class_id']) > 0){
+				$params['parent_class_id'] = $_POST['parent_class_id'];
+			}else{
+				$params['parent_class_id'] = 0;
+			}
+
+			$condition 		= array();//条件
+			$condition['live_class_id'] = intval($_POST['live_class_id']);
+
+			$model_live_class = Model('live_class');
+			$res = $model_live_class->editLive_class($condition,$params);
+
+			if($res){
+				H('live_class',null);//清除缓存
+				delCacheFile('live_class');
+				$this->log('编辑抢购分类[ID:'.intval($_POST['live_class_id']).']',1);
+				showMessage('编辑成功','index.php?act=live_class','','succ');
+			}else{
+				showMessage('编辑失败','index.php?act=live_class','','error');
+			}
+		}
+
+		$model_live_class = Model('live_class');//分类信息
+		$live_class = $model_live_class->live_classInfo(array('live_class_id'=>intval($_GET['live_class_id'])));
+		if(empty($live_class)){
+			showMessage('该分类不存在','','','error');
+		}
+		Tpl::output('live_class',$live_class);
+
+
+		$list = $model_live_class->getList(array('parent_class_id'=>0));
+		Tpl::output('list',$list);
+
+		Tpl::showpage('live.groupbuyclass.edit');
+	}
+
+	/*
+	 * 删除分类
+	 */
+	public function del_classOp(){
+		if(chksubmit()){
+			$classidArr = explode(",",$_POST['live_class_id']);
+			if(!empty($classidArr)){
+				$model = Model();
+				foreach($classidArr as $val){
+					$class = $model->table('live_class')->where(array('live_class_id'=>$val))->find();
+					if($class['parent_class_id'] == 0){
+						$model->table('live_class')->where(array('parent_class_id'=>$class['live_class_id']))->delete();
+					}
+					$model->table('live_class')->where(array('live_class_id'=>$val))->delete();
+				}
+			}
+		}
+		H('live_class',null);//清除缓存
+		delCacheFile('live_class');
+		$this->log('删除抢购分类[ID:'.$_POST['live_class_id'].']',1);
+		showMessage('删除成功','index.php?act=live_class','','succ');
+	}
+
+
+	public function ajaxOp(){
+		if($_GET['column']=='lc_name'){
+			$this->updateinfo('live_class_name',$_GET['id'],$_GET['value']);
+		}elseif($_GET['column']=='lc_sort'){
+			$this->updateinfo('live_class_sort',$_GET['id'],$_GET['value']);
+		}
+	}
+
+
+	private function updateinfo($field,$id,$value){
+		$model_live_class = Model('live_class');
+		$res = $model_live_class->editLive_class(array('live_class_id'=>$id),array($field=>$value));
+		if($res){
+			H('live_class',null);//清除缓存
+			delCacheFile('live_class');
+			$this->log('编辑抢购分类[ID:'.$id.']',1);
+			echo 'true';
+		}else{
+			echo 'false';
+		}
+		exit;
+	}
+}

+ 146 - 0
admin/control/live_groupbuy.php

@@ -0,0 +1,146 @@
+<?php
+/**
+ * 抢购管理
+ *
+ *
+ *
+ *
+ * */
+
+defined('InShopNC') or exit('Access Invalid!');
+class live_groupbuyControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('live');
+	}
+
+	public function indexOp(){
+		$this->live_groupbuyOp();
+	}
+
+	/*
+	 * 抢购列表
+	 */
+	public function live_groupbuyOp(){
+		$condition	=	array();
+		if(isset($_POST) && !empty($_POST)){
+			//抢购状态
+			if(intval($_POST['groupbuy_state']) == 1){
+				$condition['start_time']	=	array('gt',time());
+			}elseif(intval($_POST['groupbuy_state']) == 2){
+				$condition['start_time']	=	array('lt',time());
+				$condition['end_time']	=	array('gt',time());
+			}elseif(intval($_POST['groupbuy_state']) == 3){
+				$condition['end_time']	=	array('lt',time());
+			}
+
+			//审核状态
+			if(isset($_POST['audit']) && !empty($_POST['audit'])){
+				$condition['is_audit']	=	intval($_POST['audit']);
+			}
+
+			Tpl::output('groupbuy_state',intval($_POST['groupbuy_state']));
+			Tpl::output('is_audit',intval($_POST['audit']));
+		}
+
+
+		$model_live_groupbuy = Model('live_groupbuy');
+		$list = $model_live_groupbuy->getList($condition);
+
+		Tpl::output('list',$list);
+		Tpl::output('show_page',$model_live_groupbuy->showpage());
+		Tpl::showpage('livegroupbuy.list');
+	}
+
+	/*
+	 * 删除抢购
+	 */
+	public function del_groupbuyOp(){
+		if(isset($_POST)&&!empty($_POST)){
+			$condition = array();
+			$condition['groupbuy_id'] = array('in',$_POST['groupbuy_id']);
+
+			$model_live_groupbuy = Model('live_groupbuy');
+			$res = $model_live_groupbuy->del($condition);
+
+			if($res){
+				showMessage('删除抢购成功','index.php?act=live_groupbuy','','succ');
+			}else{
+				showMessage('删除抢购失败','index.php?act=live_groupbuy','','error');
+			}
+		}
+	}
+
+	/*
+	 * 审核
+	 */
+	public function auditOp(){
+		$model_live_groupbuy = Model('live_groupbuy');
+		$res = $model_live_groupbuy->edit(array('groupbuy_id'=>intval($_GET['groupbuy_id'])),array('is_audit'=>intval($_GET['is_audit'])));
+
+		if($res){
+			$this->log('审核抢购成功[ID:'.intval($_GET['groupbuy_id']).']',1);
+			showMessage('审核成功','index.php?act=live_groupbuy','','succ');
+		}else{
+			showMessage('审核失败','index.php?act=live_groupbuy','','error');
+		}
+	}
+
+	/*
+	 * 取消抢购
+	 */
+	public function cancelOp(){
+		$model_live_groupbuy = Model('live_groupbuy');
+		$res = $model_live_groupbuy->edit(array('groupbuy_id'=>intval($_GET['groupbuy_id'])),array('is_open'=>2));//取消抢购
+
+		if($res){
+			$this->log('取消抢购[ID:'.intval($_GET['groupbuy_id']).']',1);
+			showMessage('操作成功','index.php?act=live_groupbuy','','succ');
+		}else{
+			showMessage('操作失败','index.php?act=live_groupbuy','','error');
+		}
+
+	}
+
+	/*
+	 * 推荐管理
+	 */
+	public function ajaxOp(){
+		$model_live_groupbuy = Model('live_groupbuy');
+		$res = $model_live_groupbuy->edit(array('groupbuy_id'=>intval($_GET['id'])),array('is_hot'=>intval($_GET['value'])));
+
+		if($res){
+			echo 'true';exit;
+		}else{
+			echo 'false';exit;
+		}
+	}
+
+
+	/*
+	 * 查看抢购券
+	 */
+	public function groupbuyvoucherOp(){
+		$groupbuy_id	= intval($_GET['groupbuy_id']);
+		$model 		= Model();
+
+		//抢购
+		$groupbuy = $model->table('live_groupbuy')->where(array('groupbuy_id'=>$groupbuy_id))->find();
+		if(empty($groupbuy)){
+			showMessage('抢购不存在','index.php?act=live_groupbuy','','error');
+		}
+
+		$condition					=	array();//查询条件
+		$condition['live_order.item_id']	=	$groupbuy_id;
+
+		//获得数据
+		$field  = 'live_order.order_sn,live_order.store_name,live_order.item_name,live_order.member_name,live_order_pwd.state,live_order_pwd.use_time,live_order_pwd.order_pwd';
+		$on		= 'live_order_pwd.order_id = live_order.order_id';
+		$model->table('live_order_pwd,live_order')->field($field);
+		$list = $model->join('left')->on($on)->where($condition)->page(20)->order('order_item_id desc')->select();
+		Tpl::output('list',$list);
+
+		Tpl::output('show_page',$model->showpage());
+		Tpl::showpage('livevoucher.list');
+	}
+}

+ 128 - 0
admin/control/live_order.php

@@ -0,0 +1,128 @@
+<?php
+/**
+ * 订单管理
+ *
+ *
+ *
+ *
+ * */
+
+defined('InShopNC') or exit('Access Invalid!');
+class live_orderControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('live');
+	}
+
+	public function indexOp(){
+		$this->live_orderOp();
+	}
+
+	/*
+	 * 订单列表
+	 */
+	public function live_orderOp(){
+
+		$condition = array();
+		if(!empty($_GET['order_sn'])){
+			$condition['order_sn'] = $_GET['order_sn'];
+		}
+
+		if($_GET['store_name']) {
+            $condition['store_name'] = $_GET['store_name'];
+        }
+
+		if(in_array($_GET['state'],array('1','2','3','4'))){
+        	$condition['state'] = $_GET['state'];
+        }
+
+		if($_GET['payment_code']) {
+            $condition['payment_code'] = $_GET['payment_code'];
+        }
+
+		if($_GET['member_name']) {
+            $condition['member_name'] = $_GET['member_name'];
+        }
+
+
+        $if_start_time = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_start_time']);
+        $if_end_time = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_end_time']);
+        $start_unixtime = $if_start_time ? strtotime($_GET['query_start_time']) : null;
+        $end_unixtime = $if_end_time ? strtotime($_GET['query_end_time']): null;
+        if ($start_unixtime || $end_unixtime) {
+            $condition['add_time'] = array('time',array($start_unixtime,$end_unixtime));
+        }
+
+		$model_live_order = Model('live_order');
+		$list = $model_live_order->getList($condition);
+
+		Tpl::output('list',$list);
+		Tpl::output('show_page',$model_live_order->showpage(2));
+
+		//显示支付接口列表(搜索)
+        $payment_list = Model('payment')->getPaymentOpenList();
+        Tpl::output('payment_list',$payment_list);
+
+		Tpl::showpage('live_order.list');
+	}
+
+	/*
+	 * 订单详情
+	 */
+	public function order_detailOp(){
+		$condition = array();
+		$condition['live_order.order_id'] = $_GET['order_id'];
+		$model_live_order = Model('live_order');
+		$live_order = $model_live_order->getOrderGroupbuy($condition);
+		if(empty($live_order[0])){
+			showMessage('订单不存在');
+		}
+		Tpl::output('live_order',$live_order[0]);
+
+		$pwd_condition = array();
+		$pwd_condition['order_id'] = $_GET['order_id'];
+		$live_order_pwd = $model_live_order->getLiveOrderPwd($pwd_condition);
+		Tpl::output('live_order_pwd',$live_order_pwd);
+
+		Tpl::showpage('live_order.detail');
+	}
+
+	/*
+	 * 结算订单
+	 */
+	public function live_area_accountOp(){
+		$model_live_order = Model('live_order');
+		$condition		= array();
+		$condition['live_groupbuy.validity'] = array('elt',time());
+		$condition['live_order.state'] = array('in',array(2,3));//2.已支付 3.已消费
+
+		$list = $model_live_order->getOrderGroupbuy($condition);
+
+		if(!empty($list)){
+			$model = Model();
+			foreach($list as $key=>$val){
+				$count = $model->table('live_order_pwd')->where(array('order_id'=>$val['order_id'],'state'=>2))->count();
+				$list[$key]['use_price'] = $count*$val['groupbuy_price'];
+			}
+		}
+
+		Tpl::output('list',$list);
+		Tpl::output('show_page',$model_live_order->showpage(2));
+
+		Tpl::showpage('live_order.account');
+	}
+
+
+	/*
+	 * 订单删除
+	 */
+	public function del_orderOp(){
+		$model_live_order = Model('live_order');
+		$res = $model_live_order->del(array('in'=>array('order_id',$_POST['order_id'])));
+		if($res){
+			showMessage('删除成功','index.php?act=live_order','','succ');
+		}else{
+			showMessage('删除成功','index.php?act=live_order','','error');
+		}
+	}
+}

+ 133 - 0
admin/control/live_setting.php

@@ -0,0 +1,133 @@
+<?php
+/**
+ * 订单管理
+ *
+ *
+ *
+ *
+ * */
+
+defined('InShopNC') or exit('Access Invalid!');
+class live_settingControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('live');
+	}
+
+	public function indexOp(){
+		$model_setting = Model('setting');
+		if(chksubmit()){
+			$update = array();
+			if(!empty($_FILES['live_pic1']['name'])){
+				$upload = new UploadFile();
+				$upload->set('default_dir',ATTACH_LIVE);
+				$result = $upload->upfile('live_pic1');
+				if ($result){
+					$update['live_pic1'] = $upload->file_name;
+				}else {
+					showMessage($upload->error,'','','error');
+				}
+			}
+
+			if(!empty($_POST['live_link1'])){
+				$update['live_link1'] = $_POST['live_link1'];
+			}
+
+			if(!empty($_FILES['live_pic2']['name'])){
+				$upload = new UploadFile();
+				$upload->set('default_dir',ATTACH_LIVE);
+				$result = $upload->upfile('live_pic2');
+				if ($result){
+					$update['live_pic2'] = $upload->file_name;
+				}else {
+					showMessage($upload->error,'','','error');
+				}
+			}
+
+			if(!empty($_POST['live_link2'])){
+				$update['live_link2'] = $_POST['live_link2'];
+			}
+
+			if(!empty($_FILES['live_pic3']['name'])){
+				$upload = new UploadFile();
+				$upload->set('default_dir',ATTACH_LIVE);
+				$result = $upload->upfile('live_pic3');
+				if ($result){
+					$update['live_pic3'] = $upload->file_name;
+				}else {
+					showMessage($upload->error,'','','error');
+				}
+			}
+
+			if(!empty($_POST['live_link3'])){
+				$update['live_link3'] = $_POST['live_link3'];
+			}
+
+			if(!empty($_FILES['live_pic4']['name'])){
+				$upload = new UploadFile();
+				$upload->set('default_dir',ATTACH_LIVE);
+				$result = $upload->upfile('live_pic4');
+				if ($result){
+					$update['live_pic4'] = $upload->file_name;
+				}else {
+					showMessage($upload->error,'','','error');
+				}
+			}
+
+			if(!empty($_POST['live_link4'])){
+				$update['live_link4'] = $_POST['live_link4'];
+			}
+
+			$list_setting = $model_setting->getListSetting();
+			$result = $model_setting->updateSetting($update);
+			if($result){
+				if($list_setting['live_pic1'] != '' && isset($update['live_pic1'])){
+					@unlink(BASE_UPLOAD_PATH.DS.ATTACH_LIVE.DS.$list_setting['live_pic1']);
+				}
+
+				if($list_setting['live_pic2'] != '' && isset($update['live_pic2'])){
+					@unlink(BASE_UPLOAD_PATH.DS.ATTACH_LIVE.DS.$list_setting['live_pic2']);
+				}
+
+				if($list_setting['live_pic3'] != '' && isset($update['live_pic3'])){
+					@unlink(BASE_UPLOAD_PATH.DS.ATTACH_LIVE.DS.$list_setting['live_pic3']);
+				}
+
+				if($list_setting['live_pic4'] != '' && isset($update['live_pic4'])){
+					@unlink(BASE_UPLOAD_PATH.DS.ATTACH_LIVE.DS.$list_setting['live_pic4']);
+				}
+
+				$this->log('修改线下抢设置',1);
+				showMessage('编辑成功','','','succ');
+			}else{
+				showMessage('编辑失败','','','error');
+			}
+		}
+
+		$list_setting = $model_setting->getListSetting();
+		Tpl::output('list_setting',$list_setting);
+		Tpl::showpage('live_setting.index');
+	}
+
+
+	public function clearOp(){
+		$model_setting = Model('setting');
+		$update = array();
+		$update['live_pic1'] = '';
+		$update['live_link1'] = '';
+		$update['live_pic2'] = '';
+		$update['live_link2'] = '';
+		$update['live_pic3'] = '';
+		$update['live_link3'] = '';
+		$update['live_pic4'] = '';
+		$update['live_link4'] = '';
+		$res = $model_setting->updateSetting($update);
+		if($res){
+			$this->log('清空线下抢设置',1);
+			echo json_encode(array('result'=>'true'));
+		}else{
+			echo json_encode(array('result'=>'false'));
+		}
+		exit;
+	}
+}

+ 66 - 0
admin/control/login.php

@@ -0,0 +1,66 @@
+<?php
+/**
+ * 登录
+ *
+ * 包括 登录 验证 退出 操作
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class LoginControl extends SystemControl {
+
+	/**
+	 * 不进行父类的登录验证,所以增加构造方法重写了父类的构造方法
+	 */
+	public function __construct(){
+		Language::read('common,layout,login');
+	    $result = chksubmit(true,true,'num');
+		if ($result){
+		    if ($result === -11){
+		        showMessage('非法请求');
+		    }elseif ($result === -12){
+		        showMessage(L('login_index_checkcode_wrong'));
+		    }
+		    if (process::islock('admin')) {
+		        showMessage('您的操作过于频繁,请稍后再试');
+		    }
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+			array("input"=>$_POST["user_name"],		"require"=>"true", "message"=>L('login_index_username_null')),
+			array("input"=>$_POST["password"],		"require"=>"true", "message"=>L('login_index_password_null')),
+			array("input"=>$_POST["captcha"],		"require"=>"true", "message"=>L('login_index_checkcode_null')),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage(L('error').$error);
+			}else {
+
+				$model_admin = Model('admin');
+				$array	= array();
+				$array['admin_name']	= $_POST['user_name'];
+				$array['admin_password']= md5(trim($_POST['password']));
+				$admin_info = $model_admin->infoAdmin($array);
+				if(is_array($admin_info) and !empty($admin_info)) {
+
+					$this->systemSetKey(array('name'=>$admin_info['admin_name'], 'id'=>$admin_info['admin_id'],'gid'=>$admin_info['admin_gid'],'sp'=>$admin_info['admin_is_super']));
+					$update_info	= array(
+					'admin_id'=>$admin_info['admin_id'],
+					'admin_login_num'=>($admin_info['admin_login_num']+1),
+					'admin_login_time'=>TIMESTAMP
+					);
+					$model_admin->updateAdmin($update_info);
+					$this->log(L('nc_login'),1);
+					process::clear('admin');
+					@header('Location: index.php');exit;
+				}else {
+				    process::addprocess('admin');
+					showMessage(L('login_index_username_password_wrong'),'index.php?act=login&op=login');
+				}
+			}
+		}
+		Tpl::output('html_title',L('login_index_need_login'));
+		Tpl::showpage('login','login_layout');
+	}
+	public function loginOp(){}
+	public function indexOp(){}
+}

+ 245 - 0
admin/control/mall_consult.php

@@ -0,0 +1,245 @@
+<?php
+/**
+ * 平台客观咨询管理
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+
+class mall_consultControl extends SystemControl{
+    public function __construct(){
+        parent::__construct();
+    }
+
+    /**
+     * 咨询管理
+     */
+    public function indexOp(){
+        $condition = array();
+        if(chksubmit()){
+            $member_name = trim($_GET['member_name']);
+            if($member_name != ''){
+                $condition['member_name'] = array('like', '%' . $member_name . '%');
+                Tpl::output('member_name', $member_name);
+            }
+            $mct_id = intval($_GET['mctid']);
+            if ($mct_id > 0) {
+                $condition['mct_id'] = $mct_id;
+                Tpl::output('mctid', $mct_id);
+            }
+        }
+        $model_mallconsult = Model('mall_consult');
+        $consult_list = $model_mallconsult->getMallConsultList($condition,'*', 10);
+        Tpl::output('show_page',$model_mallconsult->showpage());
+        Tpl::output('consult_list',$consult_list);
+
+
+
+        // 咨询类型列表
+        $type_list = Model('mall_consult_type')->getMallConsultTypeList(array(), 'mct_id,mct_name', 'mct_id');
+        Tpl::output('type_list', $type_list);
+
+        // 回复状态
+        $state = array('0'=>'未回复', '1'=>'已回复');
+        Tpl::output('state', $state);
+
+        Tpl::showpage('mall_consult.index');
+    }
+
+    /**
+     * 回复咨询
+     */
+    public function consult_replyOp() {
+        $model_mallconsult = Model('mall_consult');
+        if (chksubmit()) {
+            $mc_id = intval($_POST['mc_id']);
+            $reply_content = trim($_POST['reply_content']);
+            if ($mc_id <= 0 || $reply_content == '') {
+                showMessage(L('param_error'));
+            }
+            $update['is_reply'] = 1;
+            $update['mc_reply'] = $reply_content;
+            $update['mc_reply_time'] = TIMESTAMP;
+            $update['admin_id'] = $this->admin_info['id'];
+            $update['admin_name'] = $this->admin_info['name'];
+            $result = $model_mallconsult->editMallConsult(array('mc_id' => $mc_id), $update);
+            if ($result) {
+                $consult_info = $model_mallconsult->getMallConsultInfo(array('mc_id' => $mc_id));
+                // 发送用户消息
+                $param = array();
+                $param['code'] = 'consult_mall_reply';
+                $param['member_id'] = $consult_info['member_id'];
+                $param['param'] = array(
+                    'consult_url' => urlShop('member_mallconsult', 'mallconsult_info', array('id' => $mc_id))
+                );
+                QueueClient::push('sendMemberMsg', $param);
+
+                showMessage('回复成功', urlAdmin('mall_consult', 'index'));
+            } else {
+                showMessage('回复失败');
+            }
+        }
+        $id = intval($_GET['id']);
+        if ($id <= 0) {
+            showMessage(L('param_error'));
+        }
+
+        $consult_info = $model_mallconsult->getMallConsultDetail($id);
+        Tpl::output('consult_info', $consult_info);
+        Tpl::showpage('mall_consult.reply');
+    }
+
+    /**
+     * 删除平台客服咨询
+     */
+    public function del_consultOp(){
+        $id = $_GET['id'];
+        if($id <= 0){
+            showMessage(Language::get('nc_common_del_fail'));
+        }
+        $result = Model('mall_consult')->delMallConsult(array('mc_id' => $id));
+        if($result){
+            $this->log('删除平台客服咨询'.'[ID:'.$id.']',null);
+            showMessage(Language::get('nc_common_del_succ'));
+        }else{
+            showMessage(Language::get('nc_common_del_fail'));
+        }
+    }
+
+    /**
+     * 批量删除平台客服咨询
+     */
+    public function del_consult_batchOp(){
+        $ids = $_POST['id'];
+        if(empty($ids)){
+            showMessage(Language::get('nc_common_del_fail'));
+        }
+        $result = Model('mall_consult')->delMallConsult(array('mc_id' => array('in', $ids)));
+        if($result){
+            $this->log('删除平台客服咨询'.'[ID:'.implode(',', $ids).']',null);
+            showMessage(Language::get('nc_common_del_succ'));
+        }else{
+            showMessage(Language::get('nc_common_del_fail'));
+        }
+    }
+
+    /**
+     * 咨询类型列表
+     */
+    public function type_listOp() {
+        $model_mct = Model('mall_consult_type');
+        if (chksubmit()) {
+            $mctid_array = $_POST['del_id'];
+            if (!is_array($mctid_array)) {
+                showMessage(L('param_error'));
+            }
+            foreach ($mctid_array as $val){
+                if (!is_numeric($val)) {
+                    showMessage(L('param_error'));
+                }
+            }
+
+            $result = $model_mct->delMallConsultType(array('mct_id' => array('in', $mctid_array)));
+
+            if ($result) {
+                $this->log('删除平台客服咨询类型 ID:'.implode(',', $mctid_array), 1);
+                showMessage(L('nc_common_del_succ'));
+            } else {
+                $this->log('删除平台客服咨询类型 ID:'.implode(',', $mctid_array), 0);
+                showMessage(L('nc_common_del_fail'));
+            }
+        }
+        $type_list = $model_mct->getMallConsultTypeList(array(), 'mct_id,mct_name,mct_sort');
+        Tpl::output('type_list', $type_list);
+        Tpl::showpage('mall_consult.type_list');
+    }
+
+    /**
+     * 新增咨询类型
+     */
+    public function type_addOp() {
+        if (chksubmit()) {
+            // 验证
+            $obj_validate = new Validate();
+            $obj_validate->validateparam = array(
+                array("input"=>$_POST["mct_name"], "require"=>"true", "message"=>'请填写咨询类型名称'),
+                array("input"=>$_POST["mct_sort"], "require"=>"true", 'validator'=>'Number', "message"=>'请正确填写咨询类型排序'),
+            );
+            $error = $obj_validate->validate();
+            if ($error != ''){
+                showMessage(Language::get('error').$error,'','','error');
+            }
+            $insert = array();
+            $insert['mct_name'] = trim($_POST['mct_name']);
+            $insert['mct_introduce'] = $_POST['mct_introduce'];
+            $insert['mct_sort'] = intval($_POST['mct_sort']);
+            $result = Model('mall_consult_type')->addMallConsultType($insert);
+            if ($result){
+                $this->log('新增咨询类型',1);
+                showMessage(L('nc_common_save_succ'), urlAdmin('mall_consult', 'type_list'));
+            }else {
+                $this->log('新增咨询类型',0);
+                showMessage(L('nc_common_save_fail'));
+            }
+        }
+        Tpl::showpage('mall_consult.type_add');
+    }
+
+    /**
+     * 编辑咨询类型
+     */
+    public function type_editOp() {
+        $model_mct = Model('mall_consult_type');
+        if (chksubmit()) {
+            // 验证
+            $obj_validate = new Validate();
+            $obj_validate->validateparam = array(
+                    array("input"=>$_POST["mct_name"], "require"=>"true", "message"=>'请填写咨询类型名称'),
+                    array("input"=>$_POST["mct_sort"], "require"=>"true", 'validator'=>'Number', "message"=>'请正确填写咨询类型排序'),
+            );
+            $error = $obj_validate->validate();
+            if ($error != ''){
+                showMessage(Language::get('error').$error,'','','error');
+            }
+            $where = array();
+            $where['mct_id'] = intval($_POST['mct_id']);
+            $update = array();
+            $update['mct_name'] = trim($_POST['mct_name']);
+            $update['mct_introduce'] = $_POST['mct_introduce'];
+            $update['mct_sort'] = intval($_POST['mct_sort']);
+            $result = $model_mct->editMallConsultType($where, $update);
+            if ($result){
+                $this->log('编辑平台客服咨询类型 ID:'.$where['mct_id'],1);
+                showMessage(L('nc_common_op_succ'), urlAdmin('mall_consult', 'type_list'));
+            }else {
+                $this->log('编辑平台客服咨询类型 ID:'.$where['mct_id'],0);
+                showMessage(L('nc_common_op_fail'));
+            }
+        }
+
+        $mct_id = intval($_GET['mct_id']);
+        if ($mct_id <= 0) {
+            showMessage(L('param_error'));
+        }
+        $mct_info = $model_mct->getMallConsultTypeInfo(array('mct_id' => $mct_id));
+        Tpl::output('mct_info', $mct_info);
+        Tpl::showpage('mall_consult.type_edit');
+    }
+
+    /**
+     * 删除咨询类型
+     */
+    public function type_delOp() {
+        $mct_id = intval($_GET['mct_id']);
+        if ($mct_id <= 0) {
+            showMessage(L('param_error'));
+        }
+        $result = Model('mall_consult_type')->delMallConsultType(array('mct_id' => $mct_id));
+        if ($result) {
+            $this->log('删除平台客服咨询类型 ID:'.$mct_id, 1);
+            showMessage(L('nc_common_del_succ'));
+        } else {
+            $this->log('删除平台客服咨询类型 ID:'.$mct_id, 0);
+            showMessage(L('nc_common_del_fail'));
+        }
+    }
+}

+ 198 - 0
admin/control/mb_ad.php

@@ -0,0 +1,198 @@
+<?php
+/**
+ * 合作伙伴管理
+ *
+ *
+ *
+ *
+ */
+
+
+
+defined('InShopNC') or exit('Access Invalid!');
+class mb_adControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('mobile');
+	}
+	/**
+	 *
+	 */
+	public function mb_ad_listOp(){
+		$model_mb_ad = Model('mb_ad');
+
+		$link_list = $model_mb_ad->getMbAdList(array());
+		Tpl::output('link_list',$link_list);
+
+		Tpl::showpage('mb_ad.list');
+	}
+
+	/**
+	 * 广告删除
+	 */
+	public function mb_ad_delOp(){
+        $link_id = intval($_GET['link_id']);
+		if ($link_id > 0){
+			$model_mb_ad = Model('mb_ad');
+
+			//删除图片
+			$model_mb_ad->delMbAd($link_id);
+			showMessage(L('link_index_del_succ'),'index.php?act=mb_ad&op=mb_ad_list');
+		}else {
+			showMessage(L('link_index_choose_del'),'index.php?act=mb_ad&op=mb_ad_list');
+		}
+	}
+
+	/**
+	 * 添加
+	 */
+	public function mb_ad_addOp(){
+		$model_mb_ad = Model('mb_ad');
+
+		//最多发布6条
+		$count = $model_mb_ad->getMbAdCount();
+		if ($count > 5){
+			showMessage(L('link_add_count_limit'));
+		}
+		if ($_POST['form_submit'] == 'ok'){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["link_title"], "require"=>"true", "message"=>L('link_add_title_null')),
+				array("input"=>$_POST["link_keyword"], "require"=>"true","message"=>L('link_add_url_wrong')),
+				array("input"=>$_POST["link_sort"], "require"=>"true", 'validator'=>'Number', "message"=>L('link_add_sort_int')),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				/**
+				 * 上传图片
+				 */
+				if ($_FILES['link_pic']['name'] != ''){
+					$upload = new UploadFile();
+					$upload->set('default_dir',ATTACH_MOBILE.'/ad');
+
+					$result = $upload->upfile('link_pic');
+					if ($result){
+						$_POST['link_pic'] = $upload->file_name;
+					}else {
+						showMessage($upload->error);
+					}
+				}
+
+				$insert_array = array();
+				$insert_array['link_title'] = trim($_POST['link_title']);
+				$insert_array['link_keyword'] = trim($_POST['keyword']);
+				$insert_array['link_pic'] = trim($_POST['link_pic']);
+				$insert_array['link_sort'] = trim($_POST['link_sort']);
+
+				$result = $model_mb_ad->addMbAd($insert_array);
+				if ($result){
+					$url = array(
+						array(
+							'url'=>'index.php?act=mb_ad&op=mb_ad_list',
+							'msg'=>L('link_add_back_to_list'),
+						)
+					);
+					showMessage(L('link_add_succ'),$url);
+				}else {
+					showMessage(L('link_add_fail'));
+				}
+			}
+		}
+
+		Tpl::showpage('mb_ad.add');
+	}
+
+	/**
+	 * 编辑
+	 */
+	public function mb_ad_editOp(){
+		$model_mb_ad = Model('mb_ad');
+		if ($_POST['form_submit'] == 'ok'){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["link_title"], "require"=>"true", "message"=>L('link_add_title_null')),
+				array("input"=>$_POST["link_url"], "require"=>"true", "message"=>L('link_add_url_wrong')),
+				array("input"=>$_POST["link_sort"], "require"=>"true", 'validator'=>'Number', "message"=>L('link_add_sort_int')),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				/**
+				 * 上传图片
+				 */
+				if ($_FILES['link_pic']['name'] != ''){
+					$upload = new UploadFile();
+					$upload->set('default_dir',ATTACH_MOBILE.'/ad');
+
+					$result = $upload->upfile('link_pic');
+					if ($result){
+						$_POST['link_pic'] = $upload->file_name;
+					}else {
+						showMessage($upload->error);
+					}
+				}
+				$link_array = $model_mb_ad->getMbAdInfoByID(intval($_POST['link_id']));
+				$update_array = array();
+				$update_array['link_title'] = trim($_POST['link_title']);
+				$update_array['link_keyword'] = trim($_POST['link_keyword']);
+				if ($_POST['link_pic']){
+					$update_array['link_pic'] = $_POST['link_pic'];
+				}
+				$update_array['link_sort'] = trim($_POST['link_sort']);
+
+                $result = $model_mb_ad->editMbAd($update_array, array('link_id' => intval($_POST['link_id'])));
+				if ($result){
+				    //删除图片
+				    if (!empty($_POST['link_pic']) && !empty($link_array['link_pic'])){
+				        @unlink(BASE_ROOT_PATH.DS.DIR_UPLOAD.DS.ATTACH_MOBILE.'/ad'.DS.$link_array['link_pic']);
+				    }
+					$url = array(
+						array(
+							'url'=>'index.php?act=mb_ad&op=mb_ad_list',
+							'msg'=>L('link_add_back_to_list'),
+						)
+					);
+					showMessage(L('link_edit_succ'),$url);
+				}else {
+					showMessage(L('link_edit_fail'));
+				}
+			}
+		}
+
+		$link_array = $model_mb_ad->getMbAdInfoByID(intval($_GET['link_id']));
+		if (empty($link_array)){
+			showMessage(L('wrong_argument'));
+		}
+
+		Tpl::output('link_array',$link_array);
+		Tpl::showpage('mb_ad.edit');
+	}
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			/**
+			 * 合作伙伴 排序
+			 */
+			case 'link_sort':
+				$model_mb_ad = Model('mb_ad');
+				$update_array = array();
+				$update_array[$_GET['column']] = trim($_GET['value']);
+                $condition = array();
+				$condition['link_id'] = intval($_GET['id']);
+				$result = $model_mb_ad->editMbAd($update_array, $condition);
+				echo 'true';exit;
+				break;
+		}
+	}
+}

+ 59 - 0
admin/control/mb_app.php

@@ -0,0 +1,59 @@
+<?php
+/**
+ * 下载设置
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class mb_appControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+	}
+
+	/**
+	 * 设置下载地址
+	 *
+	 */
+	public function mb_appOp() {
+	    $model_setting = Model('setting');
+		$mobile_apk = $model_setting->getRowSetting('mobile_apk');
+		$mobile_apk_version = $model_setting->getRowSetting('mobile_apk_version');
+		$mobile_ios = $model_setting->getRowSetting('mobile_ios');
+		if (chksubmit()) {
+			$update_array = array();
+			$update_array['mobile_apk'] = $_POST['mobile_apk'];
+			$update_array['mobile_apk_version'] = $_POST['mobile_apk_version'];
+			$update_array['mobile_ios'] = $_POST['mobile_ios'];
+			$state = $model_setting->updateSetting($update_array);
+			if ($state) {
+			    $this->log('设置手机端下载地址');
+				showMessage(Language::get('nc_common_save_succ'),'index.php?act=mb_app&op=mb_app');
+			} else {
+				showMessage(Language::get('nc_common_save_fail'));
+			}
+		}
+		Tpl::output('mobile_apk',$mobile_apk);
+		Tpl::output('mobile_version',$mobile_apk_version);
+		Tpl::output('mobile_ios',$mobile_ios);
+		Tpl::showpage('mb_app.edit');
+	}
+
+	/**
+	 * 生成二维码
+	 */
+	public function mb_qrOp() {
+		$url = urlShop('mb_app', 'index');
+		$mobile_app = 'mb_app.png';
+		require_once(BASE_RESOURCE_PATH.DS.'phpqrcode'.DS.'index.php');
+		$PhpQRCode = new PhpQRCode();
+		$PhpQRCode->set('pngTempDir',BASE_UPLOAD_PATH.DS.ATTACH_COMMON.DS);
+		$PhpQRCode->set('date',$url);
+		$PhpQRCode->set('pngTempName', $mobile_app);
+		$PhpQRCode->init();
+
+		$this->log('生成手机端二维码');
+		showMessage('生成二维码成功','index.php?act=mb_app&op=mb_app');
+	}
+}

+ 235 - 0
admin/control/mb_category.php

@@ -0,0 +1,235 @@
+<?php
+/**
+ * 合作伙伴管理
+ *
+ *
+ *
+ *
+ */
+
+
+
+defined('InShopNC') or exit('Access Invalid!');
+class mb_categoryControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('mobile');
+	}
+	/**
+	 *
+	 */
+	public function mb_category_listOp(){
+		$lang	= Language::getLangContent();
+		$model_link = Model('mb_category');
+		/**
+		 * 删除
+		 */
+		if ($_POST['form_submit'] == 'ok'){
+			if (is_array($_POST['del_id']) && !empty($_POST['del_id'])){
+				foreach ($_POST['del_id'] as $k => $v){
+					/**
+					 * 删除图片
+					 */
+					$v = intval($v);
+					$tmp = $model_link->getOneLink($v);
+					if (!empty($tmp['gc_thumb'])){
+						@unlink(BASE_ROOT_PATH.DS.DIR_UPLOAD.DS.ATTACH_MOBILE.'/category/'.$tmp['gc_thumb']);
+					}
+					unset($tmp);
+					$model_link->del($v);
+				}
+				showMessage($lang['link_index_del_succ']);
+			}else {
+				showMessage($lang['link_index_choose_del']);
+			}
+		}
+
+		$link_list = $model_link->getLinkList(array());
+		/**
+		 * 整理图片链接
+		 */
+		if (is_array($link_list)){
+			foreach ($link_list as $k => $v){
+				if (!empty($v['gc_thumb'])){
+					$link_list[$k]['gc_thumb'] = UPLOAD_SITE_URL.'/'.ATTACH_MOBILE.'/category'.'/'.$v['gc_thumb'];
+				}
+			}
+		}
+
+		/**
+		 * 商品分类
+		 */
+		$goods_class = Model('goods_class')->getGoodsClassForCacheModel();
+		Tpl::output('goods_class',$goods_class);
+
+		Tpl::output('link_list',$link_list);
+		Tpl::showpage('mb_category.list');
+	}
+
+	/**
+	 * 删除
+	 */
+	public function mb_category_delOp(){
+		$lang	= Language::getLangContent();
+		if (intval($_GET['gc_id']) > 0){
+			$model_link = Model('mb_category');
+
+			/**
+			 * 删除图片
+			 */
+			$tmp = $model_link->getOneLink(intval($_GET['gc_id']));
+			if (!empty($tmp['gc_thumb'])){
+				@unlink(BASE_ROOT_PATH.DS.DIR_UPLOAD.DS.ATTACH_MOBILE.'/category/'.$tmp['gc_thumb']);
+			}
+			$model_link->del($tmp['gc_id']);
+			showMessage($lang['link_index_del_succ'],'index.php?act=mb_category&op=mb_category_list');
+		}else {
+			showMessage($lang['link_index_choose_del'],'index.php?act=mb_category&op=mb_category_list');
+		}
+	}
+
+	/**
+	 * 添加
+	 */
+	public function mb_category_addOp(){
+
+		$lang	= Language::getLangContent();
+		$model_link = Model('mb_category');
+
+		if ($_POST['form_submit'] == 'ok'){
+			$category = $model_link->getOneLink(intval($_POST['link_category']));
+			if (!empty($category)){
+				showMessage($lang['link_add_category_exist']);
+			}
+
+			/**
+			 * 上传图片
+			 */
+			if ($_FILES['link_pic']['name'] != ''){
+				$upload = new UploadFile();
+				$upload->set('default_dir',ATTACH_MOBILE.'/category');
+
+				$result = $upload->upfile('link_pic');
+				if ($result){
+					$_POST['link_pic'] = $upload->file_name;
+				}else {
+					showMessage($upload->error);
+				}
+			}
+
+			$insert_array = array();
+			$insert_array['gc_id'] = trim($_POST['link_category']);
+			$insert_array['gc_thumb'] = trim($_POST['link_pic']);
+
+			$result = $model_link->add($insert_array);
+			if ($result){
+				$url = array(
+					array(
+						'url'=>'index.php?act=mb_category&op=mb_category_add',
+						'msg'=>$lang['link_add_again'],
+					),
+					array(
+						'url'=>'index.php?act=mb_category&op=mb_category_list',
+						'msg'=>$lang['link_add_back_to_list'],
+					)
+				);
+				showMessage($lang['link_add_succ'],$url);
+			}else {
+				showMessage($lang['link_add_fail']);
+			}
+		}
+
+		/**
+		 * 商品分类
+		 */
+		$goods_class = Model('goods_class')->getGoodsClassForCacheModel();
+		Tpl::output('goods_class',$goods_class);
+
+		Tpl::showpage('mb_category.add');
+	}
+
+	/**
+	 * 编辑
+	 */
+	public function mb_category_editOp(){
+		$lang	= Language::getLangContent();
+		$model_link = Model('mb_category');
+		if ($_POST['form_submit'] == 'ok'){
+
+			/**
+			 * 上传图片
+			 */
+			if ($_FILES['link_pic']['name'] != ''){
+				$upload = new UploadFile();
+				$upload->set('default_dir',ATTACH_MOBILE.'/category');
+
+				$result = $upload->upfile('link_pic');
+				if ($result){
+					$_POST['gc_thumb'] = $upload->file_name;
+				}else {
+					showMessage($upload->error);
+				}
+			}
+			$link_array = $model_link->getOneLink(intval($_POST['gc_id']));
+			$update_array = array();
+			$update_array['gc_id'] = intval($_POST['gc_id']);
+			if ($_POST['gc_thumb']){
+				$update_array['gc_thumb'] = $_POST['gc_thumb'];
+			}
+			$result = $model_link->update($update_array);
+			if ($result){
+				/**
+				 * 删除图片
+				 */
+				if (!empty($_POST['gc_thumb']) && !empty($link_array['gc_thumb'])){
+					@unlink(BASE_ROOT_PATH.DS.DIR_UPLOAD.DS.ATTACH_MOBILE.'/category/'.$link_array['gc_thumb']);
+				}
+				$url = array(
+					array(
+						'url'=>'index.php?act=mb_category&op=mb_category_edit&gc_id='.intval($_POST['gc_id']),
+						'msg'=>$lang['link_edit_again']
+					),
+					array(
+						'url'=>'index.php?act=mb_category&op=mb_category_list',
+						'msg'=>$lang['link_add_back_to_list'],
+					)
+				);
+				showMessage($lang['link_edit_succ'],$url);
+			}else {
+				showMessage($lang['link_edit_fail']);
+			}
+		}
+
+		$link_array = $model_link->getOneLink(intval($_GET['gc_id']));
+		if (empty($link_array)){
+			showMessage($lang['wrong_argument']);
+		}
+
+		/**
+		 * 商品分类
+		 */
+		$goods_class = Model('goods_class')->getGoodsClassForCacheModel();
+		Tpl::output('goods_class',$goods_class);
+
+		Tpl::output('link_array',$link_array);
+		Tpl::showpage('mb_category.edit');
+	}
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			/**
+			 * 合作伙伴 排序
+			 */
+			case 'link_sort':
+				$model_link = Model('link');
+				$update_array = array();
+				$update_array['link_id'] = intval($_GET['id']);
+				$update_array[$_GET['column']] = trim($_GET['value']);
+				$result = $model_link->update($update_array);
+				echo 'true';exit;
+				break;
+		}
+	}
+}

+ 39 - 0
admin/control/mb_feedback.php

@@ -0,0 +1,39 @@
+<?php
+/**
+ * 合作伙伴管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class mb_feedbackControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('mobile');
+	}
+	/**
+	 * 意见反馈
+	 */
+	public function flistOp(){
+		$model_mb_feedback = Model('mb_feedback');
+		$list = $model_mb_feedback->getMbFeedbackList(array(), 10);
+
+		Tpl::output('list', $list);
+		Tpl::output('page', $model_mb_feedback->showpage());
+		Tpl::showpage('mb_feedback.index');
+	}
+
+	/**
+	 * 删除
+	 */
+	public function delOp(){
+        $model_mb_feedback = Model('mb_feedback');
+        $result = $model_mb_feedback->delMbFeedback($_POST['feedback_id']);
+		if ($result){
+			showMessage(L('nc_common_op_succ'));
+		}else {
+			showMessage(L('nc_common_op_fail'));
+		}
+	}
+}

+ 121 - 0
admin/control/mb_home.php

@@ -0,0 +1,121 @@
+<?php
+/**
+ * 合作伙伴管理
+ *
+ *
+ *
+ *
+ */
+
+
+
+defined('InShopNC') or exit('Access Invalid!');
+class mb_homeControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('mobile');
+	}
+
+	/**
+	 * 列表
+	 */
+	public function mb_home_listOp(){
+		$model = Model('mb_home');
+
+		$h_list = $model->getMbHomeList(array());
+		Tpl::output('h_list',$h_list);
+
+		//商品分类
+		$goods_class = ($nav = F('goods_class'))? $nav :H('goods_class',true,'file');
+		Tpl::output('goods_class',$goods_class);
+
+		Tpl::showpage('mb_home.list');
+	}
+
+	/**
+	 * 编辑
+	 */
+	public function mb_home_editOp(){
+		$model = Model('mb_home');
+
+		if ($_POST['form_submit'] == 'ok'){
+			//验证
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["h_title"], "require"=>"true", "message"=>L('home_add_null')),
+				array("input"=>$_POST["h_desc"], "require"=>"true", "message"=>L('home_add_null')),
+				array("input"=>$_POST["h_keyword"], "require"=>"true", "message"=>L('home_add_null')),
+				array("input"=>$_POST["h_sort"], "require"=>"true", 'validator'=>'Number', "message"=>L('home_add_sort_int')),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+			    $home_array = $model->getMbHomeInfoByID(intval($_POST['h_id']));
+				//上传图片
+				if ($_FILES['h_img']['name'] != ''){
+					$upload = new UploadFile();
+					$upload->set('default_dir',ATTACH_MOBILE.'/home');
+
+					$result = $upload->upfile('h_img');
+					if ($result){
+						$_POST['h_img'] = $upload->file_name;
+					}else {
+						showMessage($upload->error);
+					}
+				}
+
+				$update_array = array();
+				$update_array['h_title'] = trim($_POST['h_title']);
+				$update_array['h_desc'] = trim($_POST['h_desc']);
+				$update_array['h_keyword'] = trim($_POST['h_keyword']);
+                if(!empty($_POST['h_multi_keyword'])) {
+                    $update_array['h_multi_keyword'] = $_POST['h_multi_keyword'];
+                }
+				if ($_POST['h_img']){
+					$update_array['h_img'] = $_POST['h_img'];
+				}
+				$update_array['h_sort'] = trim($_POST['h_sort']);
+
+                $condition = array();
+				$condition['h_id'] = intval($_POST['h_id']);
+
+				$result = $model->editMbHome($update_array, $condition);
+				if ($result){
+					//除图片
+					if (!empty($_POST['h_img']) && !empty($home_array['h_img'])){
+						@unlink(BASE_ROOT_PATH.DS.DIR_UPLOAD.DS.ATTACH_MOBILE.'/home'.DS.$home_array['h_img']);
+					}
+					showMessage(L('home_edit_succ'),'index.php?act=mb_home&op=mb_home_list');
+				}else {
+					showMessage(L('home_edit_fail'));
+				}
+			}
+		}
+
+		$home_array = $model->getMbHomeInfoByID(intval($_GET['h_id']));
+		if (empty($home_array)){
+			showMessage(L('wrong_argument'));
+		}
+
+		Tpl::output('home_array',$home_array);
+		Tpl::showpage('mb_home.edit');
+	}
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			//排序
+			case 'h_sort':
+				$model_link = Model('mb_home');
+				$update_array = array();
+				$update_array[$_GET['column']] = trim($_GET['value']);
+                $condition = array();
+				$condition['h_id'] = intval($_GET['id']);
+				$result = $model_link->editMbHome($update_array, $condition);
+				echo 'true';exit;
+				break;
+		}
+	}
+}

+ 24 - 0
admin/control/mb_index.php

@@ -0,0 +1,24 @@
+<?php
+/**
+ * 手机首页
+ *
+ *
+ *
+ *
+ */
+
+
+
+defined('InShopNC') or exit('Access Invalid!');
+class mb_indexControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+	}
+
+    /**
+     * 首页项目列表
+     */
+    public function index_listOp() {
+    }
+}
+

+ 76 - 0
admin/control/mb_payment.php

@@ -0,0 +1,76 @@
+<?php
+/**
+ * 手机支付方式
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class mb_paymentControl extends SystemControl{
+    public function __construct(){
+        parent::__construct();
+    }
+
+    public function indexOp() {
+        $this->payment_listOp();
+    }
+
+    public function payment_listOp() {
+        $model_mb_payment = Model('mb_payment');
+        $mb_payment_list = $model_mb_payment->getMbPaymentList();
+        Tpl::output('mb_payment_list', $mb_payment_list);
+        Tpl::showpage('mb_payment.list');
+    }
+
+    /**
+     * 编辑
+     */
+    public function payment_editOp() {
+        $payment_id = intval($_GET["payment_id"]);
+
+        $model_mb_payment = Model('mb_payment');
+
+        $mb_payment_info = $model_mb_payment->getMbPaymentInfo(array('payment_id' => $payment_id));
+        Tpl::output('payment', $mb_payment_info);
+        Tpl::showpage('mb_payment.edit');
+    }
+
+    /**
+     * 编辑保存
+     */
+    public function payment_saveOp() {
+        $payment_id = intval($_POST["payment_id"]);
+
+        $data = array();
+        $data['payment_state'] = intval($_POST["payment_state"]);
+
+        switch ($_POST['payment_code']) {
+            case 'alipay':
+                $payment_config = array(
+                    'alipay_account' => $_POST['alipay_account'],
+                    'alipay_key' => $_POST['alipay_key'],
+                    'alipay_partner' => $_POST['alipay_partner'],
+                );
+                break;
+            case 'wxpay':
+                $payment_config = array(
+                    'wxpay_partner' => $_POST['wxpay_partner'],
+                    'wxpay_key' => $_POST['wxpay_key'],
+                );
+                break;
+            default:
+                showMessage(L('param_error'), '');
+        }
+        $data['payment_config'] = $payment_config;
+
+        $model_mb_payment = Model('mb_payment');
+
+        $result = $model_mb_payment->editMbPayment($data, array('payment_id' => $payment_id));
+        if($result) {
+            showMessage(Language::get('nc_common_save_succ'), urlAdmin('mb_payment', 'payment_list'));
+        } else {
+            showMessage(Language::get('nc_common_save_fail'), urlAdmin('mb_payment', 'payment_list'));
+        }
+    }
+}

+ 300 - 0
admin/control/mb_special.php

@@ -0,0 +1,300 @@
+<?php
+/**
+ * 手机专题
+ *
+ *
+ *
+ *
+ */
+
+
+
+defined('InShopNC') or exit('Access Invalid!');
+class mb_specialControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+	}
+
+    /**
+     * 专题列表
+     */
+    public function special_listOp() {
+        $model_mb_special = Model('mb_special');
+
+        $mb_special_list = $model_mb_special->getMbSpecialList($array, 10);
+
+        Tpl::output('list', $mb_special_list);
+        Tpl::output('page', $model_mb_special->showpage(2));
+
+        $this->show_menu('special_list');
+        Tpl::showpage('mb_special.list');
+    }
+
+    /**
+     * 保存专题
+     */
+    public function special_saveOp() {
+        $model_mb_special = Model('mb_special');
+
+        $param = array();
+        $param['special_desc'] = $_POST['special_desc'];
+        $result = $model_mb_special->addMbSpecial($param);
+
+        if($result) {
+            $this->log('添加手机专题' . '[ID:' . $result. ']', 1);
+            showMessage(L('nc_common_save_succ'), urlAdmin('mb_special', 'special_list'));
+        } else {
+            $this->log('添加手机专题' . '[ID:' . $result. ']', 0);
+            showMessage(L('nc_common_save_fail'), urlAdmin('mb_special', 'special_list'));
+        }
+    }
+
+    /**
+     * 编辑专题描述 
+     */
+    public function update_special_descOp() {
+        $model_mb_special = Model('mb_special');
+
+        $param = array();
+        $param['special_desc'] = $_GET['value'];
+        $result = $model_mb_special->editMbSpecial($param, $_GET['id']);
+
+        $data = array();
+        if($result) {
+            $this->log('保存手机专题' . '[ID:' . $result. ']', 1);
+            $data['result'] = true;
+        } else {
+            $this->log('保存手机专题' . '[ID:' . $result. ']', 0);
+            $data['result'] = false;
+            $data['message'] = '保存失败';
+        }
+        echo json_encode($data);die;
+    }
+
+    /**
+     * 删除专题
+     */
+    public function special_delOp() {
+        $model_mb_special = Model('mb_special');
+
+        $result = $model_mb_special->delMbSpecialByID($_POST['special_id']);
+
+        if($result) {
+            $this->log('删除手机专题' . '[ID:' . $_POST['special_id'] . ']', 1);
+            showMessage(L('nc_common_del_succ'), urlAdmin('mb_special', 'special_list'));
+        } else {
+            $this->log('删除手机专题' . '[ID:' . $_POST['special_id'] . ']', 0);
+            showMessage(L('nc_common_del_fail'), urlAdmin('mb_special', 'special_list'));
+        }
+    }
+
+    /**
+     * 编辑首页
+     */
+    public function index_editOp() {
+        $model_mb_special = Model('mb_special');
+
+        $special_item_list = $model_mb_special->getMbSpecialItemListByID($model_mb_special::INDEX_SPECIAL_ID);
+        Tpl::output('list', $special_item_list);
+        Tpl::output('page', $model_mb_special->showpage(2));
+
+        Tpl::output('module_list', $model_mb_special->getMbSpecialModuleList());
+        Tpl::output('special_id', $model_mb_special::INDEX_SPECIAL_ID);
+
+        $this->show_menu('index_edit');
+        Tpl::showpage('mb_special_item.list');
+    }
+
+    /**
+     * 编辑专题
+     */
+    public function special_editOp() {
+        $model_mb_special = Model('mb_special');
+
+        $special_item_list = $model_mb_special->getMbSpecialItemListByID($_GET['special_id']);
+        Tpl::output('list', $special_item_list);
+        Tpl::output('page', $model_mb_special->showpage(2));
+
+        Tpl::output('module_list', $model_mb_special->getMbSpecialModuleList());
+        Tpl::output('special_id', $_GET['special_id']);
+
+        $this->show_menu('special_item_list');
+        Tpl::showpage('mb_special_item.list');
+    }
+
+    /**
+     * 专题项目添加
+     */
+    public function special_item_addOp() {
+        $model_mb_special = Model('mb_special');
+
+        $param = array();
+        $param['special_id'] = $_POST['special_id'];
+        $param['item_type'] = $_POST['item_type'];
+
+        //广告只能添加一个
+        if($param['item_type'] == 'adv_list') {
+            $result = $model_mb_special->isMbSpecialItemExist($param);
+            if($result) {
+                echo json_encode(array('error' => '广告条板块只能添加一个'));die;
+            }
+        }
+
+        $item_info = $model_mb_special->addMbSpecialItem($param);
+        if($item_info) {
+            echo json_encode($item_info);die;
+        } else {
+            echo json_encode(array('error' => '添加失败'));die;
+        }
+    }
+
+    /**
+     * 专题项目删除
+     */
+    public function special_item_delOp() {
+        $model_mb_special = Model('mb_special');
+
+        $condition = array();
+        $condition['item_id'] = $_POST['item_id'];
+
+        $result = $model_mb_special->delMbSpecialItem($condition, $_POST['special_id']);
+        if($result) {
+            echo json_encode(array('message' => '删除成功'));die;
+        } else {
+            echo json_encode(array('error' => '删除失败'));die;
+        }
+    }
+
+    /**
+     * 专题项目编辑
+     */
+    public function special_item_editOp() {
+        $model_mb_special = Model('mb_special');
+
+        $item_info = $model_mb_special->getMbSpecialItemInfoByID($_GET['item_id']);
+        Tpl::output('item_info', $item_info);
+
+        if($item_info['special_id'] == 0) {
+            $this->show_menu('index_edit');
+        } else {
+            $this->show_menu('special_item_list');
+        }
+        Tpl::showpage('mb_special_item.edit');
+    }
+
+    /**
+     * 专题项目保存
+     */
+    public function special_item_saveOp() {
+        $model_mb_special = Model('mb_special');
+
+        $result = $model_mb_special->editMbSpecialItemByID(array('item_data' => $_POST['item_data']), $_POST['item_id'], $_POST['special_id']); 
+
+        if($result) {
+            if($_POST['special_id'] == $model_mb_special::INDEX_SPECIAL_ID) {
+                showMessage(L('nc_common_save_succ'), urlAdmin('mb_special', 'index_edit'));
+            } else {
+                showMessage(L('nc_common_save_succ'), urlAdmin('mb_special', 'special_edit', array('special_id' => $_POST['special_id'])));
+            }
+        } else {
+            showMessage(L('nc_common_save_succ'), '');
+        }
+    }
+
+    /**
+     * 图片上传
+     */
+    public function special_image_uploadOp() {
+        $data = array();
+        if(!empty($_FILES['special_image']['name'])) {
+            $prefix = 's' . $_POST['special_id'];
+            $upload	= new UploadFile();
+            $upload->set('default_dir', ATTACH_MOBILE . DS . 'special' . DS . $prefix);
+            $upload->set('fprefix', $prefix);
+            $upload->set('allow_type', array('gif', 'jpg', 'jpeg', 'png'));
+
+            $result = $upload->upfile('special_image');
+            if(!$result) {
+                $data['error'] = $upload->error;
+            }
+            $data['image_name'] = $upload->file_name;
+            $data['image_url'] = getMbSpecialImageUrl($data['image_name']);
+        }
+        echo json_encode($data);
+    }
+
+    /**
+     * 商品列表
+     */
+    public function goods_listOp() {
+        $model_goods = Model('goods');
+
+        $condition = array();
+        $condition['goods_name'] = array('like', '%' . $_POST['keyword'] . '%');
+        $goods_list = $model_goods->getGoodsOnlineList($condition, 'goods_id,goods_name,goods_promotion_price,goods_image', 10);
+        Tpl::output('goods_list', $goods_list);
+        Tpl::output('show_page', $model_goods->showpage());
+        Tpl::showpage('mb_special_widget.goods', 'null_layout');
+    }
+
+    /**
+     * 更新项目排序
+     */
+    public function update_item_sortOp() {
+        $item_id_string = $_POST['item_id_string'];
+        $special_id = $_POST['special_id'];
+        if(!empty($item_id_string)) {
+            $model_mb_special = Model('mb_special');
+            $item_id_array = explode(',', $item_id_string);
+            $index = 0;
+            foreach ($item_id_array as $item_id) {
+                $result = $model_mb_special->editMbSpecialItemByID(array('item_sort' => $index), $item_id, $special_id);
+                $index++;
+            }
+        }
+        $data = array();
+        $data['message'] = '操作成功';
+        echo json_encode($data);
+    }
+
+    /**
+     * 更新项目启用状态
+     */
+    public function update_item_usableOp() {
+        $model_mb_special = Model('mb_special');
+        $result = $model_mb_special->editMbSpecialItemUsableByID($_POST['usable'], $_POST['item_id'], $_POST['special_id']);
+        $data = array();
+        if($result) {
+            $data['message'] = '操作成功';
+        } else {
+            $data['error'] = '操作失败';
+        }
+        echo json_encode($data);
+    }
+
+    /**
+     * 页面内导航菜单
+     * @param string 	$menu_key	当前导航的menu_key
+     * @param array 	$array		附加菜单
+     * @return
+     */
+    private function show_menu($menu_key='') {
+        $menu_array = array();
+        if($menu_key == 'index_edit') {
+            $menu_array[] = array('menu_key'=>'index_edit', 'menu_name'=>'编辑', 'menu_url'=>'javascript:;');
+        } else {
+            $menu_array[] = array('menu_key'=>'special_list','menu_name'=>'列表', 'menu_url'=>urlAdmin('mb_special', 'special_list'));
+        }
+        if($menu_key == 'special_item_list') {
+            $menu_array[] = array('menu_key'=>'special_item_list', 'menu_name'=>'编辑专题', 'menu_url'=>'javascript:;');
+        }
+        if($menu_key == 'index_edit') {
+            tpl::output('item_title', '首页编辑');
+        } else {
+            tpl::output('item_title', '专题设置');
+        }
+        Tpl::output('menu', $menu_array);
+        Tpl::output('menu_key', $menu_key);
+    }
+}
+

+ 284 - 0
admin/control/member.php

@@ -0,0 +1,284 @@
+<?php
+/**
+ * 会员管理
+ *
+ *
+ *
+ **by 好商城V3 www.33hao.com 运营版*/
+
+defined('InShopNC') or exit('Access Invalid!');
+
+class memberControl extends SystemControl{
+	const EXPORT_SIZE = 1000;
+	public function __construct(){
+		parent::__construct();
+		Language::read('member');
+	}
+
+	/**
+	 * 会员管理
+	 */
+	public function memberOp(){
+		$lang	= Language::getLangContent();
+		$model_member = Model('member');
+				/**
+		 * 删除
+		 */
+		if (chksubmit()){
+			/**
+			 * 判断是否是管理员,如果是,则不能删除
+			 */
+			/**
+			 * 删除
+			 */
+			if (!empty($_POST['del_id'])){
+				if (is_array($_POST['del_id'])){
+					foreach ($_POST['del_id'] as $k => $v){
+						$v = intval($v);
+						$rs = true;//$model_member->del($v);
+						if ($rs){
+							//删除该会员商品,店铺
+							//获得该会员店铺信息
+							$member = $model_member->getMemberInfo(array(
+								'member_id'=>$v
+							));
+							//删除用户
+							$model_member->del($v);
+						}
+					}
+				}
+				showMessage($lang['nc_common_del_succ']);
+			}else {
+				showMessage($lang['nc_common_del_fail']);
+			}
+		}
+		//会员级别
+		$member_grade = $model_member->getMemberGradeArr();
+		if ($_GET['search_field_value'] != '') {
+    		switch ($_GET['search_field_name']){
+    			case 'member_name':
+    				$condition['member_name'] = array('like', '%' . trim($_GET['search_field_value']) . '%');
+    				break;
+    			case 'member_email':
+    				$condition['member_email'] = array('like', '%' . trim($_GET['search_field_value']) . '%');
+    				break;
+				//好商 城v3- b11
+				case 'member_mobile':
+    				$condition['member_mobile'] = array('like', '%' . trim($_GET['search_field_value']) . '%');
+    				break;
+    			case 'member_truename':
+    				$condition['member_truename'] = array('like', '%' . trim($_GET['search_field_value']) . '%');
+    				break;
+    		}
+		}
+		switch ($_GET['search_state']){
+			case 'no_informallow':
+				$condition['inform_allow'] = '2';
+				break;
+			case 'no_isbuy':
+				$condition['is_buy'] = '0';
+				break;
+			case 'no_isallowtalk':
+				$condition['is_allowtalk'] = '0';
+				break;
+			case 'no_memberstate':
+				$condition['member_state'] = '0';
+				break;
+		}
+		//会员等级
+		$search_grade = intval($_GET['search_grade']);
+		if ($search_grade >= 0 && $member_grade){
+		    $condition['member_exppoints'] = array(array('egt',$member_grade[$search_grade]['exppoints']),array('lt',$member_grade[$search_grade+1]['exppoints']),'and');
+		}
+		//排序
+		$order = trim($_GET['search_sort']);
+		if (empty($order)) {
+		    $order = 'member_id desc';
+		}
+		$member_list = $model_member->getMemberList($condition, '*', 10, $order);		
+		//整理会员信息
+		if (is_array($member_list)){
+			foreach ($member_list as $k=> $v){
+				$member_list[$k]['member_time'] = $v['member_time']?date('Y-m-d H:i:s',$v['member_time']):'';
+				$member_list[$k]['member_login_time'] = $v['member_login_time']?date('Y-m-d H:i:s',$v['member_login_time']):'';
+				$member_list[$k]['member_grade'] = ($t = $model_member->getOneMemberGrade($v['member_exppoints'], false, $member_grade))?$t['level_name']:'';
+			}
+		}
+		Tpl::output('member_grade',$member_grade);
+		Tpl::output('search_sort',trim($_GET['search_sort']));
+		Tpl::output('search_field_name',trim($_GET['search_field_name']));
+		Tpl::output('search_field_value',trim($_GET['search_field_value']));
+		Tpl::output('member_list',$member_list);
+		Tpl::output('page',$model_member->showpage());
+		Tpl::showpage('member.index');
+	}
+
+	/**
+	 * 会员修改
+	 */
+	public function member_editOp(){
+		$lang	= Language::getLangContent();
+		$model_member = Model('member');
+		/**
+		 * 保存
+		 */
+		if (chksubmit()){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+			array("input"=>$_POST["member_email"], "require"=>"true", 'validator'=>'Email', "message"=>$lang['member_edit_valid_email']),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				$update_array = array();
+				$update_array['member_id']			= intval($_POST['member_id']);
+				if (!empty($_POST['member_passwd'])){
+					$update_array['member_passwd'] = md5($_POST['member_passwd']);
+				}
+				$update_array['member_email']		= $_POST['member_email'];
+				$update_array['member_truename']	= $_POST['member_truename'];
+				$update_array['member_sex'] 		= $_POST['member_sex'];
+				$update_array['member_qq'] 			= $_POST['member_qq'];
+				$update_array['member_ww']			= $_POST['member_ww'];
+				$update_array['inform_allow'] 		= $_POST['inform_allow'];
+				$update_array['is_buy'] 			= $_POST['isbuy'];
+				$update_array['is_allowtalk'] 		= $_POST['allowtalk'];
+				$update_array['member_state'] 		= $_POST['memberstate'];
+				//v3-b11 新增
+				$update_array['member_cityid']		= $_POST['city_id'];
+			        $update_array['member_provinceid']	= $_POST['province_id'];
+			        $update_array['member_areainfo']	= $_POST['area_info'];
+				$update_array['member_mobile'] 		= $_POST['member_mobile'];
+				$update_array['member_email_bind'] 	= intval($_POST['memberemailbind']);
+				$update_array['member_mobile_bind'] 	= intval($_POST['membermobilebind']);
+
+			
+				if (!empty($_POST['member_avatar'])){
+					$update_array['member_avatar'] = $_POST['member_avatar'];
+				}
+				$result = $model_member->editMember(array('member_id'=>intval($_POST['member_id'])),$update_array);
+				if ($result){
+					$url = array(
+					array(
+					'url'=>'index.php?act=member&op=member',
+					'msg'=>$lang['member_edit_back_to_list'],
+					),
+					array(
+					'url'=>'index.php?act=member&op=member_edit&member_id='.intval($_POST['member_id']),
+					'msg'=>$lang['member_edit_again'],
+					),
+					);
+					$this->log(L('nc_edit,member_index_name').'[ID:'.$_POST['member_id'].']',1);
+					showMessage($lang['member_edit_succ'],$url);
+				}else {
+					showMessage($lang['member_edit_fail']);
+				}
+			}
+		}
+		$condition['member_id'] = intval($_GET['member_id']);
+		$member_array = $model_member->getMemberInfo($condition);
+
+		Tpl::output('member_array',$member_array);
+		Tpl::showpage('member.edit');
+	}
+
+	/**
+	 * 新增会员
+	 */
+	public function member_addOp(){
+		$lang	= Language::getLangContent();
+		$model_member = Model('member');
+		/**
+		 * 保存
+		 */
+		if (chksubmit()){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+			    array("input"=>$_POST["member_name"], "require"=>"true", "message"=>$lang['member_add_name_null']),
+			    array("input"=>$_POST["member_passwd"], "require"=>"true", "message"=>'密码不能为空'),
+			    array("input"=>$_POST["member_email"], "require"=>"true", 'validator'=>'Email', "message"=>$lang['member_edit_valid_email'])
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				$insert_array = array();
+				$insert_array['member_name']	= trim($_POST['member_name']);
+				$insert_array['member_passwd']	= trim($_POST['member_passwd']);
+				$insert_array['member_email']	= trim($_POST['member_email']);
+				$insert_array['member_truename']= trim($_POST['member_truename']);
+				$insert_array['member_sex'] 	= trim($_POST['member_sex']);
+				$insert_array['member_qq'] 		= trim($_POST['member_qq']);
+				$insert_array['member_ww']		= trim($_POST['member_ww']);
+                //默认允许举报商品
+                $insert_array['inform_allow'] 	= '1';
+				if (!empty($_POST['member_avatar'])){
+					$insert_array['member_avatar'] = trim($_POST['member_avatar']);
+				}
+
+				$result = $model_member->addMember($insert_array);
+				if ($result){
+					$url = array(
+					array(
+					'url'=>'index.php?act=member&op=member',
+					'msg'=>$lang['member_add_back_to_list'],
+					),
+					array(
+					'url'=>'index.php?act=member&op=member_add',
+					'msg'=>$lang['member_add_again'],
+					),
+					);
+					$this->log(L('nc_add,member_index_name').'[	'.$_POST['member_name'].']',1);
+					showMessage($lang['member_add_succ'],$url);
+				}else {
+					showMessage($lang['member_add_fail']);
+				}
+			}
+		}
+		Tpl::showpage('member.add');
+	}
+
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			/**
+			 * 验证会员是否重复
+			 */
+			case 'check_user_name':
+				$model_member = Model('member');
+				$condition['member_name']	= $_GET['member_name'];
+				$condition['member_id']	= array('neq',intval($_GET['member_id']));
+				$list = $model_member->getMemberInfo($condition);
+				if (empty($list)){
+					echo 'true';exit;
+				}else {
+					echo 'false';exit;
+				}
+				break;
+				/**
+			 * 验证邮件是否重复
+			 */
+			case 'check_email':
+				$model_member = Model('member');
+				$condition['member_email'] = $_GET['member_email'];
+				$condition['member_id'] = array('neq',intval($_GET['member_id']));
+				$list = $model_member->getMemberInfo($condition);
+				if (empty($list)){
+					echo 'true';exit;
+				}else {
+					echo 'false';exit;
+				}
+				break;
+		}
+	}
+
+}

+ 55 - 0
admin/control/member_grade.php

@@ -0,0 +1,55 @@
+<?php
+/**
+ * 会员管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+
+class member_gradeControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('member');
+	}
+	/**
+	 * 会员管理
+	 */
+	public function indexOp(){
+	    $model_setting = Model('setting');
+	    $list_setting = $model_setting->getListSetting();
+	    $list_setting['member_grade'] = $list_setting['member_grade']?unserialize($list_setting['member_grade']):array();
+	    if (chksubmit()){
+    	    $update_arr = array();
+    	    if($_POST['mg']){
+    	        $mg_arr = array();
+    	        $i = 0;
+    	        foreach($_POST['mg'] as $k=>$v){
+    	            $mg_arr[$i]['level'] = $i;
+    	            $mg_arr[$i]['level_name'] = 'V'.$i;
+        			//所需经验值
+        			$mg_arr[$i]['exppoints'] = intval($v['exppoints']);
+        			$i++;
+    	        }
+    	        $update_arr['member_grade'] = serialize($mg_arr);
+    	    } else {
+    	        $update_arr['member_grade'] = '';
+    	    }
+    	    $result = true;
+    	    if ($update_arr){
+    	        $result = $model_setting->updateSetting($update_arr);
+    	    }
+    	    if ($result){
+    	        $this->log(L('nc_edit,nc_member_grade'),1);
+				showDialog(L('nc_common_save_succ'),'reload','succ');
+    	    } else {
+    	        $this->log(L('nc_edit,nc_member_grade'),0);
+				showDialog(L('nc_common_save_fail'));
+    	    }
+	    } else {
+	        Tpl::output('list_setting',$list_setting);
+		    Tpl::showpage('member.grade');
+	    }
+	}
+}

+ 413 - 0
admin/control/message.php

@@ -0,0 +1,413 @@
+<?php
+/**
+ * 消息通知
+ *
+ *
+ *
+ **by 好商城V3 www.33hao.com 运营版*/
+
+defined('InShopNC') or exit('Access Invalid!');
+class messageControl extends SystemControl{
+	private $links = array(
+		array('url'=>'act=message&op=email','lang'=>'email_set'),
+		//V3-B11
+		array('url'=>'act=message&op=mobile','lang'=>'mobile_set'),
+	    array('url'=>'act=message&op=seller_tpl', 'lang'=>'seller_tpl'),
+	    array('url'=>'act=message&op=member_tpl', 'lang'=>'member_tpl'),
+	    array('url'=>'act=message&op=email_tpl','lang'=>'email_tpl')
+	);
+	public function __construct(){
+		parent::__construct();
+		Language::read('setting,message');
+	}
+
+	/**
+	 * 邮件设置
+	 */
+	public function emailOp(){
+		$model_setting = Model('setting');
+		if (chksubmit()){
+			$update_array = array();
+			$update_array['email_host'] 	= $_POST['email_host'];
+			$update_array['email_port'] 	= $_POST['email_port'];
+			$update_array['email_addr'] 	= $_POST['email_addr'];
+			$update_array['email_id'] 		= $_POST['email_id'];
+			$update_array['email_pass'] 	= $_POST['email_pass'];
+
+			$result = $model_setting->updateSetting($update_array);
+			if ($result === true){
+				$this->log(L('nc_edit,email_set'),1);
+				showMessage(L('nc_common_save_succ'));
+			}else {
+				$this->log(L('nc_edit,email_set'),0);
+				showMessage(L('nc_common_save_fail'));
+			}
+		}
+		$list_setting = $model_setting->getListSetting();
+		Tpl::output('list_setting',$list_setting);
+
+		Tpl::output('top_link',$this->sublink($this->links,'email'));
+		Tpl::showpage('message.email');
+	}
+	
+	/**
+	 * 短信平台设置 V3-B11 BY 3 3HA O .COM
+	 */
+	public function mobileOp(){
+		$model_setting = Model('setting');
+		if (chksubmit()){
+			$update_array = array();
+			$update_array['mobile_host_type'] 	= $_POST['mobile_host_type'];
+			$update_array['mobile_host'] 	= $_POST['mobile_host'];
+			$update_array['mobile_username'] 	= $_POST['mobile_username'];
+			$update_array['mobile_pwd'] 	= $_POST['mobile_pwd'];
+			$update_array['mobile_key'] 		= $_POST['mobile_key'];
+			$update_array['mobile_signature'] 		= $_POST['mobile_signature'];
+			$update_array['mobile_memo'] 	= $_POST['mobile_memo'];
+			$result = $model_setting->updateSetting($update_array);
+			if ($result === true){
+				$this->log(L('nc_edit,mobile_set'),1);
+				showMessage(L('nc_common_save_succ'));
+			}else {
+				$this->log(L('nc_edit,mobile_set'),0);
+				showMessage(L('nc_common_save_fail'));
+			}
+		}
+		$list_setting = $model_setting->getListSetting();
+		Tpl::output('list_setting',$list_setting);
+
+		Tpl::output('top_link',$this->sublink($this->links,'mobile'));
+		Tpl::showpage('message.mobile');
+	}
+
+
+	/**
+	 * 邮件模板列表
+	 */
+	public function email_tplOp(){
+		$model_templates = Model('mail_templates');
+		$templates_list = $model_templates->getTplList();
+		Tpl::output('templates_list',$templates_list);
+		Tpl::output('top_link',$this->sublink($this->links,'email_tpl'));
+		Tpl::showpage('message.email_tpl');
+	}
+
+	/**
+	 * 编辑邮件模板
+	 */
+	public function email_tpl_editOp(){
+		$model_templates = Model('mail_templates');
+		if (chksubmit()){
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["code"], "require"=>"true", "message"=>L('mailtemplates_edit_no_null')),
+				array("input"=>$_POST["title"], "require"=>"true", "message"=>L('mailtemplates_edit_title_null')),
+				array("input"=>$_POST["content"], "require"=>"true", "message"=>L('mailtemplates_edit_content_null')),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				$update_array = array();
+				$update_array['code'] = $_POST["code"];
+				$update_array['title'] = $_POST["title"];
+				$update_array['content'] = $_POST["content"];
+				$result = $model_templates->editTpl($update_array,array('code'=>$_POST['code']));
+				if ($result === true){
+					$this->log(L('nc_edit,email_tpl'),1);
+					showMessage(L('mailtemplates_edit_succ'),'index.php?act=message&op=email_tpl');
+				}else {
+					$this->log(L('nc_edit,email_tpl'),0);
+					showMessage(L('mailtemplates_edit_fail'));
+				}
+			}
+		}
+		if (empty($_GET['code'])){
+			showMessage(L('mailtemplates_edit_code_null'));
+		}
+		$templates_array = $model_templates->getTplInfo(array('code'=>$_GET['code']));
+		Tpl::output('templates_array',$templates_array);
+		Tpl::output('top_link',$this->sublink($this->links,'email_tpl'));
+		Tpl::showpage('message.email_tpl.edit');
+	}
+
+	/**
+	 * 测试邮件发送
+	 *
+	 * @param
+	 * @return
+	 */
+	public function email_testingOp(){
+		/**
+		 * 读取语言包
+		 */
+		$lang	= Language::getLangContent();
+
+		$email_host = trim($_POST['email_host']);
+		$email_port = trim($_POST['email_port']);
+		$email_addr = trim($_POST['email_addr']);
+		$email_id = trim($_POST['email_id']);
+		$email_pass = trim($_POST['email_pass']);
+
+		$email_test = trim($_POST['email_test']);
+		$subject	= $lang['test_email'];
+		$site_url	= SHOP_SITE_URL;
+
+        $site_title = C('site_name');
+        $message = '<p>'.$lang['this_is_to']."<a href='".$site_url."' target='_blank'>".$site_title.'</a>'.$lang['test_email_send_ok'].'</p>';
+// 		if ($email_type == '1'){
+			$obj_email = new Email();
+			$obj_email->set('email_server',$email_host);
+			$obj_email->set('email_port',$email_port);
+			$obj_email->set('email_user',$email_id);
+			$obj_email->set('email_password',$email_pass);
+			$obj_email->set('email_from',$email_addr);
+            $obj_email->set('site_name',$site_title);
+			$result = $obj_email->send($email_test,$subject,$message);
+// 		}else {
+// 			$result = @mail($email_test,$subject,$message);
+// 		}
+       if ($result === false){
+            $message = $lang['test_email_send_fail'];
+            if (strtoupper(CHARSET) == 'GBK'){
+                $message = Language::getUTF8($message);
+            }
+            showMessage($message,'','json');
+        }else {
+            $message = $lang['test_email_send_ok'];
+            if (strtoupper(CHARSET) == 'GBK'){
+                $message = Language::getUTF8($message);
+            }
+            showMessage($message,'','json');
+        }
+    }
+
+    /**
+     * 商家消息模板
+     */
+    public function seller_tplOp() {
+        $mstpl_list = Model('store_msg_tpl')->getStoreMsgTplList(array());
+        Tpl::output('mstpl_list', $mstpl_list);
+        Tpl::output('top_link',$this->sublink($this->links,'seller_tpl'));
+        Tpl::showpage('message.seller_tpl');
+    }
+
+    /**
+     * 商家消息模板编辑
+     */
+    public function seller_tpl_editOp() {
+        if (chksubmit()) {
+            $code = trim($_POST['code']);
+            $type = trim($_POST['type']);
+            if (empty($code) || empty($type)) {
+                showMessage(L('param_error'));
+            }
+            switch ($type) {
+                case 'message':
+                    $this->seller_tpl_update_message();
+                    break;
+                case 'short':
+                    $this->seller_tpl_update_short();
+                    break;
+                case 'mail':
+                    $this->seller_tpl_update_mail();
+                    break;
+            }
+        }
+        $code = trim($_GET['code']);
+        if (empty($code)) {
+            showMessage(L('param_error'));
+        }
+
+        $where = array();
+        $where['smt_code'] = $code;
+        $smtpl_info = Model('store_msg_tpl')->getStoreMsgTplInfo($where);
+        Tpl::output('smtpl_info', $smtpl_info);
+        $this->links[] = array('url'=>'act=message&op=seller_tpl_edit','lang'=>'seller_tpl_edit');
+        Tpl::output('top_link',$this->sublink($this->links,'seller_tpl_edit'));
+        Tpl::showpage('message.seller_tpl.edit');
+    }
+
+    /**
+     * 商家消息模板更新站内信
+     */
+    private function seller_tpl_update_message() {
+        $message_content = trim($_POST['message_content']);
+        if (empty($message_content)) {
+            showMessage('请填写站内信模板内容。');
+        }
+        // 条件
+        $where = array();
+        $where['smt_code'] = trim($_POST['code']);
+        // 数据
+        $update = array();
+        $update['smt_message_switch'] = intval($_POST['message_switch']);
+        $update['smt_message_content'] = $message_content;
+        $update['smt_message_forced'] = intval($_POST['message_forced']);
+        $result = Model('store_msg_tpl')->editStoreMsgTpl($where, $update);
+        $this->seller_tpl_update_showmessage($result);
+    }
+
+    /**
+     * 商家消息模板更新短消息
+     */
+    private function seller_tpl_update_short() {
+        $short_content = trim($_POST['short_content']);
+        if (empty($short_content)) {
+            showMessage('请填写短消息模板内容。');
+        }
+        // 条件
+        $where = array();
+        $where['smt_code'] = trim($_POST['code']);
+        // 数据
+        $update = array();
+        $update['smt_short_switch'] = intval($_POST['short_switch']);
+        $update['smt_short_content'] = $short_content;
+        $update['smt_short_forced'] = intval($_POST['short_forced']);
+        $result = Model('store_msg_tpl')->editStoreMsgTpl($where, $update);
+        $this->seller_tpl_update_showmessage($result);
+    }
+
+    /**
+     * 商家消息模板更新邮件
+     */
+    private function seller_tpl_update_mail() {
+        $mail_subject = trim($_POST['mail_subject']);
+        $mail_content = trim($_POST['mail_content']);
+        if ((empty($mail_subject) || empty($mail_content))) {
+            showMessage('请填写邮件模板内容。');
+        }
+        // 条件
+        $where = array();
+        $where['smt_code'] = trim($_POST['code']);
+        // 数据
+        $update = array();
+        $update['smt_mail_switch'] = intval($_POST['mail_switch']);
+        $update['smt_mail_subject'] = $mail_subject;
+        $update['smt_mail_content'] = $mail_content;
+        $update['smt_mail_forced'] = intval($_POST['mail_forced']);
+        $result = Model('store_msg_tpl')->editStoreMsgTpl($where, $update);
+        $this->seller_tpl_update_showmessage($result);
+    }
+
+    private function seller_tpl_update_showmessage($result) {
+        if ($result) {
+            showMessage(L('nc_common_op_succ'), urlAdmin('message', 'seller_tpl'));
+        } else {
+            showMessage(L('nc_common_op_fail'));
+        }
+    }
+
+    /**
+     * 用户消息模板
+     */
+    public function member_tplOp() {
+        $mmtpl_list = Model('member_msg_tpl')->getMemberMsgTplList(array());
+        Tpl::output('mmtpl_list', $mmtpl_list);
+        Tpl::output('top_link',$this->sublink($this->links,'member_tpl'));
+        Tpl::showpage('message.member_tpl');
+    }
+
+    /**
+     * 用户消息模板编辑
+     */
+    public function member_tpl_editOp() {
+        if (chksubmit()) {
+            $code = trim($_POST['code']);
+            $type = trim($_POST['type']);
+            if (empty($code) || empty($type)) {
+                showMessage(L('param_error'));
+            }
+            switch ($type) {
+                case 'message':
+                    $this->member_tpl_update_message();
+                    break;
+                case 'short':
+                    $this->member_tpl_update_short();
+                    break;
+                case 'mail':
+                    $this->member_tpl_update_mail();
+                    break;
+            }
+        }
+        $code = trim($_GET['code']);
+        if (empty($code)) {
+            showMessage(L('param_error'));
+        }
+
+        $where = array();
+        $where['mmt_code'] = $code;
+        $mmtpl_info = Model('member_msg_tpl')->getMemberMsgTplInfo($where);
+        Tpl::output('mmtpl_info', $mmtpl_info);
+        $this->links[] = array('url'=>'act=message&op=member_tpl_edit','lang'=>'member_tpl_edit');
+        Tpl::output('top_link',$this->sublink($this->links,'member_tpl_edit'));
+        Tpl::showpage('message.member_tpl.edit');
+    }
+
+    /**
+     * 商家消息模板更新站内信
+     */
+    private function member_tpl_update_message() {
+        $message_content = trim($_POST['message_content']);
+        if (empty($message_content)) {
+            showMessage('请填写站内信模板内容。');
+        }
+        // 条件
+        $where = array();
+        $where['mmt_code'] = trim($_POST['code']);
+        // 数据
+        $update = array();
+        $update['mmt_message_switch'] = intval($_POST['message_switch']);
+        $update['mmt_message_content'] = $message_content;
+        $result = Model('member_msg_tpl')->editMemberMsgTpl($where, $update);
+        $this->member_tpl_update_showmessage($result);
+    }
+
+    /**
+     * 商家消息模板更新短消息
+     */
+    private function member_tpl_update_short() {
+        $short_content = trim($_POST['short_content']);
+        if (empty($short_content)) {
+            showMessage('请填写短消息模板内容。');
+        }
+        // 条件
+        $where = array();
+        $where['mmt_code'] = trim($_POST['code']);
+        // 数据
+        $update = array();
+        $update['mmt_short_switch'] = intval($_POST['short_switch']);
+        $update['mmt_short_content'] = $short_content;
+        $result = Model('member_msg_tpl')->editMemberMsgTpl($where, $update);
+        $this->member_tpl_update_showmessage($result);
+    }
+
+    /**
+     * 商家消息模板更新邮件
+     */
+    private function member_tpl_update_mail() {
+        $mail_subject = trim($_POST['mail_subject']);
+        $mail_content = trim($_POST['mail_content']);
+        if ((empty($mail_subject) || empty($mail_content))) {
+            showMessage('请填写邮件模板内容。');
+        }
+        // 条件
+        $where = array();
+        $where['mmt_code'] = trim($_POST['code']);
+        // 数据
+        $update = array();
+        $update['mmt_mail_switch'] = intval($_POST['mail_switch']);
+        $update['mmt_mail_subject'] = $mail_subject;
+        $update['mmt_mail_content'] = $mail_content;
+        $result = Model('member_msg_tpl')->editMemberMsgTpl($where, $update);
+        $this->member_tpl_update_showmessage($result);
+    }
+
+    private function member_tpl_update_showmessage($result) {
+        if ($result) {
+            showMessage(L('nc_common_op_succ'), urlAdmin('message', 'member_tpl'));
+        } else {
+            showMessage(L('nc_common_op_fail'));
+        }
+    }
+}

文件差异内容过多而无法显示
+ 1097 - 0
admin/control/microshop.php


+ 381 - 0
admin/control/navigation.php

@@ -0,0 +1,381 @@
+<?php
+/**
+ * 页面导航管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class navigationControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('navigation');
+	}
+
+	/**
+	 * 页面导航
+	 */
+	public function navigationOp(){
+		$lang	= Language::getLangContent();
+		$model_navigation = Model('navigation');
+		/**
+		 * 删除
+		 */
+		if (chksubmit()){
+			if (is_array($_POST['del_id']) && !empty($_POST['del_id'])){
+				$del_str=implode(',',$_POST['del_id']);
+				$where  = "where nav_id in (".$del_str.")";
+			    Db::delete("navigation",$where);
+			    dkcache('nav');
+			    $this->log(L('navigation_index_del_succ').'[ID:'.$del_str.']',null);
+				showMessage($lang['navigation_index_del_succ']);
+			}else {
+				showMessage($lang['navigation_index_choose_del']);
+			}
+		}
+		/**
+		 * 检索条件
+		 */
+		$condition['like_nav_title'] = trim($_GET['search_nav_title']);
+		$condition['nav_location'] = trim($_GET['search_nav_location']);
+		$condition['order'] = 'nav_sort asc';
+		/**
+		 * 分页
+		 */
+		$page	= new Page();
+		$page->setEachNum(10);
+		$page->setStyle('admin');
+		$navigation_list = $model_navigation->getNavigationList($condition,$page);
+		/**
+		 * 整理内容
+		 */
+		if (is_array($navigation_list)){
+			foreach ($navigation_list as $k => $v){
+				switch ($v['nav_location']){
+					case '0':
+						$navigation_list[$k]['nav_location'] = $lang['navigation_index_top'];
+						break;
+					case '1':
+						$navigation_list[$k]['nav_location'] = $lang['navigation_index_center'];
+						break;
+					case '2':
+						$navigation_list[$k]['nav_location'] = $lang['navigation_index_bottom'];
+						break;
+				}
+				switch ($v['nav_new_open']){
+					case '0':
+						$navigation_list[$k]['nav_new_open'] = $lang['nc_no'];
+						break;
+					case '1':
+						$navigation_list[$k]['nav_new_open'] = $lang['nc_yes'];
+						break;
+				}
+			}
+		}
+
+		Tpl::output('navigation_list',$navigation_list);
+		Tpl::output('page',$page->show());
+		Tpl::output('search_nav_title',trim($_GET['search_nav_title']));
+		Tpl::output('search_nav_location',trim($_GET['search_nav_location']));
+		Tpl::showpage('navigation.index');
+	}
+
+	/**
+	 * 页面导航 添加
+	 */
+	public function navigation_addOp(){
+		$lang	= Language::getLangContent();
+		$model_navigation = Model('navigation');
+		if (chksubmit()){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["nav_title"], "require"=>"true", "message"=>$lang['navigation_add_partner_null']),
+				array("input"=>$_POST["nav_sort"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['navigation_add_sort_int']),
+			);
+			switch ($_POST['nav_type']){
+				/**
+				 * 自定义
+				 */
+				case '0':
+					//$obj_validate->setValidate(array("input"=>$_POST["nav_url"], 'validator'=>'Url', "message"=>$lang['navigation_add_url_wrong']));
+					break;
+				/**
+				 * 商品分类
+				 */
+				case '1':
+					$obj_validate->setValidate(array("input"=>$_POST["goods_class_id"], "require"=>"true", "message"=>$lang['navigation_add_goods_class_null']));
+					break;
+				/**
+				 * 文章分类
+				 */
+				case '2':
+					$obj_validate->setValidate(array("input"=>$_POST["article_class_id"], "require"=>"true", "message"=>$lang['navigation_add_article_class_null']));
+					break;
+				/**
+				 * 活动
+				 */
+				case '3':
+					$obj_validate->setValidate(array("input"=>$_POST["activity_id"], "require"=>"true", "message"=>$lang['navigation_add_activity_null']));
+					break;
+			}
+
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+
+				$insert_array = array();
+				$insert_array['nav_type'] = trim($_POST['nav_type']);
+				$insert_array['nav_title'] = trim($_POST['nav_title']);
+				$insert_array['nav_location'] = trim($_POST['nav_location']);
+				$insert_array['nav_new_open'] = trim($_POST['nav_new_open']);
+				$insert_array['nav_sort'] = trim($_POST['nav_sort']);
+				switch ($_POST['nav_type']){
+					/**
+					 * 自定义
+					 */
+					case '0':
+						$insert_array['nav_url'] = trim($_POST['nav_url']);
+						break;
+					/**
+					 * 商品分类
+					 */
+					case '1':
+						$insert_array['item_id'] = intval($_POST['goods_class_id']);
+						break;
+					/**
+					 * 文章分类
+					 */
+					case '2':
+						$insert_array['item_id'] = intval($_POST['article_class_id']);
+						break;
+					/**
+					 * 活动
+					 */
+					case '3':
+						$insert_array['item_id'] = intval($_POST['activity_id']);
+						break;
+				}
+
+				$result = $model_navigation->add($insert_array);
+				if ($result){
+					dkcache('nav');
+					$url = array(
+						array(
+							'url'=>'index.php?act=navigation&op=navigation_add',
+							'msg'=>$lang['navigation_add_again'],
+						),
+						array(
+							'url'=>'index.php?act=navigation&op=navigation',
+							'msg'=>$lang['navigation_add_back_to_list'],
+						)
+					);
+					$this->log(L('navigation_add_succ').'['.$_POST['nav_title'].']',null);
+					showMessage($lang['navigation_add_succ'],$url);
+				}else {
+					showMessage($lang['navigation_add_fail']);
+				}
+			}
+		}
+		/**
+		 * 商品分类
+		 */
+		$model_goods_class = Model('goods_class');
+		$goods_class_list = $model_goods_class->getTreeClassList(3);
+		if (is_array($goods_class_list)){
+			foreach ($goods_class_list as $k => $v){
+				$goods_class_list[$k]['gc_name'] = str_repeat("&nbsp;",$v['deep']*2).$v['gc_name'];
+			}
+		}
+		/**
+		 * 文章分类
+		 */
+		$model_article_class = Model('article_class');
+		$article_class_list = $model_article_class->getTreeClassList(2);
+		if (is_array($article_class_list)){
+			foreach ($article_class_list as $k => $v){
+				$article_class_list[$k]['ac_name'] = str_repeat("&nbsp;",$v['deep']*2).$v['ac_name'];
+			}
+		}
+		/**
+		 * 活动
+		 */
+		$activity	= Model('activity');
+		$activity_list	= $activity->getList(array('opening'=>true,'order'=>'activity.activity_sort'));
+		Tpl::output('activity_list',$activity_list);
+		Tpl::output('goods_class_list',$goods_class_list);
+		Tpl::output('article_class_list',$article_class_list);
+		Tpl::showpage('navigation.add');
+	}
+
+	/**
+	 * 页面导航 编辑
+	 */
+	public function navigation_editOp(){
+		$lang	= Language::getLangContent();
+		$model_navigation = Model('navigation');
+		if (chksubmit()){
+			/**
+			 * 验证
+			 */
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["nav_title"], "require"=>"true", "message"=>$lang['navigation_add_partner_null']),
+				array("input"=>$_POST["nav_sort"], "require"=>"true", 'validator'=>'Number', "message"=>$lang['navigation_add_sort_int']),
+			);
+			switch ($_POST['nav_type']){
+				/**
+				 * 自定义
+				 */
+				case '0':
+					//$obj_validate->setValidate(array("input"=>$_POST["nav_url"], 'validator'=>'Url', "message"=>$lang['navigation_add_url_wrong']));
+					break;
+				/**
+				 * 商品分类
+				 */
+				case '1':
+					$obj_validate->setValidate(array("input"=>$_POST["goods_class_id"], "require"=>"true", "message"=>$lang['navigation_add_goods_class_null']));
+					break;
+				/**
+				 * 文章分类
+				 */
+				case '2':
+					$obj_validate->setValidate(array("input"=>$_POST["article_class_id"], "require"=>"true", "message"=>$lang['navigation_add_article_class_null']));
+					break;
+			}
+
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+
+				$update_array = array();
+				$update_array['nav_id'] = intval($_POST['nav_id']);
+				$update_array['nav_type'] = trim($_POST['nav_type']);
+				$update_array['nav_title'] = trim($_POST['nav_title']);
+				$update_array['nav_location'] = trim($_POST['nav_location']);
+				$update_array['nav_new_open'] = trim($_POST['nav_new_open']);
+				$update_array['nav_sort'] = trim($_POST['nav_sort']);
+				switch ($_POST['nav_type']){
+					/**
+					 * 自定义
+					 */
+					case '0':
+						$update_array['nav_url'] = trim($_POST['nav_url']);
+						break;
+					/**
+					 * 商品分类
+					 */
+					case '1':
+						$update_array['item_id'] = intval($_POST['goods_class_id']);
+						break;
+					/**
+					 * 文章分类
+					 */
+					case '2':
+						$update_array['item_id'] = intval($_POST['article_class_id']);
+						break;
+					/**
+					 * 活动
+					 */
+					case '3':
+						$update_array['item_id'] = intval($_POST['activity_id']);
+						break;
+				}
+				$result = $model_navigation->update($update_array);
+				if ($result){
+					dkcache('nav');
+					$url = array(
+						array(
+							'url'=>'index.php?act=navigation&op=navigation_edit&nav_id='.intval($_POST['nav_id']),
+							'msg'=>$lang['navigation_edit_again'],
+						),
+						array(
+							'url'=>'index.php?act=navigation&op=navigation',
+							'msg'=>$lang['navigation_add_back_to_list'],
+						)
+					);
+					$this->log(L('navigation_edit_succ').'['.$_POST['nav_title'].']',null);
+					showMessage($lang['navigation_edit_succ'],$url);
+				}else {
+					showMessage($lang['navigation_edit_fail']);
+				}
+			}
+		}
+		$navigation_array = $model_navigation->getOneNavigation(intval($_GET['nav_id']));
+		if (empty($navigation_array)){
+			showMessage($lang['param_error']);
+		}
+
+		/**
+		 * 商品分类
+		 */
+		$model_goods_class = Model('goods_class');
+		$goods_class_list = $model_goods_class->getTreeClassList(3);
+		if (is_array($goods_class_list)){
+			foreach ($goods_class_list as $k => $v){
+				$goods_class_list[$k]['gc_name'] = str_repeat("&nbsp;",$v['deep']*2).$v['gc_name'];
+			}
+		}
+		/**
+		 * 文章分类
+		 */
+		$model_article_class = Model('article_class');
+		$article_class_list = $model_article_class->getTreeClassList(2);
+		if (is_array($article_class_list)){
+			foreach ($article_class_list as $k => $v){
+				$article_class_list[$k]['ac_name'] = str_repeat("&nbsp;",$v['deep']*2).$v['ac_name'];
+			}
+		}
+		/**
+		 * 活动
+		 */
+		$activity	= Model('activity');
+		$activity_list	= $activity->getList(array('opening'=>true,'order'=>'activity.activity_sort'));
+		Tpl::output('activity_list',$activity_list);
+		Tpl::output('navigation_array',$navigation_array);
+		Tpl::output('goods_class_list',$goods_class_list);
+		Tpl::output('article_class_list',$article_class_list);
+		Tpl::showpage('navigation.edit');
+	}
+
+	/**
+	 * 删除页面导航
+	 */
+	public function navigation_delOp(){
+		$lang	= Language::getLangContent();
+		$model_navigation = Model('navigation');
+		if (intval($_GET['nav_id']) > 0){
+			$model_navigation->del(intval($_GET['nav_id']));
+			dkcache('nav');
+			$this->log(L('navigation_edit_succ').'[ID:'.intval($_GET['nav_id']).']',null);
+			showMessage($lang['navigation_index_del_succ'],'index.php?act=navigation&op=navigation');
+		}else {
+			showMessage($lang['navigation_index_choose_del'],'index.php?act=navigation&op=navigation');
+		}
+	}
+
+	/**
+	 * ajax操作
+	 */
+	public function ajaxOp(){
+		switch ($_GET['branch']){
+			/**
+			 * 页面导航 排序
+			 */
+			case 'nav_sort':
+				$model_navigation = Model('navigation');
+				$update_array = array();
+				$update_array['nav_id'] = intval($_GET['id']);
+				$update_array[$_GET['column']] = trim($_GET['value']);
+				$result = $model_navigation->update($update_array);
+				dkcache('nav');
+				echo 'true';exit;
+				break;
+		}
+	}
+}

+ 87 - 0
admin/control/notice.php

@@ -0,0 +1,87 @@
+<?php
+/**
+ * 会员通知管理
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class noticeControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('notice');
+	}
+	/**
+	 * 会员通知
+	 */
+	public function noticeOp(){
+		//提交
+		if (chksubmit()){
+			$content = trim($_POST['content1']);//信息内容
+			$send_type = intval($_POST['send_type']);
+			//验证
+			$obj_validate = new Validate();
+			switch ($send_type){
+				//指定会员
+				case 1:
+					$obj_validate->setValidate(array("input"=>$_POST["user_name"], "require"=>"true", "message"=>Language::get('notice_index_member_list_null')));
+					break;
+				//全部会员
+				case 2:
+					break;
+			}
+			$obj_validate->setValidate(array("input"=>$content, "require"=>"true", "message"=>Language::get('notice_index_content_null')));
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				//发送会员ID 数组
+				$memberid_list = array();
+				//整理发送列表
+				//指定会员
+				if ($send_type == 1){
+					$model_member = Model('member');
+					$tmp = explode("\n",$_POST['user_name']);
+					if (!empty($tmp)){
+						foreach ($tmp as $k=>$v){
+							$tmp[$k] = trim($v);
+						}
+						//查询会员列表
+						$member_list = $model_member->getMemberList(array('member_name'=>array('in', $tmp)));
+						unset($membername_str);
+						if (!empty($member_list)){
+							foreach ($member_list as $k => $v){
+								$memberid_list[] = $v['member_id'];
+							}
+						}
+						unset($member_list);
+					}
+					unset($tmp);
+				}
+				if (empty($memberid_list) && $send_type != 2){
+					showMessage(Language::get('notice_index_member_error'),'','html','error');
+				}
+				//接收内容
+				$array = array();
+				$array['send_mode'] = 1;
+				$array['user_name'] = $memberid_list;
+				$array['content'] = $content;
+				//添加短消息
+				$model_message = Model('message');
+				$insert_arr = array();
+				$insert_arr['from_member_id'] = 0;
+				if ($send_type == 2){
+					$insert_arr['member_id'] = 'all';
+				} else {
+					$insert_arr['member_id'] = ",".implode(',',$memberid_list).",";
+				}
+				$insert_arr['msg_content'] = $content;
+				$insert_arr['message_type'] = 1;
+				$insert_arr['message_ismore'] = 1;
+				$model_message->saveMessage($insert_arr);
+				//跳转
+				$this->log(L('notice_index_send'),1);
+				showMessage(Language::get('notice_index_send_succ'),'index.php?act=notice&op=notice');
+			}
+		}
+		Tpl::showpage('notice.add');
+	}
+}

+ 104 - 0
admin/control/offpay_area.php

@@ -0,0 +1,104 @@
+<?php
+/**
+ * 货到付款地区设置
+ *
+ * */
+
+defined('InShopNC') or exit('Access Invalid!');
+
+class offpay_areaControl extends SystemControl {
+	public function __construct(){
+		parent::__construct();
+	}
+
+	public function indexOp() {
+	    $model_parea = Model('offpay_area');
+	    $model_area = Model('area');
+	    if (!defined('DEFAULT_PLATFORM_STORE_ID')) {
+	        showMessage('请系统管理员配置完自营店铺后再设置货到付款','index.php?act=dashboard&op=aboutus','html','error',1,5000);
+	    }
+	    $store_id = DEFAULT_PLATFORM_STORE_ID;
+	    if (chksubmit()) {
+	        if (!preg_match('/^[\d,]+$/',$_POST['county'])) {
+	            $_POST['county'] = '';
+	        }
+	        //内置自营店ID
+	        $area_info = $model_parea->getAreaInfo(array('store_id'=>$store_id));
+            $data = array();
+            $county = trim($_POST['county'],',');
+            $data['area_id'] = serialize(explode(',',$county));
+	        if (!$area_info) {
+	            $data['store_id'] = $store_id;
+	            $result = $model_parea->addArea($data);
+	        } else {
+	            $result = $model_parea->updateArea(array('store_id'=>$store_id),$data);
+	        }
+	        if ($result) {
+	            showMessage('保存成功');
+	        } else {
+	            showMessage('保存失败','','html','error');
+	        }
+	    }
+	    //取出支持货到付款的县ID及上级市ID
+        $parea_info = $model_parea->getAreaInfo(array('store_id'=>$store_id));
+        if (!empty($parea_info['area_id'])) {
+            $parea_ids = @unserialize($parea_info['area_id']);
+        }
+        if (empty($parea_ids)) {
+            $parea_ids = array();
+        }
+        //取出支持货到付款县ID的上级市ID
+        $city_checked_child_array = array();
+        $county_array = $model_area->getAreaList(array('area_deep'=>3,'area_id'=>array('in',$parea_ids)),'area_id,area_parent_id');
+        foreach ($county_array as $v) {
+            if (in_array($v['area_id'],$parea_ids)) {
+                $city_checked_child_array[$v['area_parent_id']][] = $v['area_id'];
+            }
+        }
+        Tpl::output('city_checked_child_array',$city_checked_child_array);
+        //市级下面的县是不是全部支持货到付款,如果全部支持,默认选中,如果其中部分县支持货到付款,默认不选中但显示一个支付到付县的数量
+
+        //格式 city_id => 下面支持到付的县ID数量
+        $city_count_array = array();
+        //格式 city_id => 是否选中true/false
+        $city_checked_array = array();
+        $list = $model_area->getAreaList(array('area_deep'=>3),'area_parent_id,count(area_id) as child_count','area_parent_id');
+        foreach ($list as $k => $v) {
+            $city_count_array[$v['area_parent_id']] = $v['child_count'];
+        }
+        foreach ($city_checked_child_array as $city_id => $city_child) {
+            if (count($city_child) > 0) {
+                if (count($city_child) == $city_count_array[$city_id]) {
+                    $city_checked_array[$city_id] = true;
+                }
+            }
+        }
+        Tpl::output('city_checked_array',$city_checked_array);
+
+        //取得省级地区及直属子地区(循环输出)
+        require(BASE_DATA_PATH.'/area/area.php');
+        foreach ($area_array as $k => $v) {
+        	if ($v['area_parent_id'] != '0') {
+        	    $area_array[$v['area_parent_id']]['child'][$k] = $v['area_name'];
+        	    unset($area_array[$k]);
+        	}
+        }
+        Tpl::output('province_array',$area_array);
+
+        //计算哪些省需要默认选中(即该省下面的所有县都支持到付,即所有市都是选中状态)
+        $province_array = $area_array;
+        foreach ($province_array as $pid => $value) {
+        	if (is_array($value['child'])) {
+        	    foreach ($value['child'] as $k => $v) {
+        	    	if (!array_key_exists($k, $city_checked_array)) {
+        	    	    unset($province_array[$pid]);
+        	    	    break;
+        	    	}
+        	    }
+        	}
+        }
+        Tpl::output('province_checked_array',$province_array);
+
+	    Tpl::showpage('offpay_area.index');
+	}
+}

+ 61 - 0
admin/control/operation.php

@@ -0,0 +1,61 @@
+<?php
+/**
+ * 网站设置
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class operationControl extends SystemControl{
+	private $links = array(
+		array('url'=>'act=operation&op=setting','lang'=>'nc_operation_set'),
+	);
+	public function __construct(){
+		parent::__construct();
+		Language::read('setting');
+	}
+
+	/**
+	 * 基本设置
+	 */
+	public function settingOp(){
+		$model_setting = Model('setting');
+		if (chksubmit()){
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}else {
+				$update_array = array();
+                $update_array['promotion_allow'] = $_POST['promotion_allow'];
+                $update_array['groupbuy_allow'] = $_POST['groupbuy_allow'];
+                $update_array['points_isuse'] = $_POST['points_isuse'];
+                $update_array['pointshop_isuse'] = $_POST['pointshop_isuse'];
+                $update_array['voucher_allow'] = $_POST['voucher_allow'];
+                $update_array['pointprod_isuse'] = $_POST['pointprod_isuse'];
+                $update_array['points_reg'] = intval($_POST['points_reg'])?$_POST['points_reg']:0;
+                $update_array['points_login'] = intval($_POST['points_login'])?$_POST['points_login']:0;
+                $update_array['points_comments'] = intval($_POST['points_comments'])?$_POST['points_comments']:0;
+                $update_array['points_orderrate'] = intval($_POST['points_orderrate'])?$_POST['points_orderrate']:0;
+                $update_array['points_ordermax'] = intval($_POST['points_ordermax'])?$_POST['points_ordermax']:0;
+				$update_array['points_invite'] = intval($_POST['points_invite'])?$_POST['points_invite']:0;
+				$update_array['points_rebate'] = intval($_POST['points_rebate'])?$_POST['points_rebate']:0;
+				$result = $model_setting->updateSetting($update_array);
+				if ($result === true){
+					$this->log(L('nc_edit,nc_operation,nc_operation_set'),1);
+					showMessage(L('nc_common_save_succ'));
+				}else {
+					showMessage(L('nc_common_save_fail'));
+				}
+			}
+		}
+		$list_setting = $model_setting->getListSetting();
+		Tpl::output('list_setting',$list_setting);
+		Tpl::output('top_link',$this->sublink($this->links,'setting'));
+		Tpl::showpage('operation.setting');
+	}
+}

+ 286 - 0
admin/control/order.php

@@ -0,0 +1,286 @@
+<?php
+/**
+ * 交易管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class orderControl extends SystemControl{
+    /**
+     * 每次导出订单数量
+     * @var int
+     */
+	const EXPORT_SIZE = 1000;
+
+	public function __construct(){
+		parent::__construct();
+		Language::read('trade');
+	}
+
+	public function indexOp(){
+	    $model_order = Model('order');
+        $condition	= array();
+        if($_GET['order_sn']) {
+        	$condition['order_sn'] = $_GET['order_sn'];
+        }
+        if($_GET['store_name']) {
+            $condition['store_name'] = $_GET['store_name'];
+        }
+        if(in_array($_GET['order_state'],array('0','10','20','30','40'))){
+        	$condition['order_state'] = $_GET['order_state'];
+        }
+        if($_GET['payment_code']) {
+            $condition['payment_code'] = $_GET['payment_code'];
+        }
+        if($_GET['buyer_name']) {
+            $condition['buyer_name'] = $_GET['buyer_name'];
+        }
+        $if_start_time = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_start_time']);
+        $if_end_time = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_end_time']);
+        $start_unixtime = $if_start_time ? strtotime($_GET['query_start_time']) : null;
+        $end_unixtime = $if_end_time ? strtotime($_GET['query_end_time']): null;
+        if ($start_unixtime || $end_unixtime) {
+            $condition['add_time'] = array('time',array($start_unixtime,$end_unixtime));
+        }
+        $order_list	= $model_order->getOrderList($condition,30);
+
+        foreach ($order_list as $order_id => $order_info) {
+            //显示取消订单
+            $order_list[$order_id]['if_cancel'] = $model_order->getOrderOperateState('system_cancel',$order_info);
+            //显示收到货款
+            $order_list[$order_id]['if_system_receive_pay'] = $model_order->getOrderOperateState('system_receive_pay',$order_info);
+        }
+        //显示支付接口列表(搜索)
+        $payment_list = Model('payment')->getPaymentOpenList();
+        Tpl::output('payment_list',$payment_list);
+
+        Tpl::output('order_list',$order_list);
+        Tpl::output('show_page',$model_order->showpage());
+        Tpl::showpage('order.index');
+	}
+
+	/**
+	 * 平台订单状态操作
+	 *
+	 */
+	public function change_stateOp() {
+        $order_id = intval($_GET['order_id']);
+        if($order_id <= 0){
+            showMessage(L('miss_order_number'),$_POST['ref_url'],'html','error');
+        }
+        $model_order = Model('order');
+
+        //获取订单详细
+        $condition = array();
+        $condition['order_id'] = $order_id;
+        $order_info	= $model_order->getOrderInfo($condition);
+
+        if ($_GET['state_type'] == 'cancel') {
+            $result = $this->_order_cancel($order_info);
+        } elseif ($_GET['state_type'] == 'receive_pay') {
+            $result = $this->_order_receive_pay($order_info,$_POST);
+        }
+        if (!$result['state']) {
+            showMessage($result['msg'],$_POST['ref_url'],'html','error');
+        } else {
+            showMessage($result['msg'],$_POST['ref_url']);
+        }
+	}
+
+	/**
+	 * 系统取消订单
+	 */
+	private function _order_cancel($order_info) {
+	    $order_id = $order_info['order_id'];
+	    $model_order = Model('order');
+	    $logic_order = Logic('order');
+	    $if_allow = $model_order->getOrderOperateState('system_cancel',$order_info);
+	    if (!$if_allow) {
+	        return callback(false,'无权操作');
+	    }
+	    $result =  $logic_order->changeOrderStateCancel($order_info,'system', $this->admin_info['name']);
+        if ($result['state']) {
+            $this->log(L('order_log_cancel').','.L('order_number').':'.$order_info['order_sn'],1);
+        }
+        return $result;
+	}
+
+	/**
+	 * 系统收到货款
+	 * @throws Exception
+	 */
+	private function _order_receive_pay($order_info, $post) {
+	    $order_id = $order_info['order_id'];
+	    $model_order = Model('order');
+	    $logic_order = Logic('order');
+	    $if_allow = $model_order->getOrderOperateState('system_receive_pay',$order_info);
+	    if (!$if_allow) {
+	        return callback(false,'无权操作');
+	    }
+
+	    if (!chksubmit()) {
+	        Tpl::output('order_info',$order_info);
+	        //显示支付接口列表
+	        $payment_list = Model('payment')->getPaymentOpenList();
+	        //去掉预存款和货到付款
+	        foreach ($payment_list as $key => $value){
+	            if ($value['payment_code'] == 'predeposit' || $value['payment_code'] == 'offline') {
+	               unset($payment_list[$key]);
+	            }
+	        }
+	        Tpl::output('payment_list',$payment_list);
+	        Tpl::showpage('order.receive_pay');
+	        exit();
+	    }
+	    $order_list	= $model_order->getOrderList(array('pay_sn'=>$order_info['pay_sn'],'order_state'=>ORDER_STATE_NEW));
+	    $result = $logic_order->changeOrderReceivePay($order_list,'system',$this->admin_info['name'],$post);
+        if ($result['state']) {
+            $this->log('将订单改为已收款状态,'.L('order_number').':'.$order_info['order_sn'],1);
+        }
+	    return $result;
+	}
+
+	/**
+	 * 查看订单
+	 *
+	 */
+	public function show_orderOp(){
+	    $order_id = intval($_GET['order_id']);
+	    if($order_id <= 0 ){
+	        showMessage(L('miss_order_number'));
+	    }
+        $model_order	= Model('order');
+        $order_info	= $model_order->getOrderInfo(array('order_id'=>$order_id),array('order_goods','order_common','store'));
+
+        //订单变更日志
+		$log_list	= $model_order->getOrderLogList(array('order_id'=>$order_info['order_id']));
+		Tpl::output('order_log',$log_list);
+
+		//退款退货信息
+        $model_refund = Model('refund_return');
+        $condition = array();
+        $condition['order_id'] = $order_info['order_id'];
+        $condition['seller_state'] = 2;
+        $condition['admin_time'] = array('gt',0);
+        $return_list = $model_refund->getReturnList($condition);
+        Tpl::output('return_list',$return_list);
+
+        //退款信息
+        $refund_list = $model_refund->getRefundList($condition);
+        Tpl::output('refund_list',$refund_list);
+
+		//卖家发货信息
+		if (!empty($order_info['extend_order_common']['daddress_id'])) {
+		    $daddress_info = Model('daddress')->getAddressInfo(array('address_id'=>$order_info['extend_order_common']['daddress_id']));
+		    Tpl::output('daddress_info',$daddress_info);
+		}
+
+		Tpl::output('order_info',$order_info);
+        Tpl::showpage('order.view');
+	}
+
+	/**
+	 * 导出
+	 *
+	 */
+	public function export_step1Op(){
+		$lang	= Language::getLangContent();
+
+	    $model_order = Model('order');
+        $condition	= array();
+        if($_GET['order_sn']) {
+        	$condition['order_sn'] = $_GET['order_sn'];
+        }
+        if($_GET['store_name']) {
+            $condition['store_name'] = $_GET['store_name'];
+        }
+        if(in_array($_GET['order_state'],array('0','10','20','30','40'))){
+        	$condition['order_state'] = $_GET['order_state'];
+        }
+        if($_GET['payment_code']) {
+            $condition['payment_code'] = $_GET['payment_code'];
+        }
+        if($_GET['buyer_name']) {
+            $condition['buyer_name'] = $_GET['buyer_name'];
+        }
+        $if_start_time = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_start_time']);
+        $if_end_time = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_end_time']);
+        $start_unixtime = $if_start_time ? strtotime($_GET['query_start_time']) : null;
+        $end_unixtime = $if_end_time ? strtotime($_GET['query_end_time']): null;
+        if ($start_unixtime || $end_unixtime) {
+            $condition['add_time'] = array('time',array($start_unixtime,$end_unixtime));
+        }
+
+		if (!is_numeric($_GET['curpage'])){
+			$count = $model_order->getOrderCount($condition);
+			$array = array();
+			if ($count > self::EXPORT_SIZE ){	//显示下载链接
+				$page = ceil($count/self::EXPORT_SIZE);
+				for ($i=1;$i<=$page;$i++){
+					$limit1 = ($i-1)*self::EXPORT_SIZE + 1;
+					$limit2 = $i*self::EXPORT_SIZE > $count ? $count : $i*self::EXPORT_SIZE;
+					$array[$i] = $limit1.' ~ '.$limit2 ;
+				}
+				Tpl::output('list',$array);
+				Tpl::output('murl','index.php?act=order&op=index');
+				Tpl::showpage('export.excel');
+			}else{	//如果数量小,直接下载
+				$data = $model_order->getOrderList($condition,'','*','order_id desc',self::EXPORT_SIZE);
+				$this->createExcel($data);
+			}
+		}else{	//下载
+			$limit1 = ($_GET['curpage']-1) * self::EXPORT_SIZE;
+			$limit2 = self::EXPORT_SIZE;
+			$data = $model_order->getOrderList($condition,'','*','order_id desc',"{$limit1},{$limit2}");
+			$this->createExcel($data);
+		}
+	}
+
+	/**
+	 * 生成excel
+	 *
+	 * @param array $data
+	 */
+	private function createExcel($data = array()){
+		Language::read('export');
+		import('libraries.excel');
+		$excel_obj = new Excel();
+		$excel_data = array();
+		//设置样式
+		$excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1')));
+		//header
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_no'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_store'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_buyer'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_xtimd'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_count'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_yfei'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_paytype'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_state'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_storeid'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_buyerid'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_od_bemail'));
+		//data
+		foreach ((array)$data as $k=>$v){
+			$tmp = array();
+			$tmp[] = array('data'=>'NC'.$v['order_sn']);
+			$tmp[] = array('data'=>$v['store_name']);
+			$tmp[] = array('data'=>$v['buyer_name']);
+			$tmp[] = array('data'=>date('Y-m-d H:i:s',$v['add_time']));
+			$tmp[] = array('format'=>'Number','data'=>ncPriceFormat($v['order_amount']));
+			$tmp[] = array('format'=>'Number','data'=>ncPriceFormat($v['shipping_fee']));
+			$tmp[] = array('data'=>orderPaymentName($v['payment_code']));
+			$tmp[] = array('data'=>orderState($v));
+			$tmp[] = array('data'=>$v['store_id']);
+			$tmp[] = array('data'=>$v['buyer_id']);
+			$tmp[] = array('data'=>$v['buyer_email']);
+			$excel_data[] = $tmp;
+		}
+		$excel_data = $excel_obj->charset($excel_data,CHARSET);
+		$excel_obj->addArray($excel_data);
+		$excel_obj->addWorksheet($excel_obj->charset(L('exp_od_order'),CHARSET));
+		$excel_obj->generateXML($excel_obj->charset(L('exp_od_order'),CHARSET).$_GET['curpage'].'-'.date('Y-m-d-H',time()));
+	}
+}

+ 505 - 0
admin/control/ownshop.php

@@ -0,0 +1,505 @@
+<?php
+/**
+ * 自营店铺
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+
+class ownshopControl extends SystemControl
+{
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    public function indexOp()
+    {
+        $this->listOp();
+    }
+
+    public function listOp()
+    {
+        $model = model('store');
+
+        $condition = array(
+            'is_own_shop' => 1,
+        );
+
+        $storeName = trim($_GET['store_name']);
+        if (strlen($storeName) > 0) {
+            $condition['store_name'] = array('like', "%$storeName%");
+            Tpl::output('store_name', $storeName);
+        }
+
+        $storeList = $model->where($condition)->page(10)->select();
+
+        $storeIds = array();
+        foreach ($storeList as $s)
+            $storeIds[$s['store_id']] = null;
+
+        $storeIds = array_keys($storeIds);
+
+        $storesWithGoods = model('goods')->where(array(
+            'store_id' => array('in', $storeIds),
+        ))->field('distinct store_id')->key('store_id')->select();
+
+        Tpl::output('store_list', $storeList);
+        Tpl::output('page', $model->showpage());
+
+        Tpl::output('storesWithGoods', $storesWithGoods);
+
+        Tpl::showpage('ownshop.list');
+    }
+
+    public function addOp()
+    {
+        if (chksubmit())
+        {
+            $memberName = $_POST['member_name'];
+            $memberPasswd = (string) $_POST['member_passwd'];
+
+            if (strlen($memberName) < 3 || strlen($memberName) > 15
+                || strlen($_POST['seller_name']) < 3 || strlen($_POST['seller_name']) > 15)
+                showMessage('账号名称必须是3~15位', '', 'html', 'error');
+
+            if (strlen($memberPasswd) < 6)
+                showMessage('登录密码不能短于6位', '', 'html', 'error');
+
+            if (!$this->checkMemberName($memberName))
+                showMessage('店主账号已被占用', '', 'html', 'error');
+
+            if (!$this->checkSellerName($_POST['seller_name']))
+                showMessage('店主卖家账号名称已被其它店铺占用', '', 'html', 'error');
+
+            try
+            {
+                $memberId = model('member')->addMember(array(
+                    'member_name' => $memberName,
+                    'member_passwd' => $memberPasswd,
+                    'member_email' => '',
+                ));
+            }
+            catch (Exception $ex)
+            {
+                showMessage('店主账号新增失败', '', 'html', 'error');
+            }
+
+            $storeModel = model('store');
+
+            $saveArray = array();
+            $saveArray['store_name'] = $_POST['store_name'];
+            $saveArray['member_id'] = $memberId;
+            $saveArray['member_name'] = $memberName;
+            $saveArray['seller_name'] = $_POST['seller_name'];
+            $saveArray['bind_all_gc'] = 1;
+            $saveArray['store_state'] = 1;
+            $saveArray['store_time'] = time();
+            $saveArray['is_own_shop'] = 1;
+
+            $storeId = $storeModel->addStore($saveArray);
+
+            model('seller')->addSeller(array(
+                'seller_name' => $_POST['seller_name'],
+                'member_id' => $memberId,
+                'store_id' => $storeId,
+                'seller_group_id' => 0,
+                'is_admin' => 1,
+            ));
+
+            // 添加相册默认
+            $album_model = Model('album');
+            $album_arr = array();
+            $album_arr['aclass_name'] = '默认相册';
+            $album_arr['store_id'] = $storeId;
+            $album_arr['aclass_des'] = '';
+            $album_arr['aclass_sort'] = '255';
+            $album_arr['aclass_cover'] = '';
+            $album_arr['upload_time'] = time();
+            $album_arr['is_default'] = '1';
+            $album_model->addClass($album_arr);
+
+            //插入店铺扩展表
+            $model = Model();
+            $model->table('store_extend')->insert(array('store_id'=>$storeId));
+
+            // 删除自营店id缓存
+            Model('store')->dropCachedOwnShopIds();
+
+            $this->log("新增自营店铺: {$saveArray['store_name']}");
+            showMessage('操作成功', urlAdmin('ownshop', 'list'));
+            return;
+        }
+
+        Tpl::showpage('ownshop.add');
+    }
+
+    public function delOp()
+    {
+        $storeId = (int) $_GET['id'];
+        $storeModel = model('store');
+
+        $storeArray = $storeModel->field('is_own_shop,store_name')->find($storeId);
+
+        if (empty($storeArray)) {
+            showMessage('自营店铺不存在', '', 'html', 'error');
+        }
+
+        if (!$storeArray['is_own_shop']) {
+            showMessage('不能在此删除非自营店铺', '', 'html', 'error');
+        }
+
+        $condition = array(
+            'store_id' => $storeId,
+        );
+
+        if ((int) model('goods')->getGoodsCount($condition) > 0)
+            showMessage('已经发布商品的自营店铺不能被删除', '', 'html', 'error');
+
+        // 完全删除店铺
+        $storeModel->delStoreEntirely($condition);
+
+        // 删除自营店id缓存
+        Model('store')->dropCachedOwnShopIds();
+
+        $this->log("删除自营店铺: {$storeArray['store_name']}");
+        showMessage('操作成功', getReferer());
+    }
+
+    public function editOp()
+    {
+        $storeModel = model('store');
+
+        $storeArray = $storeModel->find($_GET['id']);
+
+        if (!$storeArray['is_own_shop']) {
+            showMessage('不能在此管理非自营店铺', '', 'html', 'error');
+        }
+
+        if (chksubmit()) {
+            if (!$this->checkSellerName($_POST['seller_name'], $_GET['id']))
+                showMessage('店主卖家账号名称已被其它店铺占用', '', 'html', 'error');
+
+            $saveArray = array();
+            $saveArray['store_name'] = $_POST['store_name'];
+            $saveArray['seller_name'] = $_POST['seller_name'];
+            $saveArray['bind_all_gc'] = $_POST['bind_all_gc'] ? 1 : 0;
+            $saveArray['store_state'] = $_POST['store_state'] ? 1 : 0;
+            $saveArray['store_close_info'] = $_POST['store_close_info'];
+
+            $storeModel->editStore($saveArray, array(
+                'store_id' => $_GET['id'],
+            ));
+
+            if ($saveArray['seller_name'] != $storeArray['seller_name']) {
+                model('seller')->editSeller(array(
+                    'seller_name' => $_POST['seller_name'],
+                ), array(
+                    'store_id' => $_GET['id'],
+                    'seller_group_id' => 0,
+                    'is_admin' => 1,
+                ));
+            }
+
+            /* 自营店不下架商品
+
+            if ($storeArray['bind_all_gc'] == '1' && $saveArray['bind_all_gc'] == '0' && $_POST['offshelf'] == '1') {
+                // 全部商品下架
+                Model('goods')->editProducesLockUp(array(
+                    'goods_stateremark' => '管理员编辑经营类目',
+                ), array(
+                    'store_id' => $_GET['id'],
+                ));
+            }
+
+            */
+
+            // 删除自营店id缓存
+            Model('store')->dropCachedOwnShopIds();
+
+            $this->log("编辑自营店铺: {$saveArray['store_name']}");
+            showMessage('操作成功', urlAdmin('ownshop', 'list'));
+        }
+
+        if (empty($storeArray))
+            showMessage('店铺不存在', '', 'html', 'error');
+
+        Tpl::output('store_array', $storeArray);
+        Tpl::showpage('ownshop.edit');
+    }
+
+    public function check_seller_nameOp()
+    {
+        echo json_encode($this->checkSellerName($_GET['seller_name'], $_GET['id']));
+        exit;
+    }
+
+    private function checkSellerName($sellerName, $storeId = 0)
+    {
+        // 判断store_joinin是否存在记录
+        $count = (int) Model('store_joinin')->getStoreJoininCount(array(
+            'seller_name' => $sellerName,
+        ));
+        if ($count > 0)
+            return false;
+
+        $seller = Model('seller')->getSellerInfo(array(
+            'seller_name' => $sellerName,
+        ));
+
+        if (empty($seller))
+            return true;
+
+        if (!$storeId)
+            return false;
+
+        if ($storeId == $seller['store_id'] && $seller['seller_group_id'] == 0 && $seller['is_admin'] == 1)
+            return true;
+
+        return false;
+    }
+
+    public function check_member_nameOp()
+    {
+        echo json_encode($this->checkMemberName($_GET['member_name']));
+        exit;
+    }
+
+    private function checkMemberName($memberName)
+    {
+        // 判断store_joinin是否存在记录
+        $count = (int) Model('store_joinin')->getStoreJoininCount(array(
+            'member_name' => $memberName,
+        ));
+        if ($count > 0)
+            return false;
+
+        return ! Model('member')->getMemberCount(array(
+            'member_name' => $memberName,
+        ));
+    }
+
+    public function bind_classOp()
+    {
+        //批量删除分类
+        if (chksubmit()) {
+            if (!empty($_POST['bid'])) {
+                foreach ($_POST['bid'] as $bid) {
+                    $this->_bind_class_del($bid);
+                }
+            }
+        }
+        $store_id = intval($_GET['id']);
+
+        $model_store = Model('store');
+        $model_store_bind_class = Model('store_bind_class');
+        $model_goods_class = Model('goods_class');
+
+        $gc_list = $model_goods_class->getGoodsClassListByParentId(0);
+        Tpl::output('gc_list',$gc_list);
+
+        $store_info = $model_store->getStoreInfoByID($store_id);
+        if(empty($store_info)) {
+            showMessage(L('param_error'),'','','error');
+        }
+        Tpl::output('store_info', $store_info);
+
+        $store_bind_class_list = $model_store_bind_class->getStoreBindClassList(array('store_id'=>$store_id), 30);
+
+        $goods_class = Model('goods_class')->getGoodsClassIndexedListAll();
+
+        for($i = 0, $j = count($store_bind_class_list); $i < $j; $i++) {
+            $store_bind_class_list[$i]['class_1_name'] = $goods_class[$store_bind_class_list[$i]['class_1']]['gc_name'];
+            $store_bind_class_list[$i]['class_2_name'] = $goods_class[$store_bind_class_list[$i]['class_2']]['gc_name'];
+            $store_bind_class_list[$i]['class_3_name'] = $goods_class[$store_bind_class_list[$i]['class_3']]['gc_name'];
+        }
+        Tpl::output('store_bind_class_list', $store_bind_class_list);
+        Tpl::output('showpage',$model_store_bind_class->showpage());
+
+        Tpl::showpage('ownshop.bind_class');
+    }
+
+    /**
+     * 添加经营类目
+     */
+    public function bind_class_addOp()
+    {
+        $store_id = intval($_POST['store_id']);
+        $commis_rate = intval($_POST['commis_rate']);
+        if($commis_rate < 0 || $commis_rate > 100) {
+            showMessage(L('param_error'), '');
+        }
+        list($class_1, $class_2, $class_3) = explode(',', $_POST['goods_class']);
+        $model_store_bind_class = Model('store_bind_class');
+        $model_goods_class = Model('goods_class');
+
+        $param = array();
+        $param['store_id'] = $store_id;
+        $param['class_1'] = $class_1;
+        $param['state'] = 2;
+        $param['commis_rate'] = $commis_rate;
+
+        if (empty($class_2)) {
+            //如果没选 二级
+            $class_2_list = $model_goods_class->getGoodsClassList(array('gc_parent_id'=>$class_1));
+            if (!empty($class_2_list)) {
+                foreach ($class_2_list as $class_2_info) {
+                    $class_3_list = $model_goods_class->getGoodsClassList(array('gc_parent_id'=>$class_2_info['gc_id']));
+                    if (!empty($class_3_list)) {
+                        $param['class_2'] = $class_2_info['gc_id'];
+                        foreach ($class_3_list as $class_3_info) {
+                            $param['class_3'] = $class_3_info['gc_id'];
+                            $result = $this->_add_bind_class($param);
+                        }
+                    }
+                }
+            } else {
+                //只有一级分类
+                $param['class_2'] = $param['class_3'] = 0;
+                $result = $this->_add_bind_class($param);
+            }
+        } else if (empty($class_3)) {
+            //如果没选二没选三级
+            $param['class_2'] = $class_2;
+            $class_3_list = $model_goods_class->getGoodsClassList(array('gc_parent_id'=>$class_2));
+            if (!empty($class_3_list)) {
+                foreach ($class_3_list as $class_3_info) {
+                    $param['class_3'] = $class_3_info['gc_id'];
+                    // 检查类目是否已经存在
+                    $store_bind_class_info = $model_store_bind_class->getStoreBindClassInfo($param);
+                    if(empty($store_bind_class_info)) {
+                        $result = $this->_add_bind_class($param);
+                    }
+                }
+            } else {
+                //二级就是最后一级
+                $param['class_3'] = 0;
+                $result = $this->_add_bind_class($param);
+            }
+        } else {
+            $param['class_2'] = $class_2;
+            $param['class_3'] = $class_3;
+            $result = $this->_add_bind_class($param);
+        }
+
+        if($result) {
+            // 删除自营店id缓存
+            Model('store')->dropCachedOwnShopIds();
+
+            $this->log('增加自营店铺经营类目,类目编号:'.$result.',店铺编号:'.$store_id);
+            showMessage(L('nc_common_save_succ'), '');
+        } else {
+            showMessage(L('nc_common_save_fail'), '');
+        }
+    }
+
+    private function _add_bind_class($param) {
+        $model_store_bind_class = Model('store_bind_class');
+        // 检查类目是否已经存在
+        $store_bind_class_info = $model_store_bind_class->getStoreBindClassInfo($param);
+        if(!empty($store_bind_class_info)) return true;
+        return $model_store_bind_class->addStoreBindClass($param);
+    }
+
+    /**
+     * 删除经营类目
+     */
+    public function bind_class_delOp()
+    {
+        $bid = intval($_POST['bid']);
+        $result = $this->_bind_class_del($bid);
+        echo json_encode($result);
+    }
+
+    private function _bind_class_del($bid)
+    {
+
+        $data = array();
+        $data['result'] = true;
+
+        $model_store_bind_class = Model('store_bind_class');
+        $model_goods = Model('goods');
+
+        $store_bind_class_info = $model_store_bind_class->getStoreBindClassInfo(array('bid' => $bid));
+        if(empty($store_bind_class_info)) {
+            $data['result'] = false;
+            $data['message'] = '经营类目删除失败';
+            return $data;
+        }
+
+        /* 自营店不下架商品
+
+        // 商品下架
+        $condition = array();
+        $condition['store_id'] = $store_bind_class_info['store_id'];
+        $gc_id = $store_bind_class_info['class_1'].','.$store_bind_class_info['class_2'].','.$store_bind_class_info['class_3'];
+        $update = array();
+        $update['goods_stateremark'] = '管理员删除经营类目';
+        $condition['gc_id'] = array('in', rtrim($gc_id, ','));
+        $model_goods->editProducesLockUp($update, $condition);
+
+        */
+
+        $result = $model_store_bind_class->delStoreBindClass(array('bid'=>$bid));
+
+        if(!$result) {
+            $data['result'] = false;
+            $data['message'] = '经营类目删除失败';
+        }
+
+        // 删除自营店id缓存
+        Model('store')->dropCachedOwnShopIds();
+
+        $this->log('删除自营店铺经营类目,类目编号:'.$bid.',店铺编号:'.$store_bind_class_info['store_id']);
+        return $data;
+    }
+
+    public function bind_class_updateOp()
+    {
+        $bid = intval($_GET['id']);
+        if($bid <= 0) {
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('param_error')));
+            die;
+        }
+        $new_commis_rate = intval($_GET['value']);
+        if ($new_commis_rate < 0 || $new_commis_rate >= 100) {
+            echo json_encode(array('result'=>FALSE,'message'=>Language::get('param_error')));
+            die;
+        } else {
+            $update = array('commis_rate' => $new_commis_rate);
+            $condition = array('bid' => $bid);
+            $model_store_bind_class = Model('store_bind_class');
+            $result = $model_store_bind_class->editStoreBindClass($update, $condition);
+            if($result) {
+                // 删除自营店id缓存
+                Model('store')->dropCachedOwnShopIds();
+
+                $this->log('更新自营店铺经营类目,类目编号:'.$bid);
+                echo json_encode(array('result'=>TRUE));
+                die;
+            } else {
+                echo json_encode(array('result'=>FALSE,'message'=>L('nc_common_op_fail')));
+                die;
+            }
+        }
+    }
+
+    /**
+     * 验证店铺名称是否存在
+     */
+    public function ckeck_store_nameOp() {
+        /**
+         * 实例化卖家模型
+         */
+        $where = array();
+        $where['store_name'] = $_GET['store_name'];
+        if (isset($_GET['store_id'])) {
+            $where['store_id'] = array('neq', $_GET['store_id']);
+        }
+        $store_info = Model('store')->getStoreInfo($where);
+        if(!empty($store_info['store_name'])) {
+            echo 'false';
+        } else {
+            echo 'true';
+        }
+    }
+}

+ 59 - 0
admin/control/payment.php

@@ -0,0 +1,59 @@
+<?php
+/**
+ * 支付方式
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class paymentControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('payment');
+	}
+
+	/**
+	 * 支付方式
+	 */
+	public function indexOp(){
+		$model_payment = Model('payment');
+		$payment_list = $model_payment->getPaymentList(array('payment_code'=>array('neq','predeposit')));
+		Tpl::output('payment_list',$payment_list);
+		Tpl::showpage('payment.list');
+	}
+
+	/**
+	 * 编辑
+	 */
+	public function editOp(){
+
+		$model_payment = Model('payment');
+		if (chksubmit()){
+			$payment_id = intval($_POST["payment_id"]);
+			$data = array();
+			$data['payment_state'] = intval($_POST["payment_state"]);
+
+			$payment_config	= '';
+			$config_array = explode(',',$_POST["config_name"]);//配置参数
+			if(is_array($config_array) && !empty($config_array)) {
+				$config_info = array();
+				foreach ($config_array as $k) {
+					$config_info[$k] = trim($_POST[$k]);
+				}
+				$payment_config	= serialize($config_info);
+			}
+			$data['payment_config'] = $payment_config;//支付接口配置信息
+			$model_payment->editPayment($data,array('payment_id'=>$payment_id));
+			showMessage(Language::get('nc_common_save_succ'),'index.php?act=payment&op=index');
+		}
+
+		$payment_id = intval($_GET["payment_id"]);
+		$payment = $model_payment->getPaymentInfo(array('payment_id'=>$payment_id));
+		if ($payment['payment_config'] != ''){
+			Tpl::output('config_array',unserialize($payment['payment_config']));
+		}
+		Tpl::output('payment',$payment);
+		Tpl::showpage('payment.edit');
+	}
+}

+ 27 - 0
admin/control/perform.php

@@ -0,0 +1,27 @@
+<?php
+/**
+ * 网站设置
+ *
+ *  by 33 hao .com v3
+ */
+defined('InShopNC') or exit('Access Invalid!');
+class performControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('setting');
+	}
+
+	/**
+	 * 性能优化
+	 */
+	public function performOp(){
+		if ($_GET['type'] == 'clear'){
+			$lang	= Language::getLangContent();
+			$cache = Cache::getInstance(C('cache.type'));
+			$cache->clear();
+			showMessage($lang['nc_common_op_succ']);
+		}
+		Tpl::showpage('setting.perform_opt');
+	}
+
+}

+ 149 - 0
admin/control/pointorder.php

@@ -0,0 +1,149 @@
+<?php
+/**
+ * 积分兑换订单管理
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class pointorderControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('pointorder');
+	}
+	/**
+	 * 积分兑换列表
+	 */
+	public function pointorder_listOp(){
+	    $model_pointorder = Model('pointorder');
+	    //获取兑换订单状态
+	    $pointorderstate_arr = $model_pointorder->getPointOrderStateBySign();
+		$where = array();
+		//兑换单号
+		$pordersn = trim($_GET['pordersn']);
+		if ($pordersn){
+			$where['point_ordersn'] = array('like',"%{$pordersn}%");
+		}
+		//兑换会员名称
+		$pbuyname = trim($_GET['pbuyname']);
+		if (trim($_GET['pbuyname'])){
+			$where['point_buyername'] = array('like',"%{$pbuyname}%");
+		}
+		//订单状态
+		if (trim($_GET['porderstate'])){
+			$where['point_orderstate'] = $pointorderstate_arr[$_GET['porderstate']][0];
+		}
+		//查询兑换订单列表
+		$order_list = $model_pointorder->getPointOrderList($where, '*', 10, 0, 'point_orderid desc');
+		
+		//信息输出
+		Tpl::output('pointorderstate_arr',$pointorderstate_arr);
+		Tpl::output('order_list',$order_list);
+		Tpl::output('show_page',$model_pointorder->showpage());
+		Tpl::showpage('pointorder.list');
+	}
+	
+	/**
+	 * 删除兑换订单信息
+	 */
+	public function order_dropOp(){
+	    $data = Model('pointorder')->delPointOrderByOrderID($_GET['order_id']);
+	    if ($data['state']){
+	        showDialog(L('admin_pointorder_del_success'),'index.php?act=pointorder&op=pointorder_list','succ');
+	    } else {
+	        showDialog($data['msg'],'index.php?act=pointorder&op=pointorder_list','error');
+	    }
+	}
+	
+	/**
+	 * 取消兑换
+	 */
+	public function order_cancelOp(){
+	    $model_pointorder = Model('pointorder');
+	    //取消订单
+	    $data = $model_pointorder->cancelPointOrder($_GET['id']);
+	    if ($data['state']){
+	        showDialog(L('admin_pointorder_cancel_success'),'index.php?act=pointorder&op=pointorder_list','succ');
+	    }else {
+	        showDialog($data['msg'],'index.php?act=pointorder&op=pointorder_list','error');
+	    }
+	}
+	
+	/**
+	 * 发货
+	 */
+	public function order_shipOp(){
+		$order_id = intval($_GET['id']);
+		if ($order_id <= 0){
+			showDialog(L('admin_pointorder_parameter_error'),'index.php?act=pointorder&op=pointorder_list','error');
+		}
+		$model_pointorder = Model('pointorder');
+		//获取订单状态
+		$pointorderstate_arr = $model_pointorder->getPointOrderStateBySign();
+		 
+		//查询订单信息
+		$where = array();
+		$where['point_orderid'] = $order_id;
+		$where['point_orderstate'] = array('in',array($pointorderstate_arr['waitship'][0],$pointorderstate_arr['waitreceiving'][0]));//待发货和已经发货状态
+		$order_info = $model_pointorder->getPointOrderInfo($where);
+		if (!$order_info){
+		    showDialog(L('admin_pointorderd_record_error'),'index.php?act=pointorder&op=pointorder_list','error');
+		}
+		if (chksubmit()){
+			$obj_validate = new Validate();
+			$validate_arr[] = array("input"=>$_POST["shippingcode"],"require"=>"true","message"=>L('admin_pointorder_ship_code_nullerror'));
+			$obj_validate->validateparam = $validate_arr;
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showDialog(L('error').$error,'index.php?act=pointorder&op=pointorder_list','error');
+			}
+			//发货
+			$data = $model_pointorder->shippingPointOrder($order_id, $_POST, $order_info);
+			if ($data['state']){
+				showDialog('发货修改成功','index.php?act=pointorder&op=pointorder_list','succ');
+			}else {
+				showDialog($data['msg'],'index.php?act=pointorder&op=pointorder_list','error');
+			}
+		} else {
+		    $express_list = Model('express')->getExpressList();
+			Tpl::output('express_list',$express_list);
+		    Tpl::output('order_info',$order_info);
+			Tpl::showpage('pointorder.ship');
+		}
+	}
+	/**
+	 * 兑换信息详细
+	 */
+	public function order_infoOp(){
+		$order_id = intval($_GET['order_id']);
+		if ($order_id <= 0){
+			showDialog(L('admin_pointorder_parameter_error'),'index.php?act=pointorder&op=pointorder_list','error');
+		}
+		//查询订单信息
+		$model_pointorder = Model('pointorder');
+		$order_info = $model_pointorder->getPointOrderInfo(array('point_orderid'=>$order_id));
+		if (!$order_info){
+			showDialog(L('admin_pointorderd_record_error'),'index.php?act=pointorder&op=pointorder_list','error');
+		}
+		$orderstate_arr = $model_pointorder->getPointOrderState($order_info['point_orderstate']);
+		$order_info['point_orderstatetext'] = $orderstate_arr[1];
+		
+		//查询兑换订单收货人地址
+		$orderaddress_info = $model_pointorder->getPointOrderAddressInfo(array('point_orderid'=>$order_id));
+		Tpl::output('orderaddress_info',$orderaddress_info);
+		
+		//兑换商品信息
+		$prod_list = $model_pointorder->getPointOrderGoodsList(array('point_orderid'=>$order_id));
+		Tpl::output('prod_list',$prod_list);
+		
+		//物流公司信息
+		if ($order_info['point_shipping_ecode'] != ''){
+		    $data = Model('express')->getExpressInfoByECode($order_info['point_shipping_ecode']);
+		    if ($data['state']){
+		        $express_info = $data['data']['express_info'];
+		    }
+		    Tpl::output('express_info',$express_info);
+		}
+		
+		Tpl::output('order_info',$order_info);
+		Tpl::showpage('pointorder.info');
+	}
+}

+ 459 - 0
admin/control/pointprod.php

@@ -0,0 +1,459 @@
+<?php
+/**
+ * 兑换礼品管理
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class pointprodControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('pointprod');
+	}
+
+	/**
+	 * 积分礼品列表
+	 */
+	public function pointprodOp(){
+	    $pointprod_model = Model('pointprod');
+	    
+	    //获得兑换商品的上下架状态
+	    $pgoodsshowstate_arr = $pointprod_model->getPgoodsShowState();
+	    //获得兑换商品的推荐状态
+	    $pgoodsrecommendstate_arr = $pointprod_model->getPgoodsRecommendState();
+	    
+	    //条件
+	    $where = array();
+	    $pgoods_name = trim($_GET['pg_name']);
+	    if ($pgoods_name){
+	        $where['pgoods_name'] = array('like',"%{$pgoods_name}%");
+	    }
+	    switch (trim($_GET['pg_state'])){
+	    	case 'show':
+	    	    $where['pgoods_show'] = $pgoodsshowstate_arr['show'][0];
+	    	    break;
+    	    case 'nshow':
+    	        $where['pgoods_show'] = $pgoodsshowstate_arr['unshow'][0];
+    	        break;
+	        case 'commend':
+	            $where['pgoods_commend'] = $pgoodsrecommendstate_arr['commend'][0];
+	            break;
+	    }
+	    $prod_list = $pointprod_model->getPointProdList($where, '*', 'pgoods_sort asc,pgoods_id desc', 0, 10);
+	    //信息输出
+	    Tpl::output('prod_list',$prod_list);
+	    Tpl::output('show_page',$pointprod_model->showpage());
+	    Tpl::showpage('pointprod.list');
+	}
+
+	/**
+	 * 积分礼品添加
+	 */
+	public function prod_addOp(){
+		$hourarr = array('00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23');
+		$upload_model = Model('upload');
+		if (chksubmit()){
+			//验证表单
+			$obj_validate = new Validate();
+			$validate_arr[] = array("input"=>$_POST["goodsname"],"require"=>"true","message"=>L('admin_pointprod_add_goodsname_error'));
+			$validate_arr[] = array("input"=>$_POST["goodsprice"],"require"=>"true","validator"=>"DoublePositive","message"=>L('admin_pointprod_add_goodsprice_number_error'));
+			$validate_arr[] = array('input'=>$_POST['goodspoints'],'require'=>'true','validator'=>'IntegerPositive','message'=>L('admin_pointprod_add_goodspoint_number_error'));
+			$validate_arr[] = array('input'=>$_POST['goodsserial'],'require'=>'true','message'=>L('admin_pointprod_add_goodsserial_null_error'));
+			$validate_arr[] = array('input'=>$_POST['goodsstorage'],'require'=>'true','validator'=>'IntegerPositive','message'=>L('admin_pointprod_add_storage_number_error'));
+			$validate_arr[] = array('input'=>$_POST['sort'],'require'=>'true','validator'=>'IntegerPositive','message'=>L('admin_pointprod_add_sort_number_error'));
+			if ($_POST['islimit'] == 1){
+				$validate_arr[] = array('input'=>$_POST['limitnum'],'validator'=>'IntegerPositive','message'=>L('admin_pointprod_add_limitnum_digits_error'));
+			}
+			if ($_POST['islimittime']){
+				$validate_arr[] = array('input'=>$_POST['starttime'],'require'=>'true','message'=>L('admin_pointprod_add_limittime_null_error'));
+				$validate_arr[] = array('input'=>$_POST['endtime'],'require'=>'true','message'=>L('admin_pointprod_add_limittime_null_error'));
+			}
+			$obj_validate->validateparam = $validate_arr;
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showDialog(L('error').$error,'','error');
+			}
+			
+			$model_pointprod = Model('pointprod');
+			$goods_array = array();
+			$goods_array['pgoods_name']		= trim($_POST['goodsname']);
+			$goods_array['pgoods_tag']		= trim($_POST['goodstag']);
+			$goods_array['pgoods_price']	= trim($_POST['goodsprice']);
+
+			$goods_array['pgoods_points']	= trim($_POST['goodspoints']);
+			$goods_array['pgoods_serial']	= trim($_POST['goodsserial']);
+			$goods_array['pgoods_storage']	= intval($_POST['goodsstorage']);
+
+
+            $goods_array['pgoods_islimit'] = intval($_POST['islimit']);
+            if ($goods_array['pgoods_islimit'] == 1){
+            	$goods_array['pgoods_limitnum'] = intval($_POST['limitnum']);
+            }else {
+            	$goods_array['pgoods_limitnum'] = 0;
+            }
+            $goods_array['pgoods_islimittime'] = intval($_POST['islimittime']);
+            if ($goods_array['pgoods_islimittime'] == 1){
+             	//如果添加了开始时间
+	            if (trim($_POST['starttime'])){
+	            	$starttime = trim($_POST['starttime']);
+	            	$sdatearr = explode('-',$starttime);
+	            	$starttime = mktime(intval($_POST['starthour']),0,0,$sdatearr[1],$sdatearr[2],$sdatearr[0]);
+	            	unset($sdatearr);
+	            }
+				if (trim($_POST['endtime'])){
+	            	$endtime = trim($_POST['endtime']);
+	            	$edatearr = explode('-',$endtime);
+	            	$endtime = mktime(intval($_POST['endhour']),0,0,$edatearr[1],$edatearr[2],$edatearr[0]);
+	            }
+	            $goods_array['pgoods_starttime'] = $starttime;
+            	$goods_array['pgoods_endtime'] = $endtime;
+            }else {
+            	$goods_array['pgoods_starttime'] = '';
+            	$goods_array['pgoods_endtime'] = '';
+            }
+			$goods_array['pgoods_show']		= trim($_POST['showstate']);
+			$goods_array['pgoods_commend']	= trim($_POST['commendstate']);
+			$goods_array['pgoods_add_time']	= time();
+			$goods_array['pgoods_state']		= trim($_POST['forbidstate']);
+			$goods_array['pgoods_close_reason']		= trim($_POST['forbidreason']);
+			$goods_array['pgoods_keywords']		= trim($_POST['keywords']);
+			$goods_array['pgoods_description']   = trim($_POST['description']);
+			$goods_array['pgoods_body']   = trim($_POST['pgoods_body']);
+			$goods_array['pgoods_sort']   = intval($_POST['sort']);
+			$goods_array['pgoods_limitmgrade']   = intval($_POST['limitgrade']);
+			
+			//添加礼品代表图片
+			$indeximg_succ = false;
+			if (!empty($_FILES['goods_image']['name'])){
+				$upload = new UploadFile();
+				$upload->set('default_dir',ATTACH_POINTPROD);
+				$upload->set('thumb_width',	'60,240');
+				$upload->set('thumb_height','60,240');
+				$upload->set('thumb_ext',	'_small,_mid');
+				$result = $upload->upfile('goods_image');
+				if ($result){
+					$indeximg_succ = true;
+					$goods_array['pgoods_image'] = $upload->file_name;
+				}else {
+					showDialog($upload->error,'','error');
+				}
+			}
+			$state = $model_pointprod->addPointGoods($goods_array);
+			if($state){
+				//礼品代表图片数据入库
+				if ($indeximg_succ){
+					$insert_array = array();
+					$insert_array['file_name'] = $upload->file_name;
+					$insert_array['file_thumb'] = $upload->thumb_image;
+					$insert_array['upload_type'] = 5;
+					$insert_array['file_size'] = filesize(BASE_UPLOAD_PATH.DS.ATTACH_POINTPROD.DS.$upload->file_name);
+					$insert_array['item_id'] = $state;
+					$insert_array['upload_time'] = time();
+					$upload_model->add($insert_array);
+				}
+				//更新积分礼品描述图片
+				$file_idstr = '';
+				if (is_array($_POST['file_id']) && count($_POST['file_id'])>0){
+					$file_idstr = "'".implode("','",$_POST['file_id'])."'";
+				}
+				$upload_model->updatebywhere(array('item_id'=>$state),array('upload_type'=>6,'item_id'=>'0','upload_id_in'=>"{$file_idstr}"));
+				$this->log(L('admin_pointprod_add_title').'['.$_POST['goodsname'].']');
+				showDialog(L('admin_pointprod_add_success'),'index.php?act=pointprod&op=pointprod','succ');
+			}
+		}
+		//模型实例化
+		$where = array();
+		$where['upload_type'] = '6';
+		$where['item_id'] = '0';
+		$file_upload = $upload_model->getUploadList($where);
+		if (is_array($file_upload)){
+			foreach ($file_upload as $k => $v){
+				$file_upload[$k]['upload_path'] = UPLOAD_SITE_URL.DS.ATTACH_POINTPROD.DS.$file_upload[$k]['file_name'];
+			}
+		}
+		Tpl::output('file_upload',$file_upload);
+		Tpl::output('PHPSESSID',session_id());
+		$hourarr = array('00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23');
+		Tpl::output('hourarr',$hourarr);
+		//会员级别
+		$member_grade = Model('member')->getMemberGradeArr();
+		Tpl::output('member_grade',$member_grade);
+		Tpl::showpage('pointprod.add');
+	}
+
+	/**
+	 * 积分礼品编辑
+	 */
+	public function prod_editOp(){
+		$hourarr = array('00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23');
+		$upload_model = Model('upload');
+		$pg_id = intval($_GET['pg_id']);
+		if (!$pg_id){
+			showDialog(L('admin_pointprod_parameter_error'),'index.php?act=pointprod&op=pointprod','error');
+		}
+		$model_pointprod = Model('pointprod');
+		//查询礼品记录是否存在
+		$prod_info = $model_pointprod->getPointProdInfo(array('pgoods_id'=>$pg_id));
+		if (!$prod_info){
+			showDialog(L('admin_pointprod_record_error'),'index.php?act=pointprod&op=pointprod','error');
+		}
+		if (chksubmit()){
+			//验证表单
+			$obj_validate = new Validate();
+			$validate_arr[] = array("input"=>$_POST["goodsname"],"require"=>"true","message"=>L('admin_pointprod_add_goodsname_error'));
+			$validate_arr[] = array("input"=>$_POST["goodsprice"],"require"=>"true","validator"=>"DoublePositive","message"=>L('admin_pointprod_add_goodsprice_number_error'));
+			$validate_arr[] = array('input'=>$_POST['goodspoints'],'require'=>'true','validator'=>'IntegerPositive','message'=>L('admin_pointprod_add_goodspoint_number_error'));
+			$validate_arr[] = array('input'=>$_POST['goodsserial'],'require'=>'true','message'=>L('admin_pointprod_add_goodsserial_null_error'));
+			$validate_arr[] = array('input'=>$_POST['goodsstorage'],'require'=>'true','validator'=>'IntegerPositive','message'=>L('admin_pointprod_add_storage_number_error'));
+			$validate_arr[] = array('input'=>$_POST['sort'],'require'=>'true','validator'=>'IntegerPositive','message'=>L('admin_pointprod_add_sort_number_error'));
+			if ($_POST['islimit'] == 1){
+				$validate_arr[] = array('input'=>$_POST['limitnum'],'validator'=>'IntegerPositive','message'=>L('admin_pointprod_add_limitnum_digits_error'));
+			}
+			if ($_POST['islimittime']){
+				$validate_arr[] = array('input'=>$_POST['starttime'],'require'=>'true','message'=>L('admin_pointprod_add_limittime_null_error'));
+				$validate_arr[] = array('input'=>$_POST['endtime'],'require'=>'true','message'=>L('admin_pointprod_add_limittime_null_error'));
+			}
+			$obj_validate->validateparam = $validate_arr;
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showDialog(L('error').$error,'','error');
+			}
+			//实例化店铺商品模型
+			$model_pointprod	= Model('pointprod');
+
+			$goods_array			= array();
+			$goods_array['pgoods_name']		= trim($_POST['goodsname']);
+			$goods_array['pgoods_tag']		= trim($_POST['goodstag']);
+			$goods_array['pgoods_price']	= trim($_POST['goodsprice']);
+
+			$goods_array['pgoods_points']	= trim($_POST['goodspoints']);
+			$goods_array['pgoods_serial']	= trim($_POST['goodsserial']);
+			$goods_array['pgoods_storage']	= intval($_POST['goodsstorage']);
+            $goods_array['pgoods_islimit'] = intval($_POST['islimit']);
+            if ($goods_array['pgoods_islimit'] == 1){
+            	$goods_array['pgoods_limitnum'] = intval($_POST['limitnum']);
+            }else {
+            	$goods_array['pgoods_limitnum'] = 0;
+            }
+            $goods_array['pgoods_islimittime'] = intval($_POST['islimittime']);
+            if ($goods_array['pgoods_islimittime'] == 1){
+             	//如果添加了开始时间
+	            if (trim($_POST['starttime'])){
+	            	$starttime = trim($_POST['starttime']);
+	            	$sdatearr = explode('-',$starttime);
+	            	$starttime = mktime(intval($_POST['starthour']),0,0,$sdatearr[1],$sdatearr[2],$sdatearr[0]);
+	            	unset($sdatearr);
+	            }
+				if (trim($_POST['endtime'])){
+	            	$endtime = trim($_POST['endtime']);
+	            	$edatearr = explode('-',$endtime);
+	            	$endtime = mktime(intval($_POST['endhour']),0,0,$edatearr[1],$edatearr[2],$edatearr[0]);
+	            }
+	            $goods_array['pgoods_starttime'] = $starttime;
+            	$goods_array['pgoods_endtime'] = $endtime;
+            }else {
+            	$goods_array['pgoods_starttime'] = '';
+            	$goods_array['pgoods_endtime'] = '';
+            }
+			$goods_array['pgoods_show']		= trim($_POST['showstate']);
+			$goods_array['pgoods_commend']	= trim($_POST['commendstate']);
+			$goods_array['pgoods_state']		= trim($_POST['forbidstate']);
+			$goods_array['pgoods_close_reason']		= trim($_POST['forbidreason']);
+			$goods_array['pgoods_keywords']		= trim($_POST['keywords']);
+			$goods_array['pgoods_description']   = trim($_POST['description']);
+			$goods_array['pgoods_body']   = trim($_POST['pgoods_body']);
+			$goods_array['pgoods_sort']   = intval($_POST['sort']);
+			$goods_array['pgoods_limitmgrade']   = intval($_POST['limitgrade']);
+			//添加礼品代表图片
+			$indeximg_succ = false;
+			if (!empty($_FILES['goods_image']['name'])){
+				$upload = new UploadFile();
+				$upload->set('default_dir',ATTACH_POINTPROD);
+				$upload->set('thumb_width',	'60,240');
+				$upload->set('thumb_height','60,240');
+				$upload->set('thumb_ext',	'_small,_mid');
+				$result = $upload->upfile('goods_image');
+				if ($result){
+					$indeximg_succ = true;
+					$goods_array['pgoods_image'] = $upload->file_name;
+				}else {
+					showDialog($upload->error,'','error');
+				}
+			}
+			$state = $model_pointprod->editPointProd($goods_array,array('pgoods_id'=>$prod_info['pgoods_id']));
+			if($state){
+				//礼品代表图片数据入库
+				if ($indeximg_succ){
+					//删除原有图片
+					$upload_list = $upload_model->getUploadList(array('upload_type'=>5,'item_id'=>$prod_info['pgoods_id']));
+
+					if (is_array($upload_list) && count($upload_list)>0){
+						$upload_idarr = array();
+						foreach ($upload_list as $v){
+							@unlink(BASE_UPLOAD_PATH.DS.ATTACH_POINTPROD.DS.$v['file_name']);
+							@unlink(BASE_UPLOAD_PATH.DS.ATTACH_POINTPROD.DS.$v['file_thumb']);
+							$upload_idarr[] = $v['upload_id'];
+						}
+						//删除图片
+						$upload_model->dropUploadById($upload_idarr);
+					}
+					$insert_array = array();
+					$insert_array['file_name'] = $upload->file_name;
+					$insert_array['file_thumb'] = $upload->thumb_image;
+					$insert_array['upload_type'] = 5;
+					$insert_array['file_size'] = filesize(BASE_UPLOAD_PATH.DS.DS.ATTACH_POINTPROD.DS.$upload->file_name);
+					$insert_array['item_id'] = $prod_info['pgoods_id'];
+					$insert_array['upload_time'] = time();
+					$upload_model->add($insert_array);
+				}
+				//更新积分礼品描述图片
+				$file_idstr = '';
+				if (is_array($_POST['file_id']) && count($_POST['file_id'])>0){
+				    $file_idstr = "'".implode("','",$_POST['file_id'])."'";
+				}
+				$upload_model->updatebywhere(array('item_id'=>$prod_info['pgoods_id']),array('upload_type'=>6,'item_id'=>'0','upload_id_in'=>"{$file_idstr}"));
+				
+				$this->log(L('nc_edit,admin_pointprodp').'['.$_POST['goodsname'].']');
+				showDialog(L('admin_pointprod_edit_success'),'index.php?act=pointprod&op=pointprod','succ');
+			}
+		}else {
+		    $where = array();
+			$where['upload_type'] = '6';
+			$where['item_id'] = $prod_info['pgoods_id'];
+			$file_upload = $upload_model->getUploadList($where);
+			if (is_array($file_upload)){
+				foreach ($file_upload as $k => $v){
+					$file_upload[$k]['upload_path'] = UPLOAD_SITE_URL.DS.ATTACH_POINTPROD.DS.$file_upload[$k]['file_name'];
+				}
+			}
+    		//会员级别
+    		$member_grade = Model('member')->getMemberGradeArr();
+    		Tpl::output('member_grade',$member_grade);
+			Tpl::output('file_upload',$file_upload);
+			Tpl::output('PHPSESSID',session_id());
+			Tpl::output('hourarr',$hourarr);
+			Tpl::output('prod_info',$prod_info);
+			Tpl::showpage('pointprod.edit');
+		}
+	}
+
+	/**
+	 * 删除积分礼品
+	 */
+	public function prod_dropOp(){
+		$pg_id = intval($_GET['pg_id']);
+		if (!$pg_id){
+			showDialog(L('admin_pointprod_parameter_error'),'index.php?act=pointprod&op=pointprod','error');
+		}
+		$model_pointprod = Model('pointprod');
+		//查询礼品是否存在
+		$prod_info = $model_pointprod->getPointProdInfo(array('pgoods_id'=>$pg_id));
+		if (!is_array($prod_info) || count($prod_info)<=0){
+			showDialog(L('admin_pointprod_record_error'),'index.php?act=pointprod&op=pointprod','error');
+		}
+		//查询积分礼品的下属信息(比如兑换信息)
+		//删除操作
+		$result = $model_pointprod->delPointProdById($pg_id);
+		if($result) {
+			$this->log(L('nc_del,admin_pointprodp').'[ID:'.$pg_id.']');
+			showDialog(L('admin_pointprod_del_success'),'index.php?act=pointprod&op=pointprod','succ');
+		} else {
+			showDialog(L('admin_pointprod_del_fail'),'index.php?act=pointprod&op=pointprod','error');
+		}
+	}
+
+	/**
+	 * 批量删除积分礼品
+	 */
+	public function prod_dropallOp(){
+		$pg_id = $_POST['pg_id'];
+		if (!$pg_id){
+			showDialog(L('admin_pointprod_parameter_error'),'index.php?act=pointprod&op=pointprod','','error');
+		}
+		$result = Model('pointprod')->delPointProdById($pg_id);
+		if($result) {
+			$this->log(L('nc_del,admin_pointprodp').'[ID:'.implode(',',$pg_id).']');
+			showDialog(L('admin_pointprod_del_success'),'index.php?act=pointprod&op=pointprod','succ');
+		} else {
+			showDialog(L('admin_pointprod_del_fail'),'index.php?act=pointprod&op=pointprod','','error');
+		}
+	}
+
+	/**
+	 * 积分礼品异步状态修改
+	 */
+	public function ajaxOp(){
+		//礼品上架,礼品推荐,礼品禁售
+		$id = intval($_GET['id']);
+		if ($id <= 0){
+			echo 'false'; exit;
+		}
+		$model_pointprod = Model('pointprod');
+		$update_array = array();
+		$update_array[$_GET['column']] = trim($_GET['value']);
+		$model_pointprod->editPointProd($update_array,array('pgoods_id'=>$id));
+		echo 'true';exit;
+	}
+	/**
+	 * 积分礼品上传
+	 */
+	public function pointprod_pic_uploadOp(){
+	    /**
+	     * 上传图片
+	     */
+	    $upload = new UploadFile();
+	    $upload->set('default_dir',ATTACH_POINTPROD);
+
+	    $result = $upload->upfile('fileupload');
+	    if ($result){
+	        $_POST['pic'] = $upload->file_name;
+	    }else {
+	        echo 'error';exit;
+	    }
+	    /**
+	     * 模型实例化
+	     */
+	    $model_upload = Model('upload');
+	    /**
+	     * 图片数据入库
+	    */
+	    $insert_array = array();
+	    $insert_array['file_name'] = $_POST['pic'];
+	    $insert_array['upload_type'] = '6';
+	    $insert_array['file_size'] = $_FILES['Filedata']['size'];
+	    $insert_array['upload_time'] = time();
+	    $insert_array['item_id'] = intval($_POST['item_id']);
+	    $result = $model_upload->add($insert_array);
+	    if ($result){
+	        $data = array();
+	        $data['file_id'] = $result;
+	        $data['file_name'] = $_POST['pic'];
+	        $data['file_path'] = $_POST['pic'];
+	        /**
+	         * 整理为json格式
+	         */
+	        $output = json_encode($data);
+	        echo $output;
+	    }
+	}
+	/**
+	 * ajax操作删除已上传图片
+	 */
+	public function ajaxdeluploadOp(){
+		//删除文章图片
+		if (intval($_GET['file_id']) > 0){
+			$model_upload = Model('upload');
+			/**
+			 * 删除图片
+			 */
+			$file_array = $model_upload->getOneUpload(intval($_GET['file_id']));
+			@unlink(BASE_UPLOAD_PATH.DS.ATTACH_POINTPROD.DS.$file_array['file_name']);
+			/**
+			 * 删除信息
+			 */
+			$model_upload->del(intval($_GET['file_id']));
+			echo 'true';exit;
+		}else {
+			echo 'false';exit;
+		}
+	}
+}

+ 203 - 0
admin/control/points.php

@@ -0,0 +1,203 @@
+<?php
+/**
+ * 积分管理
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class pointsControl extends SystemControl{
+	const EXPORT_SIZE = 5000;
+	public function __construct(){
+		parent::__construct();
+		Language::read('points');
+		//判断系统是否开启积分功能
+		if (C('points_isuse') != 1){
+			showMessage(Language::get('admin_points_unavailable'),'index.php?act=dashboard&op=welcome','','error');
+		}
+	}
+
+	/**
+	 * 积分添加
+	 */
+	public function addpointsOp(){
+		if (chksubmit()){
+
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["member_id"], "require"=>"true", "message"=>Language::get('admin_points_member_error_again')),
+				array("input"=>$_POST["pointsnum"], "require"=>"true",'validator'=>'Compare','operator'=>' >= ','to'=>1,"message"=>Language::get('admin_points_points_min_error'))
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error,'','','error');
+			}
+			//查询会员信息
+			$obj_member = Model('member');
+			$member_id = intval($_POST['member_id']);
+			$member_info = $obj_member->getMemberInfo(array('member_id'=>$member_id));
+
+			if (!is_array($member_info) || count($member_info)<=0){
+				showMessage(Language::get('admin_points_userrecord_error'),'index.php?act=points&op=addpoints','','error');
+			}
+
+			$pointsnum = intval($_POST['pointsnum']);
+			if ($_POST['operatetype'] == 2 && $pointsnum > intval($member_info['member_points'])){
+				showMessage(Language::get('admin_points_points_short_error').$member_info['member_points'],'index.php?act=points&op=addpoints','','error');
+			}
+
+			$obj_points = Model('points');
+			$insert_arr['pl_memberid'] = $member_info['member_id'];
+			$insert_arr['pl_membername'] = $member_info['member_name'];
+			$admininfo = $this->getAdminInfo();
+			$insert_arr['pl_adminid'] = $admininfo['id'];
+			$insert_arr['pl_adminname'] = $admininfo['name'];
+			if ($_POST['operatetype'] == 2){
+				$insert_arr['pl_points'] = -$_POST['pointsnum'];
+			}else {
+				$insert_arr['pl_points'] = $_POST['pointsnum'];
+			}
+			if ($_POST['pointsdesc']){
+				$insert_arr['pl_desc'] = trim($_POST['pointsdesc']);
+			} else {
+				$insert_arr['pl_desc'] = Language::get('admin_points_system_desc');
+			}
+			$result = $obj_points->savePointsLog('system',$insert_arr,true);
+			if ($result){
+				$this->log(L('admin_points_mod_tip').$member_info['member_name'].'['.(($_POST['operatetype'] == 2)?'':'+').strval($insert_arr['pl_points']).']',null);
+				showMessage(Language::get('nc_common_save_succ'),'index.php?act=points&op=addpoints');
+			}else {
+				showMessage(Language::get('nc_common_save_fail'),'index.php?act=points&op=addpoints','','error');
+			}
+		}else {
+			Tpl::showpage('points.add');
+		}
+	}
+	public function checkmemberOp(){
+		$name = trim($_GET['name']);
+		if (!$name){
+			echo ''; die;
+		}
+		/**
+		 * 转码
+		 */
+		if(strtoupper(CHARSET) == 'GBK'){
+			$name = Language::getGBK($name);
+		}
+		$obj_member = Model('member');
+		$member_info = $obj_member->getMemberInfo(array('member_name'=>$name));
+		if (is_array($member_info) && count($member_info)>0){
+			if(strtoupper(CHARSET) == 'GBK'){
+				$member_info['member_name'] = Language::getUTF8($member_info['member_name']);
+			}
+			echo json_encode(array('id'=>$member_info['member_id'],'name'=>$member_info['member_name'],'points'=>$member_info['member_points']));
+		}else {
+			echo ''; die;
+		}
+	}
+	/**
+	 * 积分日志列表
+	 */
+	public function pointslogOp(){
+		$condition_arr = array();
+		$condition_arr['pl_membername_like'] = trim($_GET['mname']);
+		$condition_arr['pl_adminname_like'] = trim($_GET['aname']);
+		if ($_GET['stage']){
+			$condition_arr['pl_stage'] = trim($_GET['stage']);
+		}
+		$condition_arr['saddtime'] = strtotime($_GET['stime']);
+		$condition_arr['eaddtime'] = strtotime($_GET['etime']);
+        if($condition_arr['eaddtime'] > 0) {
+            $condition_arr['eaddtime'] += 86400;
+        }
+		$condition_arr['pl_desc_like'] = trim($_GET['description']);
+		//分页
+		$page	= new Page();
+		$page->setEachNum(10);
+		$page->setStyle('admin');
+		//查询积分日志列表
+		$points_model = Model('points');
+		$list_log = $points_model->getPointsLogList($condition_arr,$page,'*','');
+		//信息输出
+		Tpl::output('show_page',$page->show());
+		Tpl::output('list_log',$list_log);
+		Tpl::showpage('pointslog');
+	}
+
+	/**
+	 * 积分日志列表导出
+	 */
+	public function export_step1Op(){
+		$condition_arr = array();
+		$condition_arr['pl_membername_like'] = trim($_GET['mname']);
+		$condition_arr['pl_adminname_like'] = trim($_GET['aname']);
+		if ($_GET['stage']){
+			$condition_arr['pl_stage'] = trim($_GET['stage']);
+		}
+		$condition_arr['saddtime'] = strtotime($_GET['stime']);
+		$condition_arr['eaddtime'] = strtotime($_GET['etime']);
+        if($condition_arr['eaddtime'] > 0) {
+            $condition_arr['eaddtime'] += 86400;
+        }
+		$condition_arr['pl_desc_like'] = trim($_GET['description']);
+		$page	= new Page();
+		$page->setEachNum(self::EXPORT_SIZE);
+		$points_model = Model('points');
+		$list_log = $points_model->getPointsLogList($condition_arr,$page,'*','');
+		if (!is_numeric($_GET['curpage'])){
+			$count = $page->getTotalNum();
+			$array = array();
+			if ($count > self::EXPORT_SIZE ){	//显示下载链接
+				$page = ceil($count/self::EXPORT_SIZE);
+				for ($i=1;$i<=$page;$i++){
+					$limit1 = ($i-1)*self::EXPORT_SIZE + 1;
+					$limit2 = $i*self::EXPORT_SIZE > $count ? $count : $i*self::EXPORT_SIZE;
+					$array[$i] = $limit1.' ~ '.$limit2 ;
+				}
+				Tpl::output('list',$array);
+				Tpl::output('murl','index.php?act=pointslog&op=pointslog');
+				Tpl::showpage('export.excel');
+			}else{	//如果数量小,直接下载
+				$this->createExcel($list_log);
+			}
+		}else{	//下载
+			$this->createExcel($list_log);
+		}
+	}
+
+	/**
+	 * 生成excel
+	 *
+	 * @param array $data
+	 */
+	private function createExcel($data = array()){
+		Language::read('export');
+		import('libraries.excel');
+		$excel_obj = new Excel();
+		$excel_data = array();
+		//设置样式
+		$excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1')));
+		//header
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_pi_member'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_pi_system'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_pi_point'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_pi_time'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_pi_jd'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_pi_ms'));
+		$state_cn = array(Language::get('admin_points_stage_regist'),Language::get('admin_points_stage_login'),Language::get('admin_points_stage_comments'),Language::get('admin_points_stage_order'),Language::get('admin_points_stage_system'),Language::get('admin_points_stage_pointorder'),Language::get('admin_points_stage_app'));
+		foreach ((array)$data as $k=>$v){
+			$tmp = array();
+			$tmp[] = array('data'=>$v['pl_membername']);
+			$tmp[] = array('data'=>$v['pl_adminname']);
+			$tmp[] = array('format'=>'Number','data'=>ncPriceFormat($v['pl_points']));
+			$tmp[] = array('data'=>date('Y-m-d H:i:s',$v['pl_addtime']));
+			$tmp[] = array('data'=>str_replace(array('regist','login','comments','order','system','pointorder','app'),$state_cn,$v['pl_stage']));
+			$tmp[] = array('data'=>$v['pl_desc']);
+
+			$excel_data[] = $tmp;
+		}
+		$excel_data = $excel_obj->charset($excel_data,CHARSET);
+		$excel_obj->addArray($excel_data);
+		$excel_obj->addWorksheet($excel_obj->charset(L('exp_pi_jfmx'),CHARSET));
+		$excel_obj->generateXML($excel_obj->charset(L('exp_pi_jfmx'),CHARSET).$_GET['curpage'].'-'.date('Y-m-d-H',time()));
+	}
+}

+ 748 - 0
admin/control/predeposit.php

@@ -0,0 +1,748 @@
+<?php
+/**
+ * 预存款管理
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class predepositControl extends SystemControl{
+	const EXPORT_SIZE = 1000;
+	public function __construct(){
+		parent::__construct();
+		Language::read('predeposit');
+	}
+
+	/**
+	 * 充值列表
+	 */
+	public function predepositOp(){
+        $condition = array();
+        $if_start_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_start_date']);
+        $if_end_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_end_date']);
+        $start_unixtime = $if_start_date ? strtotime($_GET['query_start_date']) : null;
+        $end_unixtime = $if_end_date ? strtotime($_GET['query_end_date']): null;
+        if ($start_unixtime || $end_unixtime) {
+            $condition['pdr_add_time'] = array('time',array($start_unixtime,$end_unixtime));
+        }
+        if (!empty($_GET['mname'])){
+        	$condition['pdr_member_name'] = $_GET['mname'];
+        }
+		if ($_GET['paystate_search'] != ''){
+			$condition['pdr_payment_state'] = $_GET['paystate_search'];
+		}
+		$model_pd = Model('predeposit');
+		$recharge_list = $model_pd->getPdRechargeList($condition,20,'*','pdr_id desc');
+		//信息输出
+		Tpl::output('list',$recharge_list);
+		Tpl::output('show_page',$model_pd->showpage());
+		Tpl::showpage('pd.list');
+	}
+
+	/**
+	 * 充值编辑(更改成收到款)
+	 */
+	public function recharge_editOp(){
+		$id = intval($_GET['id']);
+		if ($id <= 0){
+			showMessage(Language::get('admin_predeposit_parameter_error'),'index.php?act=predeposit&op=predeposit','','error');
+		}
+		//查询充值信息
+		$model_pd = Model('predeposit');
+		$condition = array();
+		$condition['pdr_id'] = $id;
+		$condition['pdr_payment_state'] = 0;
+		$info = $model_pd->getPdRechargeInfo($condition);
+		if (empty($info)){
+			showMessage(Language::get('admin_predeposit_record_error'),'index.php?act=predeposit&op=predeposit','','error');
+		}
+		if (!chksubmit()) {
+		    //显示支付接口列表
+		    $payment_list = Model('payment')->getPaymentOpenList();
+		    //去掉预存款和货到付款
+		    foreach ($payment_list as $key => $value){
+		        if ($value['payment_code'] == 'predeposit' || $value['payment_code'] == 'offline') {
+		            unset($payment_list[$key]);
+		        }
+		    }
+		    Tpl::output('payment_list',$payment_list);
+		    Tpl::output('info',$info);
+		    Tpl::showpage('pd.edit');
+		    exit();
+		}
+
+		//取支付方式信息
+		$model_payment = Model('payment');
+		$condition = array();
+		$condition['payment_code'] = $_POST['payment_code'];
+		$payment_info = $model_payment->getPaymentOpenInfo($condition);
+		if(!$payment_info || $payment_info['payment_code'] == 'offline' || $payment_info['payment_code'] == 'offline') {
+		    showMessage(L('payment_index_sys_not_support'),'','html','error');
+		}
+
+		$condition = array();
+		$condition['pdr_sn'] = $info['pdr_sn'];
+		$condition['pdr_payment_state'] = 0;
+		$update = array();
+		$update['pdr_payment_state'] = 1;
+		$update['pdr_payment_time'] = strtotime($_POST['payment_time']);
+		$update['pdr_payment_code'] = $payment_info['payment_code'];
+		$update['pdr_payment_name'] = $payment_info['payment_name'];
+		$update['pdr_trade_sn'] = $_POST['trade_no'];
+		$update['pdr_admin'] = $this->admin_info['name'];
+        $log_msg = L('admin_predeposit_recharge_edit_state').','.L('admin_predeposit_sn').':'.$info['pdr_sn'];
+
+		try {
+		    $model_pd->beginTransaction();
+		    //更改充值状态
+		    $state = $model_pd->editPdRecharge($update,$condition);
+		    if (!$state) {
+		        throw Exception(Language::get('predeposit_payment_pay_fail'));
+		    }
+		    //变更会员预存款
+		    $data = array();
+		    $data['member_id'] = $info['pdr_member_id'];
+		    $data['member_name'] = $info['pdr_member_name'];
+		    $data['amount'] = $info['pdr_amount'];
+		    $data['pdr_sn'] = $info['pdr_sn'];
+		    $data['admin_name'] = $this->admin_info['name'];
+		    $model_pd->changePd('recharge',$data);
+		    $model_pd->commit();
+		    $this->log($log_msg,1);
+		    showMessage(Language::get('admin_predeposit_recharge_edit_success'),'index.php?act=predeposit&op=predeposit');
+		} catch (Exception $e) {
+		    $model_pd->rollback();
+		    $this->log($log_msg,0);
+		    showMessage($e->getMessage(),'index.php?act=predeposit&op=predeposit','html','error');
+		}
+	}
+
+	/**
+	 * 充值查看
+	 */
+	public function recharge_infoOp(){
+		$id = intval($_GET['id']);
+		if ($id <= 0){
+			showMessage(Language::get('admin_predeposit_parameter_error'),'index.php?act=predeposit&op=predeposit','','error');
+		}
+		//查询充值信息
+		$model_pd = Model('predeposit');
+		$condition = array();
+		$condition['pdr_id'] = $id;
+		$info = $model_pd->getPdRechargeInfo($condition);
+		if (empty($info)){
+			showMessage(Language::get('admin_predeposit_record_error'),'index.php?act=predeposit&op=predeposit','','error');
+		}
+		Tpl::output('info',$info);
+		Tpl::showpage('pd.info');
+
+	}
+
+	/**
+	 * 充值删除
+	 */
+	public function recharge_delOp(){
+		$pdr_id = intval($_GET["id"]);
+		if ($pdr_id <= 0){
+			showMessage(Language::get('admin_predeposit_parameter_error'),'index.php?act=predeposit&op=predeposit','','error');
+		}
+		$model_pd = Model('predeposit');
+		$condition = array();
+		$condition['pdr_id'] = "$pdr_id";
+		$condition['pdr_payment_state'] = 0;
+		$result = $model_pd->delPdRecharge($condition);
+		if ($result){
+			showMessage(Language::get('admin_predeposit_recharge_del_success'),'index.php?act=predeposit&op=predeposit');
+		}else {
+			showMessage(Language::get('admin_predeposit_recharge_del_fail'),'index.php?act=predeposit&op=predeposit','','error');
+		}
+	}
+
+	/**
+	 * 预存款日志
+	 */
+	public function pd_log_listOp(){
+	    $condition = array();
+        $if_start_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['stime']);
+        $if_end_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['etime']);
+        $start_unixtime = $if_start_date ? strtotime($_GET['stime']) : null;
+        $end_unixtime = $if_end_date ? strtotime($_GET['etime']): null;
+        if ($start_unixtime || $end_unixtime) {
+            $condition['lg_add_time'] = array('time',array($start_unixtime,$end_unixtime));
+        }
+        if (!empty($_GET['mname'])){
+        	$condition['lg_member_name'] = $_GET['mname'];
+        }
+        if (!empty($_GET['aname'])){
+            $condition['lg_admin_name'] = $_GET['aname'];
+        }
+		$model_pd = Model('predeposit');
+		$list_log = $model_pd->getPdLogList($condition,20,'*','lg_id desc');
+		Tpl::output('show_page',$model_pd->showpage());
+		Tpl::output('list_log',$list_log);
+		Tpl::showpage('pd_log.list');
+	}
+
+	/**
+	 * 提现列表
+	 */
+	public function pd_cash_listOp(){
+	    $condition = array();
+        $if_start_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['stime']);
+        $if_end_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['etime']);
+        $start_unixtime = $if_start_date ? strtotime($_GET['stime']) : null;
+        $end_unixtime = $if_end_date ? strtotime($_GET['etime']): null;
+        if ($start_unixtime || $end_unixtime) {
+            $condition['pdc_add_time'] = array('time',array($start_unixtime,$end_unixtime));
+        }
+        if (!empty($_GET['mname'])){
+            $condition['pdc_member_name'] = $_GET['mname'];
+        }
+        if (!empty($_GET['pdc_bank_user'])){
+        	$condition['pdc_bank_user'] = $_GET['pdc_bank_user'];
+        }
+		if ($_GET['paystate_search'] != ''){
+			$condition['pdc_payment_state'] = $_GET['paystate_search'];
+		}
+
+		$model_pd = Model('predeposit');
+		$cash_list = $model_pd->getPdCashList($condition,20,'*','pdc_payment_state asc,pdc_id asc');
+		Tpl::output('list',$cash_list);
+		Tpl::output('show_page',$model_pd->showpage());
+		Tpl::showpage('pd_cash.list');
+	}
+
+	/**
+	 * 删除提现记录
+	 */
+	public function pd_cash_delOp(){
+		$pdc_id = intval($_GET["id"]);
+		if ($pdc_id <= 0){
+			showMessage(Language::get('admin_predeposit_parameter_error'),'index.php?act=predeposit&op=pd_cash_list','','error');
+		}
+		$model_pd = Model('predeposit');
+		$condition = array();
+		$condition['pdc_id'] = $pdc_id;
+		$condition['pdc_payment_state'] = 0;
+		$info = $model_pd->getPdCashInfo($condition);
+		if (!$info) {
+		    showMessage(Language::get('admin_predeposit_parameter_error'),'index.php?act=predeposit&op=pd_cash_list','','error');
+		}
+		try {
+		    $result = $model_pd->delPdCash($condition);
+		    if (!$result) {
+		        throw new Exception(Language::get('admin_predeposit_cash_del_fail'));
+		    }
+		    //退还冻结的预存款
+		    $model_member = Model('member');
+		    $member_info = $model_member->getMemberInfo(array('member_id'=>$info['pdc_member_id']));
+		    //扣除冻结的预存款
+		    $admininfo = $this->getAdminInfo();
+		    $data = array();
+		    $data['member_id'] = $member_info['member_id'];
+		    $data['member_name'] = $member_info['member_name'];
+		    $data['amount'] = $info['pdc_amount'];
+		    $data['order_sn'] = $info['pdc_sn'];
+		    $data['admin_name'] = $admininfo['name'];
+		    $model_pd->changePd('cash_del',$data);
+		    $model_pd->commit();
+			showMessage(Language::get('admin_predeposit_cash_del_success'),'index.php?act=predeposit&op=pd_cash_list');
+
+		} catch (Exception $e) {
+		    $model_pd->commit();
+		    showMessage($e->getMessage(),'index.php?act=predeposit&op=pd_cash_list','html','error');
+		}
+	}
+
+	/**
+	 * 更改提现为支付状态
+	 */
+	public function pd_cash_payOp(){
+	    $id = intval($_GET['id']);
+	    if ($id <= 0){
+	        showMessage(Language::get('admin_predeposit_parameter_error'),'index.php?act=predeposit&op=pd_cash_list','','error');
+	    }
+	    $model_pd = Model('predeposit');
+	    $condition = array();
+	    $condition['pdc_id'] = $id;
+	    $condition['pdc_payment_state'] = 0;
+	    $info = $model_pd->getPdCashInfo($condition);
+	    if (!is_array($info) || count($info)<0){
+	        showMessage(Language::get('admin_predeposit_record_error'),'index.php?act=predeposit&op=pd_cash_list','','error');
+	    }
+
+	    //查询用户信息
+	    $model_member = Model('member');
+	    $member_info = $model_member->getMemberInfo(array('member_id'=>$info['pdc_member_id']));
+
+        $update = array();
+        $admininfo = $this->getAdminInfo();
+        $update['pdc_payment_state'] = 1;
+        $update['pdc_payment_admin'] = $admininfo['name'];
+        $update['pdc_payment_time'] = TIMESTAMP;
+        $log_msg = L('admin_predeposit_cash_edit_state').','.L('admin_predeposit_cs_sn').':'.$info['pdc_sn'];
+
+        try {
+            $model_pd->beginTransaction();
+            $result = $model_pd->editPdCash($update,$condition);
+            if (!$result) {
+                throw new Exception(Language::get('admin_predeposit_cash_edit_fail'));
+            }
+            //扣除冻结的预存款
+            $data = array();
+            $data['member_id'] = $member_info['member_id'];
+            $data['member_name'] = $member_info['member_name'];
+            $data['amount'] = $info['pdc_amount'];
+            $data['order_sn'] = $info['pdc_sn'];
+            $data['admin_name'] = $admininfo['name'];
+            $model_pd->changePd('cash_pay',$data);
+            $model_pd->commit();
+            $this->log($log_msg,1);
+            showMessage(Language::get('admin_predeposit_cash_edit_success'),'index.php?act=predeposit&op=pd_cash_list');
+        } catch (Exception $e) {
+            $model_pd->rollback();
+            $this->log($log_msg,0);
+            showMessage($e->getMessage(),'index.php?act=predeposit&op=pd_cash_list','html','error');
+        }
+	}
+
+	/**
+	 * 查看提现信息
+	 */
+	public function pd_cash_viewOp(){
+	    $id = intval($_GET['id']);
+	    if ($id <= 0){
+	        showMessage(Language::get('admin_predeposit_parameter_error'),'index.php?act=predeposit&op=pd_cash_list','','error');
+	    }
+	    $model_pd = Model('predeposit');
+	    $condition = array();
+	    $condition['pdc_id'] = $id;
+	    $info = $model_pd->getPdCashInfo($condition);
+	    if (!is_array($info) || count($info)<0){
+	        showMessage(Language::get('admin_predeposit_record_error'),'index.php?act=predeposit&op=pd_cash_list','','error');
+	    }
+	    Tpl::output('info',$info);
+	    Tpl::showpage('pd_cash.view');
+	}
+
+
+	/**
+	 * 导出预存款充值记录
+	 *
+	 */
+	public function export_step1Op(){
+	    $condition = array();
+	    $if_start_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_start_date']);
+	    $if_end_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['query_end_date']);
+	    $start_unixtime = $if_start_date ? strtotime($_GET['query_start_date']) : null;
+	    $end_unixtime = $if_end_date ? strtotime($_GET['query_end_date']): null;
+	    if ($start_unixtime || $end_unixtime) {
+	        $condition['pdr_add_time'] = array('time',array($start_unixtime,$end_unixtime));
+	    }
+	    if (!empty($_GET['mname'])){
+	        $condition['pdr_member_name'] = $_GET['mname'];
+	    }
+	    if ($_GET['paystate_search'] != ''){
+	        $condition['pdr_payment_state'] = $_GET['paystate_search'];
+	    }
+	    $model_pd = Model('predeposit');
+		if (!is_numeric($_GET['curpage'])){
+			$count = $model_pd->getPdRechargeCount($condition);
+			$array = array();
+			if ($count > self::EXPORT_SIZE ){	//显示下载链接
+				$page = ceil($count/self::EXPORT_SIZE);
+				for ($i=1;$i<=$page;$i++){
+					$limit1 = ($i-1)*self::EXPORT_SIZE + 1;
+					$limit2 = $i*self::EXPORT_SIZE > $count ? $count : $i*self::EXPORT_SIZE;
+					$array[$i] = $limit1.' ~ '.$limit2 ;
+				}
+				Tpl::output('list',$array);
+				Tpl::output('murl','index.php?act=predeposit&op=predeposit');
+				Tpl::showpage('export.excel');
+			}else{	//如果数量小,直接下载
+				$data = $model_pd->getPdRechargeList($condition,'','*','pdr_id desc',self::EXPORT_SIZE);
+				$rechargepaystate = array(0=>'未支付',1=>'已支付');
+				foreach ($data as $k=>$v) {
+					$data[$k]['pdr_payment_state'] = $rechargepaystate[$v['pdr_payment_state']];
+				}
+				$this->createExcel($data);
+			}
+		}else{	//下载
+			$limit1 = ($_GET['curpage']-1) * self::EXPORT_SIZE;
+			$limit2 = self::EXPORT_SIZE;
+			$data = $model_pd->getPdRechargeList($condition,'','*','pdr_id desc',"{$limit1},{$limit2}");
+			$rechargepaystate = array(0=>'未支付',1=>'已支付');
+			foreach ($data as $k=>$v) {
+				$data[$k]['pdr_payment_state'] = $rechargepaystate[$v['pdr_payment_state']];
+			}
+			$this->createExcel($data);
+		}
+	}
+
+	/**
+	 * 生成导出预存款充值excel
+	 *
+	 * @param array $data
+	 */
+	private function createExcel($data = array()){
+		Language::read('export');
+		import('libraries.excel');
+		$excel_obj = new Excel();
+		$excel_data = array();
+		//设置样式
+		$excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1')));
+		//header
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_yc_no'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_yc_member'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_yc_ctime'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_yc_ptime'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_yc_pay'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_yc_money'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_yc_paystate'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_yc_memberid'));
+		foreach ((array)$data as $k=>$v){
+			$tmp = array();
+			$tmp[] = array('data'=>'NC'.$v['pdr_sn']);
+			$tmp[] = array('data'=>$v['pdr_member_name']);
+			$tmp[] = array('data'=>date('Y-m-d H:i:s',$v['pdr_add_time']));
+			if (intval($v['pdr_payment_time'])) {
+	            if (date('His',$v['pdr_payment_time']) == 0) {
+	               $tmp[] = array('data'=>date('Y-m-d',$v['pdr_payment_time']));
+	            } else {
+	               $tmp[] = array('data'=>date('Y-m-d H:i:s',$v['pdr_payment_time']));
+	            }
+			} else {
+			    $tmp[] = array('data'=>'');
+			}
+			$tmp[] = array('data'=>$v['pdr_payment_name']);
+			$tmp[] = array('format'=>'Number','data'=>ncPriceFormat($v['pdr_amount']));
+			$tmp[] = array('data'=>$v['pdr_payment_state']);
+			$tmp[] = array('data'=>$v['pdr_member_id']);
+			$excel_data[] = $tmp;
+		}
+		$excel_data = $excel_obj->charset($excel_data,CHARSET);
+		$excel_obj->addArray($excel_data);
+		$excel_obj->addWorksheet($excel_obj->charset(L('exp_yc_yckcz'),CHARSET));
+		$excel_obj->generateXML($excel_obj->charset(L('exp_yc_yckcz'),CHARSET).$_GET['curpage'].'-'.date('Y-m-d-H',time()));
+	}
+
+	/**
+	 * 导出预存款提现记录
+	 *
+	 */
+	public function export_cash_step1Op(){
+	    $condition = array();
+        $if_start_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['stime']);
+        $if_end_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['etime']);
+        $start_unixtime = $if_start_date ? strtotime($_GET['stime']) : null;
+        $end_unixtime = $if_end_date ? strtotime($_GET['etime']): null;
+        if ($start_unixtime || $end_unixtime) {
+            $condition['pdc_add_time'] = array('time',array($start_unixtime,$end_unixtime));
+        }
+        if (!empty($_GET['mname'])){
+            $condition['pdc_member_name'] = $_GET['mname'];
+        }
+        if (!empty($_GET['pdc_bank_user'])){
+        	$condition['pdc_bank_user'] = $_GET['pdc_bank_user'];
+        }
+		if ($_GET['paystate_search'] != ''){
+			$condition['pdc_payment_state'] = $_GET['paystate_search'];
+		}
+
+		$model_pd = Model('predeposit');
+
+		if (!is_numeric($_GET['curpage'])){
+			$count = $model_pd->getPdCashCount($condition);
+			$array = array();
+			if ($count > self::EXPORT_SIZE ){	//显示下载链接
+				$page = ceil($count/self::EXPORT_SIZE);
+				for ($i=1;$i<=$page;$i++){
+					$limit1 = ($i-1)*self::EXPORT_SIZE + 1;
+					$limit2 = $i*self::EXPORT_SIZE > $count ? $count : $i*self::EXPORT_SIZE;
+					$array[$i] = $limit1.' ~ '.$limit2 ;
+				}
+				Tpl::output('list',$array);
+				Tpl::output('murl','index.php?act=predeposit&op=pd_cash_list');
+				Tpl::showpage('export.excel');
+			}else{	//如果数量小,直接下载
+				$data = $model_pd->getPdCashList($condition,'','*','pdc_id desc',self::EXPORT_SIZE);
+				$cashpaystate = array(0=>'未支付',1=>'已支付');
+				foreach ($data as $k=>$v) {
+					$data[$k]['pdc_payment_state'] = $cashpaystate[$v['pdc_payment_state']];
+				}
+				$this->createCashExcel($data);
+			}
+		}else{	//下载
+			$limit1 = ($_GET['curpage']-1) * self::EXPORT_SIZE;
+			$limit2 = self::EXPORT_SIZE;
+			$data = $model_pd->getPdCashList($condition,'','*','pdc_id desc',"{$limit1},{$limit2}");
+			$cashpaystate = array(0=>'未支付',1=>'已支付');
+			foreach ($data as $k=>$v) {
+				$data[$k]['pdc_payment_state'] = $cashpaystate[$v['pdc_payment_state']];
+			}
+			$this->createCashExcel($data);
+		}
+	}
+
+	/**
+	 * 生成导出预存款提现excel
+	 *
+	 * @param array $data
+	 */
+	private function createCashExcel($data = array()){
+		Language::read('export');
+		import('libraries.excel');
+		$excel_obj = new Excel();
+		$excel_data = array();
+		//设置样式
+		$excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1')));
+		//header
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_tx_no'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_tx_member'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_tx_money'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_tx_ctime'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_tx_state'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_tx_memberid'));
+		foreach ((array)$data as $k=>$v){
+			$tmp = array();
+			$tmp[] = array('data'=>'NC'.$v['pdc_sn']);
+			$tmp[] = array('data'=>$v['pdc_member_name']);
+			$tmp[] = array('format'=>'Number','data'=>ncPriceFormat($v['pdc_amount']));
+			$tmp[] = array('data'=>date('Y-m-d H:i:s',$v['pdc_add_time']));
+			$tmp[] = array('data'=>$v['pdc_payment_state']);
+			$tmp[] = array('data'=>$v['pdc_member_id']);
+			$excel_data[] = $tmp;
+		}
+		$excel_data = $excel_obj->charset($excel_data,CHARSET);
+		$excel_obj->addArray($excel_data);
+		$excel_obj->addWorksheet($excel_obj->charset(L('exp_tx_title'),CHARSET));
+		$excel_obj->generateXML($excel_obj->charset(L('exp_tx_title'),CHARSET).$_GET['curpage'].'-'.date('Y-m-d-H',time()));
+	}
+
+	/**
+	 * 预存款明细信息导出
+	 */
+	public function export_mx_step1Op(){
+	    $condition = array();
+	    $if_start_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['stime']);
+	    $if_end_date = preg_match('/^20\d{2}-\d{2}-\d{2}$/',$_GET['etime']);
+	    $start_unixtime = $if_start_date ? strtotime($_GET['stime']) : null;
+	    $end_unixtime = $if_end_date ? strtotime($_GET['etime']): null;
+	    if ($start_unixtime || $end_unixtime) {
+	        $condition['lg_add_time'] = array('time',array($start_unixtime,$end_unixtime));
+	    }
+	    if (!empty($_GET['mname'])){
+	        $condition['lg_member_name'] = $_GET['mname'];
+	    }
+	    if (!empty($_GET['aname'])){
+	        $condition['lg_admin_name'] = $_GET['aname'];
+	    }
+		$model_pd = Model('predeposit');
+		if (!is_numeric($_GET['curpage'])){
+    		$count = $model_pd->getPdLogCount($condition);
+    		$array = array();
+    		if ($count > self::EXPORT_SIZE ){	//显示下载链接
+    			$page = ceil($count/self::EXPORT_SIZE);
+    			for ($i=1;$i<=$page;$i++){
+    				$limit1 = ($i-1)*self::EXPORT_SIZE + 1;
+    				$limit2 = $i*self::EXPORT_SIZE > $count ? $count : $i*self::EXPORT_SIZE;
+    				$array[$i] = $limit1.' ~ '.$limit2 ;
+    			}
+    			Tpl::output('list',$array);
+    			Tpl::output('murl','index.php?act=predeposit&op=pd_log_list');
+    			Tpl::showpage('export.excel');
+    		}else{	//如果数量小,直接下载
+    			$data = $model_pd->getPdLogList($condition,'','*','lg_id desc',self::EXPORT_SIZE);
+    			$this->createmxExcel($data);
+    		}
+    	}else{	//下载
+    		$limit1 = ($_GET['curpage']-1) * self::EXPORT_SIZE;
+    		$limit2 = self::EXPORT_SIZE;
+    		$data = $model_pd->getPdLogList($condition,'','*','lg_id desc',"{$limit1},{$limit2}");
+    		$this->createmxExcel($data);
+    	}
+	}
+
+	/**
+	 * 导出预存款明细excel
+	 *
+	 * @param array $data
+	 */
+	private function createmxExcel($data = array()){
+		Language::read('export');
+		import('libraries.excel');
+		$excel_obj = new Excel();
+		$excel_data = array();
+		//设置样式
+		$excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1')));
+		//header
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_mx_member'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_mx_ctime'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_mx_av_money'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_mx_freeze_money'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_mx_system'));
+		$excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_mx_mshu'));
+		foreach ((array)$data as $k=>$v){
+			$tmp = array();
+			$tmp[] = array('data'=>$v['lg_member_name']);
+			$tmp[] = array('data'=>date('Y-m-d H:i:s',$v['lg_add_time']));
+			if (floatval($v['lg_av_amount']) == 0){
+			    $tmp[] = array('data'=>'');
+			} else {
+			    $tmp[] = array('format'=>'Number','data'=>ncPriceFormat($v['lg_av_amount']));
+			}
+			if (floatval($v['lg_freeze_amount']) == 0){
+			    $tmp[] = array('data'=>'');
+			} else {
+			    $tmp[] = array('format'=>'Number','data'=>ncPriceFormat($v['lg_freeze_amount']));
+			}
+			$tmp[] = array('data'=>$v['lg_admin_name']);
+			$tmp[] = array('data'=>$v['lg_desc']);
+			$excel_data[] = $tmp;
+		}
+		$excel_data = $excel_obj->charset($excel_data,CHARSET);
+		$excel_obj->addArray($excel_data);
+		$excel_obj->addWorksheet($excel_obj->charset(L('exp_mx_rz'),CHARSET));
+		$excel_obj->generateXML($excel_obj->charset(L('exp_mx_rz'),CHARSET).$_GET['curpage'].'-'.date('Y-m-d-H',time()));
+	}
+	
+	//zmr>v20
+	//显示添加余额页面
+	public function predeposit_addOp(){
+		
+		if (chksubmit()){
+			$this->add_money();
+		}
+		else
+		{
+		  $model_pd = Model('predeposit');
+		  //信息输出
+		  Tpl::output('show_page',$model_pd->showpage());
+		  Tpl::showpage('predeposit.add');
+		}
+	}
+	
+	
+	
+	
+	
+	
+	/**
+	 * 添加余额
+	 */
+	public function add_money(){
+		
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["member_id"], "require"=>"true", "message"=>Language::get('admin_points_member_error_again')),
+				array("input"=>$_POST["pointsnum"], "require"=>"true",'validator'=>'Compare','operator'=>' >= ','to'=>1,"message"=>Language::get('admin_points_points_min_error'))
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error,'','','error');
+			}
+			
+			$money = abs(floatval($_POST['pointsnum']));
+			$memo=trim($_POST['pointsdesc']);
+		    if ($money <= 0) {
+		       showMessage('输入的金额必需大于0','','html','error');
+		    }
+			//查询会员信息
+			$obj_member = Model('member');
+			$member_id = intval($_POST['member_id']);
+			$member_info = $obj_member->getMemberInfo(array('member_id'=>$member_id));
+
+			if (!is_array($member_info) || count($member_info)<=0){
+				showMessage(Language::get('admin_points_userrecord_error'),'index.php?act=predeposit&op=predeposit_add','','error');
+			}
+			$available_predeposit=floatval($member_info['available_predeposit']);
+			$freeze_predeposit=floatval($member_info['freeze_predeposit']);
+			if ($_POST['operatetype'] == 2 && $money > $available_predeposit){
+				showMessage(('预存款不足,会员当前预存款').$available_predeposit,'index.php?act=predeposit&op=predeposit_add','','error');
+			}
+			if ($_POST['operatetype'] == 3 && $money > $available_predeposit){
+				showMessage(('可冻结预存款不足,会员当前预存款').$available_predeposit,'index.php?act=predeposit&op=predeposit_add','','error');
+			}
+			if ($_POST['operatetype'] == 4 && $money > $freeze_predeposit){
+				showMessage(('可恢复冻结预存款不足,会员当前冻结预存款').$freeze_predeposit,'index.php?act=predeposit&op=predeposit_add','','error');
+			}
+			$model_pd = Model('predeposit');
+			$order_sn = $model_pd->makeSn();
+			$admininfo = $this->getAdminInfo();
+			$log_msg = "管理员【".$admininfo['admin_name']."】操作会员【".$member_info['member_name']."】预存款,金额为".$money.",编号为".$order_sn;
+			$admin_act="sys_add_money";
+			switch ($_POST['operatetype'])
+			{
+				case 1:
+					$admin_act="sys_add_money";
+					$log_msg = "管理员【".$admininfo['admin_name']."】操作会员【".$member_info['member_name']."】预存款【增加】,金额为".$money.",编号为".$order_sn;
+					break;  
+				case 2:
+					$admin_act="sys_del_money";
+					$log_msg = "管理员【".$admininfo['admin_name']."】操作会员【".$member_info['member_name']."】预存款【减少】,金额为".$money.",编号为".$order_sn;
+				    break;  
+				case 3:
+					$admin_act="sys_freeze_money";
+					$log_msg = "管理员【".$admininfo['admin_name']."】操作会员【".$member_info['member_name']."】预存款【冻结】,金额为".$money.",编号为".$order_sn;
+					break;  
+				case 4:
+					$admin_act="sys_unfreeze_money";
+					$log_msg = "管理员【".$admininfo['admin_name']."】操作会员【".$member_info['member_name']."】预存款【解冻】,金额为".$money.",编号为".$order_sn;
+					break;
+				default:
+					showMessage('操作失败','index.php?act=predeposit&op=pd_log_list');
+					break;  
+			}
+			try {
+				$model_pd->beginTransaction();
+				//扣除冻结的预存款
+				$data = array();
+				$data['member_id'] = $member_info['member_id'];
+				$data['member_name'] = $member_info['member_name'];
+				$data['amount'] = $money;
+				$data['order_sn'] = $order_sn;
+				$data['admin_name'] = $admininfo['name'];
+				$data['pdr_sn'] = $order_sn;
+				$data['lg_desc'] = $memo;
+				$model_pd->changePd($admin_act,$data);
+				$model_pd->commit();
+				$this->log($log_msg,1);
+				showMessage('操作成功','index.php?act=predeposit&op=pd_log_list');
+			} catch (Exception $e) {
+				$model_pd->rollback();
+				$this->log($log_msg,0);
+				showMessage($e->getMessage(),'index.php?act=predeposit&op=pd_log_list','html','error');
+			}
+		
+		
+	}
+	
+	
+	
+	
+	
+	
+	//取得会员信息
+	public function checkmemberOp(){
+		$name = trim($_GET['name']);
+		if (!$name){
+			echo ''; die;
+		}
+		/**
+		 * 转码
+		 */
+		if(strtoupper(CHARSET) == 'GBK'){
+			$name = Language::getGBK($name);
+		}
+		$obj_member = Model('member');
+		$member_info = $obj_member->getMemberInfo(array('member_name'=>$name));
+		if (is_array($member_info) && count($member_info)>0){
+			if(strtoupper(CHARSET) == 'GBK'){
+				$member_info['member_name'] = Language::getUTF8($member_info['member_name']);
+			}
+			echo json_encode(array('id'=>$member_info['member_id'],'name'=>$member_info['member_name'],'available_predeposit'=>$member_info['available_predeposit'],'freeze_predeposit'=>$member_info['freeze_predeposit']));
+		}else {
+			echo ''; die;
+		}
+	}
+	
+	
+}

+ 158 - 0
admin/control/promotion_booth.php

@@ -0,0 +1,158 @@
+<?php
+/**
+ * 限时折扣管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class promotion_boothControl extends SystemControl{
+    public function __construct(){
+        parent::__construct();
+        //检查审核功能是否开启
+        if (intval($_GET['promotion_allow']) !== 1 && intval(C('promotion_allow')) !== 1){
+            $url = array(
+                array(
+                    'url'=>'index.php?act=dashboard&op=welcome',
+                    'msg'=>L('close'),
+                ),
+                array(
+                    'url'=>'index.php?act=promotion_bundling&promotion_allow=1',
+                    'msg'=>L('open'),
+                ),
+            );
+            showMessage('商品促销功能尚未开启', $url, 'html', 'succ', 1, 6000);
+        }
+    }
+
+    /**
+     * 默认Op
+     */
+    public function indexOp() {
+        //自动开启优惠套装
+        if (intval($_GET['promotion_allow']) === 1){
+            $model_setting = Model('setting');
+            $update_array = array();
+            $update_array['promotion_allow'] = 1;
+            $model_setting->updateSetting($update_array);
+        }
+        $this->goods_listOp();
+    }
+
+    public function goods_listOp() {
+        /**
+         * 处理商品分类
+         */
+        $choose_gcid = ($t = intval($_REQUEST['choose_gcid']))>0?$t:0;
+        $gccache_arr = Model('goods_class')->getGoodsclassCache($choose_gcid,3);
+	    Tpl::output('gc_json',json_encode($gccache_arr['showclass']));
+		Tpl::output('gc_choose_json',json_encode($gccache_arr['choose_gcid']));
+
+        $model_booth = Model('p_booth');
+        $where = array();
+        if (intval($_GET['choose_gcid']) > 0) {
+            $where['gc_id'] = intval($_GET['choose_gcid']);
+        }
+        $goods_list = $model_booth->getBoothGoodsList($where, 'goods_id', 10);
+        if (!empty($goods_list)) {
+            $goodsid_array = array();
+            foreach ($goods_list as $val) {
+                $goodsid_array[] = $val['goods_id'];
+            }
+            $goods_list = Model('goods')->getGoodsList(array('goods_id' => array('in', $goodsid_array)));
+        }
+        Tpl::output('gc_list', Model('goods_class')->getGoodsClassForCacheModel());
+        Tpl::output('goods_list', $goods_list);
+        Tpl::output('show_page', $model_booth->showpage(2));
+
+        // 输出自营店铺IDS
+        Tpl::output('flippedOwnShopIds', array_flip(model('store')->getOwnShopIds()));
+        Tpl::showpage('promotion_booth_goods.list');
+    }
+
+    /**
+     * 套餐列表
+     */
+    public function booth_quota_listOp() {
+        $model_booth = Model('p_booth');
+        $where = array();
+        if ($_GET['store_name'] != '') {
+            $where['store_name'] = array('like', '%'.trim($_GET['store_name']).'%');
+        }
+        $booth_list = $model_booth->getBoothQuotaList($where, '*', 10);
+
+        // 状态数组
+        $state_array = array(0=>L('close') , 1=>L('open'));
+        Tpl::output('state_array', $state_array);
+
+        Tpl::output('booth_list', $booth_list);
+        Tpl::output('show_page', $model_booth->showpage(2));
+        Tpl::showpage('promotion_booth_quota.list');
+    }
+
+    /**
+     * 删除推荐商品
+     */
+    public function del_goodsOp() {
+        $where = array();
+        // 验证id是否正确
+        if (is_array($_POST['goods_id'])) {
+            foreach ($_POST['goods_id'] as $val) {
+                if (!is_numeric($val)) {
+                    showDialog(L('nc_common_del_fail'));
+                }
+            }
+            $where['goods_id'] = array('in', $_POST['goods_id']);
+        } elseif(intval($_GET['goods_id']) >= 0) {
+            $where['goods_id'] = intval($_GET['goods_id']);
+        } else {
+            showDialog(L('nc_common_del_fail'));
+        }
+
+        $rs = Model('p_booth')->delBoothGoods($where);
+        if ($rs) {
+            showDialog(L('nc_common_del_succ'), 'reload', 'succ');
+        } else {
+            showDialog(L('nc_common_del_fail'));
+        }
+    }
+
+    /**
+     * 设置
+     */
+    public function booth_settingOp() {
+        // 实例化模型
+        $model_setting = Model('setting');
+
+        if (chksubmit()){
+            // 验证
+            $obj_validate = new Validate();
+            $obj_validate->validateparam = array(
+                array("input"=>$_POST["promotion_booth_price"], "require"=>"true", 'validator'=>'Number', "message"=>'请填写展位价格'),
+                array("input"=>$_POST["promotion_booth_goods_sum"], "require"=>"true", 'validator'=>'Number', "message"=>'不能为空,且不小于1的整数'),
+            );
+            $error = $obj_validate->validate();
+            if ($error != ''){
+                showMessage($error);
+            }
+
+            $data['promotion_booth_price'] = intval($_POST['promotion_booth_price']);
+            $data['promotion_booth_goods_sum'] = intval($_POST['promotion_booth_goods_sum']);
+
+            $return = $model_setting->updateSetting($data);
+            if($return){
+                $this->log(L('nc_set').' 推荐展位');
+                showMessage(L('nc_common_op_succ'));
+            }else{
+                showMessage(L('nc_common_op_fail'));
+            }
+        }
+
+        // 查询setting列表
+        $setting = $model_setting->GetListSetting();
+        Tpl::output('setting',$setting);
+
+        Tpl::showpage('promotion_booth.setting');
+    }
+}

+ 172 - 0
admin/control/promotion_bundling.php

@@ -0,0 +1,172 @@
+<?php
+/**
+ * 优惠套装管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class promotion_bundlingControl extends SystemControl{
+
+    public function __construct(){
+        parent::__construct();
+
+        //读取语言包
+        Language::read('promotion_bundling');
+
+        //检查审核功能是否开启
+        if (intval($_GET['promotion_allow']) !== 1 && intval(C('promotion_allow')) !== 1){
+            $url = array(
+                array(
+                    'url'=>'index.php?act=dashboard&op=welcome',
+                    'msg'=>Language::get('close'),
+                ),
+                array(
+                    'url'=>'index.php?act=promotion_bundling&promotion_allow=1',
+                    'msg'=>Language::get('open'),
+                ),
+            );
+            showMessage(Language::get('promotion_unavailable'),$url,'html','succ',1,6000);
+        }
+    }
+
+    /**
+     * 默认Op
+     */
+    public function indexOp() {
+        //自动开启优惠套装
+        if (intval($_GET['promotion_allow']) === 1){
+            $model_setting = Model('setting');
+            $update_array = array();
+            $update_array['promotion_allow'] = 1;
+            $model_setting->updateSetting($update_array);
+        }
+        $this->bundling_listOp();
+    }
+
+    /**
+     * 套餐管理
+     */
+    public function bundling_quotaOp() {
+        $model_bundling = Model('p_bundling');
+
+        // 查询添加
+        $where = array();
+        if ($_GET['store_name'] != '') {
+            $where['store_name'] = array('like', '%'. trim($_GET['store_name']) .'%');
+        }
+        if (is_numeric($_GET['state'])) {
+            $where['bl_state'] = intval($_GET['state']);
+        }
+
+        $bundling_quota_list = $model_bundling->getBundlingQuotaList($where);
+        $page = $model_bundling->showpage(2);
+        Tpl::output('show_page', $page);
+
+        // 状态数组
+        $state_array = array(0=>Language::get('bundling_state_0') , 1=>Language::get('bundling_state_1'));
+        Tpl::output('state_array', $state_array);
+
+        Tpl::output('list',$bundling_quota_list);
+        Tpl::showpage('promotion_bundling_quota.list');
+    }
+
+
+    /**
+     * 活动管理
+     */
+    public function bundling_listOp() {
+    	$model_bundling = Model('p_bundling');
+
+    	// 查询添加
+    	$where = '';
+        if ($_GET['bundling_name'] != '') {
+            $where['bl_name'] = array('like', '%' . trim($_GET['bundling_name']) . '%');
+        }
+        if ($_GET['store_name'] != '') {
+            $where['store_name'] = array('like', '%'. trim($_GET['store_name']) .'%');
+        }
+        if (is_numeric($_GET['state'])) {
+            $where['bl_state'] = $_GET['state'];
+        }
+        $bundling_list = $model_bundling->getBundlingList($where);
+        $bundling_list = array_under_reset($bundling_list, 'bl_id');
+        Tpl::output('show_page',$model_bundling->showpage(2));
+        if (!empty($bundling_list)) {
+            $blid_array = array_keys($bundling_list);
+            $bgoods_array = $model_bundling->getBundlingGoodsList(array('bl_id' => array('in', $blid_array)), 'bl_id,goods_id,count(*) as count', 'bl_appoint desc', 'bl_id');
+            $bgoods_array = array_under_reset($bgoods_array, 'bl_id');
+            foreach ($bundling_list as $key => $val) {
+                $bundling_list[$key]['goods_id'] = $bgoods_array[$val['bl_id']]['goods_id'];
+                $bundling_list[$key]['count'] = $bgoods_array[$val['bl_id']]['count'];
+            }
+        }
+        Tpl::output('list', $bundling_list);
+
+        // 状态数组
+        $state_array = array(0=>Language::get('bundling_state_0') , 1=>Language::get('bundling_state_1'));
+        Tpl::output('state_array', $state_array);
+
+
+        // 输出自营店铺IDS
+        Tpl::output('flippedOwnShopIds', array_flip(model('store')->getOwnShopIds()));
+        Tpl::showpage('promotion_bundling.list');
+    }
+
+    /**
+     * 设置
+     */
+    public function bundling_settingOp() {
+    	// 实例化模型
+    	$model_setting = Model('setting');
+
+		if (chksubmit()){
+			// 验证
+			$obj_validate = new Validate();
+			$obj_validate->validateparam = array(
+				array("input"=>$_POST["promotion_bundling_price"], "require"=>"true", 'validator'=>'Number', "message"=>Language::get('bundling_price_error')),
+				array("input"=>$_POST["promotion_bundling_sum"], "require"=>"true", 'validator'=>'Number', "message"=>Language::get('bundling_sum_error')),
+				array("input"=>$_POST["promotion_bundling_goods_sum"], "require"=>"true", 'validator'=>'Number', "message"=>Language::get('bundling_goods_sum_error')),
+			);
+			$error = $obj_validate->validate();
+			if ($error != ''){
+				showMessage($error);
+			}
+
+			$data['promotion_bundling_price']		= intval($_POST['promotion_bundling_price']);
+			$data['promotion_bundling_sum']			= intval($_POST['promotion_bundling_sum']);
+			$data['promotion_bundling_goods_sum']	= intval($_POST['promotion_bundling_goods_sum']);
+
+			$return = $model_setting->updateSetting($data);
+			if($return){
+				$this->log(L('nc_set,nc_promotion_bundling'));
+				showMessage(L('nc_common_op_succ'));
+			}else{
+				showMessage(L('nc_common_op_fail'));
+			}
+		}
+
+		// 查询setting列表
+        $setting = $model_setting->GetListSetting();
+        Tpl::output('setting',$setting);
+
+        Tpl::showpage('promotion_bundling.setting');
+    }
+
+    /**
+     * 删除套餐活动
+     */
+    public function del_bundlingOp() {
+        $bl_id = intval($_GET['bl_id']);
+        if ($bl_id <= 0) {
+            showMessage(L('param_error'), '', 'html', 'error');
+        }
+        $rs = Model('p_bundling')->delBundlingForAdmin(array('bl_id' => $bl_id));
+        if ($rs) {
+            showMessage(L('nc_common_op_succ'));
+        } else {
+            showMessage(L('nc_common_op_fail'), '', 'html', 'error');
+        }
+    }
+}

+ 205 - 0
admin/control/promotion_mansong.php

@@ -0,0 +1,205 @@
+<?php
+/**
+ * 满即送管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class promotion_mansongControl extends SystemControl{
+
+    public function __construct(){
+        parent::__construct();
+
+        //读取语言包
+        Language::read('promotion_mansong');
+
+        //检查审核功能是否开启
+        if (intval($_GET['promotion_allow']) !== 1 && intval(C('promotion_allow')) !== 1){
+ 			$url = array(
+				array(
+					'url'=>'index.php?act=promotion_mansong&promotion_allow=1',
+					'msg'=>Language::get('open'),
+				),
+				array(
+					'url'=>'index.php?act=dashboard&op=welcome',
+					'msg'=>Language::get('close'),
+				),
+			);
+			showMessage(Language::get('promotion_unavailable'),$url,'html','succ',1,6000);
+        }
+    }
+
+    /**
+     * 默认Op
+     */
+    public function indexOp() {
+
+		//自动开启满就送
+		if (intval($_GET['promotion_allow']) === 1){
+			$model_setting = Model('setting');
+			$update_array = array();
+			$update_array['promotion_allow'] = 1;
+			$model_setting->updateSetting($update_array);
+		}
+
+        $this->mansong_listOp();
+    }
+
+    /**
+     * 活动列表
+     **/
+    public function mansong_listOp() {
+        $model_mansong = Model('p_mansong');
+
+        $param = array();
+        if(!empty($_GET['mansong_name'])) {
+            $param['mansong_name'] = array('like', '%'.$_GET['mansong_name'].'%');
+        }
+        if(!empty($_GET['store_name'])) {
+            $param['store_name'] = array('like', '%'.$_GET['store_name'].'%');
+        }
+        if(!empty($_GET['state'])) {
+            $param['state'] = $_GET['state'];
+        }
+        $mansong_list = $model_mansong->getMansongList($param, 10);
+        Tpl::output('list', $mansong_list);
+        Tpl::output('show_page', $model_mansong->showpage());
+        Tpl::output('mansong_state_array', $model_mansong->getMansongStateArray());
+
+        $this->show_menu('mansong_list');
+
+        // 输出自营店铺IDS
+        Tpl::output('flippedOwnShopIds', array_flip(model('store')->getOwnShopIds()));
+        Tpl::showpage('promotion_mansong.list');
+    }
+
+    /**
+     * 活动详细信息
+     * temp
+     **/
+    public function mansong_detailOp() {
+        $mansong_id = intval($_GET['mansong_id']);
+
+        $model_mansong = Model('p_mansong');
+        $model_mansong_rule = Model('p_mansong_rule');
+
+        $mansong_info = $model_mansong->getMansongInfoByID($mansong_id);
+        if(empty($mansong_info)) {
+            showMessage(L('param_error'));
+        }
+        Tpl::output('mansong_info', $mansong_info);
+
+        $param = array();
+        $param['mansong_id'] = $mansong_id;
+        $rule_list = $model_mansong_rule->getMansongRuleListByID($mansong_id);
+        Tpl::output('list',$rule_list);
+
+        $this->show_menu('mansong_detail');
+        Tpl::showpage('promotion_mansong.detail');
+    }
+
+    /**
+     * 满即送活动取消
+     **/
+    public function mansong_cancelOp() {
+        $mansong_id = intval($_POST['mansong_id']);
+        $model_mansong = Model('p_mansong');
+        $result = $model_mansong->cancelMansong(array('mansong_id' => $mansong_id));
+        if($result) {
+            $this->log('取消满即送活动,活动编号'.$mansong_id);
+            showMessage(Language::get('nc_common_op_succ'),'');
+        } else {
+            showMessage(Language::get('nc_common_op_fail'),'');
+        }
+    }
+
+    /**
+     * 满即送活动删除
+     **/
+    public function mansong_delOp() {
+        $mansong_id = intval($_POST['mansong_id']);
+        $model_mansong = Model('p_mansong');
+        $result = $model_mansong->delMansong(array('mansong_id' => $mansong_id));
+        if($result) {
+            $this->log('删除满即送活动,活动编号'.$mansong_id);
+            showMessage(Language::get('nc_common_op_succ'),'');
+        } else {
+            showMessage(Language::get('nc_common_op_fail'),'');
+        }
+    }
+
+
+    /**
+     * 套餐管理
+     **/
+    public function mansong_quotaOp() {
+        $model_mansong_quota = Model('p_mansong_quota');
+
+        $param = array();
+        if(!empty($_GET['store_name'])) {
+            $param['store_name'] = array('like', '%'.$_GET['store_name'].'%');
+        }
+        $list = $model_mansong_quota->getMansongQuotaList($param, 10, 'quota_id desc');
+        Tpl::output('list',$list);
+        Tpl::output('show_page',$model_mansong_quota->showpage());
+
+        $this->show_menu('mansong_quota');
+        Tpl::showpage('promotion_mansong_quota.list');
+
+    }
+
+    /**
+     * 设置
+     **/
+    public function mansong_settingOp() {
+
+        $model_setting = Model('setting');
+        $setting = $model_setting->GetListSetting();
+        Tpl::output('setting',$setting);
+
+        $this->show_menu('mansong_setting');
+        Tpl::showpage('promotion_mansong.setting');
+    }
+
+    public function mansong_setting_saveOp() {
+
+        $promotion_mansong_price = intval($_POST['promotion_mansong_price']);
+        if($promotion_mansong_price === 0) {
+            $promotion_mansong_price = 20;
+        }
+
+        $model_setting = Model('setting');
+        $update_array = array();
+        $update_array['promotion_mansong_price'] = $promotion_mansong_price;
+
+        $result = $model_setting->updateSetting($update_array);
+        if ($result === true){
+        	$this->log(L('nc_config,nc_promotion_mansong,mansong_price'));
+            showMessage(Language::get('setting_save_success'),'');
+        }else {
+            showMessage(Language::get('setting_save_fail'),'');
+        }
+    }
+
+    /**
+     * 页面内导航菜单
+     *
+     * @param string 	$menu_key	当前导航的menu_key
+     * @param array 	$array		附加菜单
+     * @return
+     */
+    private function show_menu($menu_key) {
+        $menu_array = array(
+            'mansong_list'=>array('menu_type'=>'link','menu_name'=>Language::get('mansong_list'),'menu_url'=>urlAdmin('promotion_mansong', 'mansong_list')),
+            'mansong_quota'=>array('menu_type'=>'link','menu_name'=>Language::get('mansong_quota'),'menu_url'=>urlAdmin('promotion_mansong', 'mansong_quota')),
+            'mansong_detail'=>array('menu_type'=>'link','menu_name'=>Language::get('mansong_detail'),'menu_url'=>urlAdmin('promotion_mansong', 'mansong_detail')),
+            'mansong_setting'=>array('menu_type'=>'link','menu_name'=>Language::get('mansong_setting'),'menu_url'=>urlAdmin('promotion_mansong', 'mansong_setting')),
+        );
+        if($menu_key != 'mansong_detail') unset($menu_array['mansong_detail']);
+        $menu_array[$menu_key]['menu_type'] = 'text';
+        Tpl::output('menu',$menu_array);
+    }
+
+}

+ 242 - 0
admin/control/promotion_xianshi.php

@@ -0,0 +1,242 @@
+<?php
+/**
+ * 限时折扣管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class promotion_xianshiControl extends SystemControl{
+
+    public function __construct(){
+        parent::__construct();
+
+        //读取语言包
+        Language::read('promotion_xianshi');
+
+        //检查审核功能是否开启
+        if (intval($_GET['promotion_allow']) !== 1 && intval(C('promotion_allow')) !== 1){
+ 			$url = array(
+				array(
+					'url'=>'index.php?act=promotion_xianshi&promotion_allow=1',
+					'msg'=>Language::get('open'),
+				),
+				array(
+					'url'=>'index.php?act=dashboard&op=welcome',
+					'msg'=>Language::get('close'),
+				),
+			);
+			showMessage(Language::get('promotion_unavailable'),$url,'html','succ',1,6000);
+        }
+    }
+
+    /**
+     * 默认Op
+     */
+    public function indexOp() {
+
+		//自动开启限时折扣
+		if (intval($_GET['promotion_allow']) === 1){
+			$model_setting = Model('setting');
+			$update_array = array();
+			$update_array['promotion_allow'] = 1;
+			$model_setting->updateSetting($update_array);
+		}
+
+        $this->xianshi_listOp();
+
+    }
+
+    /**
+     * 活动列表
+     **/
+    public function xianshi_listOp() {
+        $model_xianshi = Model('p_xianshi');
+        $condition = array();
+        if(!empty($_GET['xianshi_name'])) {
+            $condition['xianshi_name'] = array('like', '%'.$_GET['xianshi_name'].'%');
+        }
+        if(!empty($_GET['store_name'])) {
+            $condition['store_name'] = array('like', '%'.$_GET['store_name'].'%');
+        }
+        if(!empty($_GET['state'])) {
+            $condition['state'] = intval($_GET['state']);
+        }
+        $xianshi_list = $model_xianshi->getXianshiList($condition, 10, 'state desc, end_time desc');
+        Tpl::output('list',$xianshi_list);
+        Tpl::output('show_page',$model_xianshi->showpage());
+        Tpl::output('xianshi_state_array',$model_xianshi->getXianshiStateArray());
+
+        $this->show_menu('xianshi_list');
+
+        // 输出自营店铺IDS
+        Tpl::output('flippedOwnShopIds', array_flip(model('store')->getOwnShopIds()));
+        Tpl::showpage('promotion_xianshi.list');
+    }
+
+    /**
+     * 限时折扣活动取消
+     **/
+    public function xianshi_cancelOp() {
+        $xianshi_id = intval($_POST['xianshi_id']);
+        $model_xianshi = Model('p_xianshi');
+        $result = $model_xianshi->cancelXianshi(array('xianshi_id' => $xianshi_id));
+        if($result) {
+            $this->log('取消限时折扣活动,活动编号'.$xianshi_id);
+            showMessage(Language::get('nc_common_op_succ'),'');
+        } else {
+            showMessage(Language::get('nc_common_op_fail'),'');
+        }
+    }
+
+    /**
+     * 限时折扣活动删除
+     **/
+    public function xianshi_delOp() {
+        $xianshi_id = intval($_POST['xianshi_id']);
+        $model_xianshi = Model('p_xianshi');
+        $result = $model_xianshi->delXianshi(array('xianshi_id' => $xianshi_id));
+        if($result) {
+            $this->log('删除限时折扣活动,活动编号'.$xianshi_id);
+            showMessage(Language::get('nc_common_op_succ'),'');
+        } else {
+            showMessage(Language::get('nc_common_op_fail'),'');
+        }
+    }
+
+    /**
+     * 活动详细信息
+     **/
+    public function xianshi_detailOp() {
+        $xianshi_id = intval($_GET['xianshi_id']);
+
+        $model_xianshi = Model('p_xianshi');
+        $model_xianshi_goods = Model('p_xianshi_goods');
+
+        $xianshi_info = $model_xianshi->getXianshiInfoByID($xianshi_id);
+        if(empty($xianshi_info)) {
+            showMessage(L('param_error'));
+        }
+        Tpl::output('xianshi_info',$xianshi_info);
+
+        //获取限时折扣商品列表
+        $condition = array();
+        $condition['xianshi_id'] = $xianshi_id;
+        $xianshi_goods_list = $model_xianshi_goods->getXianshiGoodsExtendList($condition);
+        Tpl::output('list',$xianshi_goods_list);
+
+        $this->show_menu('xianshi_detail');
+        Tpl::showpage('promotion_xianshi.detail');
+    }
+
+    /**
+     * 套餐管理
+     **/
+    public function xianshi_quotaOp() {
+        $model_xianshi_quota = Model('p_xianshi_quota');
+
+        $condition = array();
+        $condition['store_name'] = array('like', '%'.$_GET['store_name'].'%');
+        $list = $model_xianshi_quota->getXianshiQuotaList($condition, 10, 'end_time desc');
+        Tpl::output('list',$list);
+        Tpl::output('show_page',$model_xianshi_quota->showpage());
+
+        $this->show_menu('xianshi_quota');
+        Tpl::showpage('promotion_xianshi_quota.list');
+
+    }
+
+    /**
+     * 设置
+     **/
+    public function xianshi_settingOp() {
+
+        $model_setting = Model('setting');
+        $setting = $model_setting->GetListSetting();
+        Tpl::output('setting',$setting);
+
+        $this->show_menu('xianshi_setting');
+        Tpl::showpage('promotion_xianshi.setting');
+    }
+
+    public function xianshi_setting_saveOp() {
+
+        $promotion_xianshi_price = intval($_POST['promotion_xianshi_price']);
+        if($promotion_xianshi_price === 0) {
+            $promotion_xianshi_price = 20;
+        }
+
+        $model_setting = Model('setting');
+        $update_array = array();
+        $update_array['promotion_xianshi_price'] = $promotion_xianshi_price;
+
+        $result = $model_setting->updateSetting($update_array);
+        if ($result){
+            $this->log('修改限时折扣价格为'.$promotion_xianshi_price.'元');
+            showMessage(Language::get('setting_save_success'),'');
+        }else {
+            showMessage(Language::get('setting_save_fail'),'');
+        }
+    }
+
+    /**
+     * ajax修改抢购信息
+     */
+    public function ajaxOp(){
+        $result = true;
+        $update_array = array();
+        $where_array = array();
+
+        switch ($_GET['branch']){
+         case 'recommend':
+            $model= Model('p_xianshi_goods');
+            $update_array['xianshi_recommend'] = $_GET['value'];
+            $where_array['xianshi_goods_id'] = $_GET['id'];
+            $result = $model->editXianshiGoods($update_array, $where_array);
+            break;
+        }
+
+        if($result) {
+            echo 'true';exit;
+        } else {
+            echo 'false';exit;
+        }
+
+    }
+
+
+    /*
+     * 发送消息
+     */
+    private function send_message($member_id,$member_name,$message) {
+        $param = array();
+        $param['from_member_id'] = 0;
+        $param['member_id'] = $member_id;
+        $param['to_member_name'] = $member_name;
+        $param['message_type'] = '1';//表示为系统消息
+        $param['msg_content'] = $message;
+        $model_message = Model('message');
+        return $model_message->saveMessage($param);
+    }
+
+    /**
+     * 页面内导航菜单
+     *
+     * @param string 	$menu_key	当前导航的menu_key
+     * @param array 	$array		附加菜单
+     * @return
+     */
+    private function show_menu($menu_key) {
+        $menu_array = array(
+            'xianshi_list'=>array('menu_type'=>'link','menu_name'=>Language::get('xianshi_list'),'menu_url'=>'index.php?act=promotion_xianshi&op=xianshi_list'),
+            'xianshi_detail'=>array('menu_type'=>'link','menu_name'=>Language::get('xianshi_detail'),'menu_url'=>'index.php?act=promotion_xianshi&op=xianshi_detail'),
+            'xianshi_quota'=>array('menu_type'=>'link','menu_name'=>Language::get('xianshi_quota'),'menu_url'=>'index.php?act=promotion_xianshi&op=xianshi_quota'),
+            'xianshi_setting'=>array('menu_type'=>'link','menu_name'=>Language::get('xianshi_setting'),'menu_url'=>'index.php?act=promotion_xianshi&op=xianshi_setting'),
+        );
+        if($menu_key != 'xianshi_detail') unset($menu_array['xianshi_detail']);
+        $menu_array[$menu_key]['menu_type'] = 'text';
+        Tpl::output('menu',$menu_array);
+    }
+
+}

+ 321 - 0
admin/control/rec_position.php

@@ -0,0 +1,321 @@
+<?php
+/**
+ * 推荐位
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class rec_positionControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('rec_position');
+	}
+
+	/**
+	 * 推荐位列表
+	 *
+	 */
+	public function rec_listOp(){
+		$model = model('rec_position');
+		//删除推荐位
+		if (chksubmit()){
+			$condition = array('rec_id'=>array('in',$_POST['rec_id']));
+			$list = $model->where($condition)->select();
+			if (!$list)	showMessage(Language::get('param_error'));
+
+			$result = $model->where($condition)->delete();
+			if ($result){
+				foreach ($list as $info){
+					$info['content'] = unserialize($info['content']);
+					if ($info['pic_type'] == 1 && is_array($info['content']['body'])){
+						foreach ($info['content']['body'] as $v){
+							$file = BASE_UPLOAD_PATH.'/'.$v['title'];
+							if (is_file($file)) @unlink($file);
+						}
+					}
+					dkcache("rec_position/{$info['rec_id']}");
+				}
+				$this->log(L('nc_del,rec_position').'['.implode(',',$_POST['rec_id']).']',1);
+			}else{
+				showMessage(Language::get('nc_common_del_fail'));
+			}
+		}
+		$condition = array();
+		if ($_GET['pic_type'] == '0'){
+			$condition['pic_type'] = 0;
+		}elseif($_GET['pic_type'] == 1){
+			$condition['pic_type'] = array('in','1,2');
+		}
+		if (!empty($_GET['keywords'])){
+			$condition['title'] = array('like','%'.$_GET['keywords'].'%');
+		}
+		$list = $model->where($condition)->order('rec_id desc')->page(10)->select();
+		foreach ((array)$list as $k=>$v){
+			$list[$k]['content'] = unserialize($v['content']);
+			if ($v['pic_type'] == 1){
+				$list[$k]['content']['body'][0]['title'] = UPLOAD_SITE_URL.'/'.$list[$k]['content']['body'][0]['title'];
+			}
+		}
+		Tpl::output('list',$list);
+		Tpl::output('page',$model->showpage());
+		Tpl::showpage('rec_position.index');
+	}
+
+	/**
+	 * 新增推荐位
+	 *
+	 */
+	public function rec_addOp(){
+		Tpl::showpage('rec_position.add');
+	}
+
+	/**
+	 * 编辑推荐位
+	 *
+	 */
+	public function rec_editOp(){
+		$model = Model('rec_position');
+		$info = $model->where(array('rec_id'=>intval($_GET['rec_id'])))->find();
+		if (!$info)	showMessage(Language::get('no_record'));
+		$info['content'] = unserialize($info['content']);
+		foreach((array)$info['content']['body'] as $k=>$v){
+			if ($info['pic_type'] == 1){
+				$info['content']['body'][$k]['title'] = UPLOAD_SITE_URL.'/'.$v['title'];
+			}
+		}
+		Tpl::output('info',$info);
+		Tpl::showpage('rec_position.edit');
+	}
+
+	/**
+	 * 删除
+	 *
+	 */
+	public function rec_delOp(){
+		$model = Model('rec_position');
+		$_GET['rec_id'] = intval($_GET['rec_id']);
+		$info = $model->where(array('rec_id'=>$_GET['rec_id']))->find();
+		if (!$info)	showMessage(Language::get('no_record'));
+
+		$info['content'] = unserialize($info['content']);
+		$result = $model->where(array('rec_id'=>$_GET['rec_id']))->delete();
+		if ($result){
+			if ($info['pic_type'] == 1 && is_array($info['content']['body'])){
+				foreach ($info['content']['body'] as $v){
+					@unlink(BASE_UPLOAD_PATH.'/'.$v['title']);
+				}
+			}
+			dkcache("rec_position/{$info['rec_id']}");
+			$this->log(L('nc_del,rec_position').'[ID:'.$_GET['rec_id'].']',1);
+			showMessage(Language::get('nc_common_save_succ'));
+		}else{
+			showMessage(Language::get('nc_common_save_fail'));
+		}
+	}
+
+	/**
+	 * 添加保存推荐位
+	 *
+	 */
+	public function rec_saveOp(){
+		$array = array();
+		$data = array();
+		$pattern = "/^http:\/\/[A-Za-z0-9]+[A-Za-z0-9.]+\.[A-Za-z0-9]+/i";
+		//文字类型
+		if ($_POST['rec_type'] == 1){
+			if (is_array($_POST['txt']) && is_array($_POST['urltxt'])){
+				foreach ($_POST['txt'] as $k=>$v){
+					if (trim($v) == '') continue;
+					$c = count($array['body']);
+					$array['body'][$c]['title'] = $v;
+					$array['body'][$c]['url'] = preg_match($pattern,$_POST['urltxt'][$k]) ? $_POST['urltxt'][$k] : '';
+					$data['pic_type'] = 0;
+				}
+			}else{
+				showMessage(Language::get('param_error'));
+			}
+		}elseif ($_POST['rec_type'] == 2 && $_POST['pic_type'] == 1){
+			//本地图片上传
+			if (is_array($_FILES['pic']['tmp_name'])){
+				foreach($_FILES['pic']['tmp_name'] as $k=>$v){
+					if (empty($v)) continue;
+					$ext = strtolower(pathinfo($_FILES['pic']['name'][$k], PATHINFO_EXTENSION));
+					if (in_array($ext,array('jpg','jpeg','gif','png'))){
+						$filename = substr(md5(microtime(true)),0,16).rand(100,999).$k.'.'.$ext;
+						if ($_FILES['pic']['size'][$k]<1024*1024){
+							move_uploaded_file($v,BASE_UPLOAD_PATH.'/'.ATTACH_REC_POSITION.'/'.$filename);
+						}
+						if ($_FILES['pic']['error'][$k] != 0) showMessage(Language::get('nc_common_op_fail'));
+						$c = count($array['body']);
+						$array['body'][$c]['title'] = ATTACH_REC_POSITION.'/'.$filename;
+						$array['body'][$c]['url'] 	= preg_match($pattern,$_POST['urlup'][$k]) ? $_POST['urlup'][$k] : '';
+						$array['width']				= is_numeric($_POST['rwidth']) ? $_POST['rwidth'] : '';
+						$array['height']			= is_numeric($_POST['rheight']) ? $_POST['rheight'] : '';
+						$data['pic_type']			= 1;
+					}
+					if (empty($array)) showMessage(Language::get('param_error'));
+				}
+			}
+		}elseif ($_POST['rec_type'] == 2 && $_POST['pic_type'] == 2){
+
+			//远程图片
+			if (is_array($_POST['pic'])){
+				foreach ($_POST['pic'] as $k=>$v){
+					if (!preg_match("/^(http\:\/\/)/i",$v)) continue;
+					$ext = strtolower(pathinfo($v, PATHINFO_EXTENSION));
+					if (in_array($ext,array('jpg','jpeg','gif','png','bmp'))){
+						$c = count($array['body']);
+						$array['body'][$c]['title'] = $v;
+						$array['body'][$c]['url'] 	= preg_match($pattern,$_POST['urlremote'][$k]) ? $_POST['urlremote'][$k] : '';
+						$array['width']				= is_numeric($_POST['rwidth']) ? $_POST['rwidth'] : '';
+						$array['height']			= is_numeric($_POST['rheight']) ? $_POST['rheight'] : '';
+						$data['pic_type']			= 2;
+					}
+					if (empty($array)) showMessage(Language::get('param_error'));
+				}
+			}
+		}else{
+			showMessage(Language::get('param_error'));
+		}
+		$array['target'] 	= intval($_POST['rtarget']);
+		$data['title'] 		= $_POST['rtitle'];
+		$data['content'] 	= serialize($array);
+		$model = Model('rec_position');
+		$model->insert($data);
+		$this->log(L('nc_add,rec_position').'['.$_POST['rtitle'].']',1);
+		showMessage(Language::get('nc_common_save_succ'),'index.php?act=rec_position&op=rec_list');
+	}
+
+	/**
+	 * 编辑保存推荐位
+	 *
+	 */
+	public function rec_edit_saveOp(){
+		if (!is_numeric($_POST['rec_id'])) showMessage(Language::get('param_error'));
+		$array = array();
+		$data = array();
+		$pattern = "/^http:\/\/[A-Za-z0-9]+[A-Za-z0-9.]+\.[A-Za-z0-9]+/i";
+		//文字类型
+		if ($_POST['rec_type'] == 1){
+			if (is_array($_POST['txt']) && is_array($_POST['urltxt'])){
+				foreach ($_POST['txt'] as $k=>$v){
+					if (trim($v) == '') continue;
+					$c = count($array['body']);
+					$array['body'][$c]['title'] = $v;
+					$array['body'][$c]['url'] = preg_match($pattern,$_POST['urltxt'][$k]) ? $_POST['urltxt'][$k] : '';
+					$data['pic_type'] = 0;
+				}
+			}else{
+				showMessage(Language::get('param_error'));
+			}
+		}elseif ($_POST['rec_type'] == 2 && $_POST['pic_type'] == 1){
+			//本地图片上传
+			if (is_array($_FILES['pic']['tmp_name'])){
+				foreach($_FILES['pic']['tmp_name'] as $k=>$v){
+					//未上传新图的,还用老图
+					if (empty($v) && !empty($_POST['opic'][$k])){
+						$array['body'][$k]['title'] = str_ireplace(UPLOAD_SITE_URL.'/','',$_POST['opic'][$k]);
+						$array['body'][$k]['url'] 	= preg_match($pattern,$_POST['urlup'][$k]) ? $_POST['urlup'][$k] : '';
+					}
+					$ext = strtolower(pathinfo($_FILES['pic']['name'][$k], PATHINFO_EXTENSION));
+					if (in_array($ext,array('jpg','jpeg','gif','png','bmp'))){
+						$filename = substr(md5(microtime(true)),0,16).rand(100,999).$k.'.'.$ext;
+						if ($_FILES['pic']['size'][$k]<1024*1024){
+							move_uploaded_file($v,BASE_UPLOAD_PATH.'/'.ATTACH_REC_POSITION.'/'.$filename);
+						}
+						if ($_FILES['pic']['error'][$k] != 0) showMessage(Language::get('nc_common_save_fail'));
+
+						//删除老图
+						$old_file = str_ireplace(array(UPLOAD_SITE_URL,'..'),array(BASE_UPLOAD_PATH,''),$_POST['opic'][$k]);
+						if (is_file($old_file)) @unlink($old_file);
+
+						$array['body'][$k]['title'] = ATTACH_REC_POSITION.'/'.$filename;
+						$array['body'][$k]['url'] 	= preg_match($pattern,$_POST['urlup'][$k]) ? $_POST['urlup'][$k] : '';
+						$data['pic_type']			= 1;
+					}
+				}
+
+				//最后删除数据库里有但没有POST过来的图片
+				$model = Model('rec_position');
+				$oinfo = $model->where(array('rec_id'=>$_POST['rec_id']))->find();
+				$oinfo = unserialize($oinfo['content']);
+				foreach ($oinfo['body'] as $k=>$v) {
+					if (!in_array(UPLOAD_SITE_URL.'/'.$v['title'],(array)$_POST['opic'])){
+						if (is_file(BASE_UPLOAD_PATH.'/'.$v['title'])){
+							@unlink(BASE_UPLOAD_PATH.'/'.$v['title']);
+						}
+					}
+				}
+				unset($oinfo);
+			}
+			//如果是上传图片,则取原图片地址
+			if (empty($array)){
+				if (is_array($_POST['opic'])){
+					foreach ($_POST['opic'] as $k=>$v){
+						$array['body'][$k]['title'] = $v;
+						$array['body'][$k]['url'] 	= preg_match($pattern,$_POST['urlup'][$k]) ? $_POST['urlup'][$k] : '';
+					}
+				}
+			}
+		}elseif ($_POST['rec_type'] == 2 && $_POST['pic_type'] == 2){
+
+			//远程图片
+			if (is_array($_POST['pic'])){
+				foreach ($_POST['pic'] as $k=>$v){
+					if (!preg_match("/^(http\:\/\/)/i",$v)) continue;
+					$ext = strtolower(pathinfo($v, PATHINFO_EXTENSION));
+					if (in_array($ext,array('jpg','jpeg','gif','png','bmp'))){
+						$c = count($array['body']);
+						$array['body'][$c]['title'] = $v;
+						$array['body'][$c]['url'] 	= preg_match($pattern,$_POST['urlremote'][$k]) ? $_POST['urlremote'][$k] : '';
+						$data['pic_type']			= 2;
+					}
+				}
+			}
+		}else{
+			showMessage(Language::get('param_error'));
+		}
+
+		if ($_POST['rec_type'] != 1){
+			$array['width']				= is_numeric($_POST['rwidth']) ? $_POST['rwidth'] : '';
+			$array['height']			= is_numeric($_POST['rheight']) ? $_POST['rheight'] : '';
+		}
+
+		$array['target'] 	= intval($_POST['rtarget']);
+		$data['title'] 		= $_POST['rtitle'];
+		$data['content'] 	= serialize($array);
+		$model = Model('rec_position');
+
+		//如果是把本地上传类型改为文字或远程,则先取出原来上传的图片路径,待update成功后,再删除这些图片
+		if ($_POST['opic_type'] == 1 && ($_POST['pic_type'] == 2 || $_POST['rec_type'] == 1)){
+			$oinfo = $model->where(array('rec_id'=>$_POST['rec_id']))->find();
+			$oinfo = unserialize($oinfo['content']);
+		}
+		$result = $model->where(array('rec_id'=>$_POST['rec_id']))->update($data);
+		if ($result){
+			if ($oinfo){
+				foreach ($oinfo['body'] as $v){
+					if (is_file(BASE_UPLOAD_PATH.'/'.$v['title'])){
+						@unlink(BASE_UPLOAD_PATH.'/'.$v['title']);
+					}
+				}
+			}
+
+			dkcache("rec_position/{$_POST['rec_id']}");
+			showMessage(Language::get('nc_common_save_succ'),'index.php?act=rec_position&op=rec_list');
+		}else{
+			showMessage(Language::get('nc_common_save_fail'),'index.php?act=rec_position&op=rec_list');
+		}
+	}
+
+	public function rec_codeOp(){
+		Tpl::showpage('rec_position.code','null_layout');
+	}
+
+	public function rec_viewOp(){
+		@header("Content-type: text/html; charset=".CHARSET);
+		echo rec(intval($_GET['rec_id']));
+	}
+}

+ 309 - 0
admin/control/rechargecard.php

@@ -0,0 +1,309 @@
+<?php
+/**
+ * 平台充值卡
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+
+class rechargecardControl extends SystemControl
+{
+    const EXPORT_SIZE = 100;
+
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    public function indexOp()
+    {
+        $model = Model('rechargecard');
+        $condition = array();
+
+        if (isset($_GET['form_submit'])) {
+            $sn = trim((string) $_GET['sn']);
+            $batchflag = trim((string) $_GET['batchflag']);
+            $state = trim((string) $_GET['state']);
+
+            if (strlen($sn) > 0) {
+                $condition['sn'] = array('like', "%{$sn}%");
+                Tpl::output('sn', $sn);
+            }
+
+            if (strlen($batchflag) > 0) {
+                $condition['batchflag'] = array('like', "%{$batchflag}%");
+                Tpl::output('batchflag', $batchflag);
+            }
+
+            if ($state === '0' || $state === '1') {
+                $condition['state'] = $state;
+                Tpl::output('state', $state);
+            }
+
+            if ($condition) {
+                Tpl::output('form_submit', 'ok');
+            }
+        }
+
+        $cardList = $model->getRechargeCardList($condition, 20);
+
+        Tpl::output('card_list', $cardList);
+        Tpl::output('show_page', $model->showpage());
+
+        Tpl::showpage('rechargecard.index');
+    }
+
+    public function add_cardOp()
+    {
+        if (!chksubmit()) {
+            Tpl::showpage('rechargecard.add_card');
+            return;
+        }
+
+        $denomination = (float) $_POST['denomination'];
+        if ($denomination < 0.01) {
+            showMessage('面额不能小于0.01', '', 'html', 'error');
+            return;
+        }
+        if ($denomination > 1000) {
+            showMessage('面额不能大于1000', '', 'html', 'error');
+            return;
+        }
+
+        $snKeys = array();
+
+        switch ($_POST['type']) {
+        case '0':
+            $total = (int) $_POST['total'];
+            if ($total < 1 || $total > 9999) {
+                showMessage('总数只能是1~9999之间的整数', '', 'html', 'error');
+                exit;
+            }
+            $prefix = (string) $_POST['prefix'];
+            if (!preg_match('/^[0-9a-zA-Z]{0,16}$/', $prefix)) {
+                showMessage('前缀只能是16字之内字母数字的组合', '', 'html', 'error');
+                exit;
+            }
+            while (count($snKeys) < $total) {
+                $snKeys[$prefix . md5(uniqid(mt_rand(), true))] = null;
+            }
+            break;
+
+        case '1':
+            $f = $_FILES['_textfile'];
+            if (!$f || $f['error'] != 0) {
+                showMessage('文件上传失败', '', 'html', 'error');
+                exit;
+            }
+            if (!is_uploaded_file($f['tmp_name'])) {
+                showMessage('未找到已上传的文件', '', 'html', 'error');
+                exit;
+            }
+            foreach (file($f['tmp_name']) as $sn) {
+                $sn = trim($sn);
+                if (preg_match('/^[0-9a-zA-Z]{1,50}$/', $sn))
+                    $snKeys[$sn] = null;
+            }
+            break;
+
+        case '2':
+            foreach (explode("\n", (string) $_POST['manual']) as $sn) {
+                $sn = trim($sn);
+                if (preg_match('/^[0-9a-zA-Z]{1,50}$/', $sn))
+                    $snKeys[$sn] = null;
+            }
+            break;
+
+        default:
+            showMessage('参数错误', '', 'html', 'error');
+            exit;
+        }
+
+        $totalKeys = count($snKeys);
+        if ($totalKeys < 1 || $totalKeys > 9999) {
+            showMessage('只能在一次操作中增加1~9999个充值卡号', '', 'html', 'error');
+            exit;
+        }
+
+        if (empty($snKeys)) {
+            showMessage('请输入至少一个合法的卡号', '', 'html', 'error');
+            exit;
+        }
+
+        $snOccupied = 0;
+        $model = Model('rechargecard');
+
+        // chunk size = 50
+        foreach (array_chunk(array_keys($snKeys), 50) as $snValues) {
+            foreach ($model->getOccupiedRechargeCardSNsBySNs($snValues) as $sn) {
+                $snOccupied++;
+                unset($snKeys[$sn]);
+            }
+        }
+
+        if (empty($snKeys)) {
+            showMessage('操作失败,所有新增的卡号都与已有的卡号冲突', '', 'html', 'error');
+            exit;
+        }
+
+        $batchflag = $_POST['batchflag'];
+        $adminName = $this->admin_info['name'];
+        $ts = time();
+
+        $snToInsert = array();
+        foreach (array_keys($snKeys) as $sn) {
+            $snToInsert[] = array(
+                'sn' => $sn,
+                'denomination' => $denomination,
+                'batchflag' => $batchflag,
+                'admin_name' => $adminName,
+                'tscreated' => $ts,
+            );
+        }
+
+        if (!$model->insertAll($snToInsert)) {
+            showMessage('操作失败', '', 'html', 'error');
+            exit;
+        }
+
+        $countInsert = count($snToInsert);
+        $this->log("新增{$countInsert}张充值卡(面额¥{$denomination},批次标识“{$batchflag}”)");
+
+        $msg = '操作成功';
+        if ($snOccupied > 0)
+            $msg .= "有 {$snOccupied} 个卡号与已有的未使用卡号冲突";
+
+        showMessage($msg, urlAdmin('rechargecard', 'index'));
+    }
+
+    public function del_cardOp()
+    {
+        if (empty($_GET['id'])) {
+            showMessage('参数错误', '', 'html', 'error');
+        }
+
+        Model('rechargecard')->delRechargeCardById($_GET['id']);
+
+        $this->log("删除充值卡(#ID: {$_GET['id']})");
+
+        showMessage('操作成功', getReferer());
+    }
+
+    public function del_card_batchOp()
+    {
+        if (empty($_POST['ids']) || !is_array($_POST['ids'])) {
+            showMessage('参数错误', '', 'html', 'error');
+        }
+
+        Model('rechargecard')->delRechargeCardById($_POST['ids']);
+
+        $count = count($_POST['ids']);
+        $this->log("删除{$count}张充值卡");
+
+        showMessage('操作成功', getReferer());
+    }
+
+    /**
+     * 导出
+     */
+    public function export_step1Op()
+    {
+        $model = Model('rechargecard');
+        $condition = array();
+
+        if (isset($_GET['form_submit'])) {
+            $sn = trim((string) $_GET['sn']);
+            $batchflag = trim((string) $_GET['batchflag']);
+            $state = trim((string) $_GET['state']);
+
+            if (strlen($sn) > 0) {
+                $condition['sn'] = array('like', "%{$sn}%");
+                Tpl::output('sn', $sn);
+            }
+
+            if (strlen($batchflag) > 0) {
+                $condition['batchflag'] = array('like', "%{$batchflag}%");
+                Tpl::output('batchflag', $batchflag);
+            }
+
+            if ($state === '0' || $state === '1') {
+                $condition['state'] = $state;
+                Tpl::output('state', $state);
+            }
+
+            if ($condition) {
+                Tpl::output('form_submit', 'ok');
+            }
+        }
+
+        if (!is_numeric($_GET['curpage'])){
+            $count = $model->getRechargeCardCount($condition);
+            $array = array();
+            if ($count > self::EXPORT_SIZE ){	//显示下载链接
+                $page = ceil($count/self::EXPORT_SIZE);
+                for ($i=1;$i<=$page;$i++){
+                    $limit1 = ($i-1)*self::EXPORT_SIZE + 1;
+                    $limit2 = $i*self::EXPORT_SIZE > $count ? $count : $i*self::EXPORT_SIZE;
+                    $array[$i] = $limit1.' ~ '.$limit2 ;
+                }
+                Tpl::output('list',$array);
+                Tpl::output('murl','index.php?act=rechargecard&op=index');
+                Tpl::showpage('export.excel');
+                return;
+
+            }else{	//如果数量小,直接下载
+                $data = $model->getRechargeCardList($condition, self::EXPORT_SIZE);
+
+                $this->createExcel($data);
+            }
+        }else{	//下载
+            $limit1 = ($_GET['curpage']-1) * self::EXPORT_SIZE;
+            $limit2 = self::EXPORT_SIZE;
+
+            $data = $model->getRechargeCardList($condition, 20, "{$limit1},{$limit2}");
+
+            $this->createExcel($data);
+        }
+    }
+
+    /**
+     * 生成excel
+     *
+     * @param array $data
+     */
+    private function createExcel($data = array()){
+        Language::read('export');
+        import('libraries.excel');
+        $excel_obj = new Excel();
+        $excel_data = array();
+        //设置样式
+        $excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1')));
+        //header
+        $excel_data[0][] = array('styleid'=>'s_title','data'=>'充值卡卡号');
+        $excel_data[0][] = array('styleid'=>'s_title','data'=>'批次标识');
+        $excel_data[0][] = array('styleid'=>'s_title','data'=>'面额(元)');
+        $excel_data[0][] = array('styleid'=>'s_title','data'=>'发布管理员');
+        $excel_data[0][] = array('styleid'=>'s_title','data'=>'发布时间');
+        $excel_data[0][] = array('styleid'=>'s_title','data'=>'领取人');
+
+        //data
+        foreach ((array)$data as $k=>$v){
+            $tmp = array();
+            $tmp[] = array('data'=>"\t".$v['sn']);
+            $tmp[] = array('data'=>"\t".$v['batchflag']);
+            $tmp[] = array('data'=>"\t".$v['denomination']);
+            $tmp[] = array('data'=>"\t".$v['admin_name']);
+            $tmp[] = array('data'=>"\t".date('Y-m-d H:i:s', $v['tscreated']));
+            if ($v['state'] == 1 && $v['member_id'] > 0 && $v['tsused'] > 0) {
+                $tmp[] = array('data'=>"\t".$v['member_name']);
+            } else {
+                $tmp[] = array('data'=>"\t-");
+            }
+            $excel_data[] = $tmp;
+        }
+        $excel_data = $excel_obj->charset($excel_data,CHARSET);
+        $excel_obj->addArray($excel_data);
+        $excel_obj->addWorksheet($excel_obj->charset('充值卡',CHARSET));
+        $excel_obj->generateXML($excel_obj->charset('充值卡',CHARSET).$_GET['curpage'].'-'.date('Y-m-d-H',time()));
+    }
+
+}

+ 216 - 0
admin/control/refund.php

@@ -0,0 +1,216 @@
+<?php
+/**
+ * 退款管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class refundControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		$model_refund = Model('refund_return');
+		$model_refund->getRefundStateArray();
+	}
+
+	/**
+	 * 待处理列表
+	 */
+	public function refund_manageOp() {
+		$model_refund = Model('refund_return');
+		$condition = array();
+		$condition['refund_state'] = '2';//状态:1为处理中,2为待管理员处理,3为已完成
+
+		$keyword_type = array('order_sn','refund_sn','store_name','buyer_name','goods_name');
+		if (trim($_GET['key']) != '' && in_array($_GET['type'],$keyword_type)) {
+			$type = $_GET['type'];
+			$condition[$type] = array('like','%'.$_GET['key'].'%');
+		}
+		if (trim($_GET['add_time_from']) != '' || trim($_GET['add_time_to']) != '') {
+			$add_time_from = strtotime(trim($_GET['add_time_from']));
+			$add_time_to = strtotime(trim($_GET['add_time_to']));
+			if ($add_time_from !== false || $add_time_to !== false) {
+				$condition['add_time'] = array('time',array($add_time_from,$add_time_to));
+			}
+		}
+		$refund_list = $model_refund->getRefundList($condition,10);
+
+		Tpl::output('refund_list',$refund_list);
+		Tpl::output('show_page',$model_refund->showpage());
+		Tpl::showpage('refund_manage.list');
+	}
+
+	/**
+	 * 所有记录
+	 */
+	public function refund_allOp() {
+		$model_refund = Model('refund_return');
+		$condition = array();
+
+		$keyword_type = array('order_sn','refund_sn','store_name','buyer_name','goods_name');
+		if (trim($_GET['key']) != '' && in_array($_GET['type'],$keyword_type)) {
+			$type = $_GET['type'];
+			$condition[$type] = array('like','%'.$_GET['key'].'%');
+		}
+		if (trim($_GET['add_time_from']) != '' || trim($_GET['add_time_to']) != '') {
+			$add_time_from = strtotime(trim($_GET['add_time_from']));
+			$add_time_to = strtotime(trim($_GET['add_time_to']));
+			if ($add_time_from !== false || $add_time_to !== false) {
+				$condition['add_time'] = array('time',array($add_time_from,$add_time_to));
+			}
+		}
+		$refund_list = $model_refund->getRefundList($condition,10);
+		Tpl::output('refund_list',$refund_list);
+		Tpl::output('show_page',$model_refund->showpage());
+		Tpl::showpage('refund_all.list');
+	}
+
+	/**
+	 * 退款处理页
+	 *
+	 */
+	public function editOp() {
+		$model_refund = Model('refund_return');
+		$condition = array();
+		$condition['refund_id'] = intval($_GET['refund_id']);
+		$refund_list = $model_refund->getRefundList($condition);
+		$refund = $refund_list[0];
+		if (chksubmit()) {
+			if ($refund['refund_state'] != '2') {//检查状态,防止页面刷新不及时造成数据错误
+				showMessage(Language::get('nc_common_save_fail'));
+			}
+			$order_id = $refund['order_id'];
+			$refund_array = array();
+			$refund_array['admin_time'] = time();
+			$refund_array['refund_state'] = '3';//状态:1为处理中,2为待管理员处理,3为已完成
+			$refund_array['admin_message'] = $_POST['admin_message'];
+			$state = $model_refund->editOrderRefund($refund);
+			if ($state) {
+			    $model_refund->editRefundReturn($condition, $refund_array);
+
+    			// 发送买家消息
+                $param = array();
+                $param['code'] = 'refund_return_notice';
+                $param['member_id'] = $refund['buyer_id'];
+                $param['param'] = array(
+                    'refund_url' => urlShop('member_refund', 'view', array('refund_id' => $refund['refund_id'])),
+                    'refund_sn' => $refund['refund_sn']
+                );
+                QueueClient::push('sendMemberMsg', $param);
+
+			    $this->log('退款确认,退款编号'.$refund['refund_sn']);
+				showMessage(Language::get('nc_common_save_succ'),'index.php?act=refund&op=refund_manage');
+			} else {
+				showMessage(Language::get('nc_common_save_fail'));
+			}
+		}
+		Tpl::output('refund',$refund);
+		$info['buyer'] = array();
+	    if(!empty($refund['pic_info'])) {
+	        $info = unserialize($refund['pic_info']);
+	    }
+		Tpl::output('pic_list',$info['buyer']);
+		Tpl::showpage('refund.edit');
+	}
+
+	/**
+	 * 退款记录查看页
+	 *
+	 */
+	public function viewOp() {
+		$model_refund = Model('refund_return');
+		$condition = array();
+		$condition['refund_id'] = intval($_GET['refund_id']);
+		$refund_list = $model_refund->getRefundList($condition);
+		$refund = $refund_list[0];
+		Tpl::output('refund',$refund);
+		$info['buyer'] = array();
+	    if(!empty($refund['pic_info'])) {
+	        $info = unserialize($refund['pic_info']);
+	    }
+		Tpl::output('pic_list',$info['buyer']);
+		Tpl::showpage('refund.view');
+	}
+
+	/**
+	 * 退款退货原因
+	 */
+	public function reasonOp() {
+		$model_refund = Model('refund_return');
+		$condition = array();
+
+		$reason_list = $model_refund->getReasonList($condition,10);
+		Tpl::output('reason_list',$reason_list);
+		Tpl::output('show_page',$model_refund->showpage());
+
+		Tpl::showpage('refund_reason.list');
+	}
+
+	/**
+	 * 新增退款退货原因
+	 *
+	 */
+	public function add_reasonOp() {
+		$model_refund = Model('refund_return');
+		if (chksubmit()) {
+		    $reason_array = array();
+		    $reason_array['reason_info'] = $_POST['reason_info'];
+		    $reason_array['sort'] = intval($_POST['sort']);
+		    $reason_array['update_time'] = time();
+
+		    $state = $model_refund->addReason($reason_array);
+			if ($state) {
+			    $this->log('新增退款退货原因,编号'.$state);
+				showMessage(Language::get('nc_common_save_succ'),'index.php?act=refund&op=reason');
+			} else {
+				showMessage(Language::get('nc_common_save_fail'));
+			}
+		}
+		Tpl::showpage('refund_reason.add');
+	}
+
+	/**
+	 * 编辑退款退货原因
+	 *
+	 */
+	public function edit_reasonOp() {
+		$model_refund = Model('refund_return');
+		$condition = array();
+		$condition['reason_id'] = intval($_GET['reason_id']);
+		$reason_list = $model_refund->getReasonList($condition);
+		$reason = $reason_list[$condition['reason_id']];
+		if (chksubmit()) {
+		    $reason_array = array();
+		    $reason_array['reason_info'] = $_POST['reason_info'];
+		    $reason_array['sort'] = intval($_POST['sort']);
+		    $reason_array['update_time'] = time();
+			$state = $model_refund->editReason($condition, $reason_array);
+			if ($state) {
+			    $this->log('编辑退款退货原因,编号'.$condition['reason_id']);
+				showMessage(Language::get('nc_common_save_succ'),'index.php?act=refund&op=reason');
+			} else {
+				showMessage(Language::get('nc_common_save_fail'));
+			}
+		}
+		Tpl::output('reason',$reason);
+		Tpl::showpage('refund_reason.edit');
+	}
+
+	/**
+	 * 删除退款退货原因
+	 *
+	 */
+	public function del_reasonOp() {
+		$model_refund = Model('refund_return');
+		$condition = array();
+		$condition['reason_id'] = intval($_GET['reason_id']);
+		$state = $model_refund->delReason($condition);
+		if ($state) {
+		    $this->log('删除退款退货原因,编号'.$condition['reason_id']);
+		    showMessage(Language::get('nc_common_del_succ'),'index.php?act=refund&op=reason');
+		} else {
+		    showMessage(Language::get('nc_common_del_fail'));
+		}
+	}
+}

+ 135 - 0
admin/control/return.php

@@ -0,0 +1,135 @@
+<?php
+/**
+ * 退货管理
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class returnControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		$model_refund = Model('refund_return');
+		$model_refund->getRefundStateArray();
+	}
+
+	/**
+	 * 待处理列表
+	 */
+	public function return_manageOp() {
+		$model_refund = Model('refund_return');
+		$condition = array();
+		$condition['refund_state'] = '2';//状态:1为处理中,2为待管理员处理,3为已完成
+
+		$keyword_type = array('order_sn','refund_sn','store_name','buyer_name','goods_name');
+		if (trim($_GET['key']) != '' && in_array($_GET['type'],$keyword_type)) {
+			$type = $_GET['type'];
+			$condition[$type] = array('like','%'.$_GET['key'].'%');
+		}
+		if (trim($_GET['add_time_from']) != '' || trim($_GET['add_time_to']) != '') {
+			$add_time_from = strtotime(trim($_GET['add_time_from']));
+			$add_time_to = strtotime(trim($_GET['add_time_to']));
+			if ($add_time_from !== false || $add_time_to !== false) {
+				$condition['add_time'] = array('time',array($add_time_from,$add_time_to));
+			}
+		}
+		$return_list = $model_refund->getReturnList($condition,10);
+
+		Tpl::output('return_list',$return_list);
+		Tpl::output('show_page',$model_refund->showpage());
+		Tpl::showpage('return_manage.list');
+	}
+
+	/**
+	 * 所有记录
+	 */
+	public function return_allOp() {
+		$model_refund = Model('refund_return');
+		$condition = array();
+
+		$keyword_type = array('order_sn','refund_sn','store_name','buyer_name','goods_name');
+		if (trim($_GET['key']) != '' && in_array($_GET['type'],$keyword_type)) {
+			$type = $_GET['type'];
+			$condition[$type] = array('like','%'.$_GET['key'].'%');
+		}
+		if (trim($_GET['add_time_from']) != '' || trim($_GET['add_time_to']) != '') {
+			$add_time_from = strtotime(trim($_GET['add_time_from']));
+			$add_time_to = strtotime(trim($_GET['add_time_to']));
+			if ($add_time_from !== false || $add_time_to !== false) {
+				$condition['add_time'] = array('time',array($add_time_from,$add_time_to));
+			}
+		}
+		$return_list = $model_refund->getReturnList($condition,10);
+		Tpl::output('return_list',$return_list);
+		Tpl::output('show_page',$model_refund->showpage());
+		Tpl::showpage('return_all.list');
+	}
+
+	/**
+	 * 退货处理页
+	 *
+	 */
+	public function editOp() {
+		$model_refund = Model('refund_return');
+		$condition = array();
+		$condition['refund_id'] = intval($_GET['return_id']);
+		$return_list = $model_refund->getReturnList($condition);
+		$return = $return_list[0];
+		if (chksubmit()) {
+			if ($return['refund_state'] != '2') {//检查状态,防止页面刷新不及时造成数据错误
+				showMessage(Language::get('nc_common_save_fail'));
+			}
+			$order_id = $return['order_id'];
+			$refund_array = array();
+			$refund_array['admin_time'] = time();
+			$refund_array['refund_state'] = '3';//状态:1为处理中,2为待管理员处理,3为已完成
+			$refund_array['admin_message'] = $_POST['admin_message'];
+			$state = $model_refund->editOrderRefund($return);
+			if ($state) {
+			    $model_refund->editRefundReturn($condition, $refund_array);
+			    $this->log('退货确认,退货编号'.$return['refund_sn']);
+
+			    // 发送买家消息
+                $param = array();
+                $param['code'] = 'refund_return_notice';
+                $param['member_id'] = $return['buyer_id'];
+                $param['param'] = array(
+                    'refund_url' => urlShop('return_id', 'view', array('return_id' => $return['refund_id'])),
+                    'refund_sn' => $return['refund_sn']
+                );
+                QueueClient::push('sendMemberMsg', $param);
+
+				showMessage(Language::get('nc_common_save_succ'),'index.php?act=return&op=return_manage');
+			} else {
+				showMessage(Language::get('nc_common_save_fail'));
+			}
+		}
+		Tpl::output('return',$return);
+		$info['buyer'] = array();
+	    if(!empty($return['pic_info'])) {
+	        $info = unserialize($return['pic_info']);
+	    }
+		Tpl::output('pic_list',$info['buyer']);
+		Tpl::showpage('return.edit');
+	}
+
+	/**
+	 * 退货记录查看页
+	 *
+	 */
+	public function viewOp() {
+		$model_refund = Model('refund_return');
+		$condition = array();
+		$condition['refund_id'] = intval($_GET['return_id']);
+		$return_list = $model_refund->getReturnList($condition);
+		$return = $return_list[0];
+		Tpl::output('return',$return);
+		$info['buyer'] = array();
+	    if(!empty($return['pic_info'])) {
+	        $info = unserialize($return['pic_info']);
+	    }
+		Tpl::output('pic_list',$info['buyer']);
+		Tpl::showpage('return.view');
+	}
+}

+ 47 - 0
admin/control/search.php

@@ -0,0 +1,47 @@
+<?php
+/**
+ * 网站设置
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class searchControl extends SystemControl{
+	public function __construct(){
+		parent::__construct();
+		Language::read('setting');
+	}
+
+	/**
+	 * 搜索设置
+	 */
+	public function searchOp(){
+		if (chksubmit()){
+			$lang	= Language::getLangContent();
+			$model_setting = Model('setting');
+
+			/**
+			 * 转码  防止GBK下用中文逗号截取不正确
+			 */
+			$comma = ',';
+			if (strtoupper(CHARSET) == 'GBK'){
+				$comma = Language::getGBK($comma);
+			}
+			$result = $model_setting->updateSetting(array(
+				'hot_search'=>str_replace($comma,',',$_POST['hot_search'])));
+			if ($result){
+				showMessage($lang['nc_common_save_succ']);
+			}else {
+				showMessage($lang['nc_common_save_fail']);
+			}
+		}
+		$model_setting = Model('setting');
+		$list_setting = $model_setting->getListSetting();
+		Tpl::output('list_setting',$list_setting);
+
+		Tpl::showpage('setting.search');
+	}
+
+
+}

+ 54 - 0
admin/control/seccode.php

@@ -0,0 +1,54 @@
+<?php
+/**
+ * 验证码
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+
+class seccodeControl{
+
+	public function __construct(){
+	}
+	/**
+	 * 产生验证码
+	 *
+	 */
+	public function makecodeOp(){
+		$refererhost = parse_url($_SERVER['HTTP_REFERER']);
+		$refererhost['host'] .= !empty($refererhost['port']) ? (':'.$refererhost['port']) : '';
+
+		$seccode = makeSeccode($_GET['nchash']);
+
+		@header("Expires: -1");
+		@header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);
+		@header("Pragma: no-cache");
+
+		$code = new seccode();
+		$code->code = $seccode;
+		$code->width = 90;
+		$code->height = 26;
+		$code->background = 1;
+		$code->adulterate = 1;
+		$code->scatter = '';
+		$code->color = 1;
+		$code->size = 0;
+		$code->shadow = 1;
+		$code->animator = 0;
+		$code->datapath =  BASE_DATA_PATH.'/resource/seccode/';
+		$code->display();
+	}
+
+	/**
+	 * AJAX验证
+	 *
+	 */
+	public function checkOp(){
+		if (checkSeccode($_GET['nchash'],$_GET['captcha'])){
+			exit('true');
+		}else{
+			exit('false');
+		}
+	}
+}
+
+?>

+ 364 - 0
admin/control/setting.php

@@ -0,0 +1,364 @@
+<?php
+/**
+ * 网站设置
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+class settingControl extends SystemControl{
+	private $links = array(
+		array('url'=>'act=setting&op=base','lang'=>'web_set'),
+		array('url'=>'act=setting&op=dump','lang'=>'dis_dump'),
+	);
+	public function __construct(){
+		parent::__construct();
+		Language::read('setting');
+	}
+
+	/**
+	 * 基本信息
+	 */
+	public function baseOp(){
+		$model_setting = Model('setting');
+		if (chksubmit()){
+			//上传网站Logo
+			if (!empty($_FILES['site_logo']['name'])){
+				$upload = new UploadFile();
+				$upload->set('default_dir',ATTACH_COMMON);
+				$result = $upload->upfile('site_logo');
+				if ($result){
+					$_POST['site_logo'] = $upload->file_name;
+				}else {
+					showMessage($upload->error,'','','error');
+				}
+			}
+			
+			//上传手机网站Logo
+			if (!empty($_FILES['site_mobile_logo']['name'])){
+				$upload = new UploadFile();
+				$upload->set('default_dir',ATTACH_COMMON);
+				$upload->file_name='home_logo.png';
+				$result = $upload->upfile('site_mobile_logo');
+				if ($result){
+					$_POST['site_mobile_logo'] = $upload->file_name;
+				}else {
+					showMessage($upload->error,'','','error');
+				}
+			}
+			
+			//二维码微信图片 by abc.com
+			if (!empty($_FILES['site_logowx']['name'])){
+				$upload = new UploadFile();
+				$upload->set('default_dir',ATTACH_COMMON);
+				$result = $upload->upfile('site_logowx');
+				if ($result){
+					$_POST['site_logowx'] = $upload->file_name;
+				}else {
+					showMessage($upload->error,'','','error');
+				}
+			}
+			if (!empty($_FILES['member_logo']['name'])){
+				$upload = new UploadFile();
+				$upload->set('default_dir',ATTACH_COMMON);
+				$result = $upload->upfile('member_logo');
+				if ($result){
+					$_POST['member_logo'] = $upload->file_name;
+				}else {
+					showMessage($upload->error,'','','error');
+				}
+			}
+			if (!empty($_FILES['seller_center_logo']['name'])){
+				$upload = new UploadFile();
+				$upload->set('default_dir',ATTACH_COMMON);
+				$result = $upload->upfile('seller_center_logo');
+				if ($result){
+					$_POST['seller_center_logo'] = $upload->file_name;
+				}else {
+					showMessage($upload->error,'','','error');
+				}
+			}
+			$list_setting = $model_setting->getListSetting();
+			$update_array = array();
+			$update_array['time_zone'] = $this->setTimeZone($_POST['time_zone']);
+			$update_array['site_name'] = $_POST['site_name'];
+			$update_array['site_phone'] = $_POST['site_phone'];
+			$update_array['site_bank_account'] = $_POST['site_bank_account'];
+			$update_array['site_email'] = $_POST['site_email'];
+			$update_array['statistics_code'] = $_POST['statistics_code'];
+			if (!empty($_POST['site_logo'])){
+				$update_array['site_logo'] = $_POST['site_logo'];
+			}
+			//zmr>v30
+			if (!empty($_POST['site_mobile_logo'])){
+				$update_array['site_mobile_logo'] = $_POST['site_mobile_logo'];
+			}
+			if (!empty($_POST['site_logowx'])){
+				$update_array['site_logowx'] = $_POST['site_logowx'];
+			}
+			if (!empty($_POST['member_logo'])){
+				$update_array['member_logo'] = $_POST['member_logo'];
+			}
+			if (!empty($_POST['seller_center_logo'])){
+				$update_array['seller_center_logo'] = $_POST['seller_center_logo'];
+			}
+			$update_array['icp_number'] = $_POST['icp_number'];
+			//设置表 400电话 by abc.com
+			$update_array['site_tel400'] = $_POST['site_tel400'];
+			$update_array['site_status'] = $_POST['site_status'];
+			$update_array['closed_reason'] = $_POST['closed_reason'];
+			$result = $model_setting->updateSetting($update_array);
+			if ($result === true){
+				//判断有没有之前的图片,如果有则删除
+				if (!empty($list_setting['site_logo']) && !empty($_POST['site_logo'])){
+					@unlink(BASE_UPLOAD_PATH.DS.ATTACH_COMMON.DS.$list_setting['site_logo']);
+				}
+				if (!empty($list_setting['site_logowx']) && !empty($_POST['site_logowx'])){
+			        @unlink(BASE_UPLOAD_PATH.DS.ATTACH_COMMON.DS.$list_setting['site_logowx']);
+			    }
+				if (!empty($list_setting['member_logo']) && !empty($_POST['member_logo'])){
+					@unlink(BASE_UPLOAD_PATH.DS.ATTACH_COMMON.DS.$list_setting['member_logo']);
+				}
+				if (!empty($list_setting['seller_center_logo']) && !empty($_POST['seller_center_logo'])){
+					@unlink(BASE_UPLOAD_PATH.DS.ATTACH_COMMON.DS.$list_setting['seller_center_logo']);
+                }
+				$this->log(L('nc_edit,web_set'),1);
+				showMessage(L('nc_common_save_succ'));
+			}else {
+				$this->log(L('nc_edit,web_set'),0);
+				showMessage(L('nc_common_save_fail'));
+			}
+		}
+		$list_setting = $model_setting->getListSetting();
+		foreach ($this->getTimeZone() as $k=>$v) {
+			if ($v == $list_setting['time_zone']){
+				$list_setting['time_zone'] = $k;break;
+			}
+		}
+		Tpl::output('list_setting',$list_setting);
+
+		//输出子菜单
+		Tpl::output('top_link',$this->sublink($this->links,'base'));
+
+		Tpl::showpage('setting.base');
+	}
+
+	/**
+	 * 防灌水设置
+	 */
+	public function dumpOp(){
+		$model_setting = Model('setting');
+		if (chksubmit()){
+			$update_array = array();
+			$update_array['guest_comment'] = $_POST['guest_comment'];
+			$update_array['captcha_status_login'] = $_POST['captcha_status_login'];
+			$update_array['captcha_status_register'] = $_POST['captcha_status_register'];
+			$update_array['captcha_status_goodsqa'] = $_POST['captcha_status_goodsqa'];
+			$result = $model_setting->updateSetting($update_array);
+			if ($result === true){
+				$this->log(L('nc_edit,dis_dump'),1);
+				showMessage(L('nc_common_save_succ'));
+			}else {
+				$this->log(L('nc_edit,dis_dump'),0);
+				showMessage(L('nc_common_save_fail'));
+			}
+		}
+		$list_setting = $model_setting->getListSetting();
+		Tpl::output('list_setting',$list_setting);
+		Tpl::output('top_link',$this->sublink($this->links,'dump'));
+		Tpl::showpage('setting.dump');
+	}
+
+	/**
+	 * SEO与rewrite设置
+	 */
+	public function seoOp(){
+		$model_setting = Model('setting');
+		if (chksubmit()){
+			$update_array = array();
+			$update_array['rewrite_enabled'] = $_POST['rewrite_enabled'];
+			$result = $model_setting->updateSetting($update_array);
+			if ($result === true){
+				$this->log(L('nc_edit,nc_seo_set'),1);
+				showMessage(L('nc_common_save_succ'));
+			}else {
+				$this->log(L('nc_edit,nc_seo_set'),0);
+				showMessage(L('nc_common_save_fail'));
+			}
+		}
+		$list_setting = $model_setting->getListSetting();
+
+		//读取SEO信息
+		$list = Model('seo')->select();
+		$seo = array();
+		foreach ((array)$list as $value) {
+			$seo[$value['type']] = $value;
+		}
+
+		Tpl::output('list_setting',$list_setting);
+		Tpl::output('seo',$seo);
+
+		$category = Model('goods_class')->getGoodsClassForCacheModel();
+		Tpl::output('category',$category);
+
+		Tpl::showpage('setting.seo_setting');
+	}
+
+	public function ajax_categoryOp(){
+		$model = Model('goods_class');
+		$list = $model->field('gc_title,gc_keywords,gc_description')->find(intval($_GET['id']));
+		//转码
+		if (strtoupper(CHARSET) == 'GBK'){
+			$list = Language::getUTF8($list);//网站GBK使用编码时,转换为UTF-8,防止json输出汉字问题
+		}
+		echo json_encode($list);exit();
+	}
+
+	/**
+	 * SEO设置保存
+	 */
+	public function seo_updateOp(){
+		$model_seo = Model('seo');
+		if (chksubmit()){
+			$update = array();
+			if (is_array($_POST['SEO'][0])){
+				$seo = $_POST['SEO'][0];
+			}else{
+				$seo = $_POST['SEO'];
+			}
+			foreach ((array)$seo as $key=>$value) {
+				$model_seo->where(array('type'=>$key))->update($value);
+			}
+			dkcache('seo');
+			showMessage(L('nc_common_save_succ'));
+		}else{
+			showMessage(L('nc_common_save_fail'));
+		}
+	}
+
+	/**
+	 * 分类SEO保存
+	 *
+	 */
+	public function seo_categoryOp(){
+		if (chksubmit()){
+		    $where = array('gc_id' => intval($_POST['category']));
+			$input = array();
+			$input['gc_title'] = $_POST['cate_title'];
+			$input['gc_keywords'] = $_POST['cate_keywords'];
+			$input['gc_description'] = $_POST['cate_description'];
+			if (Model('goods_class')->editGoodsClass($input, $where)){
+				dkcache('goods_class_seo');
+				showMessage(L('nc_common_save_succ'));
+			}
+		}
+		showMessage(L('nc_common_save_fail'));
+	}
+
+    /**
+     * 网站功能模块开启或者关闭
+     *
+     */
+	public function website_settingOp(){
+		$model_setting = Model('setting');
+		//保存信息
+		if (chksubmit()){
+			//构造更新数据数组
+			$update_array = array();
+			//站外分享功能
+			$update_array['share_isuse'] = trim($_POST['share_isuse']);
+			$result = $model_setting->updateSetting($update_array);
+			if ($result === true){
+				showMessage(Language::get('nc_common_save_succ'));
+			}else {
+				showMessage(Language::get('nc_common_save_fail'));
+			}
+		}
+		//读取设置内容 $list_setting
+		$list_setting = $model_setting->getListSetting();
+		//模板输出
+		Tpl::output('list_setting',$list_setting);
+		Tpl::showpage('setting.website_setting');
+	}
+
+	/**
+	 * 设置时区
+	 *
+	 * @param int $time_zone 时区键值
+	 */
+	private function setTimeZone($time_zone){
+		$zonelist = $this->getTimeZone();
+		return empty($zonelist[$time_zone]) ? 'Asia/Shanghai' : $zonelist[$time_zone];
+	}
+
+	private function getTimeZone(){
+		return array(
+		'-12' => 'Pacific/Kwajalein',
+		'-11' => 'Pacific/Samoa',
+		'-10' => 'US/Hawaii',
+		'-9' => 'US/Alaska',
+		'-8' => 'America/Tijuana',
+		'-7' => 'US/Arizona',
+		'-6' => 'America/Mexico_City',
+		'-5' => 'America/Bogota',
+		'-4' => 'America/Caracas',
+		'-3.5' => 'Canada/Newfoundland',
+		'-3' => 'America/Buenos_Aires',
+		'-2' => 'Atlantic/St_Helena',
+		'-1' => 'Atlantic/Azores',
+		'0' => 'Europe/Dublin',
+		'1' => 'Europe/Amsterdam',
+		'2' => 'Africa/Cairo',
+		'3' => 'Asia/Baghdad',
+		'3.5' => 'Asia/Tehran',
+		'4' => 'Asia/Baku',
+		'4.5' => 'Asia/Kabul',
+		'5' => 'Asia/Karachi',
+		'5.5' => 'Asia/Calcutta',
+		'5.75' => 'Asia/Katmandu',
+		'6' => 'Asia/Almaty',
+		'6.5' => 'Asia/Rangoon',
+		'7' => 'Asia/Bangkok',
+		'8' => 'Asia/Shanghai',
+		'9' => 'Asia/Tokyo',
+		'9.5' => 'Australia/Adelaide',
+		'10' => 'Australia/Canberra',
+		'11' => 'Asia/Magadan',
+		'12' => 'Pacific/Auckland'
+		);
+	}
+	
+	
+	//zmr>v30
+	public function exetargetOp()
+	{
+		/*
+		http://你的程序地址/crontab/index.php?act=minutes
+		http://你的程序地址/crontab/index.php?act=hour
+		http://你的程序地址/crontab/index.php?act=date
+		http://你的程序地址/crontab/index.php?act=month
+		*/
+		
+		
+		$page=BASE_SITE_URL.'/crontab/index.php?act=minutes';
+        $html = file_get_contents($page,'r');
+		echo '分钟任务执行成功'.$html; 
+		echo "<br/>";
+		$page=BASE_SITE_URL.'/crontab/index.php?act=hour';
+        $html = file_get_contents($page,'r');
+		echo '小时任务执行成功'.$html; 
+		echo "<br/>";
+		$page=BASE_SITE_URL.'/crontab/index.php?act=date';
+        $html = file_get_contents($page,'r');
+		echo '每天任务执行成功'.$html; 
+		echo "<br/>";
+		$page=BASE_SITE_URL.'/crontab/index.php?act=month';
+        $html = file_get_contents($page,'r');
+		echo '每月任务执行成功'.$html; 
+		echo "<br/>";
+		echo "<br/>全部计划任务执行成功";
+	}
+	
+	
+}

+ 47 - 0
admin/control/show_pics.php

@@ -0,0 +1,47 @@
+<?php
+/**
+ * 显示图片
+ *
+ *
+ *
+ ***/
+
+defined('InShopNC') or exit('Access Invalid!');
+
+class show_picsControl extends SystemControl {
+
+	public function __construct() {
+        parent::__construct();
+    }
+
+	public function indexOp(){
+
+        $type = trim($_GET['type']);
+        if(empty($_GET['pics'])) {
+            $this->goto_index();
+        }
+        $pics = explode('|',trim($_GET['pics']));
+        $pic_path = '';
+        switch ($type) {
+            case 'inform':
+                $pic_path = UPLOAD_SITE_URL.'/shop/inform/';
+                break;
+            case 'complain':
+                $pic_path = UPLOAD_SITE_URL.'/shop/complain/';
+                break;
+            default:
+                $this->goto_index();
+                break;
+        }
+
+        Tpl::output('pic_path',$pic_path);
+		Tpl::output('pics',$pics);
+		//输出页面
+		Tpl::showpage('show_pics','blank_layout');
+	}
+
+    private function goto_index() {
+	    @header("Location: index.php");
+		exit;
+    }
+}

+ 0 - 0
admin/control/sns_malbum.php


部分文件因为文件数量过多而无法显示