Index: branches/version-2_11-dev/data/class/helper/SC_Helper_Mobile.php
===================================================================
--- branches/version-2_11-dev/data/class/helper/SC_Helper_Mobile.php	(revision 21402)
+++ branches/version-2_11-dev/data/class/helper/SC_Helper_Mobile.php	(revision 21405)
@@ -34,48 +34,4 @@
  */
 class SC_Helper_Mobile {
-
-    /** 基本MimeType */
-    var $defaultMimeType = 'application/force-download';
-
-    /** 拡張MimeType配列
-     * Application/octet-streamで対応出来ないファイルタイプのみ拡張子をキーに記述する
-     * 拡張子が本配列に存在しない場合は application/force-download を利用する */
-    var $arrMimetypes = array(
-            'html'=> 'text/html',
-            'css' => 'text/css',
-            'hdml'=> 'text/x-hdml',
-            'mmf' => 'application/x-smaf',
-            'jpeg'=> 'image/jpeg',
-            'jpg' => 'image/jpeg',
-            'gif' => 'image/gif',
-            'png' => 'image/png',
-            'bmp' => 'image/x-ms-bmp',
-            'amc' => 'application/x-mpeg',
-            '3g2' => 'video/3gpp2',
-            '3gp' => 'video/3gpp',
-            'jam' => 'application/x-jam',
-            'kjx' => 'application/x-kjx',
-            'jar' => 'application/java-archive',
-            'jad' => 'text/vnd.sun.j2me.app-descriptor',
-            'swf' => 'application/x-shockwave-flash',
-            'dmt' => 'application/x-decomail-template',
-            'khm' => 'application/x-kddi-htmlmail',
-            'hmt' => 'application/x-htmlmail-template',
-            'ucm' => 'application/x-ucf-package',
-            'ucp' => 'application/x-ucf-package',
-            'pdf' => 'application/pdf',
-            'wma' => 'audio/x-ms-wma',
-            'asf' => 'video/x-ms-asf',
-            'wax' => 'audio/x-ms-wax',
-            'wvx' => 'video/x-ms-wvx',
-            'wmv' => 'video/x-ms-wmv',
-            'asx' => 'video/asx',
-            'txt' => 'text/plain',
-            'exe' => 'application/octet-stream',
-            'zip' => 'application/zip',
-            'doc' => 'application/msword',
-            'xls' => 'application/vnd.ms-excel',
-            'ppt' => 'application/vnd.ms-powerpoint'
-        );
 
     /**
@@ -282,9 +238,6 @@
         ob_start(array('SC_MobileImage_Ex', 'handler'));
 
-        //download.phpに対してカタカナ変換をするとファイルが壊れてしまうため回避する
-        if ($_SERVER['SCRIPT_FILENAME'] != HTML_REALDIR . "mypage/download.php") {
-            // 全角カタカナを半角カタカナに変換する。
-            ob_start(create_function('$buffer', 'return mb_convert_kana($buffer, "k", "SJIS-win");'));
-        }
+        // 全角カタカナを半角カタカナに変換する。
+        ob_start(create_function('$buffer', 'return mb_convert_kana($buffer, "k", "SJIS-win");'));
 
         // 内部エンコーディングから Shift JIS に変換する。
@@ -507,20 +460,4 @@
         return false;
     }
-
-    /**
-     * ファイルのMIMEタイプを判別する
-     *
-     * @param string $filename ファイル名
-     * @return string MIMEタイプ
-     */
-    function getMimeType($filename) {
-        //ファイルの拡張子からコンテンツタイプを決定する
-        $file_extension = strtolower(substr(strrchr($filename,"."),1));
-        $mime_type = $this->defaultMimeType;
-        if(array_key_exists($file_extension, $this->arrMimetypes)){
-            $mime_type = $this->arrMimetypes[$file_extension];
-        }
-        return $mime_type;
-    }
 }
 ?>
