137 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
| <?php namespace Gdoo\Wechat\Controllers;
 | |
| 
 | |
| use Request;
 | |
| use DB;
 | |
| 
 | |
| use Gdoo\System\Models\Setting;
 | |
| use Gdoo\Wechat\Models\Config;
 | |
| 
 | |
| use Gdoo\Wechat\Services\WechatService;
 | |
| use Gdoo\Wechat\Services\MenuService;
 | |
| 
 | |
| use Gdoo\Index\Controllers\DefaultController;
 | |
| 
 | |
| class ConfigController extends DefaultController
 | |
| {
 | |
|     public $permission = [];
 | |
| 
 | |
|     protected $layout = 'layouts.wechat';
 | |
| 
 | |
|     protected $menu = [];
 | |
|     protected $config = [];
 | |
| 
 | |
|     public function __construct(MenuService $menu) {
 | |
|         parent::__construct();
 | |
|         $this->menu = $menu;
 | |
|     }
 | |
| 
 | |
|     public function config()
 | |
|     {
 | |
|         if (Request::method() == 'POST') {
 | |
|             $gets = Request::all();
 | |
|             foreach ($gets as $key => $value) {
 | |
|                 Setting::where('type', 'wechat')->where('key', $key)->update([
 | |
|                     'value' => $value,
 | |
|                 ]);
 | |
|             }
 | |
|             return $this->json('保存成功。', true);
 | |
|         }
 | |
|         $header['tabs'] = Config::$tabs;
 | |
|         $app = Setting::where('type', 'wechat')->pluck('value', 'key');
 | |
|         return $this->display([
 | |
|             'app' => $app,
 | |
|             'header' => $header,
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 自定义菜单
 | |
|      */
 | |
|     public function menu()
 | |
|     {
 | |
|         if (Request::ajax()) {
 | |
|             
 | |
|             $app = WechatService::getApp();
 | |
| 
 | |
|             $gets = Request::all();
 | |
|             $data = $gets['data'];
 | |
| 
 | |
|             // 空菜单认为删除全部菜单
 | |
|             if (empty($data)) {
 | |
|                 Setting::where('type', 'wechat')->where('key', 'menu')->update(['value' => '']);
 | |
|                 $app->menu->delete();
 | |
|                 return $this->json('保存成功', true);
 | |
|             }
 | |
|             $menu_type = [
 | |
|                 'view' => '跳转URL',
 | |
|                 'click' => '点击推事件',
 | |
|                 'scancode_push' => '扫码推事件',
 | |
|                 'scancode_waitmsg' => '扫码推事件且弹出“消息接收中”提示框',
 | |
|                 'pic_sysphoto' => '弹出系统拍照发图',
 | |
|                 'pic_photo_or_album' => '弹出拍照或者相册发图',
 | |
|                 'pic_weixin' => '弹出微信相册发图器',
 | |
|                 'location_select' => '弹出地理位置选择器',
 | |
|             ];
 | |
| 
 | |
|             Setting::where('type', 'wechat')->where('key', 'menu')->update([
 | |
|                 'value' => json_encode($data, JSON_UNESCAPED_UNICODE)
 | |
|             ]);
 | |
|             
 | |
|             foreach ($data as &$row) {
 | |
|                 if (empty($row['content'])) {
 | |
|                     $row['content'] = uniqid();
 | |
|                 }
 | |
|                 switch ($row['type']) {
 | |
|                     case 'miniprogram':
 | |
|                         list($row['appid'], $row['url'], $row['pagepath']) = explode(',', $row['content'].',,');
 | |
|                         break;
 | |
|                     case 'view':
 | |
|                         $row['url'] = preg_match('#^(\w+:)?//#i', $row['content']) ? $row['content'] : url($row['content']);
 | |
|                         break;
 | |
|                     case 'event':
 | |
|                         if (isset($menu_type[$row['content']])) {
 | |
|                             $row['type'] = $row['content'];
 | |
|                             $row['key'] = "wechat_menu#id#{$row['id']}";
 | |
|                         }
 | |
|                         break;
 | |
|                     case 'media_id':
 | |
|                         $row['media_id'] = $row['content'];
 | |
|                         break;
 | |
|                     default:
 | |
|                         (!in_array($row['type'], $menu_type)) && $row['type'] = 'click';
 | |
|                         $row['key'] = "{$row['content']}";
 | |
|                 }
 | |
|                 unset($row['content']);
 | |
|             }
 | |
| 
 | |
|             $menus = $this->menu->GetTreeByMenu($data, 'index', 'pindex', 'sub_button');
 | |
|             foreach ($menus as &$menu) {
 | |
|                 unset($menu['index'], $menu['pindex'], $menu['id']);
 | |
|                 if (empty($menu['sub_button'])) {
 | |
|                     continue;
 | |
|                 }
 | |
|                 foreach ($menu['sub_button'] as &$submenu) {
 | |
|                     unset($submenu['index'], $submenu['pindex'], $submenu['id']);
 | |
|                 }
 | |
|                 unset($menu['type']);
 | |
|             }
 | |
| 
 | |
|             $ret = $app->menu->create($menus);
 | |
|             if ($ret['errcode'] == 0) {
 | |
|                 return $this->json('发布成功', true);
 | |
|             } else {
 | |
|                 return $this->json('errcode:'.$ret['errcode'].' errmsg:'.$ret['errmsg']);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         $app = Setting::where('type', 'wechat')->pluck('value', 'key');
 | |
|         $menus = (array)json_decode($app['menu'], JSON_UNESCAPED_UNICODE);
 | |
|         $menus = $this->menu->GetTreeByMenu($menus, 'index', 'pindex');
 | |
|         $header['tabs'] = Config::$tabs;
 | |
|         return $this->display([
 | |
|             'header' => $header,
 | |
|             'menus' => $menus,
 | |
|         ]);
 | |
|     }
 | |
| }
 |