cache.mod.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589
  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. function cache_build_template() {
  7. load()->func('file');
  8. rmdirs(IA_ROOT . '/data/tpl', true);
  9. }
  10. function cache_build_setting() {
  11. $setting = table('core_settings')->getall('key');
  12. if (is_array($setting)) {
  13. foreach ($setting as $k => $v) {
  14. $setting[$v['key']] = iunserializer($v['value']);
  15. }
  16. cache_write(cache_system_key('setting'), $setting);
  17. }
  18. }
  19. function cache_build_account_modules($uniacid = 0, $uid = 0) {
  20. load()->model('phoneapp');
  21. load()->model('miniapp');
  22. $uniacid = intval($uniacid);
  23. if (empty($uniacid)) {
  24. cache_clean(cache_system_key('unimodules'));
  25. if (!empty($uid)) {
  26. cache_delete(cache_system_key('user_modules', array('uid' => $uid)));
  27. } else {
  28. cache_clean(cache_system_key('user_modules'));
  29. }
  30. return true;
  31. } else {
  32. cache_clean(cache_system_key('unimodules', array('uniacid' => $uniacid)));
  33. if (empty($uid)) {
  34. $uid = table('uni_account_users')->getUidByUniacidAndRole($uniacid, 'owner');
  35. }
  36. cache_delete(cache_system_key('user_modules', array('uid' => $uid)));
  37. }
  38. $account_info = uni_fetch($uniacid);
  39. if (is_error($account_info)) {
  40. return false;
  41. }
  42. $uni_modules_new = uni_modules_by_uniacid($uniacid);
  43. $module_system = module_system();
  44. foreach ($uni_modules_new as $uni_module_new_key => $uni_module_new_val) {
  45. if (in_array($uni_module_new_key, $module_system)) {
  46. unset($uni_modules_new[$uni_module_new_key]);
  47. } elseif ($account_info->typeSign == 'wxapp' && $uni_module_new_val[MODULE_SUPPORT_WXAPP_NAME] != MODULE_SUPPORT_WXAPP) {
  48. unset($uni_modules_new[$uni_module_new_key]);
  49. }
  50. }
  51. $uni_modules_new = array_keys($uni_modules_new);
  52. if ($account_info->supportVersion) {
  53. $version_modules = array();
  54. if ($account_info['type'] == ACCOUNT_TYPE_PHONEAPP_NORMAL) {
  55. $version_all = phoneapp_version_all($uniacid);
  56. }
  57. if (in_array($account_info['type'], array(ACCOUNT_TYPE_APP_NORMAL, ACCOUNT_TYPE_APP_AUTH))) {
  58. $version_all = miniapp_version_all($uniacid);
  59. }
  60. if (!empty($version_all)) {
  61. foreach ($version_all as $version_key => $version_val) {
  62. if (empty($version_val['modules'])) {
  63. continue;
  64. }
  65. foreach ($version_val['modules'] as $module_name => $module_info) {
  66. $version_modules[] = $module_name;
  67. }
  68. }
  69. }
  70. foreach ($uni_modules_new as $uni_module_key => $uni_module_val) {
  71. if (empty($uni_module_val)) {
  72. continue;
  73. }
  74. if (empty($version_modules) || !in_array($uni_module_val, $version_modules)) {
  75. pdo_delete('users_lastuse', array('uniacid' => $uniacid, 'modulename' => $uni_module_val));
  76. }
  77. }
  78. }
  79. $uni_account_modules = table('uni_modules')->getallByUniacid($uniacid);
  80. $uni_account_modules = array_column($uni_account_modules, 'module_name');
  81. $uni_modules_add = array_diff($uni_modules_new, $uni_account_modules);
  82. $uni_modules_delete = array_diff($uni_account_modules, $uni_modules_new);
  83. $users_lastuse_table = table('users_lastuse');
  84. $users_lastuse_table->searchWithUniacid($uniacid);
  85. $uni_modules_default_list = $users_lastuse_table->getall('modulename');
  86. $uni_modules_default_delete = array_diff(array_keys($uni_modules_default_list), $uni_modules_new);
  87. if (!empty($uni_modules_default_delete)) {
  88. foreach ($uni_modules_default_delete as $module_default_delete_name) {
  89. if (empty($module_default_delete_name)) {
  90. continue;
  91. }
  92. pdo_delete('users_lastuse', array('uniacid' => $uniacid, 'modulename' => $module_default_delete_name));
  93. }
  94. }
  95. if (!empty($uni_modules_add)) {
  96. foreach ($uni_modules_add as $module_add_name) {
  97. $account_modules_data = array('uniacid' => $uniacid, 'module_name' => $module_add_name);
  98. pdo_insert('uni_modules', $account_modules_data);
  99. }
  100. }
  101. if (!empty($uni_modules_delete)) {
  102. $modules_info = pdo_getall('wxapp_versions', array('uniacid' => $uniacid, 'type in' => array(WXAPP_CREATE_MODULE, WXAPP_CREATE_MUTI_MODULE)), array('modules'));
  103. if (!empty($modules_info)) {
  104. $modules = '';
  105. foreach ($modules_info as $module_info) {
  106. $modules_name = array_keys(iunserializer($module_info['modules']));
  107. $modules .= implode(',', $modules_name) . ',';
  108. }
  109. }
  110. foreach ($uni_modules_delete as $mdoule_delete_name) {
  111. if (!empty($modules) && in_array($mdoule_delete_name, array_unique(explode(',', rtrim($modules, ','))))) {
  112. continue;
  113. }
  114. pdo_delete('uni_modules', array('uniacid' => $uniacid, 'module_name' => $mdoule_delete_name));
  115. }
  116. }
  117. $modules_rank_table = table('modules_rank');
  118. $modules_rank_list = $modules_rank_table->getModuleListByUidAndUniacid();
  119. $modules_rank_list = array_keys($modules_rank_list);
  120. $modules_rank_add = array_diff($uni_account_modules, $modules_rank_list);
  121. $modules_rank_delete = array_diff($modules_rank_list, $uni_account_modules);
  122. asort($modules_rank_add);
  123. asort($modules_rank_delete);
  124. if (!empty($modules_rank_add)) {
  125. foreach ($modules_rank_add as $uni_account_module_key => $uni_account_module_name) {
  126. $modules_rank_data = array('uid' => $uid, 'uniacid' => $uniacid, 'module_name' => $uni_account_module_name, 'rank' => $uni_account_module_key);
  127. pdo_insert('modules_rank', $modules_rank_data);
  128. }
  129. }
  130. if (!empty($modules_rank_delete)) {
  131. foreach ($modules_rank_delete as $uni_account_module_name) {
  132. $modules_rank_data = array('uid' => $uid, 'uniacid' => $uniacid, 'module_name' => $uni_account_module_name);
  133. pdo_delete('modules_rank', $modules_rank_data);
  134. }
  135. }
  136. return true;
  137. }
  138. function cache_build_account($uniacid = 0) {
  139. $uniacid = intval($uniacid);
  140. if (empty($uniacid)) {
  141. $uniacid_arr = table('account')->getAll();
  142. foreach ($uniacid_arr as $account) {
  143. cache_delete(cache_system_key('uniaccount', array('uniacid' => $account['uniacid'])));
  144. cache_delete(cache_system_key('defaultgroupid', array('uniacid' => $account['uniacid'])));
  145. }
  146. } else {
  147. cache_delete(cache_system_key('uniaccount', array('uniacid' => $uniacid)));
  148. cache_delete(cache_system_key('defaultgroupid', array('uniacid' => $uniacid)));
  149. }
  150. return true;
  151. }
  152. function cache_build_memberinfo($uid) {
  153. $uid = intval($uid);
  154. cache_delete(cache_system_key('memberinfo', array('uid' => $uid)));
  155. return true;
  156. }
  157. function cache_build_users_struct() {
  158. $base_fields = array(
  159. 'uniacid' => '同一公众号id',
  160. 'groupid' => '分组id',
  161. 'credit1' => '积分',
  162. 'credit2' => '余额',
  163. 'credit3' => '预留积分类型3',
  164. 'credit4' => '预留积分类型4',
  165. 'credit5' => '预留积分类型5',
  166. 'credit6' => '预留积分类型6',
  167. 'createtime' => '加入时间',
  168. 'mobile' => '手机号码',
  169. 'email' => '电子邮箱',
  170. 'realname' => '真实姓名',
  171. 'nickname' => '昵称',
  172. 'avatar' => '头像',
  173. 'qq' => 'QQ号',
  174. 'gender' => '性别',
  175. 'birth' => '生日',
  176. 'constellation' => '星座',
  177. 'zodiac' => '生肖',
  178. 'telephone' => '固定电话',
  179. 'idcard' => '证件号码',
  180. 'studentid' => '学号',
  181. 'grade' => '班级',
  182. 'address' => '地址',
  183. 'zipcode' => '邮编',
  184. 'nationality' => '国籍',
  185. 'reside' => '居住地',
  186. 'graduateschool' => '毕业学校',
  187. 'company' => '公司',
  188. 'education' => '学历',
  189. 'occupation' => '职业',
  190. 'position' => '职位',
  191. 'revenue' => '年收入',
  192. 'affectivestatus' => '情感状态',
  193. 'lookingfor' => ' 交友目的',
  194. 'bloodtype' => '血型',
  195. 'height' => '身高',
  196. 'weight' => '体重',
  197. 'alipay' => '支付宝帐号',
  198. 'msn' => 'MSN',
  199. 'taobao' => '阿里旺旺',
  200. 'site' => '主页',
  201. 'bio' => '自我介绍',
  202. 'interest' => '兴趣爱好',
  203. 'password' => '密码',
  204. 'pay_password' => '支付密码',
  205. );
  206. cache_write(cache_system_key('userbasefields'), $base_fields);
  207. $fields = table('core_profile_fields')->getall('field');
  208. if (!empty($fields)) {
  209. foreach ($fields as &$field) {
  210. $field = $field['title'];
  211. }
  212. $fields['uniacid'] = '同一公众号id';
  213. $fields['groupid'] = '分组id';
  214. $fields['credit1'] = '积分';
  215. $fields['credit2'] = '余额';
  216. $fields['credit3'] = '预留积分类型3';
  217. $fields['credit4'] = '预留积分类型4';
  218. $fields['credit5'] = '预留积分类型5';
  219. $fields['credit6'] = '预留积分类型6';
  220. $fields['createtime'] = '加入时间';
  221. $fields['password'] = '用户密码';
  222. $fields['pay_password'] = '支付密码';
  223. cache_write(cache_system_key('usersfields'), $fields);
  224. } else {
  225. cache_write(cache_system_key('usersfields'), $base_fields);
  226. }
  227. }
  228. function cache_build_frame_menu() {
  229. global $_W;
  230. load()->model('system');
  231. $menu_table = table('core_menu');
  232. $system_menu_db = $menu_table->getAllByPermissionNameNotEmpty();
  233. $account = pdo_get('account', array('uniacid' => $_W['uniacid']));
  234. $system_menu = system_menu();
  235. if (!empty($system_menu) && is_array($system_menu)) {
  236. $system_displayoder = 1;
  237. foreach ($system_menu as $menu_name => $menu) {
  238. $system_menu[$menu_name]['is_system'] = 1;
  239. $system_menu[$menu_name]['is_display'] = !empty($system_menu_db[$menu_name]['is_display']) ? 1 : ((isset($system_menu[$menu_name]['is_display']) && empty($system_menu[$menu_name]['is_display']) || !empty($system_menu_db[$menu_name])) ? 0 : 1);
  240. $system_menu[$menu_name]['displayorder'] = !empty($system_menu_db[$menu_name]) ? intval($system_menu_db[$menu_name]['displayorder']) : ++$system_displayoder;
  241. if ($_W['role'] == ACCOUNT_MANAGE_NAME_EXPIRED && $menu_name != 'system') {
  242. $system_menu[$menu_name]['is_display'] = 0;
  243. }
  244. if ($menu_name == 'appmarket') {
  245. $system_menu[$menu_name]['is_display'] = 1;
  246. }
  247. foreach ($menu['section'] as $section_name => $section) {
  248. $displayorder = max(count($section['menu']), 1);
  249. if (empty($section['menu'])) {
  250. $section['menu'] = array();
  251. }
  252. $menu_table->searchWithGroupName($section_name);
  253. $menu_table->orderby('displayorder', 'DESC');
  254. $add_menu = $menu_table->getall('permission_name');
  255. if (!empty($add_menu)) {
  256. foreach ($add_menu as $permission_name => $menu) {
  257. $menu['icon'] = !empty($menu['icon']) ? $menu['icon'] : 'wi wi-appsetting';
  258. $section['menu'][$permission_name] = $menu;
  259. }
  260. }
  261. $section_hidden_menu_count = 0;
  262. foreach ($section['menu'] as $permission_name => $sub_menu) {
  263. $sub_menu['permission_name'] = !empty($sub_menu['permission_name']) ? $sub_menu['permission_name'] : $permission_name;
  264. $sub_menu_db = empty($system_menu_db[$sub_menu['permission_name']]) ? '' : $system_menu_db[$sub_menu['permission_name']];
  265. $is_display = 1;
  266. if (isset($sub_menu_db['is_display']) && empty($sub_menu_db['is_display'])) {
  267. $is_display = 0;
  268. }
  269. if ($is_display && isset($sub_menu['is_display'])) {
  270. if (empty($sub_menu['is_display'])) {
  271. unset($system_menu[$menu_name]['section'][$section_name]['menu'][$permission_name]);
  272. continue;
  273. }
  274. if (empty($_W['isw7_request']) && is_array($sub_menu['is_display']) && !in_array($account['type'], $sub_menu['is_display'])) {
  275. $is_display = 0;
  276. }
  277. }
  278. $system_menu[$menu_name]['section'][$section_name]['menu'][$permission_name] = array(
  279. 'is_system' => isset($sub_menu['is_system']) ? $sub_menu['is_system'] : 1,
  280. 'permission_display' => empty($sub_menu['is_display']) ? '' : $sub_menu['is_display'],
  281. 'is_display' => $is_display,
  282. 'title' => !empty($sub_menu_db['title']) ? $sub_menu_db['title'] : $sub_menu['title'],
  283. 'url' => $sub_menu['url'],
  284. 'permission_name' => $sub_menu['permission_name'],
  285. 'icon' => empty($sub_menu['icon']) ? '' : $sub_menu['icon'],
  286. 'displayorder' => !empty($sub_menu_db['displayorder']) ? $sub_menu_db['displayorder'] : $displayorder,
  287. 'id' => empty($sub_menu['id']) ? '' : $sub_menu['id'],
  288. 'sub_permission' => empty($sub_menu['sub_permission']) ? '' : $sub_menu['sub_permission'],
  289. );
  290. $displayorder--;
  291. $displayorder = max($displayorder, 0);
  292. if (empty($system_menu[$menu_name]['section'][$section_name]['menu'][$permission_name]['is_display'])) {
  293. $section_hidden_menu_count++;
  294. }
  295. }
  296. if (empty($section['is_display']) && $section_hidden_menu_count == count($section['menu']) && $section_name != 'platform_module') {
  297. $system_menu[$menu_name]['section'][$section_name]['is_display'] = 0;
  298. }
  299. $system_menu[$menu_name]['section'][$section_name]['menu'] = iarray_sort($system_menu[$menu_name]['section'][$section_name]['menu'], 'displayorder', 'desc');
  300. }
  301. }
  302. $add_top_nav = $menu_table->searchWithGroupName('frame')->getTopMenu();
  303. if (!empty($add_top_nav)) {
  304. foreach ($add_top_nav as $menu) {
  305. $system_menu[$menu['permission_name']] = $menu;
  306. if (!empty($menu['url'])) {
  307. $system_menu[$menu['permission_name']]['url'] = $menu['url'];
  308. }
  309. $menu['blank'] = true;
  310. $system_menu[$menu['permission_name']]['is_display'] = $menu['is_display'] == 0 ? 0 : 1;
  311. }
  312. }
  313. $system_menu = iarray_sort($system_menu, 'displayorder', 'asc');
  314. cache_delete(cache_system_key('system_frame', array('uniacid' => $_W['uniacid'])));
  315. cache_write(cache_system_key('system_frame', array('uniacid' => $_W['uniacid'])), $system_menu);
  316. return $system_menu;
  317. }
  318. }
  319. function cache_build_module_subscribe_type() {
  320. global $_W;
  321. $modules = table('modules')->getByHasSubscribes();
  322. if (empty($modules)) {
  323. return array();
  324. }
  325. $subscribe = array();
  326. foreach ($modules as $module) {
  327. $module['subscribes'] = iunserializer($module['subscribes']);
  328. if (!empty($module['subscribes'])) {
  329. foreach ($module['subscribes'] as $event) {
  330. if ($event == 'text') {
  331. continue;
  332. }
  333. $subscribe[$event][] = $module['name'];
  334. }
  335. }
  336. }
  337. $module_ban = !empty($_W['setting']['module_receive_ban']) ? $_W['setting']['module_receive_ban'] : array();
  338. foreach ($subscribe as $event => $module_group) {
  339. if (!empty($module_group)) {
  340. foreach ($module_group as $index => $module) {
  341. if (!empty($module_ban[$module])) {
  342. unset($subscribe[$event][$index]);
  343. }
  344. }
  345. }
  346. }
  347. cache_write(cache_system_key('module_receive_enable'), $subscribe);
  348. return $subscribe;
  349. }
  350. function cache_build_uninstalled_module() {
  351. $modulelist = table('modules')->getall('name');
  352. $module_root = IA_ROOT . '/addons/';
  353. $module_path_list = glob($module_root . '/*');
  354. if (empty($module_path_list)) {
  355. return true;
  356. }
  357. $module_support_type = module_support_type();
  358. foreach ($module_path_list as $path) {
  359. $modulename = pathinfo($path, PATHINFO_BASENAME);
  360. $module_recycle_info = table('modules_recycle')->searchWithNameType($modulename, MODULE_RECYCLE_UNINSTALL_IGNORE)->get();
  361. $module_cloud_upgrade = table('modules_cloud')->getByName($modulename);
  362. if (!empty($modulelist[$modulename]) && !empty($module_cloud_upgrade)) {
  363. $has_new_support = false;
  364. $installed_support = array();
  365. foreach ($module_support_type as $support => $value) {
  366. if (!empty($module_recycle_info) && $module_recycle_info[$support] == 1) {
  367. $installed_support[$support] = $value['not_support'];
  368. }
  369. if ($module_cloud_upgrade[$support] == $value['support'] && $modulelist[$modulename][$support] != $value['support']) {
  370. if ($has_new_support == false) {
  371. $has_new_support = true;
  372. }
  373. } else {
  374. $installed_support[$support] = $value['not_support'];
  375. }
  376. }
  377. if (empty($has_new_support)) {
  378. table('modules_cloud')->deleteByName($modulename);
  379. } else {
  380. $installed_support['install_status'] = MODULE_CLOUD_UNINSTALL;
  381. table('modules_cloud')->fill($installed_support)->where('id', $module_cloud_upgrade['id'])->save();
  382. }
  383. }
  384. if (!is_dir($path) || !file_exists($path . '/manifest.xml')) {
  385. continue;
  386. }
  387. $manifest = ext_module_manifest($modulename);
  388. $module_upgrade_data = array(
  389. 'name' => $modulename,
  390. 'has_new_version' => 0,
  391. 'has_new_branch' => 0,
  392. 'install_status' => !empty($module_cloud_upgrade) && MODULE_CLOUD_UNINSTALL == $module_cloud_upgrade['install_status'] ? MODULE_CLOUD_UNINSTALL : MODULE_LOCAL_UNINSTALL,
  393. 'logo' => $manifest['application']['logo'],
  394. 'version' => $manifest['application']['version'],
  395. 'title' => $manifest['application']['name'],
  396. 'title_initial' => get_first_pinyin($manifest['application']['name']),
  397. );
  398. if (!empty($manifest['platform']['supports'])) {
  399. foreach (array('app', 'wxapp', 'webapp', 'android', 'ios', 'system_welcome', 'aliapp', 'baiduapp', 'toutiaoapp') as $support) {
  400. if (in_array($support, $manifest['platform']['supports'])) {
  401. if ($support == 'app') {
  402. $support = 'account';
  403. }
  404. if ($support == 'system_welcome') {
  405. $support = 'welcome';
  406. }
  407. if ($support == 'android' || $support == 'ios') {
  408. $support = 'phoneapp';
  409. }
  410. $module_upgrade_data["{$support}_support"] = MODULE_SUPPORT_ACCOUNT;
  411. }
  412. }
  413. }
  414. if (!empty($modulelist[$modulename])) {
  415. $new_support = module_check_notinstalled_support($modulelist[$modulename], $manifest['platform']['supports']);
  416. if (!empty($new_support)) {
  417. $module_upgrade_data = array_merge($module_upgrade_data, $new_support);
  418. } else {
  419. table('modules_cloud')->deleteByName($modulename);
  420. continue;
  421. }
  422. }
  423. if (!empty($module_recycle_info)) {
  424. foreach ($module_support_type as $support => $value) {
  425. if ($module_recycle_info[$support] == 1) {
  426. $module_upgrade_data[$support] = $value['not_support'];
  427. }
  428. }
  429. }
  430. if (empty($module_cloud_upgrade)) {
  431. table('modules_cloud')->fill($module_upgrade_data)->save();
  432. } else {
  433. table('modules_cloud')->fill($module_upgrade_data)->where('name', $modulename)->save();
  434. }
  435. }
  436. return true;
  437. }
  438. function cache_build_proxy_wechatpay_account() {
  439. global $_W;
  440. load()->model('account');
  441. $account_table = table('account');
  442. if ($_W['isadmin']) {
  443. $uniaccounts = pdo_getall('account', array('type IN ' => array(ACCOUNT_TYPE_OFFCIAL_NORMAL, ACCOUNT_TYPE_OFFCIAL_AUTH)));
  444. } else {
  445. $uniaccounts = $account_table->userOwnedAccount($_W['uid']);
  446. }
  447. $service = array();
  448. $borrow = array();
  449. if (!empty($uniaccounts)) {
  450. foreach ($uniaccounts as $uniaccount) {
  451. if (!in_array($uniaccount['type'], array(ACCOUNT_TYPE_OFFCIAL_NORMAL, ACCOUNT_TYPE_OFFCIAL_AUTH))) {
  452. continue;
  453. }
  454. $account = uni_fetch($uniaccount['uniacid']);
  455. $payment = (array)$account['setting']['payment'];
  456. if (!empty($account['key']) && !empty($account['secret']) && in_array($account['level'], array(ACCOUNT_SERVICE_VERIFY)) &&
  457. is_array($payment) && !empty($payment) && intval($payment['wechat']['switch']) == 1) {
  458. $borrow[$account['uniacid']] = $account['name'];
  459. }
  460. if (!empty($payment['wechat_facilitator']['switch'])) {
  461. $service[$account['uniacid']] = $account['name'];
  462. }
  463. }
  464. }
  465. $cache = array(
  466. 'service' => $service,
  467. 'borrow' => $borrow
  468. );
  469. cache_write(cache_system_key('proxy_wechatpay_account'), $cache);
  470. return $cache;
  471. }
  472. function cache_build_module_info($module_name) {
  473. global $_W;
  474. table('modules_cloud')->deleteByName($module_name);
  475. cache_delete(cache_system_key('module_info', array('module_name' => $module_name)));
  476. }
  477. function cache_build_uni_group() {
  478. $params = array();
  479. $cache_type = cache_type();
  480. if (in_array($cache_type, array('memcached', 'memcache'))) {
  481. $params = array('groupids' => 0);
  482. }
  483. $uni_group_cache_key = cache_system_key('uni_groups', $params);
  484. $cache_keys = cache_search($uni_group_cache_key);
  485. if (!empty($cache_keys)) {
  486. if (in_array($cache_type, array('memcached', 'memcache'))) {
  487. cache_delete($uni_group_cache_key);
  488. } else {
  489. foreach ($cache_keys as $cache_key => $cache_value) {
  490. cache_delete(str_replace($GLOBALS['_W']['config']['setting']['authkey'], '', $cache_key));
  491. }
  492. }
  493. }
  494. }
  495. function cache_random($length = 4, $direct_write = false) {
  496. $cachekey = cache_system_key('random');
  497. $cache = cache_load($cachekey);
  498. if ($cache && !$direct_write) {
  499. return $cache;
  500. }
  501. $result = random($length);
  502. cache_write($cachekey, $result, CACHE_EXPIRE_MIDDLE);
  503. return $result;
  504. }
  505. function cache_updatecache() {
  506. $account_ticket_cache = cache_read(cache_system_key('account_ticket'));
  507. $cloud_w7_request_token_cache = cache_read(cache_system_key('cloud_w7_request_token'));
  508. pdo_delete('core_cache');
  509. cache_clean();
  510. cache_write(cache_system_key('account_ticket'), $account_ticket_cache);
  511. cache_write(cache_system_key('cloud_w7_request_token'), $cloud_w7_request_token_cache);
  512. setting_save(array(), 'cloudip');
  513. cache_build_template();
  514. cache_build_users_struct();
  515. cache_build_setting();
  516. cache_build_module_subscribe_type();
  517. rmdirs(IA_ROOT . '/data/patch/upgrade/');
  518. rmdirs(IA_ROOT . '/data/tpl/web/');
  519. rmdirs(IA_ROOT . '/data/tpl/app/');
  520. $path = IA_ROOT . '/data/';
  521. if ($dir = opendir($path)) {
  522. while (false !== ($file = readdir($dir))) {
  523. if (is_file($path . '/' . $file) && (strpos($file, 'application.build') === 0) || strpos($file, 'module.info') === 0) {
  524. @unlink($path . '/' . $file);
  525. }
  526. }
  527. }
  528. pdo_delete('modules_cloud');
  529. return true;
  530. }