function update(array $arrPlugin, SC_Plugin_Installer $installer)
 {
     $plugin_code = $arrPlugin["plugin_code"];
     GC_Utils_Ex::gfPrintLog("[{$plugin_code}]更新処理を実行します。", PLUGIN_LOG_REALFILE, FALSE);
     SC_Utils_Ex::copyDirectory(dirname(__FILE__) . "/", PLUGIN_UPLOAD_REALDIR . $plugin_code . "/");
     require_once dirname(__FILE__) . '/AutoDisplayCore.php';
     $core = new AutoDisplayCore($arrPlugin);
     $core->install($arrPlugin, $installer);
     GC_Utils_Ex::gfPrintLog("[{$plugin_code}]更新処理を実行完了しました。", PLUGIN_LOG_REALFILE, FALSE);
 }
 /**
  * @param array               $arrPlugin
  * @param SC_Plugin_Installer $objPluginInstaller
  * @see SC_Plugin_Base::install()
  */
 function install($arrPlugin, $objPluginInstaller = null)
 {
     // logo コピー
     $objPluginInstaller->copyDirectory("copy/plugin_dir/", "");
     SC_Utils_Ex::copyDirectory(KTC_COPY_MOD_DIR, DATA_REALDIR . "module/");
     SC_Utils_Ex::copyDirectory(KTC_COPY_CLASS_DIR, CLASS_REALDIR);
     SC_Utils_Ex::copyDirectory(KTC_COPY_CLASS_EX_DIR, CLASS_EX_REALDIR);
     SC_Utils_Ex::copyDirectory(KTC_COPY_HTML_DIR . "user_data/", HTML_REALDIR . USER_DIR);
     SC_Utils_Ex::copyDirectory(KTC_COPY_HTML_DIR . "au/", HTML_REALDIR . "au/");
     SC_Utils_Ex::copyDirectory(KTC_COPY_HTML_DIR . "products/", HTML_REALDIR . "products/");
     SC_Utils_Ex::copyDirectory(KTC_COPY_HTML_DIR . "frontparts/bloc", HTML_REALDIR . BLOC_DIR);
     SC_Utils_Ex::copyDirectory(KTC_COPY_HTML_DIR . "admin/", HTML_REALDIR . ADMIN_DIR);
     SC_Utils_Ex::copyDirectory(KTC_COPY_TMPL_DIR . "admin/", TEMPLATE_ADMIN_REALDIR);
     SC_Utils_Ex::copyDirectory(KTC_COPY_TMPL_DIR . "sphone/", SMARTPHONE_TEMPLATE_REALDIR);
     $this->initDB($arrPlugin, $objPluginInstaller);
     $this->updateTemplate($arrPlugin, $objPluginInstaller);
     $this->createCash();
 }
