Пример #1
0
function commitModules($unlink = false, $type = 'module')
{
    require_once 'ModuleInstall/ModuleInstaller.php';
    require_once 'include/entryPoint.php';
    global $mod_strings;
    global $base_upgrade_dir;
    global $base_tmp_upgrade_dir;
    global $db;
    $GLOBALS['db'] = $db;
    $errors = array();
    $files = array();
    global $current_user;
    $current_user = new User();
    $current_user->is_admin = '1';
    $old_mod_strings = $mod_strings;
    if (is_dir(sugar_cached("upload/upgrades"))) {
        $files = findAllFiles(sugar_cached("upload/upgrades/{$type}"), $files);
        $mi = new ModuleInstaller();
        $mi->silent = true;
        $mod_strings = return_module_language('en', "Administration");
        foreach ($files as $file) {
            if (!preg_match('#.*\\.zip\\$', $file)) {
                continue;
            }
            $lic_name = 'accept_lic_' . str_replace('.', '_', urlencode(basename($file)));
            $can_install = true;
            if (isset($_REQUEST[$lic_name])) {
                if ($_REQUEST[$lic_name] == 'yes') {
                    $can_install = true;
                } else {
                    $can_install = false;
                }
            }
            if ($can_install) {
                // handle manifest.php
                $target_manifest = remove_file_extension($file) . '-manifest.php';
                if ($type == 'langpack') {
                    $_REQUEST['manifest'] = $target_manifest;
                    $_REQUEST['zipFile'] = $file;
                    commitLanguagePack();
                    continue;
                }
                include $target_manifest;
                $unzip_dir = mk_temp_dir($base_tmp_upgrade_dir);
                unzip($file, $unzip_dir);
                $_REQUEST['install_file'] = $file;
                $mi->install($unzip_dir);
                $new_upgrade = new UpgradeHistory();
                $new_upgrade->filename = $file;
                $new_upgrade->md5sum = md5_file($file);
                $new_upgrade->type = $manifest['type'];
                $new_upgrade->version = $manifest['version'];
                $new_upgrade->status = "installed";
                // $new_upgrade->author        = $manifest['author'];
                $new_upgrade->name = $manifest['name'];
                $new_upgrade->description = $manifest['description'];
                $new_upgrade->id_name = isset($installdefs['id_name']) ? $installdefs['id_name'] : '';
                $serial_manifest = array();
                $serial_manifest['manifest'] = isset($manifest) ? $manifest : '';
                $serial_manifest['installdefs'] = isset($installdefs) ? $installdefs : '';
                $serial_manifest['upgrade_manifest'] = isset($upgrade_manifest) ? $upgrade_manifest : '';
                $new_upgrade->manifest = base64_encode(serialize($serial_manifest));
                $new_upgrade->save();
                //unlink($file);
            }
            //fi
        }
        //rof
    }
    //fi
    $mod_strings = $old_mod_strings;
}
 function performInstall($file, $silent = true)
 {
     global $sugar_config;
     global $mod_strings;
     global $current_language;
     $base_upgrade_dir = sugar_cached("/upgrades");
     $base_tmp_upgrade_dir = "{$base_upgrade_dir}/temp";
     if (!file_exists($base_tmp_upgrade_dir)) {
         mkdir_recursive($base_tmp_upgrade_dir, true);
     }
     $GLOBALS['log']->debug("INSTALLING: " . $file);
     $mi = new ModuleInstaller();
     $mi->silent = $silent;
     $mod_strings = return_module_language($current_language, "Administration");
     $GLOBALS['log']->debug("ABOUT TO INSTALL: " . $file);
     if (preg_match("#.*\\.zip\$#", $file)) {
         $GLOBALS['log']->debug("1: " . $file);
         // handle manifest.php
         $target_manifest = remove_file_extension($file) . '-manifest.php';
         include $target_manifest;
         $GLOBALS['log']->debug("2: " . $file);
         $unzip_dir = mk_temp_dir($base_tmp_upgrade_dir);
         unzip($file, $unzip_dir);
         $GLOBALS['log']->debug("3: " . $unzip_dir);
         $id_name = $installdefs['id'];
         $version = $manifest['version'];
         $uh = new UpgradeHistory();
         $previous_install = array();
         if (!empty($id_name) & !empty($version)) {
             $previous_install = $uh->determineIfUpgrade($id_name, $version);
         }
         $previous_version = empty($previous_install['version']) ? '' : $previous_install['version'];
         $previous_id = empty($previous_install['id']) ? '' : $previous_install['id'];
         if (!empty($previous_version)) {
             $mi->install($unzip_dir, true, $previous_version);
         } else {
             $mi->install($unzip_dir);
         }
         $GLOBALS['log']->debug("INSTALLED: " . $file);
         $new_upgrade = new UpgradeHistory();
         $new_upgrade->filename = $file;
         $new_upgrade->md5sum = md5_file($file);
         $new_upgrade->type = $manifest['type'];
         $new_upgrade->version = $manifest['version'];
         $new_upgrade->status = "installed";
         //$new_upgrade->author        = $manifest['author'];
         $new_upgrade->name = $manifest['name'];
         $new_upgrade->description = $manifest['description'];
         $new_upgrade->id_name = $id_name;
         $serial_manifest = array();
         $serial_manifest['manifest'] = isset($manifest) ? $manifest : '';
         $serial_manifest['installdefs'] = isset($installdefs) ? $installdefs : '';
         $serial_manifest['upgrade_manifest'] = isset($upgrade_manifest) ? $upgrade_manifest : '';
         $new_upgrade->manifest = base64_encode(serialize($serial_manifest));
         //$new_upgrade->unique_key    = (isset($manifest['unique_key'])) ? $manifest['unique_key'] : '';
         $new_upgrade->save();
         //unlink($file);
     }
     //fi
 }
