Example #1
0
 /**
  * 删除模块
  *
  * @param string $module 模块名称
  * @param int $removeData 删除模块数据
  *
  * @return bool
  */
 public function remove($module, $removeData = 0)
 {
     //删除封面关键词数据
     if ($removeData) {
         //本地安装的模块删除处理
         $xmlFile = 'addons/' . $module . '/manifest.xml';
         if (is_file($xmlFile)) {
             $manifest = Xml::toArray(file_get_contents($xmlFile));
             //卸载数据
             $installSql = trim($manifest['manifest']['uninstall']['@cdata']);
             if (!empty($installSql)) {
                 if (preg_match('/.php$/', $installSql)) {
                     $file = 'addons/' . $module . '/' . $installSql;
                     if (!is_file($file)) {
                         $this->error = '卸载文件:' . $file . '不存在';
                         return;
                     }
                     require $file;
                 } else {
                     \Schema::sql($installSql);
                 }
             }
         }
         //删除模块回复规则列表
         $rids = Db::table('rule')->where('module', $module)->lists('rid') ?: [];
         foreach ($rids as $rid) {
             service('WeChat')->removeRule($rid);
         }
         //删除站点模块
         Db::table('site_modules')->where('module', $module)->delete();
         //模块设置
         Db::table('module_setting')->where('module', $module)->delete();
         //代金券使用的模块
         Db::table('ticket_module')->where('module', $module)->delete();
     }
     //删除模块数据
     $this->where('name', $module)->delete();
     //删除模块动作数据
     Db::table('modules_bindings')->where('module', $module)->delete();
     //更新套餐数据
     $package = Db::table('package')->get();
     if ($package) {
         foreach ($package as $p) {
             $p['modules'] = unserialize($p['modules']) ?: [];
             if ($k = array_search($_GET['module'], $p['modules'])) {
                 unset($p['modules'][$k]);
             }
             $p['modules'] = serialize($p['modules']);
             Db::table('package')->where('id', $p['id'])->update($p);
         }
     }
     //更新所有站点缓存
     service('site')->updateAllCache();
     return TRUE;
 }