Esempio n. 3
0
 /**
  * 指定されたパスの配下を再帰的にコピーします.
  * @param string $source_path コピー元ディレクトリのパス
  * @param string $dest_path コピー先ディレクトリのパス
  * @return void
  */
 public static function copyDirectory($source_path, $dest_path)
 {
     $handle = opendir($source_path);
     while ($filename = readdir($handle)) {
         if ($filename === '.' || $filename === '..') {
             continue;
         }
         $cur_path = $source_path . $filename;
         $dest_file_path = $dest_path . $filename;
         if (is_dir($cur_path)) {
             // ディレクトリの場合
             // コピー先に無いディレクトリの場合、ディレクトリ作成.
             if (!empty($filename) && !file_exists($dest_file_path)) {
                 mkdir($dest_file_path);
             }
             SC_Utils_Ex::copyDirectory($cur_path . '/', $dest_file_path . '/');
         } else {
             if (file_exists($dest_file_path)) {
                 unlink($dest_file_path);
             }
             copy($cur_path, $dest_file_path);
         }
     }
 }
 /**
  * プラグインをインストールします.
  *
  * @param  string $archive_file_name アーカイブファイル名.
  * @param  string $key               キー.
  * @return array  エラー情報を格納した連想配列.
  */
 public function installPlugin($archive_file_name, $key)
 {
     $objQuery =& SC_Query_Ex::getSingletonInstance();
     $objQuery->begin();
     // 一時展開ディレクトリにファイルがある場合は事前に削除.
     $arrFileHash = SC_Helper_FileManager_Ex::sfGetFileList(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
     if (count($arrFileHash) > 0) {
         SC_Helper_FileManager_Ex::deleteFile(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, false);
     }
     //シンタックスエラーがあるtar.gzをアップ後、削除するとたまにディレクトリが消えるので追加
     $this->makeDir(PLUGIN_UPLOAD_REALDIR);
     $arrErr = array();
     // 必須拡張モジュールのチェック
     $arrErr = SC_Plugin_Util_Ex::checkExtension($key);
     if ($this->isError($arrErr) === true) {
         return $arrErr;
     }
     // ファイルをチェックし一時展開用ディレクトリに展開します.
     $arrErr = $this->unpackPluginFile($archive_file_name, DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $key);
     if ($this->isError($arrErr) === true) {
         return $arrErr;
     }
     // plugin_infoを読み込み.
     $arrErr = $this->requirePluginFile(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR . 'plugin_info.php', $key);
     if ($this->isError($arrErr) === true) {
         $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
         return $arrErr;
     }
     // リフレクションオブジェクトを生成.
     $objReflection = new ReflectionClass('plugin_info');
     $arrPluginInfo = $this->getPluginInfo($objReflection);
     // プラグインクラスに必須となるパラメータが正常に定義されているかチェックします.
     $arrErr = $this->checkPluginConstants($objReflection, DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
     if ($this->isError($arrErr) === true) {
         $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
         return $arrErr;
     }
     // 既にインストールされていないかを判定.
     if ($this->isInstalledPlugin($arrPluginInfo['PLUGIN_CODE']) === true) {
         $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
         $arrErr['plugin_file'] = '※ ' . $arrPluginInfo['PLUGIN_NAME'] . 'は既にインストールされています。<br/>';
         return $arrErr;
     }
     // プラグイン情報をDB登録
     if ($this->registerData($arrPluginInfo) === false) {
         $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
         $arrErr['plugin_file'] = '※ DB登録に失敗しました。<br/>';
         return $arrErr;
     }
     // プラグイン保存ディレクトリを作成し、一時展開用ディレクトリから移動します.
     $plugin_dir_path = $this->getPluginDir($arrPluginInfo['PLUGIN_CODE']);
     $this->makeDir($plugin_dir_path);
     SC_Utils_Ex::copyDirectory(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $plugin_dir_path);
     // プラグイン情報を取得
     $plugin = SC_Plugin_Util_Ex::getPluginByPluginCode($arrPluginInfo['PLUGIN_CODE']);
     // クラスファイルを読み込み.
     $plugin_class_file_path = $this->getPluginFilePath($plugin['plugin_code'], $plugin['class_name']);
     $arrErr = $this->requirePluginFile($plugin_class_file_path, $key);
     if ($this->isError($arrErr) === true) {
         $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $plugin['plugin_id']);
         return $arrErr;
     }
     // プラグインhtmlディレクトリ作成
     $plugin_html_dir_path = $this->getHtmlPluginDir($plugin['plugin_code']);
     $this->makeDir($plugin_html_dir_path);
     $arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'install');
     if ($this->isError($arrErr) === true) {
         // エラー時, transactionがabortしてるのでロールバック
         $objQuery->rollback();
         $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $plugin['plugin_id'], $plugin_html_dir_path);
         return $arrErr;
     }
     $objQuery->commit();
     // 不要なファイルの削除
     SC_Helper_FileManager_Ex::deleteFile(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, false);
     return $arrErr;
 }
 /**
  * プラグインをインストールします.
  *
  * @param string $plugin_code プラグインコード.
  * @param string $key キー.
  * @return array エラー情報を格納した連想配列.
  */
 function installPlugin($upload_file_file_name, $key)
 {
     // インストール前に不要なファイルを消しておきます.
     SC_Helper_FileManager_Ex::deleteFile(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, false);
     //シンタックスエラーがあるtar.gzをアップ後、削除するとたまにディレクトリが消えるので追加
     $this->makeDir(PLUGIN_UPLOAD_REALDIR);
     $arrErr = array();
     // 必須拡張モジュールのチェック
     $arrErr = SC_Plugin_Util_Ex::checkExtension($key);
     if ($this->isError($arrErr) === true) {
         return $arrErr;
     }
     // ファイルをチェックし一時展開用ディレクトリに展開します.
     $arrErr = $this->unpackPluginFile($upload_file_file_name, DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $key);
     if ($this->isError($arrErr) === true) {
         return $arrErr;
     }
     // plugin_infoを読み込み.
     $arrErr = $this->requirePluginFile(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR . 'plugin_info.php', $key);
     if ($this->isError($arrErr) === true) {
         $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
         return $arrErr;
     }
     // リフレクションオブジェクトを生成.
     $objReflection = new ReflectionClass('plugin_info');
     $arrPluginInfo = $this->getPluginInfo($objReflection);
     // プラグインクラスに必須となるパラメータが正常に定義されているかチェックします.
     $arrErr = $this->checkPluginConstants($objReflection, DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
     if ($this->isError($arrErr) === true) {
         $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
         return $arrErr;
     }
     // プラグインコード
     $plugin_code = $arrPluginInfo['PLUGIN_CODE'];
     // プラグイン名
     $plugin_name = $arrPluginInfo['PLUGIN_NAME'];
     // 既にインストールされていないかを判定.
     if ($this->isInstalledPlugin($plugin_code) === true) {
         $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
         $arrErr['plugin_file'] = '※ ' . $plugin_name . 'は既にインストールされています。<br/>';
         return $arrErr;
     }
     // プラグイン情報をDB登録
     if ($this->registerData($arrPluginInfo) === false) {
         $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
         $arrErr['plugin_file'] = '※ DB登録に失敗しました。<br/>';
         return $arrErr;
     }
     // プラグイン保存ディレクトリを作成し、一時展開用ディレクトリから移動します.
     $plugin_dir_path = PLUGIN_UPLOAD_REALDIR . $plugin_code . '/';
     $this->makeDir($plugin_dir_path);
     SC_Utils_Ex::copyDirectory(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $plugin_dir_path);
     // プラグイン情報を取得
     $plugin = SC_Plugin_Util_Ex::getPluginByPluginCode($plugin_code);
     // クラスファイルを読み込み.
     $plugin_class_file_path = $plugin_dir_path . $plugin['class_name'] . '.php';
     $arrErr = $this->requirePluginFile($plugin_class_file_path, $key);
     if ($this->isError($arrErr) === true) {
         $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $plugin['plugin_id']);
         return $arrErr;
     }
     // プラグインhtmlディレクトリ作成
     $plugin_html_dir = PLUGIN_HTML_REALDIR . $plugin_code;
     $this->makeDir($plugin_html_dir);
     $arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'install');
     if ($this->isError($arrErr) === true) {
         $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $plugin['plugin_id'], $plugin_html_dir);
         return $arrErr;
     }
     // 不要なファイルの削除
     SC_Helper_FileManager_Ex::deleteFile(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, false);
     return $arrErr;
 }