Index: branches/version-2_11-dev/data/class/session/sessionfactory/SC_SessionFactory_UseRequest.php
===================================================================
--- branches/version-2_11-dev/data/class/session/sessionfactory/SC_SessionFactory_UseRequest.php	(revision 21354)
+++ branches/version-2_11-dev/data/class/session/sessionfactory/SC_SessionFactory_UseRequest.php	(revision 21405)
@@ -158,11 +158,4 @@
         if (!isset($sessionId)) {
             $sessionId = @$_GET[session_name()];
-            // AU動画音声ファイルダウンロード対策
-            // キャリアがAUで、動画、音声ファイルをダウンロードする際に
-            // SESSIONIDの後に余計なパラメータが付与され、セッションが無効になるケースがある
-            if (SC_MobileUserAgent::getCarrier() == "ezweb") {
-                $idArray = split("\?", $sessionId);
-                $sessionId = $idArray[0];
-            }
         }
         if (!isset($sessionId)) {
Index: branches/version-2_11-dev/data/class/SC_Product.php
===================================================================
--- branches/version-2_11-dev/data/class/SC_Product.php	(revision 21400)
+++ branches/version-2_11-dev/data/class/SC_Product.php	(revision 21405)
@@ -599,10 +599,10 @@
 
     /**
-     * 商品詳細の結果から, 販売制限数を取得する.
-     *
-     * getDetailAndProductsClass() の結果から, 販売制限数を取得する.
+     * 商品詳細の結果から, 購入制限数を取得する.
+     *
+     * getDetailAndProductsClass() の結果から, 購入制限数を取得する.
      *
      * @param array $p 商品詳細の検索結果の配列
-     * @return integer 商品詳細の結果から求めた販売制限数.
+     * @return integer 商品詳細の結果から求めた購入制限数.
      * @see getDetailAndProductsClass()
      */
Index: branches/version-2_11-dev/data/class/pages/mypage/LC_Page_Mypage_DownLoad.php
===================================================================
--- branches/version-2_11-dev/data/class/pages/mypage/LC_Page_Mypage_DownLoad.php	(revision 21354)
+++ branches/version-2_11-dev/data/class/pages/mypage/LC_Page_Mypage_DownLoad.php	(revision 21405)
@@ -44,7 +44,5 @@
      * Application/octet-streamで対応出来ないファイルタイプのみ拡張子をキーに記述する
      * 拡張子が本配列に存在しない場合は $defaultContentTypeを利用する */
-    var $arrContentType = array('apk' => 'application/vnd.android.package-archive',
-                                'pdf' => 'application/pdf'
-        );
+    var $arrContentType = array('apk' => 'application/vnd.android.package-archive');
 
     // }}}
@@ -134,186 +132,4 @@
         // SC_DisplayやSC_Responseに大容量ファイルレスポンスが実装されたら移行可能だと思います。
 
-        // ダウンロード実行 モバイル端末はダウンロード方法が異なる
-        if (SC_Display_Ex::detectDevice() == DEVICE_TYPE_MOBILE){
-            // キャリアがAUのモバイル端末はさらにダウンロード方法が異なる
-            if (SC_MobileUserAgent::getCarrier() == 'ezweb'){
-                // AUモバイル
-                $this->lfMobileAuDownload($realpath,$sdown_filename);
-            }else{
-                // AU以外のモバイル
-                $this->lfMobileDownload($realpath,$sdown_filename);
-            }
-        }else{
-            // PC、スマフォ
-            $this->lfDownload($realpath,$sdown_filename);
-        }
-    }
-
-    /**
-     * 商品情報の読み込みを行う.
-     *
-     * @param integer $customer_id 会員ID
-     * @param integer $order_id 受注ID
-     * @param integer $product_id 商品ID
-     * @param integer $product_class_id 商品規格ID
-     * @return array 商品情報の配列
-     */
-    function lfGetRealFileName($customer_id, $order_id, $product_id, $product_class_id) {
-        $objQuery = new SC_Query_Ex();
-        $col = <<< __EOS__
-            pc.product_id AS product_id,
-            pc.product_class_id AS product_class_id,
-            pc.down_realfilename AS down_realfilename,
-            pc.down_filename AS down_filename,
-            o.order_id AS order_id,
-            o.customer_id AS customer_id,
-            o.payment_date AS payment_date,
-            o.status AS status
-__EOS__;
-
-        $table = <<< __EOS__
-            dtb_products_class pc,
-            dtb_order_detail od,
-            dtb_order o
-__EOS__;
-
-        $dbFactory = SC_DB_DBFactory_Ex::getInstance();
-        $where = "o.customer_id = ? AND o.order_id = ? AND pc.product_id = ? AND pc.product_class_id = ?";
-        $where .= " AND " . $dbFactory->getDownloadableDaysWhereSql('o');
-        $where .= " = 1";
-        $arrRet = $objQuery->select($col, $table, $where,
-                                    array($customer_id, $order_id, $product_id, $product_class_id));
-        return $arrRet[0];
-    }
-
-    /* パラメーター情報の初期化 */
-    function lfInitParam(&$objFormParam) {
-        $objFormParam->addParam("customer_id", "customer_id", INT_LEN, 'n', array("EXIST_CHECK","NUM_CHECK"));
-        $objFormParam->addParam("order_id", "order_id", INT_LEN, 'n', array("EXIST_CHECK", "NUM_CHECK"));
-        $objFormParam->addParam("product_id", "product_id", INT_LEN, 'n', array("EXIST_CHECK","NUM_CHECK"));
-        $objFormParam->addParam("product_class_id", "product_class_id", INT_LEN, 'n', array("EXIST_CHECK","NUM_CHECK"));
-    }
-
-    /* 入力内容のチェック */
-    function lfCheckError(&$objFormParam) {
-        $objErr = new SC_CheckError_Ex($objFormParam->getHashArray());
-        $objErr->arrErr = $objFormParam->checkError();
-        return $objErr->arrErr;
-    }
-
-    /**
-     * モバイル端末用ヘッダー出力処理
-     *
-     * @param string $realpath ダウンロードファイルパス
-     * @param string $sdown_filename ダウンロード時の指定ファイル名
-     */
-    function lfMobileHeader($realpath,$sdown_filename){
-        $objHelperMobile = new SC_Helper_Mobile_Ex();
-        //ファイルの拡張子からコンテンツタイプを取得する
-        $mime_type = $objHelperMobile->getMIMEType($realpath);
-        header('Content-Type: ' . $mime_type);
-        header("Content-Disposition: attachment; filename=" . $sdown_filename);
-        header('Accept-Ranges: bytes');
-        header("Last-Modified: " . gmdate("D,d M Y H:i:s") . " GMT");
-        header("Cache-Control: public");
-    }
-
-    /**
-     * モバイル端末（AU）ダウンロード処理
-     *
-     * @param string $realpath ダウンロードファイルパス
-     * @param string $sdown_filename ダウンロード時の指定ファイル名
-     */
-    function lfMobileAuDownload($realpath,$sdown_filename){
-        //モバイル用ヘッダー出力
-        $this->lfMobileHeader($realpath,$sdown_filename);
-        //ファイルサイズを取得する
-        $file_size = filesize($realpath);
-        //読み込み
-        $fp = fopen( $realpath, "rb" );
-        if (isset($_SERVER['HTTP_RANGE'])) {
-            // 二回目以降のリクエスト
-            list($range_offset, $range_limit) = sscanf($_SERVER['HTTP_RANGE'], "bytes=%d-%d");
-            $content_range = sprintf("bytes %d-%d/%d", $range_offset, $range_limit, $file_size);
-            $content_length = $range_limit - $range_offset + 1;
-            fseek( $fp, $range_offset, SEEK_SET );
-            header("HTTP/1.1 206 Partial Content" );
-            header("Content-Lenth: " . $content_length);
-            header("Content-Range: " . $content_range);
-        } else {
-            // 一回目のリクエスト
-            $content_length = $file_size;
-            header("Content-Length: " . $content_length);
-        }
-        echo fread( $fp, $content_length ) ;
-        ob_flush();
-        flush();
-    }
-
-    /**
-     * モバイル端末（AU以外）ダウンロード処理
-     *
-     * @param string $realpath ダウンロードファイルパス
-     * @param string $sdown_filename ダウンロード時の指定ファイル名
-     */
-    function lfMobileDownload($realpath,$sdown_filename){
-        //モバイル用ヘッダー出力
-        $this->lfMobileHeader($realpath,$sdown_filename);
-        //ファイルサイズを取得する
-        $file_size = filesize($realpath);
-
-        //出力用バッファをクリアする
-        @ob_end_clean();
-
-        //HTTP_RANGEがセットされていた場合
-        if (isset($_SERVER['HTTP_RANGE'])) {
-            // 二回目以降のリクエスト
-            list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2);
-            list($range) = explode(",",$range,2);
-            list($range, $range_end) = explode("-", $range);
-            $range=intval($range);
-
-            if (!$range_end) {
-                $range_end=$file_size-1;
-            } else {
-                $range_end=intval($range_end);
-            }
-
-            $new_length = $range_end-$range+1;
-            header("HTTP/1.1 206 Partial Content");
-            header("Content-Length: $new_length");
-            header("Content-Range: bytes $range-$range_end/$file_size");
-        } else {
-            // 一回目のリクエスト
-            $new_length=$file_size;
-            header("Content-Length: ".$file_size);
-        }
-
-        //ファイル読み込み
-        $chunksize = 1*(DOWNLOAD_BLOCK*1024);
-        $bytes_send = 0;
-        if ($realpath = fopen($realpath, 'r')) {
-            // 二回目以降のリクエスト
-            if (isset($_SERVER['HTTP_RANGE'])) fseek($realpath, $range);
-
-            while (!feof($realpath) && (!connection_aborted()) && ($bytes_send<$new_length)) {
-                $buffer = fread($realpath, $chunksize);
-                print($buffer);
-                ob_flush();
-                flush();
-                $bytes_send += strlen($buffer);
-            }
-            fclose($realpath);
-        }
-        die();
-    }
-
-    /**
-     * モバイル端末以外ダウンロード処理
-     *
-     * @param string $realpath ダウンロードファイルパス
-     * @param string $sdown_filename ダウンロード時の指定ファイル名
-     */
-    function lfDownload($realpath,$sdown_filename){
         // 拡張子を取得
         $extension = pathinfo($realpath, PATHINFO_EXTENSION);
@@ -346,4 +162,5 @@
             exit;
         }
