Index: branches/version-2_12-dev/data/class/pages/admin/ownersstore/LC_Page_Admin_OwnersStore.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/admin/ownersstore/LC_Page_Admin_OwnersStore.php	(revision 21783)
+++ branches/version-2_12-dev/data/class/pages/admin/ownersstore/LC_Page_Admin_OwnersStore.php	(revision 21794)
@@ -347,4 +347,5 @@
         // リフレクションオブジェクトを生成.
         $objReflection = new ReflectionClass('plugin_info');
+        $arrPluginInfo = $this->getPluginInfo($objReflection);
         // プラグインクラスに必須となるパラメータが正常に定義されているかチェックします.
         $arrErr = $this->checkPluginConstants($objReflection, DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
@@ -355,7 +356,7 @@
 
         // プラグインコード
-        $plugin_code = $objReflection->getConstant('PLUGIN_CODE');
+        $plugin_code = $arrPluginInfo['PLUGIN_CODE'];
         // プラグイン名
-        $plugin_name = $objReflection->getConstant('PLUGIN_NAME');
+        $plugin_name = $arrPluginInfo['PLUGIN_NAME'];
 
         // 既にインストールされていないかを判定.
@@ -367,5 +368,5 @@
 
         // プラグイン情報をDB登録
-        if ($this->registerData($objReflection) === false) {
+        if ($this->registerData($arrPluginInfo) === false) {
             $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
             $arrErr['plugin_file'] = '※ DB登録に失敗しました。<br/>';
@@ -425,4 +426,41 @@
 
     /**
+     * プラグイン情報を取得します.
+     * 
+     * @param ReflectionClass $objReflection
+     * @return array プラグイン情報の配列
+     */
+    function getPluginInfo(ReflectionClass $objReflection) {
+        $arrStaticProps = $objReflection->getStaticProperties();
+        $arrConstants   = $objReflection->getConstants();
+
+        $arrPluginInfoKey = array(
+            'PLUGIN_CODE',
+            'PLUGIN_NAME',
+            'CLASS_NAME',
+            'PLUGIN_VERSION',
+            'COMPLIANT_VERSION',
+            'AUTHOR',
+            'DESCRIPTION',
+            'PLUGIN_SITE_URL',
+            'AUTHOR_SITE_URL',
+            'HOOK_POINTS',
+        );
+        $arrPluginInfo = array();
+        foreach ($arrPluginInfoKey as $key) {
+            // クラス変数での定義を優先
+            if (isset($arrStaticProps[$key])) {
+                $arrPluginInfo[$key] = $arrStaticProps[$key];
+            // クラス変数定義がなければ, クラス定数での定義を読み込み.
+            } elseif ($arrConstants[$key]) {
+                $arrPluginInfo[$key] = $arrConstants[$key];
+            } else {
+                $arrPluginInfo[$key] = null;
+            }
+        }
+        return $arrPluginInfo;
+    }
+    
+    /**
      * プラグインクラス内の定数をチェックします.
      *
@@ -432,36 +470,41 @@
     function checkPluginConstants(ReflectionClass $objReflection, $unpack_dir) {
         $arrErr = array();
-        $plugin_code = $objReflection->getConstant('PLUGIN_CODE');
-        if ($plugin_code === false) {
+        // プラグイン情報を取得
+        $arrPluginInfo = $this->getPluginInfo($objReflection);
+
+        if (!isset($arrPluginInfo['PLUGIN_CODE'])) {
             $arrErr['plugin_file'] = '※ PLUGIN_CODEが定義されていません。<br/>';
             return $arrErr;
         }
-        $plugin_name = $objReflection->getConstant('PLUGIN_NAME');
-        if ($plugin_name === false) {
+        if (!isset($arrPluginInfo['PLUGIN_NAME'])) {
             $arrErr['plugin_file'] = '※ PLUGIN_NAMEが定義されていません。<br/>';
             return $arrErr;
         }
-        $class_name = $objReflection->getConstant('CLASS_NAME') . '.php';
-        if ($class_name === false ||file_exists($unpack_dir . $class_name) === false) {
-            $arrErr['plugin_file'] = '※ CLASS_NAMEが定義されていません。またはCLASS_NAMEが正しく定義されていません。<br/>';
-            return $arrErr;
-        }
-        if ($objReflection->getConstant('PLUGIN_VERSION') === false) {
+        if (!isset($arrPluginInfo['CLASS_NAME'])) {
+            $arrErr['plugin_file'] = '※ CLASS_NAMEが定義されていません。<br/>';
+            return $arrErr;
+        }
+        $class_path = $unpack_dir . $arrPluginInfo['CLASS_NAME'] . '.php';
+        if (file_exists($class_path) === false) {
+            $arrErr['plugin_file'] = '※ CLASS_NAMEが正しく定義されていません。<br/>';
+            return $arrErr;
+        }
+        if (!isset($arrPluginInfo['PLUGIN_VERSION'])) {
             $arrErr['plugin_file'] = '※ PLUGIN_VERSIONが定義されていません。<br/>';
             return $arrErr;
         }
-        if ($objReflection->getConstant('COMPLIANT_VERSION') === false) {
+        if (!isset($arrPluginInfo['COMPLIANT_VERSION'])) {
             $arrErr['plugin_file'] = '※ COMPLIANT_VERSIONが定義されていません。<br/>';
             return $arrErr;
         }
-        if ($objReflection->getConstant('AUTHOR') === false) {
+        if (!isset($arrPluginInfo['AUTHOR'])) {
             $arrErr['plugin_file'] = '※ AUTHORが定義されていません。<br/>';
             return $arrErr;
         }
-        if ($objReflection->getConstant('DESCRIPTION') === false) {
+        if (!isset($arrPluginInfo['DESCRIPTION'])) {
             $arrErr['plugin_file'] = '※ DESCRIPTIONが定義されていません。<br/>';
             return $arrErr;
         }
-        $objErr = new SC_CheckError_Ex($objReflection->getConstants());
+        $objErr = new SC_CheckError_Ex($arrPluginInfo);
         $objErr->doFunc(array('PLUGIN_CODE', 'PLUGIN_CODE', STEXT_LEN), array('MAX_LENGTH_CHECK','GRAPH_CHECK'));
         $objErr->doFunc(array('PLUGIN_NAME', 'PLUGIN_NAME', STEXT_LEN), array('MAX_LENGTH_CHECK'));
@@ -471,8 +514,8 @@
         $objErr->doFunc(array('AUTHOR', 'AUTHOR', STEXT_LEN), array('MAX_LENGTH_CHECK'));
         $objErr->doFunc(array('DESCRIPTION', 'DESCRIPTION', MTEXT_LEN), array('MAX_LENGTH_CHECK'));
-        if ($objReflection->getConstant('PLUGIN_SITE_URL') !== false) {
+        if (isset($arrPluginInfo['PLUGIN_SITE_URL'])) {
             $objErr->doFunc(array('PLUGIN_SITE_URL', 'PLUGIN_SITE_URL', URL_LEN), array('MAX_LENGTH_CHECK','GRAPH_CHECK'));
         }
-        if ($objReflection->getConstant('AUTHOR_SITE_URL') !== false) {
+        if (isset($arrPluginInfo['AUTHOR_SITE_URL'])) {
             $objErr->doFunc(array('AUTHOR_SITE_URL', 'AUTHOR_SITE_URL', URL_LEN), array('MAX_LENGTH_CHECK','GRAPH_CHECK'));
         }
@@ -509,5 +552,5 @@
         }
         // プラグインクラスファイルのUPDATE処理を実行.
-        $arrErr = $this->execPlugin($objPluginUpdate, 'plugin_update', 'update');
+        $arrErr = $this->execPlugin($target_plugin, 'plugin_update', 'update');
 
         // 保存ディレクトリの削除.
@@ -647,8 +690,8 @@
      * プラグイン情報をDB登録.
      *
-     * @param ReflectionClass $objReflection リフレクションオブジェクト
+     * @param array $arrPluginInfo プラグイン情報を格納した連想配列.
      * @return array エラー情報を格納した連想配列.
      */
-    function registerData(ReflectionClass $objReflection) {
+    function registerData($arrPluginInfo) {
 
         // プラグイン情報をDB登録.
@@ -658,21 +701,21 @@
         $plugin_id = $objQuery->nextVal('dtb_plugin_plugin_id');
         $arr_sqlval_plugin['plugin_id'] = $plugin_id;
-        $arr_sqlval_plugin['plugin_name'] = $objReflection->getConstant('PLUGIN_NAME');
-        $arr_sqlval_plugin['plugin_code'] = $objReflection->getConstant('PLUGIN_CODE');
-        $arr_sqlval_plugin['class_name'] = $objReflection->getConstant('CLASS_NAME');
-        $arr_sqlval_plugin['author'] = $objReflection->getConstant('AUTHOR');
+        $arr_sqlval_plugin['plugin_name'] = $arrPluginInfo['PLUGIN_NAME'];
+        $arr_sqlval_plugin['plugin_code'] = $arrPluginInfo['PLUGIN_CODE'];
+        $arr_sqlval_plugin['class_name'] = $arrPluginInfo['CLASS_NAME'];
+        $arr_sqlval_plugin['author'] = $arrPluginInfo['AUTHOR'];
         // AUTHOR_SITE_URLが定義されているか判定.
-        $author_site_url = $objReflection->getConstant('AUTHOR_SITE_URL');
-        if ($author_site_url !== false) {
-            $arr_sqlval_plugin['author_site_url'] = $author_site_url;
+        $author_site_url = $arrPluginInfo['AUTHOR_SITE_URL'];
+        if ($author_site_url !== null) {
+            $arr_sqlval_plugin['author_site_url'] = $arrPluginInfo['AUTHOR'];
         }
         // PLUGIN_SITE_URLが定義されているか判定.
-        $plugin_site_url = $objReflection->getConstant('PLUGIN_SITE_URL');
-        if ($plugin_site_url !== false) {
+        $plugin_site_url = $arrPluginInfo['PLUGIN_SITE_URL'];
+        if ($plugin_site_url !== null) {
             $arr_sqlval_plugin['plugin_site_url'] = $plugin_site_url;
         }
-        $arr_sqlval_plugin['plugin_version'] = $objReflection->getConstant('PLUGIN_VERSION');
-        $arr_sqlval_plugin['compliant_version'] = $objReflection->getConstant('COMPLIANT_VERSION');
-        $arr_sqlval_plugin['plugin_description'] = $objReflection->getConstant('DESCRIPTION');
+        $arr_sqlval_plugin['plugin_version'] = $arrPluginInfo['PLUGIN_VERSION'];
+        $arr_sqlval_plugin['compliant_version'] = $arrPluginInfo['COMPLIANT_VERSION'];
+        $arr_sqlval_plugin['plugin_description'] = $arrPluginInfo['DESCRIPTION'];
         $arr_sqlval_plugin['priority'] = 0;
         $arr_sqlval_plugin['enable'] = PLUGIN_ENABLE_FALSE;
@@ -681,14 +724,30 @@
 
         // フックポイントをDB登録.
-        $hook_point = $objReflection->getConstant('HOOK_POINTS');
-        if ($hook_point !== false) {
-            $array_hook_point = explode(',', $hook_point);
-            if (is_array($array_hook_point)) {
-                foreach ($array_hook_point as $hook_point) {
+        $hook_point = $arrPluginInfo['HOOK_POINTS'];
+        if ($hook_point !== null) {
+            /**
+             * FIXME コードが重複しているため、要修正
+             */
+            // フックポイントが配列で定義されている場合
+            if (is_array($hook_point)) {
+                foreach ($hook_point as $h) {
                     $arr_sqlval_plugin_hookpoint = array();
                     $id = $objQuery->nextVal('dtb_plugin_hookpoint_plugin_hookpoint_id');
                     $arr_sqlval_plugin_hookpoint['plugin_hookpoint_id'] = $id;
                     $arr_sqlval_plugin_hookpoint['plugin_id'] = $plugin_id;
-                    $arr_sqlval_plugin_hookpoint['hook_point'] = $hook_point;
+                    $arr_sqlval_plugin_hookpoint['hook_point'] = $h[0];
+                    $arr_sqlval_plugin_hookpoint['callback'] = $h[1];
+                    $arr_sqlval_plugin_hookpoint['update_date'] = 'CURRENT_TIMESTAMP';
+                    $objQuery->insert('dtb_plugin_hookpoint', $arr_sqlval_plugin_hookpoint);
+                }
+            // 文字列定義の場合
+            } else {
+                $array_hook_point = explode(',', $hook_point);
+                foreach ($array_hook_point as $h) {
+                    $arr_sqlval_plugin_hookpoint = array();
+                    $id = $objQuery->nextVal('dtb_plugin_hookpoint_plugin_hookpoint_id');
+                    $arr_sqlval_plugin_hookpoint['plugin_hookpoint_id'] = $id;
+                    $arr_sqlval_plugin_hookpoint['plugin_id'] = $plugin_id;
+                    $arr_sqlval_plugin_hookpoint['hook_point'] = $h;
                     $arr_sqlval_plugin_hookpoint['update_date'] = 'CURRENT_TIMESTAMP';
                     $objQuery->insert('dtb_plugin_hookpoint', $arr_sqlval_plugin_hookpoint);
Index: branches/version-2_12-dev/data/class/plugin/SC_Plugin_Base.php
===================================================================
--- branches/version-2_12-dev/data/class/plugin/SC_Plugin_Base.php	(revision 21785)
+++ branches/version-2_12-dev/data/class/plugin/SC_Plugin_Base.php	(revision 21794)
@@ -3,5 +3,5 @@
  * This file is part of EC-CUBE
  *
- * Copyright(c) 2000-2011 LOCKON CO.,LTD. All Rights Reserved.
+ * Copyright(c) 2000-2012 LOCKON CO.,LTD. All Rights Reserved.
  *
  * http://www.lockon.co.jp/
@@ -33,5 +33,5 @@
 abstract class SC_Plugin_Base {
 
-    var $arrSelfInfo;
+    protected $arrSelfInfo;
 
     /**
@@ -83,4 +83,22 @@
      */
     abstract function disable($arrPlugin);
+
+    /**
+     * プラグインヘルパーへ, コールバックメソッドを登録します.
+     *
+     * @param object $objPluginHelper
+     * @param integer $priority
+     */
+    function register(SC_Helper_Plugin $objHelperPlugin, $priority) {
+        if (isset($this->arrSelfInfo['plugin_hook_point'])) {
+            $arrHookPoints = $this->arrSelfInfo['plugin_hook_point'];
+            foreach ($arrHookPoints as $hook_point) {
+                if (isset($hook_point['callback'])) {
+                    $hook_point_name = $hook_point['hook_point'];
+                    $callback_name   = $hook_point['callback'];
+                    $objHelperPlugin->addAction($hook_point_name, array($this, $callback_name), $priority);
+                }
+            }
+        }
+    }
 }
-?>
Index: branches/version-2_12-dev/data/class/plugin/SC_Plugin_Util.php
===================================================================
--- branches/version-2_12-dev/data/class/plugin/SC_Plugin_Util.php	(revision 21750)
+++ branches/version-2_12-dev/data/class/plugin/SC_Plugin_Util.php	(revision 21794)
@@ -39,4 +39,12 @@
         }
         $arrRet = $objQuery->select($col,$table,$where);
+        
+        // プラグインフックポイントを取得.
+        $max = count($arrRet);
+        for ($i = 0; $i < $max; $i++) {
+            $plugin_id = $arrRet[$i]['plugin_id'];
+            $arrHookPoint = SC_Plugin_Util::getPluginHookPoint($plugin_id);
+            $arrRet[$i]['plugin_hook_point'] = $arrHookPoint;
+        }
         return $arrRet;
     }
@@ -121,3 +129,17 @@
         return $arrPluginDirectory;
     }
+    
+    /**
+     * プラグインIDをキーに, プラグインフックポイントを取得する.
+     *
+     * @param integer $plugin_id
+     * @return array フックポイントの一覧
+     */
+    function getPluginHookPoint($plugin_id) {
+        $objQuery =& SC_Query_Ex::getSingletonInstance();
+        $cols = '*';
+        $from = 'dtb_plugin_hookpoint';
+        $where = 'plugin_id = ?';
+        return $objQuery->select($cols, $from, $where, array($plugin_id));
+    }
 }