Пример #3
0
             }
         }
     }
     ksort($sugar_config);
     if (!write_array_to_file("sugar_config", $sugar_config, "config.php")) {
         die($mod_strings['ERR_UW_CONFIG_FAILED']);
     }
     break;
 case "module":
     require_once "ModuleInstall/ModuleInstaller.php";
     $mi = new ModuleInstaller();
     switch ($mode) {
         case "Install":
             //here we can determine if this is an upgrade or a new version
             if (!empty($previous_version)) {
                 $mi->install("{$unzip_dir}", true, $previous_version);
             } else {
                 $mi->install("{$unzip_dir}");
             }
             break;
         case "Uninstall":
             if ($remove_tables == 'false') {
                 $GLOBALS['mi_remove_tables'] = false;
             } else {
                 $GLOBALS['mi_remove_tables'] = true;
             }
             $mi->uninstall("{$unzip_dir}");
             break;
         case "Disable":
             if (!$overwrite_files) {
                 $GLOBALS['mi_overwrite_files'] = false;
Пример #4
0
 /**
  * 系统模块管理功能,用于从商店自动部署模块、移除模块
  */
 public function Item()
 {
     $this->rest(["model" => "System/ModuleItem", "post" => function ($res) {
         $zip = "{$res["request"]["module"]}.zip";
         $path = APP_PATH . $res["request"]["module"];
         if (!APP_DEBUG) {
             /*从服务器下载模块压缩包*/
             \Org\Util\Downloader::transfer(C("ENTERTILE") . C("ENTERTILE_STORE_PATH") . $zip, TEMP_PATH . $zip);
             /*创建模块目录*/
             \Org\Util\Directory::create($path);
             /*解压ZIP文件*/
             \Org\Util\Zip::extract(TEMP_PATH . $zip, $path);
         }
         /*加载模块配置类并初始化*/
         include "{$path}/install.php";
         $moduleInstaller = new \ModuleInstaller();
         $config = $moduleInstaller->config;
         /*准备配置数据(格式化处理)*/
         $rules = [];
         for ($i = 0, $l = count($config["menus"]); $i < $l; $i++) {
             $menu = $config["menus"][$i];
             $menu["rules"] = [];
             for ($j = 0, $m = count($menu["permits"]); $j < $m; $j++) {
                 $permit = $menu["permits"][$j];
                 for ($k = 0, $n = count($permit["methods"]); $k < $n; $k++) {
                     $rule = strtolower("{$permit["methods"][$k]}{$permit["path"]}");
                     $rules[] = $menu["rules"][] = $rule;
                 }
             }
             $config["menus"][$i] = $menu;
         }
         /*增加模块信息*/
         $config["id"] = D("System/ModuleItem")->add(["name" => $config["name"], "title" => $config["title"], "abstract" => $config["abstract"]]);
         /*增加相关权限规则(如果已存在,则不添加)*/
         //读取当前规则信息
         $modelPermits = D("System/AuthenticationPermit")->select();
         //移除已经存在的权限规则
         $rules = join($rules, ";");
         for ($i = 0, $l = count($modelPermits); $i < $l; $i++) {
             $rules = str_replace($modelPermits[$i]["name"], "", $rules);
         }
         $rules = preg_replace("/^;|;\$/", "", preg_replace("/;{2,}/", ";", $rules));
         //解析新增RULE并保存到数据库
         if ($rules !== "") {
             $rules = '[{"name":"' . str_replace(";", '"},{"name":"', $rules) . '"}]';
         }
         D("System/AuthenticationPermit")->addAll(json_decode($rules, true));
         /*将规则信息与菜单相关联*/
         //读取最新规则信息
         $rules = [];
         $modelPermits = D("System/AuthenticationPermit")->select();
         for ($i = 0, $l = count($modelPermits); $i < $l; $i++) {
             $rules[$modelPermits[$i]["name"]] = $modelPermits[$i]["id"];
         }
         //关联菜单权限
         for ($i = 0, $l = count($config["menus"]); $i < $l; $i++) {
             $tPermits = [];
             $menu = $config["menus"][$i];
             //添加菜单页面可访问权限
             $menu["rules"][] = ["path" => $menu["page"], "methods" => ["GET"]];
             for ($j = 0, $m = count($menu["rules"]); $j < $m; $j++) {
                 $tPermits[] = $rules[$menu["rules"][$j]];
             }
             //创建菜单记录
             unset($config["menus"][$i]["permits"]);
             unset($config["menus"][$i]["rules"]);
             $config["menus"][$i]["title"] = $menu["menu"];
             $config["menus"][$i]["module_id"] = $config["id"];
             $config["menus"][$i]["rule_ids"] = join($tPermits, ",");
         }
         D("SystemModuleMenu")->addAll($config["menus"]);
         /*运行自定义安装脚本*/
         $moduleInstaller->install();
         /*返回输出*/
         $res["response"] = $config;
         return $res;
     }, "delete" => function ($res) {
         $path = APP_PATH . $res["request"]["module"];
         //执行自定义卸载脚本
         include "{$path}/install.php";
         $moduleInstaller = new \ModuleInstaller();
         $moduleInstaller->uninstall();
         /*移除模块相关文件及记录*/
         $mod = new \Think\Model();
         //移除对应菜单项
         $mod->execute("delete from think_system_module_menu where module_id in(select id from think_system_module_item where name='%s')", [$res["request"]["module"]]);
         //移除模块主体
         $mod->execute("delete from think_system_module_item where name='%s'", [$res["request"]["module"]]);
         if (!APP_DEBUG) {
             //移除代码
             \Org\Util\Directory::unlink($path);
         }
         /*返回输出*/
         return $res;
     }]);
 }
                 }
             }
             $sugar_config['languages'] = $new_langs;
         }
     }
     ksort($sugar_config);
     if (!write_array_to_file("sugar_config", $sugar_config, "config.php")) {
         die($mod_strings['ERR_UW_CONFIG_FAILED']);
     }
     break;
 case "module":
     require_once "ModuleInstall/ModuleInstaller.php";
     $mi = new ModuleInstaller();
     switch ($mode) {
         case "Install":
             $mi->install("{$unzip_dir}");
             break;
         case "Uninstall":
             $mi->uninstall("{$unzip_dir}");
             break;
         default:
             break;
     }
     $file = "{$unzip_dir}/" . constant('SUGARCRM_POST_INSTALL_FILE');
     if (is_file($file)) {
         print "{$mod_strings['LBL_UW_INCLUDING']}: {$file} <br>\n";
         include $file;
         post_install();
     }
     break;
 case "full":