+
         while (!feof($handle)) {
             echo(fread($handle, DOWNLOAD_BLOCK*1024));
@@ -355,4 +172,56 @@
 
     /**
+     * 商品情報の読み込みを行う.
+     *
+     * @param integer $customer_id 会員ID
+     * @param integer $order_id 受注ID
+     * @param integer $product_id 商品ID
+     * @param integer $product_class_id 商品規格ID
+     * @return array 商品情報の配列
+     */
+    function lfGetRealFileName($customer_id, $order_id, $product_id, $product_class_id) {
+        $objQuery = new SC_Query_Ex();
+        $col = <<< __EOS__
+            pc.product_id AS product_id,
+            pc.product_class_id AS product_class_id,
+            pc.down_realfilename AS down_realfilename,
+            pc.down_filename AS down_filename,
+            o.order_id AS order_id,
+            o.customer_id AS customer_id,
+            o.payment_date AS payment_date,
+            o.status AS status
+__EOS__;
+
+        $table = <<< __EOS__
+            dtb_products_class pc,
+            dtb_order_detail od,
+            dtb_order o
+__EOS__;
+
+        $dbFactory = SC_DB_DBFactory_Ex::getInstance();
+        $where = "o.customer_id = ? AND o.order_id = ? AND pc.product_id = ? AND pc.product_class_id = ?";
+        $where .= " AND " . $dbFactory->getDownloadableDaysWhereSql('o');
+        $where .= " = 1";
+        $arrRet = $objQuery->select($col, $table, $where,
+                                    array($customer_id, $order_id, $product_id, $product_class_id));
+        return $arrRet[0];
+    }
+
+    /* パラメーター情報の初期化 */
+    function lfInitParam(&$objFormParam) {
+        $objFormParam->addParam("customer_id", "customer_id", INT_LEN, 'n', array("EXIST_CHECK","NUM_CHECK"));
+        $objFormParam->addParam("order_id", "order_id", INT_LEN, 'n', array("EXIST_CHECK", "NUM_CHECK"));
+        $objFormParam->addParam("product_id", "product_id", INT_LEN, 'n', array("EXIST_CHECK","NUM_CHECK"));
+        $objFormParam->addParam("product_class_id", "product_class_id", INT_LEN, 'n', array("EXIST_CHECK","NUM_CHECK"));
+    }
+
+    /* 入力内容のチェック */
+    function lfCheckError(&$objFormParam) {
+        $objErr = new SC_CheckError_Ex($objFormParam->getHashArray());
+        $objErr->arrErr = $objFormParam->checkError();
+        return $objErr->arrErr;
+    }
+
+    /**
      * デストラクタ.
      *
Index: branches/version-2_11-dev/data/class/pages/mypage/LC_Page_Mypage_History.php
===================================================================
--- branches/version-2_11-dev/data/class/pages/mypage/LC_Page_Mypage_History.php	(revision 21354)
+++ branches/version-2_11-dev/data/class/pages/mypage/LC_Page_Mypage_History.php	(revision 21405)
@@ -96,6 +96,4 @@
         $this->tpl_arrOrderDetail = $this->setMainListImage($this->tpl_arrOrderDetail);
         $objPurchase->setDownloadableFlgTo($this->tpl_arrOrderDetail);
-        // モバイルダウンロード対応処理
-        $this->lfSetAU($this->tpl_arrOrderDetail);
         // 受注メール送信履歴の取得
         $this->tpl_arrMailHistory = $this->lfGetMailHistory($order_id);
@@ -166,41 +164,3 @@
         return $arrOrderDetails;
     }
-
-    /**
-     * 購入履歴商品にMIMETYPE、ファイル名をセット
-     *
-     * @param $arrOrderDetail 購入履歴の配列
-     * @return array MIMETYPE、ファイル名をセットした購入履歴の配列
-     */
-    function lfSetMimetype($arrOrderDetails) {
-        $objHelperMobile = new SC_Helper_Mobile_Ex();
-        $i = 0;
-        foreach ($arrOrderDetails as $arrOrderDetail) {
-            $objQuery =& SC_Query_Ex::getSingletonInstance();
-            $arrProduct = $objQuery->select('down_realfilename,down_filename', 'dtb_products_class', 'product_id = ? AND product_class_id = ?', array($arrOrderDetail['product_id'],$arrOrderDetail['product_class_id']));
-            $arrOrderDetails[$i]['mime_type'] = $objHelperMobile->getMimeType($arrProduct[0]['down_realfilename']);
-            $arrOrderDetails[$i]['down_filename'] = $arrProduct[0]['down_filename'];
-            $i++;
-        }
-        return $arrOrderDetails;
-    }
-
-    /**
-     * 特定キャリア（AU）モバイルダウンロード処理
-     * キャリアがAUのモバイル端末からダウンロードする場合は単純に
-     * Aタグでダウンロードできないケースがある為、対応する。
-     *
-     * @param integer $order_id 注文番号
-     * @param $arrOrderDetail 購入履歴の配列
-     */
-    function lfSetAU($arrOrderDetails) {
-        $this->isAU = false;
-        // モバイル端末かつ、キャリアがAUの場合に処理を行う
-        if (SC_Display_Ex::detectDevice() == DEVICE_TYPE_MOBILE && SC_MobileUserAgent::getCarrier() == 'ezweb'){
-            // MIMETYPE、ファイル名のセット
-            $this->tpl_arrOrderDetail = $this->lfSetMimetype($arrOrderDetails);
-            $this->phpsessid = $_GET['PHPSESSID'];
-            $this->isAU = true;
-        }
-    }
 }
