InstallController.class.php
3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php
/**
* 应用安装时的消息回调
* User: zhuxun37
* Date: 16/8/11
* Time: 下午3:44
*/
namespace Frontend\Controller\Callback;
use Common\Sql\DefaultData;
use Think\Log;
use VcySDK\Service;
use Common\Service\SettingService;
use VcySDK\WxQy\Menu;
class InstallController extends AbstractController
{
/**
* 安装消息回调
*
* $this->callBackData 格式如下:
* {
* "epId":"772FF3D97F0000017A0F28797968B245",
* "plPluginid":"D194A216C0A8C7BD2C339C03334A40EE",
* "thirdIdentifier":"QY",
* "eplAvailable":1,
* "epEnumber":"t5thr",
* "qysSuiteid":"tjb2af82c5590f1698",
* "flag":false,
* "corpid": "wx59cc12dbc3a0fe4c",
* "url":"http://thr.vchangyi.com/t5thr/Jobtrain/Frontend/Callback/Install"
* }
*
* @return bool
*/
public function Index()
{
Log::record(sprintf('---%s %s INSTALL START---', QY_DOMAIN, APP_IDENTIFIER), Log::INFO);
Log::record(var_export($this->callBackData, true), Log::INFO);
Log::record(sprintf('---%s %s INSTALL END ---', QY_DOMAIN, APP_IDENTIFIER), Log::INFO);
// 处理回调数据
$settingServ = new SettingService();
$serv = &Service::instance();
$serv->callbackSetSetting($this->callBackData, $settingServ);
// 初始化数据
$this->initData();
exit('SUCCESS');
}
/**
* 安装应用
* @return bool
*/
public function initData()
{
$setServ = new SettingService();
// 默认数据
$settings = DefaultData::$s_settings;
// 获取所有的key
$keys = array_column($settings, 'key');
// 读取所有记录
$list = $setServ->list_by_conds(array('key' => $keys));
$keyExists = array_column($list, 'key');
// 更新缺失配置
foreach ($settings as $_set) {
if (in_array($_set['key'], $keyExists)) {
continue;
}
// 序列化数组
if (is_array($_set['value'])) {
$_set['value'] = serialize($_set['value']);
}
$setServ->insert($_set);
}
return true;
}
/**
* 替换标签
* @param array $menus 菜单数据
* @return bool
*/
protected function _convertMenu(&$menus)
{
foreach ($menus as $_key => &$_url) {
if (is_string($_url) && 'url' == $_key) {
$_url = str_replace(
array('{HOST}', '{ENUMBER}', '{PLUGINID}'),
array($_SERVER['HTTP_HOST'], QY_DOMAIN, $this->_setting['pluginid']),
$_url
);
} elseif (is_array($_url)) {
$this->_convertMenu($_url);
}
}
return true;
}
/**
* 设置菜单
*
* @return void
*/
protected function _setMenu()
{
// 读取菜单配置
$menus = cfg('WeixinMenu');
$this->_convertMenu($menus);
// 实例化消息
$m_service = new Menu(Service::instance());
// 提交菜单到UC
$params = array(
'buttons' => $menus,
'callbackUrl' => oaUrl('Frontend/Callback/ThirdMessage/Index')
);
$m_service->create($params);
}
}