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'] . ' 模板已经被卸载或是不存在。系统将进入下一个模板的更新。
请勿关闭浏览器', 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'] . ' 模块安装配置文件不存在或是格式不正确。系统将进入下一个模板的更新。
请勿关闭浏览器', 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'] . ' 模板版本不低于要更新的版本。系统将进入下一个模板的更新。
请勿关闭浏览器', 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'] . ' 模板更新成功。系统将进入下一个模板的更新。
请勿关闭浏览器', 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"; } } $tpl = << <![CDATA[{$t['template']['name']}]]> {$item} TPL; return ltrim($tpl); }