Index: branches/version-2_11-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Category.php
===================================================================
--- branches/version-2_11-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Category.php	(revision 21402)
+++ branches/version-2_11-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Category.php	(revision 21405)
@@ -82,5 +82,10 @@
         // カテゴリ登録/編集実行
         case 'edit':
-            $this->doEdit($objFormParam);
+            $category_id = $objFormParam->getValue('category_id');
+            if ($category_id == '') {
+                $this->doRegister($objFormParam);
+            } else {
+                $this->doEdit($objFormParam);
+            }
             break;
         // 入力ボックスへ編集対象のカテゴリ名をセット
@@ -100,5 +105,5 @@
             $this->doDown($objFormParam);
             break;
-        // FIXME r19909 によってテンプレートが削除されている
+        // XXX 使われていないコード？
         case 'moveByDnD':
             // DnDしたカテゴリと移動先のセットを分解する
@@ -236,19 +241,18 @@
         // 編集対象のカテゴリ名をDBより取得する
         $where = "category_id = ?";
-        $arrRes = $objQuery->getRow("*", "dtb_category", $where, array($category_id));
-
-        $objFormParam->setParam($arrRes);
-
-        $this->arrForm = $objFormParam->getHashArray();
-    }
-
-    /**
-     * カテゴリの登録・編集を実行する.
-     *
-     * 下記の場合は, 登録・編集を実行せず、エラーメッセージを表示する
+        $category_name = $objQuery->get("category_name", "dtb_category", $where, array($category_id));
+
+        // 入力ボックスへカテゴリ名を保持する.
+        $this->arrForm['category_name'] = $category_name;
+        // カテゴリIDを保持する.
+        $this->arrForm['category_id']   = $category_id;
+    }
+
+    /**
+     * カテゴリの編集を実行する.
+     *
+     * 下記の場合は, 編集を実行せず、エラーメッセージを表示する
      *
      * - カテゴリ名がすでに使用されている場合
-     * - 階層登録数の上限を超える場合 (登録時のみ評価)
-     * - カテゴリ名がすでに使用されている場合 (登録時のみ評価)
      *
      * @param SC_FormParam $objFormParam
@@ -256,86 +260,89 @@
      */
     function doEdit(&$objFormParam) {
-        $category_id = $objFormParam->getValue('category_id');
-
-        // 追加か
-        $add = strlen($category_id) === 0;
-
-        // エラーチェック
-        $this->arrErr = $this->checkError($objFormParam, $add);
-
-        // エラーがない場合、追加・更新処理
-        if (empty($this->arrErr)) {
-            $arrCategory = $objFormParam->getDbArray();
-
-            // 追加
-            if ($add) {
-                $this->registerCategory($arrCategory);
-            }
-            // 更新
-            else {
-                unset($arrCategory['category_id']);
-                $this->updateCategory($category_id, $arrCategory);
-            }
-        }
-        // エラーがある場合、入力値の再表示
-        else {
-            $this->arrForm = $objFormParam->getHashArray();
-        }
-    }
-
-    /**
-     * エラーチェック
-     *
-     * @param SC_FormParam $objFormParam
-     * @param boolean $add 追加か
-     * @return void
-     */
-    function checkError(&$objFormParam, $add) {
-        $objQuery =& SC_Query_Ex::getSingletonInstance();
-
         // 入力項目チェック
         $arrErr = $objFormParam->checkError();
-        if (!empty($arrErr)) {
-            return $arrErr;
-        }
-
-        $category_id = $objFormParam->getValue('category_id');
-        $parent_category_id = $objFormParam->getValue('parent_category_id');
-        $category_name = $objFormParam->getValue('category_name');
-
-        // 追加の場合に固有のチェック
-        if ($add) {
-            // 登録数上限チェック
-            $where = "del_flg = 0";
-            $count = $objQuery->count("dtb_category", $where);
-            if ($count >= CATEGORY_MAX) {
-                $arrErr['category_name'] = "※ カテゴリの登録最大数を超えました。<br/>";
-                return $arrErr;
-            }
-
-            // 階層上限チェック
-            if ($this->isOverLevel($parent_category_id)) {
-                $arrErr['category_name'] = "※ " . LEVEL_MAX . "階層以上の登録はできません。<br/>";
-                return $arrErr;
-            }
+        if (count($arrErr) > 0) {
+            $this->arrErr = $arrErr;
+            $this->arrForm['category_id']   = $objFormParam->getValue('category_id');
+            $this->arrForm['category_name'] = $objFormParam->getValue('category_name');
+            return;
         }
 
         // 重複チェック
-        $arrWhereVal = array();
-        $where = 'del_flg = 0 AND parent_category_id = ? AND category_name = ?';
-        $arrWhereVal[] = $parent_category_id;
-        $arrWhereVal[] = $category_name;
-        // 更新の場合、抽出対象から自己を除外する
-        if (!$add) {
-            $where .= ' AND category_id <> ?';
-            $arrWhereVal[] = $category_id;
-        }
-        $count = $objQuery->count('dtb_category', $where, $arrWhereVal);
+        $objQuery =& SC_Query_Ex::getSingletonInstance();
+        $where = "parent_category_id = ? AND category_id <> ? AND category_name = ?";
+        $count = $objQuery->count("dtb_category",
+                                  $where,
+                                  array($objFormParam->getValue('parent_category_id'),
+                                        $objFormParam->getValue('category_id'),
+                                        $objFormParam->getValue('category_name')));
         if ($count > 0) {
-            $arrErr['category_name'] = "※ 既に同じ内容の登録が存在します。<br/>";
-            return $arrErr;
-        }
-
-        return $arrErr;
+            $this->arrErr['category_name']  = "※ 既に同じ内容の登録が存在します。<br/>";
+            $this->arrForm['category_id']   = $objFormParam->getValue('category_id');
+            $this->arrForm['category_name'] = $objFormParam->getValue('category_name');
+            return;
+        }
+
+        // カテゴリ更新
+        $arrCategory = array();
+        $arrCategory['category_name'] = $objFormParam->getValue('category_name');
+        $arrCategory['update_date']   = 'CURRENT_TIMESTAMP';
+        $this->updateCategory($objFormParam->getValue('category_id'), $arrCategory);
+    }
+
+    /**
+     * カテゴリの登録を実行する.
+     *
+     * 下記の場合は, 登録を実行せず、エラーメッセージを表示する
+     *
+     * - カテゴリ登録数の上限を超える場合
+     * - 階層登録数の上限を超える場合
+     * - カテゴリ名がすでに使用されている場合
+     *
+     * @param SC_FormParam $objFormParam
+     * @return void
+     */
+    function doRegister(&$objFormParam) {
+        // 入力項目チェック
+        $arrErr = $objFormParam->checkError();
+        if (count($arrErr) > 0) {
+            $this->arrErr = $arrErr;
+            $this->arrForm['category_name'] = $objFormParam->getValue('category_name');
+            return;
+        }
+
+        // 登録数上限チェック
+        $objQuery =& SC_Query_Ex::getSingletonInstance();
+        $where = "del_flg = 0";
+        $count = $objQuery->count("dtb_category", $where);
+        if ($count >= CATEGORY_MAX) {
+            $this->arrErr['category_name']  = "※ カテゴリの登録最大数を超えました。<br/>";
+            $this->arrForm['category_name'] = $objFormParam->getValue('category_name');
+            return;
+        }
+
+        // 階層上限チェック
+        if ($this->isOverLevel($objFormParam->getValue('parent_category_id'))) {
+            $this->arrErr['category_name']  = "※ " . LEVEL_MAX . "階層以上の登録はできません。<br/>";
+            $this->arrForm['category_name'] = $objFormParam->getValue('category_name');
+            return;
+        }
+
+        // 重複チェック
+        $where = "parent_category_id = ? AND category_name = ?";
+        $count = $objQuery->count("dtb_category",
+                                  $where,
+                                  array($objFormParam->getValue('parent_category_id'),
+                                        $objFormParam->getValue('category_name')));
+        if ($count > 0) {
+            $this->arrErr['category_name']  = "※ 既に同じ内容の登録が存在します。<br/>";
+            $this->arrForm['category_name'] = $objFormParam->getValue('category_name');
+            return;
+        }
+
+        // カテゴリ登録
+        $this->registerCategory($objFormParam->getValue('parent_category_id'),
+                                $objFormParam->getValue('category_name'),
+                                $_SESSION['member_id']);
     }
 