Example #2
0
    public function cache()
    {
        $table = c('database.prefix') . c('cache.mysql.table');
        if (Schema::tableExists(c('cache.mysql.table'))) {
            $this->error('Table already exists');
        }
        $sql = <<<sql
CREATE TABLE `{$table}` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` char(20) DEFAULT NULL,
  `data` mediumtext,
  `create_at` int(10),
  `expire` int(10),
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
sql;
        Schema::sql($sql);
    }
Example #3
0
 public function install()
 {
     //模块安装检测
     if ($m = $this->module->where('name', $_GET['module'])->first() || is_dir('module/' . $_GET['module'])) {
         message($m['title'] . '模块已经安装或已经存在系统模块, 你可以卸载后重新安装', 'back', 'error');
     }
     if (IS_POST) {
         //获取模块xml数据
         $xmlFile = 'addons/' . $_POST['module'] . '/manifest.xml';
         $manifest = Xml::toArray(file_get_contents($xmlFile));
         $platform = $manifest['manifest']['platform'];
         //添加数据
         $installSql = trim($manifest['manifest']['install']['@cdata']);
         if (!empty($installSql)) {
             if (preg_match('/.php$/', $installSql)) {
                 $file = 'addons/' . $_POST['module'] . '/' . $installSql;
                 if (!is_file($file)) {
                     message('安装文件:' . $file . " 不存在", 'back', 'error');
                 }
                 require $file;
             } else {
                 \Schema::sql($installSql);
             }
         }
         //不需要对用户关键词进行响应的消息类型
         $subscribes = [];
         if (!empty($platform['subscribes'])) {
             //只选择一个类型
             if (isset($platform['subscribes']['message']['@value'])) {
                 $subscribes[] = $platform['subscribes']['message']['@attributes']['type'];
             } else {
                 foreach ($platform['subscribes']['message'] as $m) {
                     $subscribes[] = $m['@attributes']['type'];
                 }
             }
         }
         //需要模块处理的微信关键词消息类型
         $processors = [];
         if (!empty($platform['processors'])) {
             //只选择一个类型
             if (isset($platform['processors']['message']['@value'])) {
                 $subscribes[] = $platform['processors']['message']['@attributes']['type'];
             } else {
                 foreach ($platform['processors']['message'] as $m) {
                     $processors[] = $m['@attributes']['type'];
                 }
             }
         }
         //整合添加到模块表中的数据
         $moduleData = ['name' => $manifest['manifest']['application']['name']['@cdata'], 'version' => $manifest['manifest']['application']['version']['@cdata'], 'industry' => $manifest['manifest']['application']['industry']['@cdata'], 'title' => $manifest['manifest']['application']['title']['@cdata'], 'url' => $manifest['manifest']['application']['url']['@cdata'], 'resume' => $manifest['manifest']['application']['resume']['@cdata'], 'detail' => $manifest['manifest']['application']['detail']['@cdata'], 'author' => $manifest['manifest']['application']['author']['@cdata'], 'rule' => $manifest['manifest']['application']['rule']['@attributes']['embed'] == 'true' ? 1 : 0, 'thumb' => $manifest['manifest']['application']['thumb']['@cdata'], 'cover' => $manifest['manifest']['application']['cover']['@cdata'], 'is_system' => 0, 'subscribes' => serialize($subscribes), 'processors' => serialize($processors), 'setting' => $manifest['manifest']['application']['@attributes']['setting'] == 'true' ? 1 : 0, 'permissions' => serialize(preg_split('/\\n/', $manifest['manifest']['permission']['@cdata']))];
         $moduleData['locality'] = !is_file('addons/' . $_POST['module'] . '/cloud.hd') ? 1 : 0;
         Db::table('modules')->insertGetId($moduleData);
         //添加模块动作表数据
         if (!empty($manifest['manifest']['bindings'])) {
             foreach ($manifest['manifest']['bindings'] as $entry => $bind) {
                 foreach ($bind as $b) {
                     if (isset($b['@value'])) {
                         //只有一个元素
                         $data = ['module' => $manifest['manifest']['application']['name']['@cdata'], 'entry' => $entry, 'title' => $b['@attributes']['title'], 'do' => $b['@attributes']['do'], 'data' => $b['@attributes']['data'], 'directly' => $b['@attributes']['directly'] ? 1 : 0];
                         Db::table('modules_bindings')->insert($data);
                     } else {
                         foreach ($b as $m) {
                             $data = ['module' => $manifest['manifest']['application']['name']['@cdata'], 'entry' => $entry, 'title' => $m['@attributes']['title'], 'do' => $m['@attributes']['do'], 'data' => $m['@attributes']['data'], 'directly' => $m['@attributes']['directly'] ? 1 : 0];
                             Db::table('modules_bindings')->insert($data);
                         }
                     }
                 }
             }
         }
         //在服务套餐中添加模块
         if (!empty($_POST['package'])) {
             $package = Db::table('package')->whereIn('name', $_POST['package'])->get();
             foreach ($package as $p) {
                 $p['modules'] = unserialize($p['modules']);
                 if (empty($p['modules'])) {
                     $p['modules'] = [];
                 }
                 $p['modules'][] = $_POST['module'];
                 $p['modules'] = serialize(array_unique($p['modules']));
                 Db::table('package')->where('name', $p['name'])->update($p);
             }
         }
         service('site')->updateAllCache();
         message("模块安装成功", u('installed'));
     }
     $xmlFile = 'addons/' . $_GET['module'] . '/manifest.xml';
     if (is_file($xmlFile)) {
         //本地应用
         $manifest = Xml::toArray(file_get_contents($xmlFile));
     } else {
         //下载模块目录
         go(u('download', ['module' => $_GET['module']]));
     }
     $package = Db::table('package')->get();
     return view()->with('module', $manifest['manifest'])->with('package', $package);
 }