menu.mod.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <?php
  2. /**
  3. * [WeEngine System] Copyright (c) 2014 WE7.CC
  4. * WeEngine is NOT a free software, it under the license terms, visited http://www.we7.cc/ for more details.
  5. */
  6. defined('IN_IA') or exit('Access Denied');
  7. function menu_get($id) {
  8. global $_W;
  9. $id = intval($id);
  10. if (empty($id)) {
  11. return array();
  12. }
  13. $menu_info = table('uni_account_menus')->getById($id);
  14. if (!empty($menu_info)) {
  15. return $menu_info;
  16. } else {
  17. return array();
  18. }
  19. }
  20. function menu_default() {
  21. return table('uni_account_menus')->where('status', STATUS_ON)->getByType(MENU_CURRENTSELF);
  22. }
  23. function menu_update_currentself() {
  24. global $_W;
  25. $account_api = WeAccount::createByUniacid();
  26. $default_menu_info = $account_api->menuCurrentQuery();
  27. if (is_error($default_menu_info)) {
  28. return error(-1, $default_menu_info['message']);
  29. }
  30. if (empty($default_menu_info['is_menu_open']) || empty($default_menu_info['selfmenu_info'])) {
  31. return true;
  32. }
  33. $default_menu = $default_menu_info['selfmenu_info'];
  34. $default_sub_button = array();
  35. if (!empty($default_menu['button'])) {
  36. foreach ($default_menu['button'] as $key => &$button) {
  37. if (!empty($button['sub_button'])) {
  38. $default_sub_button[$key] = $button['sub_button'];
  39. } else {
  40. unset($button['sub_button']);
  41. }
  42. ksort($button);
  43. }
  44. unset($button);
  45. }
  46. if (!empty($default_menu)) {
  47. ksort($default_menu);
  48. }
  49. $wechat_menu_data = base64_encode(iserializer($default_menu));
  50. $all_default_menus = table('uni_account_menus')->getAllByType(MENU_CURRENTSELF);
  51. if (!empty($all_default_menus)) {
  52. foreach ($all_default_menus as $menus_key => $menu_data) {
  53. if (empty($menu_data['data'])) {
  54. continue;
  55. }
  56. $single_menu_info = iunserializer(base64_decode($menu_data['data']));
  57. if (!is_array($single_menu_info) || empty($single_menu_info['button'])) {
  58. continue;
  59. }
  60. foreach ($single_menu_info['button'] as $key => &$single_button) {
  61. if (!empty($default_sub_button[$key])) {
  62. $single_button['sub_button'] = $default_sub_button[$key];
  63. } else {
  64. unset($single_button['sub_button']);
  65. }
  66. ksort($single_button);
  67. }
  68. unset($single_button);
  69. ksort($single_menu_info);
  70. $local_menu_data = base64_encode(iserializer($single_menu_info));
  71. if ($wechat_menu_data == $local_menu_data) {
  72. $default_menu_id = $menus_key;
  73. }
  74. }
  75. }
  76. if (!empty($default_menu_id)) {
  77. pdo_update('uni_account_menus', array('status' => STATUS_ON), array('id' => $default_menu_id));
  78. pdo_update('uni_account_menus', array('status' => STATUS_OFF), array('uniacid' => $_W['uniacid'], 'type' => MENU_CURRENTSELF, 'id !=' => $default_menu_id));
  79. } else {
  80. $insert_data = array(
  81. 'uniacid' => $_W['uniacid'],
  82. 'type' => MENU_CURRENTSELF,
  83. 'group_id' => -1,
  84. 'sex' => 0,
  85. 'data' => $wechat_menu_data,
  86. 'client_platform_type' => 0,
  87. 'area' => '',
  88. 'menuid' => 0,
  89. 'status' => STATUS_ON
  90. );
  91. pdo_insert('uni_account_menus', $insert_data);
  92. $insert_id = pdo_insertid();
  93. pdo_update('uni_account_menus', array('title' => '默认菜单_'.$insert_id), array('id' => $insert_id));
  94. pdo_update('uni_account_menus', array('status' => STATUS_OFF), array('uniacid' => $_W['uniacid'], 'type' => MENU_CURRENTSELF, 'id !=' => $insert_id));
  95. }
  96. return true;
  97. }
  98. function menu_update_conditional() {
  99. global $_W;
  100. $account_api = WeAccount::createByUniacid();
  101. $conditional_menu_info = $account_api->menuQuery();
  102. if (is_error($conditional_menu_info)) {
  103. return error(-1, $conditional_menu_info['message']);
  104. }
  105. pdo_update('uni_account_menus', array('status' => STATUS_OFF), array('uniacid' => $_W['uniacid'], 'type' => MENU_CONDITIONAL));
  106. if (!empty($conditional_menu_info['conditionalmenu'])) {
  107. foreach ($conditional_menu_info['conditionalmenu'] as $menu) {
  108. $country = empty($menu['matchrule']['country']) ? '' : trim($menu['matchrule']['country']);
  109. $province = empty($menu['matchrule']['province']) ? '' : trim($menu['matchrule']['province']);
  110. $city = empty($menu['matchrule']['city']) ? '' : trim($menu['matchrule']['city']);
  111. $data = array(
  112. 'uniacid' => $_W['uniacid'],
  113. 'type' => MENU_CONDITIONAL,
  114. 'group_id' => isset($menu['matchrule']['tag_id']) ? $menu['matchrule']['tag_id'] : (isset($menu['matchrule']['group_id']) ? $menu['matchrule']['group_id'] : '-1'),
  115. 'sex' => empty($menu['matchrule']['sex']) ? 0 : $menu['matchrule']['sex'],
  116. 'client_platform_type' => empty($menu['matchrule']['client_platform_type']) ? 0 : $menu['matchrule']['client_platform_type'],
  117. 'area' => $country . $province . $city,
  118. 'data' => base64_encode(iserializer($menu)),
  119. 'menuid' => $menu['menuid'],
  120. 'status' => STATUS_ON,
  121. );
  122. if (!empty($menu['matchrule'])) {
  123. $menu_info = table('uni_account_menus')->where('menuid',$menu['menuid'])->getByType(MENU_CONDITIONAL);
  124. $menu_id = $menu_info['id'];
  125. }
  126. if (!empty($menu_id)) {
  127. $data['title'] = !empty($menu_info['title']) ? $menu_info['title'] : '个性化菜单_' . $menu_id;
  128. pdo_update('uni_account_menus', $data, array('uniacid' => $_W['uniacid'], 'id' => $menu_id));
  129. } else {
  130. pdo_insert('uni_account_menus', $data);
  131. $insert_id = pdo_insertid();
  132. pdo_update('uni_account_menus', array('title' => '个性化菜单_'.$insert_id), array('id' => $insert_id));
  133. }
  134. }
  135. }
  136. return true;
  137. }
  138. function menu_delete($id) {
  139. global $_W;
  140. $menu_info = menu_get($id);
  141. if (empty($menu_info)) {
  142. return error(-1, '菜单不存在或已经删除');
  143. }
  144. if ($menu_info['status'] == STATUS_OFF) {
  145. pdo_delete('uni_account_menus', array('uniacid' => $_W['uniacid'], 'id' => $id));
  146. return error(0, '删除菜单成功!');
  147. }
  148. if ($menu_info['type'] == MENU_CONDITIONAL && $menu_info['menuid'] > 0 && $menu_info['status'] != STATUS_OFF) {
  149. $account_api = WeAccount::createByUniacid();
  150. $result = $account_api->menuDelete($menu_info['menuid']);
  151. if (is_error($result)) {
  152. return error(-1, $result['message']);
  153. }
  154. pdo_delete('uni_account_menus', array('uniacid' => $_W['uniacid'], 'id' => $id));
  155. }
  156. return true;
  157. }
  158. function menu_push($id) {
  159. global $_W;
  160. $menu_info = menu_get($id);
  161. if (empty($menu_info)) {
  162. return error(-1, '菜单不存在或已删除');
  163. }
  164. if ($menu_info['status'] == STATUS_OFF) {
  165. $post = iunserializer(base64_decode($menu_info['data']));
  166. if (empty($post)) {
  167. return error(-1, '菜单数据错误');
  168. }
  169. $is_conditional = (!empty($post['matchrule']) && $menu_info['type'] == MENU_CONDITIONAL) ? true : false;
  170. $account_api = WeAccount::createByUniacid();
  171. $menu = $account_api->menuBuild($post, $is_conditional);
  172. $result = $account_api->menuCreate($menu);
  173. if (is_error($result)) {
  174. return error(-1, $result['message']);
  175. }
  176. if ($menu_info['type'] == MENU_CURRENTSELF) {
  177. pdo_update('uni_account_menus', array('status' => '1'), array('id' => $menu_info['id']));
  178. pdo_update('uni_account_menus', array('status' => '0'), array('id !=' => $menu_info['id'], 'uniacid' => $_W['uniacid'], 'type' => MENU_CURRENTSELF));
  179. } elseif ($menu_info['type'] == MENU_CONDITIONAL) {
  180. $post['matchrule']['group_id'] = empty($post['matchrule']['group_id']) ? 0 : $post['matchrule']['group_id'];
  181. if ($post['matchrule']['group_id'] != -1) {
  182. $menu['matchrule']['groupid'] = empty($menu['matchrule']['tag_id']) ? 0 : $menu['matchrule']['tag_id'];
  183. unset($menu['matchrule']['tag_id']);
  184. }
  185. $status = pdo_update('uni_account_menus', array('status' => STATUS_ON, 'menuid' => $result), array('uniacid' => $_W['uniacid'], 'id' => $menu_info['id']));
  186. }
  187. return true;
  188. }
  189. if ($menu_info['status'] == STATUS_ON && $menu_info['type'] == MENU_CONDITIONAL && $menu_info['menuid'] > 0) {
  190. $account_api = WeAccount::createByUniacid();
  191. $result = $account_api->menuDelete($menu_info['menuid']);
  192. if (is_error($result)) {
  193. return error(-1, $result['message']);
  194. } else {
  195. pdo_update('uni_account_menus', array('status' => STATUS_OFF), array('id' => $menu_info['id']));
  196. return true;
  197. }
  198. }
  199. }