cache.mod.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  1. <?php
  2. function cache_build_template() {
  3. load()->func('file');
  4. rmdirs(IA_ROOT . '/data/tpl', true);
  5. }
  6. function cache_build_setting() {
  7. $sql = "SELECT * FROM " . tablename('core_settings');
  8. $setting = pdo_fetchall($sql, array(), 'key');
  9. if (is_array($setting)) {
  10. foreach ($setting as $k => $v) {
  11. $setting[$v['key']] = iunserializer($v['value']);
  12. }
  13. cache_write("setting", $setting);
  14. }
  15. }
  16. function cache_build_module_status() {
  17. load()->model('cloud');
  18. $cloud_modules = cloud_m_query();
  19. $module_ban = is_array($cloud_modules['pirate_apps']) ? $cloud_modules['pirate_apps'] : array();
  20. $local_module = setting_load('module_ban');
  21. $update_modules = array_merge(array_diff($local_module, $module_ban), array_diff($module_ban, $local_module));
  22. if (!empty($update_modules)) {
  23. foreach ($update_modules as $module) {
  24. cache_build_module_info($module);
  25. }
  26. }
  27. setting_save($module_ban, 'module_ban');
  28. setting_save(array(), 'module_upgrade');
  29. }
  30. function cache_build_account_modules($uniacid = 0) {
  31. $uniacid = intval($uniacid);
  32. if (empty($uniacid)) {
  33. cache_clean(cache_system_key('unimodules'));
  34. cache_clean(cache_system_key('user_modules'));
  35. } else {
  36. cache_delete(cache_system_key("unimodules:{$uniacid}:1"));
  37. cache_delete(cache_system_key("unimodules:{$uniacid}:"));
  38. $owner_uid = pdo_getcolumn('uni_account_users', array('role' => 'owner'), 'uid');
  39. cache_delete(cache_system_key("user_modules:{$owner_uid}:"));
  40. }
  41. }
  42. function cache_build_account($uniacid = 0) {
  43. global $_W;
  44. $uniacid = intval($uniacid);
  45. if (empty($uniacid)) {
  46. $uniacid_arr = pdo_fetchall("SELECT uniacid FROM " . tablename('uni_account'));
  47. foreach($uniacid_arr as $account){
  48. cache_delete("uniaccount:{$account['uniacid']}");
  49. cache_delete("unisetting:{$account['uniacid']}");
  50. cache_delete("defaultgroupid:{$account['uniacid']}");
  51. }
  52. } else {
  53. cache_delete("uniaccount:{$uniacid}");
  54. cache_delete("unisetting:{$uniacid}");
  55. cache_delete("defaultgroupid:{$uniacid}");
  56. }
  57. }
  58. function cache_build_memberinfo($uid) {
  59. $uid = intval($uid);
  60. $cachekey = cache_system_key(CACHE_KEY_MEMBER_INFO, $uid);
  61. cache_delete($cachekey);
  62. return true;
  63. }
  64. function cache_build_users_struct() {
  65. $base_fields = array(
  66. 'uniacid' => '同一公众号id',
  67. 'groupid' => '分组id',
  68. 'credit1' => '积分',
  69. 'credit2' => '余额',
  70. 'credit3' => '预留积分类型3',
  71. 'credit4' => '预留积分类型4',
  72. 'credit5' => '预留积分类型5',
  73. 'credit6' => '预留积分类型6',
  74. 'createtime' => '加入时间',
  75. 'mobile' => '手机号码',
  76. 'email' => '电子邮箱',
  77. 'realname' => '真实姓名',
  78. 'nickname' => '昵称',
  79. 'avatar' => '头像',
  80. 'qq' => 'QQ号',
  81. 'gender' => '性别',
  82. 'birth' => '生日',
  83. 'constellation' => '星座',
  84. 'zodiac' => '生肖',
  85. 'telephone' => '固定电话',
  86. 'idcard' => '证件号码',
  87. 'studentid' => '学号',
  88. 'grade' => '班级',
  89. 'address' => '地址',
  90. 'zipcode' => '邮编',
  91. 'nationality' => '国籍',
  92. 'reside' => '居住地',
  93. 'graduateschool' => '毕业学校',
  94. 'company' => '公司',
  95. 'education' => '学历',
  96. 'occupation' => '职业',
  97. 'position' => '职位',
  98. 'revenue' => '年收入',
  99. 'affectivestatus' => '情感状态',
  100. 'lookingfor' => ' 交友目的',
  101. 'bloodtype' => '血型',
  102. 'height' => '身高',
  103. 'weight' => '体重',
  104. 'alipay' => '支付宝帐号',
  105. 'msn' => 'MSN',
  106. 'taobao' => '阿里旺旺',
  107. 'site' => '主页',
  108. 'bio' => '自我介绍',
  109. 'interest' => '兴趣爱好',
  110. 'password' => '密码',
  111. );
  112. cache_write('userbasefields', $base_fields);
  113. $fields = pdo_getall('profile_fields', array(), array(), 'field');
  114. if (!empty($fields)) {
  115. foreach ($fields as &$field) {
  116. $field = $field['title'];
  117. }
  118. $fields['uniacid'] = '同一公众号id';
  119. $fields['groupid'] = '分组id';
  120. $fields['credit1'] ='积分';
  121. $fields['credit2'] = '余额';
  122. $fields['credit3'] = '预留积分类型3';
  123. $fields['credit4'] = '预留积分类型4';
  124. $fields['credit5'] = '预留积分类型5';
  125. $fields['credit6'] = '预留积分类型6';
  126. $fields['createtime'] = '加入时间';
  127. $fields['password'] = '用户密码';
  128. cache_write('usersfields', $fields);
  129. } else {
  130. cache_write('usersfields', $base_fields);
  131. }
  132. }
  133. function cache_build_frame_menu() {
  134. global $_W;
  135. $system_menu_db = pdo_getall('core_menu', array('permission_name !=' => ''), array(), 'permission_name');
  136. $system_menu = require IA_ROOT . '/web/common/frames.inc.php';
  137. if (!empty($system_menu) && is_array($system_menu)) {
  138. $system_displayoder = 1;
  139. foreach ($system_menu as $menu_name => $menu) {
  140. $system_menu[$menu_name]['is_system'] = true;
  141. $system_menu[$menu_name]['is_display'] = empty($system_menu_db[$menu_name]) || !empty($system_menu_db[$menu_name]['is_display']) ? true : false;
  142. $system_menu[$menu_name]['displayorder'] = !empty($system_menu_db[$menu_name]) ? intval($system_menu_db[$menu_name]['displayorder']) : ++$system_displayoder;
  143. foreach ($menu['section'] as $section_name => $section) {
  144. $displayorder = max(count($section['menu']), 1);
  145. if (empty($section['menu'])) {
  146. $section['menu'] = array();
  147. }
  148. $add_menu = pdo_getall('core_menu', array('group_name' => $section_name), array(
  149. 'id', 'title', 'url', 'is_display', 'is_system', 'permission_name', 'displayorder', 'icon',
  150. ), 'permission_name', 'displayorder DESC');
  151. if (!empty($add_menu)) {
  152. foreach ($add_menu as $permission_name => $menu) {
  153. $menu['icon'] = !empty($menu['icon']) ? $menu['icon'] : 'wi wi-appsetting';
  154. $section['menu'][$permission_name] = $menu;
  155. }
  156. }
  157. $section_hidden_menu_count = 0;
  158. foreach ($section['menu'] as $permission_name => $sub_menu) {
  159. $sub_menu_db = $system_menu_db[$sub_menu['permission_name']];
  160. $system_menu[$menu_name]['section'][$section_name]['menu'][$permission_name] = array(
  161. 'is_system' => isset($sub_menu['is_system']) ? $sub_menu['is_system'] : 1,
  162. 'is_display' => isset($sub_menu['is_display']) && empty($sub_menu['is_display']) ? 0 : (isset($sub_menu_db['is_display']) ? $sub_menu_db['is_display'] : 1),
  163. 'title' => !empty($sub_menu_db['title']) ? $sub_menu_db['title'] : $sub_menu['title'],
  164. 'url' => $sub_menu['url'],
  165. 'permission_name' => $sub_menu['permission_name'],
  166. 'icon' => $sub_menu['icon'],
  167. 'displayorder' => !empty($sub_menu_db['displayorder']) ? $sub_menu_db['displayorder'] : $displayorder,
  168. 'id' => $sub_menu['id'],
  169. 'sub_permission' => $sub_menu['sub_permission'],
  170. );
  171. $displayorder--;
  172. $displayorder = max($displayorder, 0);
  173. if (empty($system_menu[$menu_name]['section'][$section_name]['menu'][$permission_name]['is_display'])) {
  174. $section_hidden_menu_count++;
  175. }
  176. }
  177. if (empty($section['is_display']) && $section_hidden_menu_count == count($section['menu']) && $section_name != 'platform_module') {
  178. $system_menu[$menu_name]['section'][$section_name]['is_display'] = 0;
  179. }
  180. $system_menu[$menu_name]['section'][$section_name]['menu'] = iarray_sort($system_menu[$menu_name]['section'][$section_name]['menu'], 'displayorder', 'desc');
  181. }
  182. }
  183. $add_top_nav = pdo_getall('core_menu', array('group_name' => 'frame', 'is_system <>' => 1), array('title', 'url', 'permission_name', 'displayorder'));
  184. if (!empty($add_top_nav)) {
  185. foreach ($add_top_nav as $menu) {
  186. $menu['url'] = strexists($menu['url'], 'http') ? $menu['url'] : $_W['siteroot'] . $menu['url'];
  187. $menu['blank'] = true;
  188. $menu['is_display'] = true;
  189. $system_menu[$menu['permission_name']] = $menu;
  190. }
  191. }
  192. $system_menu = iarray_sort($system_menu, 'displayorder', 'asc');
  193. cache_delete('system_frame');
  194. cache_write('system_frame', $system_menu);
  195. return $system_menu;
  196. }
  197. }
  198. function cache_build_module_subscribe_type() {
  199. global $_W;
  200. $modules = pdo_fetchall("SELECT name, subscribes FROM " . tablename('modules') . " WHERE subscribes <> ''");
  201. $subscribe = array();
  202. if (!empty($modules)) {
  203. foreach ($modules as $module) {
  204. $module['subscribes'] = unserialize($module['subscribes']);
  205. if (!empty($module['subscribes'])) {
  206. foreach ($module['subscribes'] as $event) {
  207. if ($event == 'text') {
  208. continue;
  209. }
  210. $subscribe[$event][] = $module['name'];
  211. }
  212. }
  213. }
  214. }
  215. $module_ban = $_W['setting']['module_receive_ban'];
  216. foreach ($subscribe as $event => $module_group) {
  217. if (!empty($module_group)) {
  218. foreach ($module_group as $index => $module) {
  219. if (!empty($module_ban[$module])) {
  220. unset($subscribe[$event][$index]);
  221. }
  222. }
  223. }
  224. }
  225. cache_write('module_receive_enable', $subscribe);
  226. return $subscribe;
  227. }
  228. function cache_build_cloud_ad() {
  229. global $_W;
  230. $uniacid_arr = pdo_fetchall("SELECT uniacid FROM " . tablename('uni_account'));
  231. foreach($uniacid_arr as $account){
  232. cache_delete("stat:todaylock:{$account['uniacid']}");
  233. cache_delete("cloud:ad:uniaccount:{$account['uniacid']}");
  234. cache_delete("cloud:ad:app:list:{$account['uniacid']}");
  235. }
  236. cache_delete("cloud:flow:master");
  237. cache_delete("cloud:ad:uniaccount:list");
  238. cache_delete("cloud:ad:tags");
  239. cache_delete("cloud:ad:type:list");
  240. cache_delete("cloud:ad:app:support:list");
  241. cache_delete("cloud:ad:site:finance");
  242. }
  243. function cache_build_uninstalled_module() {
  244. load()->model('cloud');
  245. load()->classs('cloudapi');
  246. load()->model('extension');
  247. load()->func('file');
  248. $cloud_api = new CloudApi();
  249. $cloud_m_count = $cloud_api->get('site', 'stat', array('module_quantity' => 1), 'json');
  250. $sql = 'SELECT * FROM '. tablename('modules') . " as a LEFT JOIN" . tablename('modules_recycle') . " as b ON a.name = b.modulename WHERE b.modulename is NULL";
  251. $installed_module = pdo_fetchall($sql, array(), 'name');
  252. $uninstallModules = array('recycle' => array(), 'uninstalled' => array());
  253. $recycle_modules = pdo_getall('modules_recycle', array(), array(), 'modulename');
  254. $recycle_modules = array_keys($recycle_modules);
  255. $cloud_module = cloud_m_query();
  256. if (!empty($cloud_module) && !is_error($cloud_module)) {
  257. foreach ($cloud_module as $module) {
  258. $upgrade_support_module = false;
  259. $wxapp_support = !empty($module['site_branch']['wxapp_support']) && is_array($module['site_branch']['bought']) && in_array('wxapp', $module['site_branch']['bought']) ? $module['site_branch']['wxapp_support'] : 1;
  260. $app_support = !empty($module['site_branch']['app_support']) && is_array($module['site_branch']['bought']) && in_array('app', $module['site_branch']['bought']) ? $module['site_branch']['app_support'] : 1;
  261. if ($wxapp_support == 1 && $app_support == 1) {
  262. $app_support = 2;
  263. }
  264. if (!empty($installed_module[$module['name']]) && ($installed_module[$module['name']]['app_support'] != $app_support || $installed_module[$module['name']]['wxapp_support'] != $wxapp_support)) {
  265. $upgrade_support_module = true;
  266. }
  267. if (!in_array($module['name'], array_keys($installed_module)) || $upgrade_support_module) {
  268. $status = in_array($module['name'], $recycle_modules) ? 'recycle' : 'uninstalled';
  269. if (!empty($module['id'])) {
  270. $cloud_module_info = array (
  271. 'from' => 'cloud',
  272. 'name' => $module['name'],
  273. 'version' => $module['version'],
  274. 'title' => $module['title'],
  275. 'thumb' => $module['thumb'],
  276. 'wxapp_support' => $wxapp_support,
  277. 'app_support' => $app_support,
  278. 'main_module' => empty($module['main_module']) ? '' : $module['main_module'],
  279. 'upgrade_support' => $upgrade_support_module
  280. );
  281. if ($upgrade_support_module) {
  282. if ($wxapp_support == 2 && $installed_module[$module['name']]['wxapp_support'] != 2) {
  283. $uninstallModules[$status]['wxapp'][$module['name']] = $cloud_module_info;
  284. }
  285. if ($app_support == 2 && $installed_module[$module['name']]['app_support'] != 2) {
  286. $uninstallModules[$status]['app'][$module['name']] = $cloud_module_info;
  287. }
  288. } else {
  289. if ($wxapp_support == 2) {
  290. $uninstallModules[$status]['wxapp'][$module['name']] = $cloud_module_info;
  291. }
  292. if ($app_support == 2) {
  293. $uninstallModules[$status]['app'][$module['name']] = $cloud_module_info;
  294. }
  295. }
  296. }
  297. }
  298. }
  299. }
  300. $path = IA_ROOT . '/addons/';
  301. mkdirs($path);
  302. $module_file = glob($path . '*');
  303. if (is_array($module_file) && !empty($module_file)) {
  304. foreach ($module_file as $modulepath) {
  305. $upgrade_support_module = false;
  306. $modulepath = str_replace($path, '', $modulepath);
  307. $manifest = ext_module_manifest($modulepath);
  308. if (!is_array($manifest) || empty($manifest) || empty($manifest['application']['identifie'])) {
  309. continue;
  310. }
  311. $main_module = empty($manifest['platform']['main_module']) ? '' : $manifest['platform']['main_module'];
  312. $manifest = ext_module_convert($manifest);
  313. if (!empty($installed_module[$modulepath]) && ($manifest['app_support'] != $installed_module[$modulepath]['app_support'] || $manifest['wxapp_support'] != $installed_module[$modulepath]['wxapp_support'])) {
  314. $upgrade_support_module = true;
  315. }
  316. if (!in_array($manifest['name'], array_keys($installed_module)) || $upgrade_support_module) {
  317. $module[$manifest['name']] = $manifest;
  318. $module_info = array(
  319. 'from' => 'local',
  320. 'name' => $manifest['name'],
  321. 'version' => $manifest['version'],
  322. 'title' => $manifest['title'],
  323. 'app_support' => $manifest['app_support'],
  324. 'wxapp_support' => $manifest['wxapp_support'],
  325. 'main_module' => $main_module,
  326. 'upgrade_support' => $upgrade_support_module
  327. );
  328. $module_type = in_array($manifest['name'], $recycle_modules) ? 'recycle' : 'uninstalled';
  329. if ($upgrade_support_module) {
  330. if ($module_info['app_support'] == 2 && $installed_module[$module_info['name']]['app_support'] != 2) {
  331. $uninstallModules['uninstalled']['app'][$manifest['name']] = $module_info;
  332. }
  333. if ($module_info['wxapp_support'] == 2 && $installed_module[$module_info['name']]['wxapp_support'] != 2) {
  334. $uninstallModules['uninstalled']['wxapp'][$manifest['name']] = $module_info;
  335. }
  336. } else {
  337. if ($module_info['app_support'] == 2) {
  338. $uninstallModules[$module_type]['app'][$manifest['name']] = $module_info;
  339. }
  340. if ($module_info['wxapp_support'] == 2) {
  341. $uninstallModules[$module_type]['wxapp'][$manifest['name']] = $module_info;
  342. }
  343. }
  344. }
  345. }
  346. }
  347. $cache = array(
  348. 'cloud_m_count' => $cloud_m_count['module_quantity'],
  349. 'modules' => $uninstallModules,
  350. 'app_count' => count($uninstallModules['uninstalled']['app']),
  351. 'wxapp_count' => count($uninstallModules['uninstalled']['wxapp'])
  352. );
  353. cache_write(cache_system_key('module:all_uninstall'), $cache, CACHE_EXPIRE_LONG);
  354. return $cache;
  355. }
  356. function cache_build_proxy_wechatpay_account() {
  357. global $_W;
  358. load()->model('account');
  359. if(empty($_W['isfounder'])) {
  360. $where = " WHERE `uniacid` IN (SELECT `uniacid` FROM " . tablename('uni_account_users') . " WHERE `uid`=:uid)";
  361. $params[':uid'] = $_W['uid'];
  362. }
  363. $sql = "SELECT * FROM " . tablename('uni_account') . $where;
  364. $uniaccounts = pdo_fetchall($sql, $params);
  365. $service = array();
  366. $borrow = array();
  367. if (!empty($uniaccounts)) {
  368. foreach ($uniaccounts as $uniaccount) {
  369. $account = account_fetch($uniaccount['default_acid']);
  370. $account_setting = pdo_get('uni_settings', array ('uniacid' => $account['uniacid']));
  371. $payment = iunserializer($account_setting['payment']);
  372. if (is_array($account) && !empty($account['key']) && !empty($account['secret']) && in_array($account['level'], array (4)) &&
  373. is_array($payment) && !empty($payment) && intval($payment['wechat']['switch']) == 1) {
  374. if ((!is_bool ($payment['wechat']['switch']) && $payment['wechat']['switch'] != 4) || (is_bool ($payment['wechat']['switch']) && !empty($payment['wechat']['switch']))) {
  375. $borrow[$account['uniacid']] = $account['name'];
  376. }
  377. }
  378. if (!empty($payment['wechat_facilitator']['switch'])) {
  379. $service[$account['uniacid']] = $account['name'];
  380. }
  381. }
  382. }
  383. $cache = array(
  384. 'service' => $service,
  385. 'borrow' => $borrow
  386. );
  387. cache_write(cache_system_key("proxy_wechatpay_account:"), $cache);
  388. return $cache;
  389. }
  390. function cache_build_module_info($module_name) {
  391. global $_W;
  392. cache_delete(cache_system_key(CACHE_KEY_MODULE_INFO, $module_name));
  393. cache_delete(cache_system_key(CACHE_KEY_MODULE_SETTING, $_W['uniacid'], $module_name));
  394. }
  395. function cache_build_uni_group() {
  396. cache_delete(cache_system_key(CACHE_KEY_UNI_GROUP));
  397. }
  398. function cache_build_cloud_upgrade_module() {
  399. load()->model('cloud');
  400. load()->model('extension');
  401. $module_list = pdo_getall('modules', array(), array(), 'name');
  402. $cloud_module = cloud_m_query();
  403. $modules = array();
  404. if (is_array($module_list) && !empty($module_list)) {
  405. foreach ($module_list as $module) {
  406. if (in_array($module['name'], array_keys($cloud_module))) {
  407. $cloud_m_info = $cloud_module[$module['name']];
  408. $module['site_branch'] = $cloud_m_info['site_branch']['id'];
  409. if (empty($module['site_branch'])) {
  410. $module['site_branch'] = $cloud_m_info['branch'];
  411. }
  412. $cloud_branch_version = $cloud_m_info['branches'][$module['site_branch']]['version'];
  413. if (!empty($cloud_m_info['branches'])) {
  414. $best_branch_id = 0;
  415. foreach ($cloud_m_info['branches'] as $branch) {
  416. if ($best_branch_id == 0) {
  417. $best_branch_id = $branch['id'];
  418. } else {
  419. if ($branch['displayorder'] > $cloud_m_info['branches'][$best_branch_id]['displayorder']) {
  420. $best_branch_id = $branch['id'];
  421. }
  422. }
  423. }
  424. } else {
  425. continue;
  426. }
  427. $module['branches'] = $cloud_m_info['branches'];
  428. $best_branch = $cloud_m_info['branches'][$best_branch_id];
  429. $module['from'] = 'cloud';
  430. if (version_compare($module['version'], $cloud_branch_version) == -1) {
  431. $module['upgrade_branch'] = true;
  432. $module['upgrade'] = true;
  433. }
  434. if ($cloud_m_info['displayorder'] < $best_branch['displayorder']) {
  435. $module['new_branch'] = true;
  436. $module['upgrade'] = true;
  437. }
  438. if ($module['upgrade']) {
  439. $modules[$module['name']] = $module;
  440. }
  441. }
  442. }
  443. } else {
  444. return array();
  445. }
  446. cache_write(cache_system_key('all_cloud_upgrade_module:'), $modules, 1800);
  447. return $modules;
  448. }