예제 #1
0
 public function actionIndex()
 {
     if (EnvUtil::getRequest("op")) {
         $operation = EnvUtil::getRequest("op");
         $operations = array("checking", "patch", "showupgrade");
         if (!in_array($operation, $operations)) {
             exit;
         }
         switch ($operation) {
             case "checking":
                 $upgradeStep = Cache::model()->fetchByPk("upgrade_step");
                 $upgradeStep["cachevalue"] = unserialize($upgradeStep["cachevalue"]);
                 $isExistStep = !empty($upgradeStep["cachevalue"]) && !empty($upgradeStep["cachevalue"]["step"]);
                 if (!EnvUtil::getRequest("rechecking") && $isExistStep) {
                     $param = array("op" => $upgradeStep["cachevalue"]["operation"], "version" => $upgradeStep["cachevalue"]["version"], "locale" => $upgradeStep["cachevalue"]["locale"], "charset" => $upgradeStep["cachevalue"]["charset"], "release" => $upgradeStep["cachevalue"]["release"], "step" => $upgradeStep["cachevalue"]["step"]);
                     $data = array("url" => $this->createUrl("upgrade/index", $param), "stepName" => UpgradeUtil::getStepName($upgradeStep["cachevalue"]["step"]));
                     $this->render("upgradeContinue", array("data" => $data));
                 } else {
                     Cache::model()->deleteByPk("upgrade_step");
                     UpgradeUtil::checkUpgrade();
                     $url = $this->createUrl("upgrade/index", array("op" => "showupgrade"));
                     $this->redirect($url);
                 }
                 break;
             case "showupgrade":
                 $result = $this->processingUpgradeList();
                 if ($result["isHaveUpgrade"]) {
                     $this->render("upgradeShow", $result);
                 } else {
                     $this->render("upgradeNewest");
                 }
                 break;
             case "patch":
                 $step = EnvUtil::getRequest("step");
                 $step = intval($step) ? $step : 1;
                 $version = trim($_GET["version"]);
                 $release = trim($_GET["release"]);
                 $locale = trim($_GET["locale"]);
                 $charset = trim($_GET["charset"]);
                 $upgradeInfo = $upgradeStep = array();
                 $upgradeStepRecord = Cache::model()->fetchByPk("upgrade_step");
                 $upgradeStep = unserialize($upgradeStepRecord["cachevalue"]);
                 $upgradeStep["step"] = isset($upgradeStep["step"]) ? intval($upgradeStep["step"]) : $step;
                 $upgradeStep["operation"] = $operation;
                 $upgradeStep["version"] = $version;
                 $upgradeStep["release"] = $release;
                 $upgradeStep["charset"] = $charset;
                 $upgradeStep["locale"] = $locale;
                 $data = array("cachekey" => "upgrade_step", "cachevalue" => serialize($upgradeStep), "dateline" => TIMESTAMP);
                 Cache::model()->add($data, false, true);
                 $upgradeRun = Cache::model()->fetchByPk("upgrade_run");
                 if (!$upgradeRun) {
                     $upgrade = Ibos::app()->setting->get("setting/upgrade");
                     $data = array("cachekey" => "upgrade_run", "cachevalue" => serialize($upgrade), "dateline" => TIMESTAMP);
                     Cache::model()->add($data, false, true);
                     $upgradeRun = $upgrade;
                 } else {
                     $upgradeRun = unserialize($upgradeRun["cachevalue"]);
                 }
                 $param = array("op" => $operation, "version" => $version, "locale" => $locale, "charset" => $charset, "release" => $release);
                 if ($step != 5) {
                     $upgradeInfo = $this->filterRun($param, $upgradeRun);
                     if (empty($upgradeInfo)) {
                         Cache::model()->deleteByPk("upgrade_step");
                         Cache::model()->deleteByPk("upgrade_run");
                         $msg = Ibos::lang("upgrade_unknow_error", "", array("{url}" => $this->createUrl("upgrade/index", array("op" => "checking", "rechecking" => 1))));
                         $this->render("upgradeError", array("msg" => $msg));
                         exit;
                     }
                     $savePath = "/data/update/IBOS" . $upgradeInfo["latestversion"] . " Release[" . $upgradeInfo["latestrelease"] . "]";
                     $fileList = UpgradeUtil::fetchUpdateFileList($upgradeInfo);
                     $updateMd5FileList = $fileList["md5"];
                     $updateFileList = $fileList["file"];
                     $preStatus = $this->preProcessingStep($upgradeInfo, $actionUrl = $this->createUrl("upgrade/index", $param), !empty($updateFileList) ? true : false);
                     if ($preStatus["status"] < 0) {
                         $this->ajaxReturn($preStatus, "json");
                     }
                 }
                 switch ($step) {
                     case 1:
                         return $this->processingShowUpgrade($updateFileList, $param, $savePath);
                         break;
                     case 2:
                         return $this->processingDownloadFile($upgradeInfo, $updateMd5FileList, $updateFileList, $param);
                         break;
                     case 3:
                         return $this->processingCompareFile($updateFileList, $param, $savePath);
                         break;
                     case 4:
                         return $this->processingUpdateFile($upgradeInfo, $updateFileList, $upgradeStep, $param);
                         break;
                     case 5:
                         return $this->processingTempFile($param);
                         break;
                     default:
                         break;
                 }
                 break;
             default:
                 break;
         }
     } else {
         $this->render("upgradeCheckVersion");
     }
 }