@@ -430,12 +437,10 @@
      * カテゴリを更新する
      *
-     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+     * @param integer $category_id 更新対象のカテゴリID
+     * @param array 更新する カラム名 => 値 の連想配列
      * @return void
      */
     function updateCategory($category_id, $arrCategory) {
         $objQuery =& SC_Query_Ex::getSingletonInstance();
-
-        $arrCategory['update_date']   = 'CURRENT_TIMESTAMP';
-
         $objQuery->begin();
         $where = "category_id = ?";
@@ -447,12 +452,11 @@
      * カテゴリを登録する
      *
-     * @param SC_FormParam $objFormParam SC_FormParam インスタンス
-     * @return void
-     */
-    function registerCategory($arrCategory) {
-        $objQuery =& SC_Query_Ex::getSingletonInstance();
-
-        $parent_category_id = $arrCategory['parent_category_id'];
-
+     * @param integer 親カテゴリID
+     * @param string カテゴリ名
+     * @param integer 作成者のID
+     * @return void
+     */
+    function registerCategory($parent_category_id, $category_name, $creator_id) {
+        $objQuery =& SC_Query_Ex::getSingletonInstance();
         $objQuery->begin();
 
@@ -475,11 +479,13 @@
         $level = $objQuery->get('level', "dtb_category", $where, array($parent_category_id)) + 1;
 
+        $arrCategory = array();
+        $arrCategory['category_name'] = $category_name;
+        $arrCategory['parent_category_id'] = $parent_category_id;
         $arrCategory['create_date'] = 'CURRENT_TIMESTAMP';
         $arrCategory['update_date'] = 'CURRENT_TIMESTAMP';
-        $arrCategory['creator_id']  = $_SESSION['member_id'];
+        $arrCategory['creator_id']  = $creator_id;
         $arrCategory['rank']        = $rank;
         $arrCategory['level']       = $level;
         $arrCategory['category_id'] = $objQuery->nextVal('dtb_category_category_id');
-
         $objQuery->insert("dtb_category", $arrCategory);
 
Index: branches/version-2_11-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
===================================================================
--- branches/version-2_11-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php	(revision 21402)
+++ branches/version-2_11-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php	(revision 21405)
@@ -337,5 +337,5 @@
         $objFormParam->addParam("ポイント付与率", "point_rate", PERCENTAGE_LEN, 'n', array("EXIST_CHECK", "NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
         $objFormParam->addParam("発送日目安", "deliv_date_id", INT_LEN, 'n', array("NUM_CHECK"));
-        $objFormParam->addParam("販売制限数", "sale_limit", AMOUNT_LEN, 'n', array("SPTAB_CHECK", "ZERO_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("購入制限", "sale_limit", AMOUNT_LEN, 'n', array("SPTAB_CHECK", "ZERO_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));
         $objFormParam->addParam("メーカー", "maker_id", INT_LEN, 'n', array("NUM_CHECK"));
         $objFormParam->addParam("メーカーURL", "comment1", URL_LEN, 'a', array("SPTAB_CHECK", "URL_CHECK", "MAX_LENGTH_CHECK"));
Index: branches/version-2_11-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Disp.php
===================================================================
--- branches/version-2_11-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Disp.php	(revision 21355)
+++ branches/version-2_11-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Disp.php	(revision 21405)
@@ -210,5 +210,5 @@
         $objFormParam->addParam("備考", 'message');
         $objFormParam->addParam("入金日", "payment_date");
-        $objFormParam->addParam("端末種別", "device_type_id");
+        $objFormParam->addParam("アクセス端末", "device_type_id");
 
         // 複数情報
Index: branches/version-2_11-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php
===================================================================
--- branches/version-2_11-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php	(revision 21355)
+++ branches/version-2_11-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php	(revision 21405)
@@ -342,5 +342,5 @@
         $objFormParam->addParam("備考", 'message');
         $objFormParam->addParam("入金日", "payment_date");
-        $objFormParam->addParam("端末種別", "device_type_id");
+        $objFormParam->addParam("アクセス端末", "device_type_id");
 
         // 複数情報
Index: branches/version-2_11-dev/data/class/SC_CartSession.php
===================================================================
--- branches/version-2_11-dev/data/class/SC_CartSession.php	(revision 21352)
+++ branches/version-2_11-dev/data/class/SC_CartSession.php	(revision 21405)
@@ -510,5 +510,5 @@
      * 1. 商品種別に関連づけられた配送業者の存在チェック
      * 2. 削除/非表示商品のチェック
-     * 3. 販売制限数のチェック
+     * 3. 商品購入制限数のチェック
      * 4. 在庫数チェック
      *
@@ -543,5 +543,5 @@
 
                 /*
-                 * 販売制限数, 在庫数のチェック
+                 * 商品購入制限数, 在庫数のチェック
                  */
                 $limit = $objProduct->getBuyLimit($product);
Index: branches/version-2_11-dev/data/Smarty/templates/mobile/mypage/history.tpl
===================================================================
--- branches/version-2_11-dev/data/Smarty/templates/mobile/mypage/history.tpl	(revision 21354)
+++ branches/version-2_11-dev/data/Smarty/templates/mobile/mypage/history.tpl	(revision 21405)
@@ -46,11 +46,5 @@
 <!--{if $orderDetail.product_type_id == $smarty.const.PRODUCT_TYPE_DOWNLOAD}-->
 <!--{if $orderDetail.is_downloadable}-->
-<!--{if $isAU == false}-->
 <a target="_self" href="<!--{$smarty.const.ROOT_URLPATH}-->mypage/download.php?order_id=<!--{$tpl_arrOrderData.order_id}-->&product_id=<!--{$orderDetail.product_id}-->&product_class_id=<!--{$orderDetail.product_class_id}-->">ダウンロード</a><br>
-<!--{else}-->
-<object data="<!--{$smarty.const.ROOT_URLPATH}-->mypage/download.php?order_id=<!--{$tpl_arrOrderData.order_id}-->&product_id=<!--{$orderDetail.product_id}-->&product_class_id=<!--{$orderDetail.product_class_id}-->&PHPSESSID=<!--{$phpsessid}-->" copyright="no" standby="ダウンロード" type="<!--{$orderDetail.mime_type}-->">
-<param name="title" value="<!--{$orderDetail.down_filename}-->" valuetype="data">
-</object><br>
-<!--{/if}-->
 <!--{else}-->
 <!--{if $orderDetail.payment_date == "" && $orderDetail.effective == "0"}-->
Index: branches/version-2_11-dev/data/Smarty/templates/admin/products/product.tpl
===================================================================
--- branches/version-2_11-dev/data/Smarty/templates/admin/products/product.tpl	(revision 21352)
+++ branches/version-2_11-dev/data/Smarty/templates/admin/products/product.tpl	(revision 21405)
@@ -223,5 +223,5 @@
         </tr>
         <tr>
-            <th>販売制限数</th>
+            <th>購入制限</th>
             <td>
                 <span class="attention"><!--{$arrErr.sale_limit}--></span>
Index: branches/version-2_11-dev/data/Smarty/templates/admin/products/confirm.tpl
===================================================================
--- branches/version-2_11-dev/data/Smarty/templates/admin/products/confirm.tpl	(revision 21352)
+++ branches/version-2_11-dev/data/Smarty/templates/admin/products/confirm.tpl	(revision 21405)
@@ -148,5 +148,5 @@
         </tr>
         <tr>
-            <th>販売制限数</th>
+            <th>購入制限</th>
             <td>
                 <!--{$arrForm.sale_limit|default:'無制限'|h}-->
Index: branches/version-2_11-dev/data/Smarty/templates/admin/order/disp.tpl
===================================================================
--- branches/version-2_11-dev/data/Smarty/templates/admin/order/disp.tpl	(revision 21355)
+++ branches/version-2_11-dev/data/Smarty/templates/admin/order/disp.tpl	(revision 21405)
@@ -106,5 +106,5 @@
         </tr>
         <tr>
-            <th>端末種別</th>
+            <th>アクセス端末</th>
             <td><!--{$arrDeviceType[$arrForm.device_type_id.value]|h}--></td>
         </tr>
Index: branches/version-2_11-dev/data/Smarty/templates/admin/order/edit.tpl
===================================================================
--- branches/version-2_11-dev/data/Smarty/templates/admin/order/edit.tpl	(revision 21355)
+++ branches/version-2_11-dev/data/Smarty/templates/admin/order/edit.tpl	(revision 21405)
@@ -235,5 +235,5 @@
         </tr>
         <tr>
-            <th>端末種別</th>
+            <th>アクセス端末</th>
             <td><!--{$arrDeviceType[$arrForm.device_type_id.value]|h}--></td>
         </tr>
Index: branches/version-2_11-dev/data/Smarty/templates/sphone/mypage/error.tpl
===================================================================
--- branches/version-2_11-dev/data/Smarty/templates/sphone/mypage/error.tpl	(revision 21405)
+++ branches/version-2_11-dev/data/Smarty/templates/sphone/mypage/error.tpl	(revision 21405)
@@ -0,0 +1,36 @@
+<!--{*
+/*
+ * This file is part of EC-CUBE
+ *
+ * Copyright(c) 2000-2011 LOCKON CO.,LTD. All Rights Reserved.
+ *
+ * http://www.lockon.co.jp/
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+*}-->
+<!--{include file="`$smarty.const.SMARTPHONE_TEMPLATE_REALDIR`popup_header.tpl" subtitle="エラー"}-->
+
+<div data-role="page" data-theme="d" id="index frame_outer">
+  <div id="errorBox">
+      <p class="attention"><!--{$tpl_error}--></p>
+  </div>
+
+  <div class="btn_area">
+      <p><a href="javascript:window.close()" onmouseOver="chgImg('<!--{$TPL_URLPATH}-->img/button/btn_close_on.gif','close');" onmouseout="chgImg('<!--{$TPL_URLPATH}-->img/button/btn_close.gif','close');" class="btn_sub">閉じる</a></p>
+  </div>
+</div>
+
+<!--{include file="`$smarty.const.SMARTPHONE_TEMPLATE_REALDIR`popup_footer.tpl"}-->
Index: branches/version-2_11-dev/data/Smarty/templates/sphone/mypage/mail_view.tpl
===================================================================
--- branches/version-2_11-dev/data/Smarty/templates/sphone/mypage/mail_view.tpl	(revision 21405)
+++ branches/version-2_11-dev/data/Smarty/templates/sphone/mypage/mail_view.tpl	(revision 21405)
@@ -0,0 +1,12 @@
+<!--{include file="`$smarty.const.SMARTPHONE_TEMPLATE_REALDIR`popup_header.tpl" subtitle="MYページ/メール履歴詳細"}-->
+
+<div data-theme="d" id="index frame_outer">
+<!--▼CONTENTS-->
+   <dl class="view_detail">
+      <dt><!--{$tpl_subject|h}--></dt>
+      <dd><!--{$tpl_body|h|nl2br}--></dd>
+   </dl>
+</div>
+<!--▲CONTENTS -->
+
+<!--{include file="`$smarty.const.SMARTPHONE_TEMPLATE_REALDIR`popup_footer.tpl"}-->
Index: branches/version-2_11-dev/release.sh
===================================================================
--- branches/version-2_11-dev/release.sh	(revision 21405)
+++ branches/version-2_11-dev/release.sh	(revision 21405)
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+CURRENT_DIR=`pwd`
+TMP_DIR=/tmp
+SVN_REPO=file:///home/svn/open
+SVN_PATH=$SVN_REPO/branches/comu-ver2
+SVN_TAGS=$SVN_REPO/tags
+ECCUBE_VERSION=2.4.1-commu
+WRK_DIR=eccube-$ECCUBE_VERSION
+
+if [ ! -d $TMP_DIR ]; then
+    mkdir -p $TMP_DIR
+fi
+
+cd $TMP_DIR
+svn export $SVN_PATH $WRK_DIR
+
+echo "remove obsolete files..."
+rm -rf $WRK_DIR/.setttings
+rm -rf $WRK_DIR/.buildpath
+rm -rf $WRK_DIR/.project
+rm -rf $WRK_DIR/test
+rm -rf $WRK_DIR/templates
+rm -rf $WRK_DIR/*.sh
+rm -rf $WRK_DIR/html/test
+rm -rf $WRK_DIR/data/downloads/module/*
+find ./$WRK_DIR -name "dummy" -delete
+
+echo "set permissions..."
+chmod 666 $WRK_DIR/data/install.php
+chmod -R 777 $WRK_DIR/html/install/temp
+chmod -R 777 $WRK_DIR/html/user_data
+chmod -R 777 $WRK_DIR/html/upload
+chmod -R 777 $WRK_DIR/html/cp
+chmod -R 777 $WRK_DIR/data/cache
+chmod -R 777 $WRK_DIR/data/downloads
+chmod -R 777 $WRK_DIR/data/Smarty
+chmod -R 777 $WRK_DIR/data/class
+chmod -R 777 $WRK_DIR/data/logs
+chmod -R 777 $WRK_DIR/html/cp
+chmod -R 777 $WRK_DIR/data/upload
+
+echo "complession files..."
+
+echo "create tar archive..."
+tar cfp $WRK_DIR.tar $WRK_DIR
+gzip -9 $WRK_DIR.tar
+mv $WRK_DIR.tar.gz $CURRENT_DIR/
+
+echo "create zip archive..."
+zip -r $WRK_DIR.zip $WRK_DIR
+mv $WRK_DIR.zip $CURRENT_DIR/
+rm -rf $WRK_DIR
+
+echo "finished successful!"
+echo $CURRENT_DIR/$WRK_DIR.tar.gz
+echo $CURRENT_DIR/$WRK_DIR.zip
Index: branches/version-2_11-dev/html/install/sql/create_table_mysql.sql
===================================================================
--- branches/version-2_11-dev/html/install/sql/create_table_mysql.sql	(revision 21403)
+++ branches/version-2_11-dev/html/install/sql/create_table_mysql.sql	(revision 21405)
@@ -1105,5 +1105,5 @@
     url text,
     create_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
-) ENGINE=InnoDB;
+);
 
 CREATE TABLE dtb_module (
Index: branches/version-2_11-dev/html/install/sql/insert_data.sql
===================================================================
--- branches/version-2_11-dev/html/install/sql/insert_data.sql	(revision 21400)
+++ branches/version-2_11-dev/html/install/sql/insert_data.sql	(revision 21405)
@@ -286,5 +286,5 @@
 INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, rw_flg, status, create_date, update_date, mb_convert_kana_option, size_const_type, error_check_types) VALUES (49, 1, 'stock', '在庫数', 49, 1, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'n', 'AMOUNT_LEN', 'NUM_CHECK,MAX_LENGTH_CHECK');
 INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, rw_flg, status, create_date, update_date, mb_convert_kana_option, size_const_type, error_check_types) VALUES (50, 1, 'stock_unlimited', '在庫無制限フラグ', 50, 1, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'n', 'INT_LEN', 'NUM_CHECK,MAX_LENGTH_CHECK,EXIST_CHECK');
-INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, rw_flg, status, create_date, update_date, mb_convert_kana_option, size_const_type, error_check_types) VALUES (51, 1, 'sale_limit', '販売制限数', 51, 1, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'n', 'AMOUNT_LEN', 'NUM_CHECK,MAX_LENGTH_CHECK');
+INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, rw_flg, status, create_date, update_date, mb_convert_kana_option, size_const_type, error_check_types) VALUES (51, 1, 'sale_limit', '購入制限数', 51, 1, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'n', 'AMOUNT_LEN', 'NUM_CHECK,MAX_LENGTH_CHECK');
 INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, rw_flg, status, create_date, update_date, mb_convert_kana_option, size_const_type, error_check_types) VALUES (52, 1, 'price01', '通常価格', 52, 1, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'n', 'PRICE_LEN', 'NUM_CHECK,MAX_LENGTH_CHECK');
 INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, rw_flg, status, create_date, update_date, mb_convert_kana_option, size_const_type, error_check_types) VALUES (53, 1, 'price02', '販売価格', 53, 1, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'n', 'PRICE_LEN', 'NUM_CHECK,MAX_LENGTH_CHECK,EXIST_CHECK');
