123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490 |
- <?php
- /**
- * [WeEngine System] Copyright (c) 2014 WE7.CC
- * WeEngine is NOT a free software, it under the license terms, visited http://www.we7.cc/ for more details.
- */
- defined('IN_IA') or exit('Access Denied');
- $dos = array('installed', 'prepared', 'install', 'refresh', 'uninstall', 'web', 'batch-install', 'designer', 'check', 'upgrade');
- $do = in_array($do, $dos) ? $do : 'installed';
- load()->model('extension');
- load()->model('cloud');
-
- if($do == 'installed') {
- $_W['page']['title'] = '已安装的微站风格 - 风格主题 - 扩展';
- $templateids = array();
- $where = (empty($_GPC['type']) || $_GPC['type'] == 'all') ? '' : " WHERE `type` = '{$_GPC['type']}'";
- $templates = pdo_fetchall("SELECT * FROM ".tablename('site_templates') . $where);
- foreach($templates as $tpl) {
- $templateids[] = $tpl['name'];
- }
-
- $temtypes = ext_template_type();
- template('extension/theme');
- }
-
- if($do == 'prepared') {
- $_W['page']['title'] = '安装微站风格 - 风格主题 - 扩展';
- $templateids = array();
- $templates = pdo_fetchall("SELECT * FROM ".tablename('site_templates'));
- foreach($templates as $tpl) {
- $templateids[] = $tpl['name'];
- }
- $uninstallTemplates = array();
- $path = IA_ROOT . '/app/themes/';
- if (is_dir($path)) {
- if ($handle = opendir($path)) {
- while (false !== ($modulepath = readdir($handle))) {
- $manifest = ext_template_manifest($modulepath, false);
- if(!empty($manifest) && !in_array($manifest['name'], $templateids)) {
- $uninstallTemplates[$manifest['name']] = $manifest;
- $uninstallTemplates_title[$manifest['name']] = $manifest['title'];
- $templateids[] = $manifest['name'];
- }
- }
- }
- }
- $prepare_templates = json_encode(array_keys($uninstallTemplates));
- $prepare_templates_title = json_encode($uninstallTemplates_title);
- template('extension/theme');
- }
-
- if($do == 'batch-install') {
- if($_W['ispost']) {
- $id = $_GPC['templateid'];
- $m = ext_template_manifest($id);
- if (empty($m)) {
- exit('error');
- }
- if (pdo_fetchcolumn("SELECT id FROM ".tablename('site_templates')." WHERE name = '{$m['name']}'")) {
- exit('error');
- }
- unset($m['settings']);
-
- if (pdo_insert('site_templates', $m)) {
- exit('success');
- } else {
- exit('error');
- }
- } else {
- exit('error');
- }
- }
-
- if($do == 'install') {
- if(empty($_W['isfounder'])) {
- message('您没有安装模块的权限', '', 'error');
- }
- $id = $_GPC['templateid'];
- if (pdo_fetchcolumn("SELECT id FROM ".tablename('site_templates')." WHERE name = :name", array(':name' => $id))) {
- message('模板已经安装或是唯一标识已存在!', '', 'error');
- }
- $manifest = ext_template_manifest($id, false);
-
- if (!empty($manifest)) {
- $r = cloud_t_prepare($id);
- if(is_error($r)) {
- message($r['message'], url('extension/theme/prepared'), 'error');
- }
- }
-
- if (empty($manifest)) {
- $r = cloud_prepare();
- if(is_error($r)) {
- message($r['message'], url('cloud/profile'), 'error');
- }
- $info = cloud_t_info($id);
- if (!is_error($info)) {
- if (empty($_GPC['flag'])) {
- header('location: ' . url('cloud/process', array('t' => $id)));
- exit;
- } else {
- $packet = cloud_t_build($id);
- $manifest = ext_template_manifest_parse($packet['manifest']);
- $manifest['version'] = $packet['version'];
- }
- } else {
- message($info['message'], '', 'error');
- }
- }
- unset($manifest['settings']);
- $groups = uni_groups();
- if(!$_W['ispost'] || empty($_GPC['flag'])) {
- template('extension/select-groups');
- exit;
- }
- $post_groups = $_GPC['group'];
- $tid = intval($_GPC['tid']);
-
- $id = $_GPC['templateid'];
- if (empty($manifest)) {
- message('模板安装配置文件不存在或是格式不正确!', '', 'error');
- }
- if ($manifest['name'] != $id) {
- message('安装模板与文件标识不符,请重新安装', '', 'error');
- }
- if (pdo_fetchcolumn("SELECT id FROM ".tablename('site_templates')." WHERE name = '{$manifest['name']}'")) {
- message('模板已经安装或是唯一标识已存在!', '', 'error');
- }
- if (pdo_insert('site_templates', $manifest)) {
- $tid = pdo_insertid();
- } else {
- message('模板安装失败, 请联系模板开发者!');
- }
- if($id && $post_groups) {
- if (!pdo_fetchcolumn("SELECT id FROM ".tablename('site_templates')." WHERE id = {$tid}")) {
- message('指定模板不存在!', '', 'error');
- }
- foreach($post_groups as $post_group) {
- $item = pdo_fetch("SELECT id,name,templates FROM ".tablename('uni_group') . " WHERE id = :id", array(':id' => intval($post_group)));
- if(empty($item)) {
- continue;
- }
- $item['templates'] = iunserializer($item['templates']);
- if(in_array($tid, $item['templates'])) {
- continue;
- }
- $item['templates'][] = $tid;
- $item['templates'] = iserializer($item['templates']);
- pdo_update('uni_group', $item, array('id' => $post_group));
- }
- }
- message('模板安装成功, 请按照【公众号服务套餐】【用户组】来分配权限!', url('extension/theme'), 'success');
- }
-
- if($do == 'uninstall') {
- $name = pdo_fetchcolumn('SELECT name FROM ' . tablename('site_templates') . ' WHERE id = :id', array(':id' => intval($_GPC['id'])));
- if($name == 'default') {
- message('默认模板不能卸载', '', 'error');
- }
- if (pdo_delete('site_templates', array('id' => intval($_GPC['id'])))) {
-
- pdo_delete('site_styles',array('templateid' => intval($_GPC['id'])));
- pdo_delete('site_styles_vars',array('templateid' => intval($_GPC['id'])));
- message('模板移除成功, 你可以重新安装, 或者直接移除文件来安全删除!', referer(), 'success');
- } else {
- message('模板移除失败, 请联系模板开发者!');
- }
- }
-
- if($do == 'upgrade') {
- $check = intval($_GPC['check']);
- $batch = intval($_GPC['batch']);
- if($check == 1) {
- isetcookie('batch', 1);
- $batch = 1;
- $r = cloud_prepare();
- if(is_error($r)) {
- exit('cloud service is unavailable');
- }
- $templates = pdo_fetchall('SELECT id,name,version FROM ' . tablename('site_templates'), array(), 'name');
- $upgrade = array();
- $mods = array();
- $ret = cloud_t_query();
- if(!is_error($ret)) {
- foreach($ret as $k => $v) {
- if(!$templates[$k]) continue;
- if(ver_compare($templates[$k]['version'], $v['version']) == -1) {
- $upgrade[] = $k;
- }
- }
- } else {
- message('从云平台获取模板信息失败,请稍后重试', referer(), 'error');
- }
- if(empty($upgrade)) {
- message('您的模板已经是最新版本', referer(), 'success');
- }
- $upgrade_str = iserializer($upgrade);
- cache_write('upgrade:template', $upgrade_str);
- }
-
- if($batch == 1) {
- $wait_upgrade = (array)iunserializer(cache_read('upgrade:template'));
- if(empty($wait_upgrade)) {
- isetcookie('batch', 0, -10000);
- message('您的模板已经是最新版本', url('extension/theme'), 'success');
- }
- $id = array_shift($wait_upgrade);
- } else {
- $id = $_GPC['templateid'];
- }
-
- $theme = pdo_fetch("SELECT id, name, title FROM " . tablename('site_templates') . " WHERE name = :name", array(':name' => $id));
- if (empty($theme)) {
- if($batch == 1) {
- cache_write('upgrade:template', iserializer($wait_upgrade));
- message($theme['title'] . ' 模板已经被卸载或是不存在。系统将进入下一个模板的更新。<br>请勿关闭浏览器', url('extension/theme/upgrade', array('batch' => 1)), 'success');
- }
- message('模板已经被卸载或是不存在!', '', 'error');
- }
- $r = cloud_prepare();
- if(is_error($r)) {
- message($r['message'], url('cloud/profile'), 'error');
- }
-
- $info = cloud_t_info($id);
- if (is_error($info)) {
- message($info['message'], referer(), 'error');
- }
-
- $upgrade_info = cloud_t_upgradeinfo($id);
-
- if (is_error($upgrade_info)) {
- message($upgrade_info['message'], referer(), 'error');
- }
- if ($_W['isajax']) {
- if ($upgrade_info['free']) {
- foreach ($upgrade_info['branches'] as &$branch) {
- $branch['upgrade_price'] = 0;
- }
- }
- message($upgrade_info, '', 'ajax');
- }
-
- if (!is_error($info)) {
- if (empty($_GPC['flag'])) {
- if (intval($_GPC['branch']) > $upgrade_info['version']['branch_id']) {
- header('location: ' . url('cloud/redirect/buybranch', array('m' => $id, 'branch' => intval($_GPC['branch']), 'type' => 'theme', 'is_upgrade' => 1)));
- exit;
- }
-
- load()->func('file');
- rmdirs(IA_ROOT . '/app/themes/' . $id, true);
- header('Location: ' . url('cloud/process', array('t' => $id, 'is_upgrade' => 1)));
- exit;
- } else {
- $packet = cloud_t_build($id);
- $manifest = ext_template_manifest_parse($packet['manifest']);
- }
- }
- if (empty($manifest)) {
- if($batch == 1) {
- cache_write('upgrade:template', iserializer($wait_upgrade));
- message($theme['title'] . ' 模块安装配置文件不存在或是格式不正确。系统将进入下一个模板的更新。<br>请勿关闭浏览器', url('extension/theme/upgrade', array('batch' => 1)), 'success');
- }
- message('模块安装配置文件不存在或是格式不正确!', '', 'error');
- }
- if(ver_compare($theme['version'], $packet['version']) != -1) {
- if($batch == 1) {
- cache_write('upgrade:template', iserializer($wait_upgrade));
- message($theme['title'] . ' 模板版本不低于要更新的版本。系统将进入下一个模板的更新。<br>请勿关闭浏览器', url('extension/theme/upgrade', array('batch' => 1)), 'success');
- }
- message('已安装的模板版本不低于要更新的版本, 操作无效.');
- }
- pdo_update('site_templates', array('version' => $packet['version']), array('id' => $theme['id']));
- if($batch == 1) {
- cache_write('upgrade:template', iserializer($wait_upgrade));
- message($theme['title'] . ' 模板更新成功。系统将进入下一个模板的更新。<br>请勿关闭浏览器', url('extension/theme/upgrade', array('batch' => 1)), 'success');
- }
- message('模板更新成功!', url('extension/theme'), 'success');
- }
-
- if($do == 'web') {
- $_W['page']['title'] = '管理后台风格 - 风格主题 - 扩展';
- load()->model('setting');
- if(checksubmit('submit')) {
- $data = array(
- 'template' => $_GPC['template'],
- );
- setting_save($data, 'basic');
- message('更新设置成功!', 'refresh');
- }
- $path = IA_ROOT . '/web/themes/';
- if(is_dir($path)) {
- if ($handle = opendir($path)) {
- while (false !== ($templatepath = readdir($handle))) {
- if ($templatepath != '.' && $templatepath != '..') {
- if(is_dir($path.$templatepath)){
- $template[] = $templatepath;
- }
- }
- }
- }
- }
- template('extension/web');
- }
-
-
- if ($do == 'designer') {
- if (empty($_W['isfounder'])) {
- message('您没有设计新模板的权限', '', 'error');
- }
- $_W['page']['title'] = '设计微站风格 - 风格主题 - 扩展';
-
- $available['download'] = class_exists('ZipArchive');
-
- $available['create'] = is_writable(IA_ROOT . '/app/themes');
- $versions = array('0.52', '0.6');
-
- $temtypes = ext_template_type();
-
- if (checksubmit('submit') && $available[$_GPC['method']]) {
- $t['template']['name'] = trim($_GPC['template']['name']);
- if(empty($t['template']['name']) || preg_match('/\*\/|\/\*|eval|\$\_/i', $t['template']['name'])) {
- message('请输入有效的模板名称. ');
- }
- $t['template']['identifie'] = trim($_GPC['template']['identifie']);
- if(empty($t['template']['identifie']) || !preg_match('/^[a-z][a-z\d_]+$/i', $t['template']['identifie'])) {
- message('必须输入模板标识符(仅支持字母和数字, 且只能以字母开头). ');
- }
- $t['template']['type'] = array_key_exists($_GPC['template']['type'], $temtypes) ? $_GPC['template']['type'] : 'other';
- $t['template']['description'] = trim($_GPC['template']['description']);
- if(empty($t['template']['description']) || preg_match('/\*\/|\/\*|eval|\$\_/i', $t['template']['description'])) {
- message('请输入有效的模板介绍. ');
- }
- $t['template']['author'] = trim($_GPC['template']['author']);
- if(empty($t['template']['author']) || preg_match('/\*\/|\/\*|eval|\$\_/i', $t['template']['author'])) {
- message('请输入有效的模板作者');
- }
- $t['template']['url'] = trim($_GPC['template']['url']);
- if(empty($t['template']['url']) || preg_match('/\*\/|\/\*|eval|\$\_/i', $t['template']['url'])) {
- message('请输入有效的模板发布页');
- }
- $t['template']['sections'] = trim($_GPC['template']['sections']);
- if (is_array($_GPC['versions'])) {
- foreach ($_GPC['versions'] as $value) {
- if (in_array($value, $versions)) {
- $t['versions'][] = $value;
- }
- }
- } else {
- message('请设置版本的兼容性');
- }
-
- $t['settings'] = array();
- if(!empty($_GPC['settings']['variables'])) {
- foreach($_GPC['settings']['variables'] as $key => $value) {
- $temp = array();
- if(!empty($_GPC['settings']['variables'][$key]) && preg_match('/^[a-z\d]+$/i', $_GPC['settings']['variables'][$key])) {
- if (!empty($_GPC['settings']['description'][$key])) {
- $temp['variable'] = $_GPC['settings']['variables'][$key];
- $temp['value'] = $_GPC['settings']['values'][$key];
- $temp['desc'] = $_GPC['settings']['description'][$key];
- $t['settings'][] = $temp;
- }
- }
- }
- }
- if($_FILES['preview'] && $_FILES['preview']['error'] == '0' && !empty($_FILES['preview']['tmp_name'])) {
- $t['preview'] = $_FILES['preview']['tmp_name'];
- }
-
- $manifest = manifest($t);
- load()->func('file');
-
-
- if ($_GPC['method'] == 'create') {
- $tpldir = IA_ROOT . '/app/themes/' . strtolower($t['template']['identifie']);
- if (is_dir($tpldir)) {
- message('模板目录' . $tpldir . '已存在,请更换模板标识还删除已存在模板');
- }
- mkdirs($tpldir);
- file_put_contents("{$tpldir}/manifest.xml", $manifest);
- if (!empty($t['preview'])) {
- file_move($t['preview'], "{$tpldir}/preview.jpg");
- }
- message('模板生成成功,请访问' . $tpldir . '目录进行查看', referer(), 'success');
- exit();
- }
-
-
- if ($_GPC['method'] == 'download') {
- $zipfile = IA_ROOT . '/data/temp.zip';
- $zip = new ZipArchive();
- $zip->open($zipfile, ZipArchive::CREATE);
- $zip->addFromString('manifest.xml', $manifest);
- if (!empty($t['preview'])) {
- $zip->addFile($t['preview'], "preview.jpg");
-
- }
- $zip->close();
- header('content-type: application/zip');
- header('content-disposition: attachment; filename="' . $t['template']['identifie'] . '.zip"');
- readfile($zipfile);
- @unlink($t['preview']);
- @unlink($zipfile);
- }
- }
-
- template('extension/desitemp');
- }
-
- if($do == 'check') {
- if($_W['isajax']) {
- $foo = $_GPC['foo'];
-
- $r = cloud_prepare();
- if(is_error($r)) {
- exit('cloud service is unavailable');
- }
-
- if ($foo == 'upgrade') {
- $mods = array();
-
- $ret = cloud_t_query();
-
- if (!is_error($ret)) {
- foreach($ret as $k => $v) {
- $mods[$k] = array(
- 'from' => 'cloud',
- 'version' => $v['version'],
- 'branches' => $v['branches'],
- 'site_branch' => $v['branches'][$v['branch']],
- );
- }
-
- $mods['pirate_apps'] = array_values($v['pirate_apps']);
- }
-
- if(!empty($mods)) {
- exit(json_encode($mods));
- }
- } else {
- $templateids = array();
- $templates = pdo_fetchall("SELECT `name` FROM " . tablename('site_templates') . ' ORDER BY `id` ASC');
- if(!empty($templates)) {
- foreach($templates as $m) {
- $templateids[] = $m['name'];
- }
- }
- $ret = cloud_t_query();
- if(!is_error($ret)) {
- $cloudUninstallThemes = array();
- foreach($ret as $k => $v) {
- if(!in_array(strtolower($k), $templateids)) {
- $v['name'] = $k;
- $cloudUninstallThemes[] = $v;
- $templateids[] = $k;
- }
- }
- exit(json_encode($cloudUninstallThemes));
- }
- }
- }
- exit();
- }
-
-
- function manifest($t) {
- $versions = implode(',', $t['versions']);
- $item = '';
- if(!empty($t['settings'])) {
- foreach($t['settings'] as $key => $value) {
- $item .= "\r\n\t\t<item variable=\"{$value['variable']}\" content=\"{$value['value']}\" description=\"{$value['desc']}\"/>";
- }
- }
- $tpl = <<<TPL
- <?xml version="1.0" encoding="utf-8"?>
- <manifest versionCode="{$versions}">
- <identifie><![CDATA[{$t['template']['identifie']}]]></identifie>
- <title><![CDATA[{$t['template']['name']}]]></title>
- <type><![CDATA[{$t['template']['type']}]]></type>
- <description><![CDATA[{$t['template']['description']}]]></description>
- <author><![CDATA[{$t['template']['author']}]]></author>
- <url><![CDATA[{$t['template']['url']}]]></url>
- <sections><![CDATA[{$t['template']['sections']}]]></sections>
- <settings>{$item}
- </settings>
- </manifest>
- TPL;
- return ltrim($tpl);
- }
|