member_address.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. <?php
  2. /**
  3. * 我的地址
  4. *
  5. *
  6. *
  7. *
  8. */
  9. //use Shopnc\Tpl;
  10. defined('InShopNC') or exit('Access Invalid!');
  11. require_once(BASE_ROOT_PATH . '/helper/search/tcp_client.php');
  12. require_once(BASE_ROOT_PATH . '/helper/session_helper.php');
  13. class member_addressControl extends mbMemberControl
  14. {
  15. const MAX_ADDRESS_COUNT = 50;
  16. public function __construct()
  17. {
  18. parent::__construct();
  19. }
  20. public function address_listOp()
  21. {
  22. $model_address = Model('address');
  23. $address_list = $model_address->getAddressList(['member_id' => $_SESSION['member_id']]);
  24. self::outsuccess(['address_list' => $address_list], 'shop/choose_address');
  25. }
  26. public function address_infoOp()
  27. {
  28. $address_id = intval($_POST['address_id']);
  29. if (empty($_POST['address_id']) || $address_id < 0) {
  30. return self::outerr(errcode::ErrParamter, "address_id = {$address_id}. must > 0.");
  31. }
  32. $model_address = Model('address');
  33. $address_info = $model_address->getAddressInfo(['address_id' => $address_id,'member_id' => $_SESSION['member_id']]);
  34. if (!empty($address_info)) {
  35. self::outsuccess($address_info, 'shop/update_address');
  36. } else {
  37. return self::outerr(errcode::ErrAddress, '地址不存在');
  38. }
  39. }
  40. public function address_delOp()
  41. {
  42. $address_id = intval($_POST['address_id']);
  43. if (empty($_POST['address_id']) || $address_id < 0) {
  44. return self::outerr(errcode::ErrParamter, "address_id = {$address_id}. must > 0.");
  45. }
  46. $model_address = Model('address');
  47. $model_address->delAddress(['address_id' => $address_id,'member_id' => $_SESSION['member_id']]);
  48. session_helper::clear_addr();
  49. $default_address_info = $model_address->getDefaultAddressInfo(['member_id' => $_SESSION['member_id']]);
  50. if (intval($default_address_info['is_default']) === 0) {
  51. $this->_set_default($default_address_info['address_id'], 1);
  52. }
  53. self::outsuccess(['result' => '1']);
  54. }
  55. /**
  56. * 新增地址
  57. */
  58. public function address_addOp()
  59. {
  60. $model_address = Model('address');
  61. $address_info = $this->_address_valid($err, $err_code);
  62. if ($err != '') {
  63. return self::outerr($err_code, $err);
  64. }
  65. $addr_acount = $model_address->getAddressCount(['member_id' => $_SESSION['member_id']]);
  66. if ($addr_acount >= self::MAX_ADDRESS_COUNT) {
  67. return self::outerr(errcode::ErrAddress, '地址数量已达上限');
  68. }
  69. $result = $model_address->addAddress($address_info);
  70. if ($result)
  71. {
  72. session_helper::clear_addr();
  73. $addr_acount = $model_address->getAddressCount(['member_id' => $_SESSION['member_id']]);
  74. if (intval($addr_acount) === 1) {
  75. $this->_set_default($result, 1);
  76. }
  77. self::outsuccess(['address_id' => $result]);
  78. } else {
  79. return self::outerr(errcode::ErrAddress, '保存失败');
  80. }
  81. }
  82. /**
  83. * 编辑地址
  84. */
  85. public function address_editOp()
  86. {
  87. $address_id = intval($_POST['address_id']);
  88. if (empty($_POST['address_id']) || $address_id < 0) {
  89. return self::outerr(errcode::ErrParamter, "address_id = {$address_id}. must > 0.");
  90. }
  91. $model_address = Model('address');
  92. $address_info = $model_address->getOneAddress($address_id);
  93. //验证地址是否为本人
  94. if ($address_info['member_id'] != $_SESSION['member_id']) {
  95. return self::outerr(errcode::ErrAddress, '参数错误');
  96. }
  97. else
  98. {
  99. $address_info = $this->_address_valid($err, $errcode);
  100. if(empty($address_info)) {
  101. self::outerr($errcode,$err);
  102. }
  103. else
  104. {
  105. $result = $model_address->editAddress($address_info, ['address_id' => $address_id]);
  106. if ($result) {
  107. session_helper::clear_addr();
  108. self::outsuccess(['result' => '1']);
  109. } else {
  110. return self::outerr(errcode::ErrAddress, '保存失败');
  111. }
  112. }
  113. }
  114. }
  115. /**
  116. * 验证地址数据
  117. */
  118. private function _address_valid(&$err, &$errcode)
  119. {
  120. $obj_validate = new Validator();
  121. $obj_validate->validateparam = [
  122. ["input" => $_POST["true_name"], "require" => "true", "message" => '姓名不能为空'],
  123. ["input" => $_POST["address"], "require" => "true", "message" => '地址不能为空'],
  124. Validator::verify_mobile($_POST['mob_phone'])
  125. ];
  126. $err = $obj_validate->validate();
  127. if ($err != '') {
  128. $errcode = errcode::ErrAddress;
  129. return NULL;
  130. }
  131. $area_id = intval($_POST['area_id']);
  132. $area = search\search_client::instance()->get_area($area_id);
  133. if ($area == false || $area['result'] == false) {
  134. $errcode = errcode::ErrAddress;
  135. return NULL;
  136. }
  137. $data = [];
  138. $data['member_id'] = $_SESSION['member_id'];
  139. $data['true_name'] = urldecode($_POST['true_name']);
  140. $data['area_id'] = intval($area['country']['area_id']);
  141. $data['city_id'] = intval($area['city']['area_id']);
  142. $data['area_info'] = "{$area['province']['area_name']}\t{$area['city']['area_name']}\t{$area['country']['area_name']}";
  143. $data['address'] = urldecode($_POST['address']);
  144. $data['tel_phone'] = '';
  145. $data['mob_phone'] = $_POST['mob_phone'];
  146. return $data;
  147. }
  148. /**
  149. * 编辑地址
  150. */
  151. public function set_defaultOp()
  152. {
  153. $address_id = intval($_POST['address_id']);
  154. $is_default = intval($_POST['is_default']);
  155. $model_address = Model('address');
  156. //验证地址是否为本人
  157. $address_info = $model_address->getOneAddress($address_id);
  158. if ($address_info['member_id'] != $_SESSION['member_id']) {
  159. return self::outerr(errcode::ErrAddress, '参数错误');
  160. }
  161. else
  162. {
  163. $ret = $this->_set_default($address_id, $is_default);
  164. if ($ret) {
  165. return self::outsuccess(['result' => '1']);
  166. } else {
  167. return self::outerr($ret['code'], $ret['msg']);
  168. }
  169. }
  170. }
  171. private function _set_default($address_id, $is_default)
  172. {
  173. $member_id = $_SESSION['member_id'];
  174. $model = Model('address');
  175. if ($is_default === 1)
  176. {
  177. if ($model->editAddress(['is_default' => '0'], ['member_id' => $member_id]) &&
  178. $model->editAddress(['is_default' => '1'], ['address_id' => $address_id])) {
  179. return true;
  180. } else {
  181. return ['code' => errcode::ErrAddress, 'msg' => '保存失败'];
  182. }
  183. }
  184. else {
  185. $area = $model->editAddress(['is_default' => '0'], ['address_id' => $address_id]);
  186. }
  187. if ($area) {
  188. return true;
  189. } else {
  190. return ['code' => errcode::ErrAddress, 'msg' => '保存失败'];
  191. }
  192. }
  193. /**
  194. * 地区列表
  195. */
  196. public function area_listOp()
  197. {
  198. $prefix = "mb_";
  199. $area_id = intval($_POST['area_id']);
  200. if ($area_id > 0) {
  201. $key = "area_parent_id_{$area_id}";
  202. } else {
  203. $key = "area_deep_1";
  204. }
  205. $from = $_POST['from'];
  206. if($from === 'app') {
  207. $key = "app_{$key}";
  208. }
  209. $ret = rcache($key,$prefix);
  210. if(empty($ret))
  211. {
  212. $model_area = Model('area');
  213. if ($from === 'app') {
  214. $area_list = $this->get_area_list($area_id);
  215. }
  216. else
  217. {
  218. $condition = [];
  219. if ($area_id > 0) {
  220. $condition['area_parent_id'] = $area_id;
  221. } else {
  222. $condition['area_deep'] = 1;
  223. }
  224. $area_list = $model_area->getAreaList($condition, 'area_id,area_name');
  225. }
  226. wcache($key, ["area_list" => serialize($area_list)],$prefix);
  227. }
  228. else {
  229. $area_list = unserialize($ret['area_list']);
  230. }
  231. self::outsuccess(['area_list' => $area_list]);
  232. }
  233. private function get_area_list($area_id)
  234. {
  235. $model_area = Model('area');
  236. $condition = [];
  237. if ($area_id > 0) {
  238. $condition['area_parent_id'] = $area_id;
  239. } else {
  240. $condition['area_deep'] = 1;
  241. }
  242. $area_list = $model_area->getAreaList($condition, 'area_id,area_name');
  243. foreach ($area_list as $k => $area) {
  244. $area_list_by_id = $this->get_area_list($area['area_id']);
  245. if (count($area_list_by_id) > 0) {
  246. $area_list[$k]['area_list'] = $area_list_by_id;
  247. }
  248. }
  249. return $area_list;
  250. }
  251. }
  252. class tpl_address
  253. {
  254. private $out_put;
  255. private $address;
  256. private $address_list;
  257. public function __construct($out_put)
  258. {
  259. $this->out_put = $out_put;
  260. $this->address = $this->out_put['address'];
  261. $this->address_list = $this->out_put['address_list'];
  262. }
  263. public function show_address_list()
  264. {
  265. $goods_id = cookie('goods_id');
  266. $number = cookie('number');
  267. $card_id = $goods_id."|".$number;
  268. foreach ($this->address_list as $key => $adlist)
  269. {
  270. if ($adlist['is_default']=='1') {
  271. $address_id = $adlist['address_id'];
  272. $herf_edit = MOBILE_SITE_URL . '/index.php?act=member_address&op=address_info&address_id='.$adlist['address_id'];
  273. $herf_first = MOBILE_SITE_URL.'/index.php?client_type=wap&act=member_buy&op=step_first'.'&cart_id='.$card_id
  274. .'&address_id='.$address_id.'&goods_id='.$goods_id.'&number='.$number;
  275. echo "<div class=\"item-content default_address\">
  276. <a href='{$herf_first}' external><div class=\"row item-top\">
  277. <div class=\"col-50\">{$adlist['true_name']}</div>
  278. <div class=\"col-50\">{$adlist['mob_phone']}</div>
  279. </div>
  280. <div class=\"row item\">
  281. <div class=\"col-80\">
  282. <span class=\"default_title\">[默认地址]</span>{$adlist['area_info']}{$adlist['address']}
  283. </div>
  284. </div></a>
  285. <a href=\"{$herf_edit}\" class=\"pull-right external\">
  286. <span class=\"icon icon-rev\"></span>
  287. </a>
  288. </div>";
  289. unset($this->address_list[$key]);
  290. }
  291. }
  292. foreach ($this->address_list as $adlist) {
  293. $address_id = $adlist['address_id'];
  294. $herf_edit = MOBILE_SITE_URL . '/index.php?act=member_address&op=address_info&address_id='.$adlist['address_id'];
  295. $herf_first = MOBILE_SITE_URL.'/index.php?client_type=wap&act=member_buy&op=step_first'.'&cart_id='.$card_id
  296. .'&address_id='.$address_id.'&goods_id='.$goods_id.'&number='.$number;
  297. echo " <div class=\"item-content\">
  298. <a href='{$herf_first}' external><div class=\"row item-top\">
  299. <div class=\"col-50\">{$adlist['true_name']}</div>
  300. <div class=\"col-50\">{$adlist['mob_phone']}</div>
  301. </div>
  302. <div class=\"row\">
  303. <div class=\"col-80\">
  304. {$adlist['area_info']}{$adlist['address']}
  305. </div>
  306. </div>
  307. </a>
  308. <span class=\"pull-right icon icon-rev\"></span>
  309. <a href=\"{$herf_edit}\" class=\"pull-right external\">
  310. <span class=\"icon icon-rev\"></span>
  311. </a>
  312. </div>";
  313. }
  314. }
  315. public function show_edit()
  316. {
  317. echo
  318. "<div class=\"list-block\">
  319. <ul>
  320. <li class=\"item-content\">
  321. <div class=\"item-inner list_padding_left row\">
  322. <div class=\"col-25\"><label for=\"username\">收件人姓名</label></div>
  323. <div class=\"col-75\"><input type=\"text\" value=\"{$this->single_info['true_name']}\" name=\"true_name\" id=\"username\"/></div>
  324. </div>
  325. </li>
  326. <li class=\"item-content\">
  327. <div class=\"item-inner list_padding_left row\">
  328. <div class=\"col-25\"><label for=\"telphone\">手机号码</label></div>
  329. <div class=\"col-75\"><input type=\"text\" value=\"{$this->single_info['mob_name']}\" name=\"mob_phone\" id=\"telphone\"/></div>
  330. </div>
  331. </li>
  332. <li class=\"item-content\">
  333. <div class=\"item-inner list_padding_left row\">
  334. <div class=\"col-25\"><label for=\"city-picker\">所在区域</label></div>
  335. <div class=\"col-75\"><input type=\"text\" value=\"{$this->single_info['area_info']}\" name=\"area_info\" id=\"city-picker\"/></div>
  336. </div>
  337. </li>
  338. <li class=\"item-content\">
  339. <div class=\"item-inner list_padding_left row\">
  340. <div class=\"col-25\"><label for=\"address\">详细地址</label></div>
  341. <div class=\"col-75\"><input type=\"text\" value=\"{$this->single_info['address']}\" name=\"address\" id=\"address\"/></div>
  342. </div>
  343. </li>
  344. </ul>
  345. </div>";
  346. echo
  347. "<div class=\"default_btn\">
  348. <label><input class=\"icon_check\" type=\"checkbox\" value=\"1\" name=\"default_id\"/>设置为默认地址</label>
  349. </div>";
  350. }
  351. }