Index: /branches/version-2_11-dev/html/user_data/packages/default/sql/update_bloc.sql
===================================================================
--- /branches/version-2_11-dev/html/user_data/packages/default/sql/update_bloc.sql	(revision 20395)
+++ /branches/version-2_11-dev/html/user_data/packages/default/sql/update_bloc.sql	(revision 20863)
@@ -1,26 +1,92 @@
-DELETE FROM dtb_blocposition WHERE page_id = 1;
-DELETE FROM dtb_blocposition WHERE page_id = 2;
-DELETE FROM dtb_blocposition WHERE page_id = 3;
-DELETE FROM dtb_blocposition WHERE page_id = 4;
+DELETE FROM dtb_blocposition WHERE page_id <> 0 AND device_type_id = 10;
 
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(1,1,1,2,'category');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(1,1,2,3,'guide');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(1,1,3,1,'cart');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(1,3,4,2,'search_products');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(1,4,5,1,'news');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(1,3,6,1,'login');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(1,4,7,2,'recommend');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(2,1,1,2,'category');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(2,1,2,3,'guide');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(2,1,3,1,'cart');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(2,5,4,0,'search_products');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(2,5,5,0,'news');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(2,5,6,0,'login');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(2,5,7,0,'recommend');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(3,1,1,2,'category');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(3,1,2,3,'guide');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(3,1,3,1,'cart');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(3,5,4,0,'search_products');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(3,5,5,0,'news');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(3,5,6,0,'login');
-INSERT INTO dtb_blocposition (page_id,target_id,bloc_id,bloc_row,filename)values(3,5,7,0,'recommend');
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 1, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 1, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 1, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 1, 3, 4, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 1, 3, 8, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 1, 4, 7, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 1, 4, 5, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 1, 3, 6, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 1, 10, 9, 1, 1);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 2, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 2, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 2, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 3, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 3, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 3, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 4, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 4, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 4, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 5, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 5, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 5, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 6, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 6, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 6, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 7, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 7, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 7, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 8, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 8, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 8, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 9, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 9, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 9, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 10, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 10, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 10, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 11, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 11, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 11, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 12, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 12, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 12, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 13, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 13, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 13, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 14, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 14, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 14, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 15, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 15, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 15, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 16, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 16, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 16, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 17, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 17, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 17, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 18, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 18, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 18, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 19, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 19, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 19, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 20, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 20, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 20, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 21, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 21, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 21, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 22, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 22, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 22, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 23, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 23, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 23, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 24, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 24, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 24, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 25, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 25, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 25, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 26, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 26, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 26, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 27, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 27, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 27, 1, 3, 1, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 28, 1, 1, 2, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 28, 1, 2, 3, 0);
+INSERT INTO dtb_blocposition (device_type_id, page_id, target_id, bloc_id, bloc_row, anywhere) VALUES (10, 28, 1, 3, 1, 0);
Index: /branches/version-2_11-dev/data/class/util/SC_Utils.php
===================================================================
--- /branches/version-2_11-dev/data/class/util/SC_Utils.php	(revision 20847)
+++ /branches/version-2_11-dev/data/class/util/SC_Utils.php	(revision 20863)
@@ -2227,5 +2227,5 @@
      * @see http://jp.php.net/mkdir
      */
-    function recursiveMkdir($pathname, $mode) {
+    function recursiveMkdir($pathname, $mode = 0777) {
         /*
          * SC_Utils_Ex への再帰は無限ループやメモリリークの懸念
Index: /branches/version-2_11-dev/data/class/SC_UploadFile.php
===================================================================
--- /branches/version-2_11-dev/data/class/SC_UploadFile.php	(revision 20764)
+++ /branches/version-2_11-dev/data/class/SC_UploadFile.php	(revision 20863)
@@ -127,5 +127,5 @@
                                 GC_Utils_Ex::gfPrintLog($_FILES[$keyname]['name']." -> ". $this->temp_dir . $this->temp_file[$cnt]);
                             } else {
-                                $objErr->arrErr[$keyname] = '※ ファイルのアップロードに失敗しましたん。<br />';
+                                $objErr->arrErr[$keyname] = '※ ファイルのアップロードに失敗しました。<br />';
                                 GC_Utils_Ex::gfPrintLog('File Upload Error!: ' . $_FILES[$keyname]['name']." -> ". $this->temp_dir . $this->temp_file[$cnt]);
                             }
Index: /branches/version-2_11-dev/data/class/helper/SC_Helper_FileManager.php
===================================================================
--- /branches/version-2_11-dev/data/class/helper/SC_Helper_FileManager.php	(revision 20847)
+++ /branches/version-2_11-dev/data/class/helper/SC_Helper_FileManager.php	(revision 20863)
@@ -364,12 +364,13 @@
      * ユーザが作成したファイルをアーカイブしダウンロードさせる
      * TODO 要リファクタリング
-     * @param void
-     * @return void
-     */
-    function downloadArchiveFiles($dir) {
-        $debug_message = "";
+     * @param string $dir アーカイブを行なうディレクトリ
+     * @param string $template_code テンプレートコード
+     * @return boolean 成功した場合 true; 失敗した場合 false
+     */
+    function downloadArchiveFiles($dir, $template_code) {
         // ダウンロードされるファイル名
-        $dlFileName = 'tpl_package_' . date('YmdHis') . '.tar.gz';
-
+        $dlFileName = 'tpl_package_' . $template_code . '_' . date('YmdHis') . '.tar.gz';
+
+        $debug_message = $dir . " から " . $dlFileName . " を作成します...\n";
         // ファイル一覧取得
         $arrFileHash = SC_Utils_Ex::sfGetFileList($dir);
@@ -378,5 +379,5 @@
             $debug_message.= "圧縮：".$val['file_name']."\n";
         }
-        GC_Utils_Ex::gfDebugLog($debug_message);
+        GC_Utils_Ex::gfPrintLog($debug_message);
 
         // ディレクトリを移動
@@ -384,13 +385,16 @@
         // 圧縮をおこなう
         $tar = new Archive_Tar($dlFileName, true);
-        $tar->create($arrFileList);
-
-        // ダウンロード用HTTPヘッダ出力
-        header("Content-disposition: attachment; filename=${dlFileName}");
-        header("Content-type: application/octet-stream; name=${dlFileName}");
-        header("Content-Length: " . filesize($dlFileName));
-        readfile($dlFileName);
-        unlink($dir . "/" . $dlFileName);
-        exit;
+        if ($tar->create($arrFileList)) {
+            // ダウンロード用HTTPヘッダ出力
+            header("Content-disposition: attachment; filename=${dlFileName}");
+            header("Content-type: application/octet-stream; name=${dlFileName}");
+            header("Cache-Control: ");
+            header("Pragma: ");
+            readfile($dlFileName);
+            unlink($dir . "/" . $dlFileName);
+            return true;
+        } else {
+            return false;
+        }
     }
 
@@ -399,5 +403,5 @@
      *
      * @param string $path アーカイブパス
-     * @return string Archive_Tar::extractModify()のエラー
+     * @return boolean Archive_Tar::extractModify()のエラー
      */
     function unpackFile($path) {
@@ -412,5 +416,5 @@
 
         // 指定されたフォルダ内に解凍する
-        $tar->extractModify($dir. "/", $unpacking_name);
+        $result = $tar->extractModify($dir. "/", $unpacking_name);
         GC_Utils_Ex::gfPrintLog("解凍：" . $dir."/".$file_name."->".$dir."/".$unpacking_name);
 
@@ -419,4 +423,5 @@
         // 圧縮ファイル削除
         unlink($path);
+        return $result;
     }
 }
Index: /branches/version-2_11-dev/data/class/pages/admin/design/LC_Page_Admin_Design_Template.php
===================================================================
--- /branches/version-2_11-dev/data/class/pages/admin/design/LC_Page_Admin_Design_Template.php	(revision 20764)
+++ /branches/version-2_11-dev/data/class/pages/admin/design/LC_Page_Admin_Design_Template.php	(revision 20863)
@@ -71,96 +71,64 @@
      * Page のアクション.
      *
-     * FIXME ロジックを見直し
-     *
      * @return void
      */
     function action() {
-        // 端末種別IDを取得
-        if (isset($_REQUEST['device_type_id'])
-            && is_numeric($_REQUEST['device_type_id'])) {
-            $device_type_id = $_REQUEST['device_type_id'];
+        $objFormParam = new SC_FormParam_Ex();
+        $this->lfInitParam($objFormParam);
+        $objFormParam->setParam($_REQUEST);
+        $objFormParam->convParam();
+
+        $this->device_type_id = $objFormParam->getValue('device_type_id', DEVICE_TYPE_PC);
+        $this->tpl_select = $this->getTemplateName($this->device_type_id);
+        $template_code = $objFormParam->getValue('template_code');
+
+        switch($this->getMode()) {
+
+        // 登録ボタン押下時
+        case 'register':
+            $this->arrErr = $objFormParam->checkError();
+            if (SC_Utils_Ex::isBlank($this->arrErr)) {
+                if ($this->doRegister($template_code, $this->device_type_id)) {
+                    $this->tpl_select = $template_code;
+                    $this->tpl_onload = "alert('登録が完了しました。');";
+                }
+            }
+            break;
+
+        // 削除ボタン押下時
+        case 'delete':
+            if ($objFormParam->checkError()) {
+                SC_Utils_Ex::sfDispError('');
+            }
+            $this->arrErr = $objFormParam->checkError();
+            if (SC_Utils_Ex::isBlank($this->arrErr)) {
+                if ($this->doDelete($template_code, $this->device_type_id)) {
+                    $this->tpl_onload = "alert('削除が完了しました。');";
+                }
+            }
+            break;
+
+        // downloadボタン押下時
+        case 'download':
+            $this->arrErr = $objFormParam->checkError();
+            if (SC_Utils_Ex::isBlank($this->arrErr)) {
+                if ($this->doDownload($template_code) !== false) {
+                    // ブラウザに出力し, 終了する
+                    exit;
+                }
+            }
+            break;
+
+        default:
+            break;
+        }
+
+        if (!$is_error) {
+            $this->templates = $this->getAllTemplates($this->device_type_id);
         } else {
-            $device_type_id = DEVICE_TYPE_PC;
-        }
-        
-        //サブタイトルの追加
-        $this->tpl_subtitle .= ' - ' . $this->arrDeviceType[$device_type_id];
-
-        $this->tpl_select = $this->getTemplateName($device_type_id);
-
-        $objView = new SC_AdminView_Ex();
-
-        switch($this->getMode()) {
-
-            // 登録ボタン押下時
-        case 'register':
-            // パラメータ検証
-            $objForm = $this->lfInitRegister();
-            if ($objForm->checkError()) {
-                SC_Utils_Ex::sfDispError('');
-            }
-
-            $template_code = $objForm->getValue('template_code');
-            $this->tpl_select = $template_code;
-
-            if($template_code == "") {
-                $template_code = $this->getTemplateName($device_type_id, true);
-            }
-
-            // DBへ使用するテンプレートを登録
-            $this->lfRegisterTemplate($template_code);
-
-            // XXX コンパイルファイルのクリア処理を行う
-            $objView->_smarty->clear_compiled_tpl();
-
-            // ブロック位置を更新
-            $this->lfChangeBloc($template_code);
-
-            // 完了メッセージ
-            $this->tpl_onload="alert('登録が完了しました。');";
-            break;
-
-            // 削除ボタン押下時
-        case 'delete':
-            // パラメータ検証
-            $objForm = $this->lfInitDelete();
-            if ($objForm->checkError()) {
-                SC_Utils_Ex::sfDispError('');
-            }
-
-            //現在使用中のテンプレートとデフォルトのテンプレートは削除できないようにする
-            $template_code = $objForm->getValue('template_code_temp');
-            if ($template_code == $this->getTemplateName($device_type_id)
-                || $template_code == $this->getTemplateName($device_type_id, true)) {
-                $this->tpl_onload = "alert('デフォルトテンプレートと、選択中のテンプレートは削除出来ません');";
-                break;
-            }
-            $this->lfDeleteTemplate($template_code);
-            break;
-
-            // downloadボタン押下時
-        case 'download':
-            // パラメータ検証
-            $objForm = $this->lfInitDownload();
-            $template_code = $objForm->getValue('template_code_temp');
-            // ユーザデータの下のファイルも保存する。
-            $from_dir = USER_TEMPLATE_REALDIR . $template_code . "/";
-            $to_dir = SMARTY_TEMPLATES_REALDIR . $template_code . "/_packages/";
-            SC_Utils_Ex::sfMakeDir($to_dir);
-            SC_Utils_Ex::sfCopyDir($from_dir, $to_dir);
-            SC_Helper_FileManager_Ex::downloadArchiveFiles(SMARTY_TEMPLATES_REALDIR . $template_code);
-            break;
-
-            // プレビューボタン押下時
-        case 'preview':
-            break;
-
-        default:
-            break;
-        }
-
-        $this->templates = $this->lfGetAllTemplates($device_type_id);
-        $this->now_template = TEMPLATE_NAME;
-        $this->device_type_id = $device_type_id;
+            // 画面にエラー表示しないため, ログ出力
+            GC_Utils_Ex::gfPrintLog('Error: ' . print_r($this->arrErr, true));
+        }
+        $this->tpl_subtitle .= ' - ' . $this->arrDeviceType[$this->device_type_id];
     }
 
@@ -174,41 +142,25 @@
     }
 
-    function lfInitRegister() {
-        $objForm = new SC_FormParam_Ex();
-        $objForm->addParam(
-            'template_code', 'template_code', STEXT_LEN, '',
-            array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK", "ALNUM_CHECK")
-        );
-        $objForm->setParam($_POST);
-
-        return $objForm;
-    }
-
-    function lfInitDelete() {
-        $objForm = new SC_FormParam_Ex();
-        $objForm->addParam(
-            'template_code_temp', 'template_code_temp', STEXT_LEN, '',
-            array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK", "ALNUM_CHECK")
-        );
-        $objForm->setParam($_POST);
-
-        return $objForm;
-    }
-
-    function lfInitDownload() {
-        $objForm = new SC_FormParam_Ex();
-        $objForm->addParam(
-            'template_code_temp', 'template_code_temp', STEXT_LEN, '',
-            array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK", "ALNUM_CHECK")
-        );
-        $objForm->setParam($_POST);
-
-        return $objForm;
-    }
-
-    /**
-     * 使用するテンプレートをDBへ登録する
-     */
-    function lfRegisterTemplate($template_code, $device_type_id) {
+    /**
+     * パラメータ情報の初期化
+     *
+     * @param object $objFormParam SC_FormParamインスタンス
+     * @return void
+     */
+    function lfInitParam(&$objFormParam) {
+        $objFormParam->addParam("端末種別ID", "device_type_id", INT_LEN, 'n', array("NUM_CHECK", "MAX_LENGTH_CHECK"));
+        $objFormParam->addParam('template_code', 'template_code', STEXT_LEN, 'a', array("EXIST_CHECK", "SPTAB_CHECK","MAX_LENGTH_CHECK", "ALNUM_CHECK"));
+    }
+
+    /**
+     * 使用するテンプレートを設定する.
+     *
+     * テンプレートをマスタデータに登録する.
+     *
+     * @param string $template_code テンプレートコード
+     * @param integer $device_type_id 端末種別ID
+     * @return void
+     */
+    function doUpdateMasterData($template_code, $device_type_id) {
         $masterData = new SC_DB_MasterData_Ex();
 
@@ -222,12 +174,12 @@
             $defineName = 'SMARTPHONE_' . $defineName;
             break;
+
         case DEVICE_TYPE_PC:
         default:
         }
 
-        $data = array($defineName => var_export($template_code, TRUE));
-
         // DBのデータを更新
-        $masterData->updateMasterData('mtb_constants', array(), $data);
+        $arrData = array($defineName => var_export($template_code, true));
+        $masterData->updateMasterData('mtb_constants', array(), $arrData);
 
         // キャッシュを生成
@@ -236,23 +188,20 @@
 
     /**
-     * ブロック位置の更新
-     */
-    function lfChangeBloc($template_code) {
-        $objQuery = new SC_Query_Ex();
-        /*
-         * FIXME 各端末に合わせて作成する必要あり
-         * $filepath = USER_TEMPLATE_REALDIR. $template_code. "/sql/update_bloc.sql";
-         */
-
-        // ブロック位置更新SQLファイル有
-        if(file_exists($filepath)) {
-            if($fp = fopen($filepath, 'r')) {
-                $sql = fread($fp, filesize($filepath));
-                fclose($fp);
-            }
+     * ブロック位置の更新.
+     *
+     * ブロック位置を更新する SQL を実行する.
+     * この SQL は, 各端末に合わせて実行する必要がある
+     *
+     * @param string $filepath SQLのファイルパス
+     * @return void
+     */
+    function updateBloc($filepath) {
+        $sql = file_get_contents($filepath);
+        if ($sql !== false) {
             // 改行、タブを1スペースに変換
             $sql = preg_replace("/[\r\n\t]/", " " ,$sql);
             $sql_split = explode(";", $sql);
-            foreach($sql_split as $key => $val){
+            $objQuery =& SC_Query_Ex::getSingletonInstance();
+            foreach($sql_split as $val){
                 if (trim($val) != "") {
                     $objQuery->query($val);
@@ -263,48 +212,120 @@
 
     /**
-     * テンプレートパッケージの削除
-     */
-    function lfDeleteTemplate($template_code) {
-        // DB更新
-        $objQuery = new SC_Query_Ex();
-        $objQuery->delete('dtb_templates', 'template_code = ?', array($template_code));
-        // テンプレート削除
-        $templates_dir = SMARTY_TEMPLATES_REALDIR. $template_code. "/";
-        SC_Utils_Ex::sfDelFile($templates_dir);
-        // コンパイル削除
-        $templates_c_dir = DATA_REALDIR. "Smarty/templates_c/". $template_code. "/";
-        SC_Utils_Ex::sfDelFile($templates_c_dir);
-        // ユーザーデータ削除
-        $user_dir = USER_TEMPLATE_REALDIR. $template_code. "/";
-        SC_Utils_Ex::sfDelFile($user_dir);
-    }
-
-    function lfGetAllTemplates($device_type_id) {
-        $objQuery = new SC_Query_Ex();
-        $arrRet = $objQuery->select('*', 'dtb_templates', "device_type_id = ?", array($device_type_id));
-        if (empty($arrRet)) return array();
-
-        return $arrRet;
-    }
-
-    /*
-     * 関数名：lfGetFileContents()
-     * 引数1 ：ファイルパス
-     * 説明　：ファイル読込
-     * 戻り値：無し
-     */
-    function lfGetFileContents($read_file) {
-
-        if(file_exists($read_file)) {
-            $contents = file_get_contents($read_file);
+     * テンプレートパッケージの削除.
+     *
+     * @param string $template_code テンプレートコード
+     * @param integer $device_type_id 端末種別ID
+     * @return boolean 成功した場合 true; 失敗した場合 false
+     */
+    function doDelete($template_code, $device_type_id) {
+        if ($template_code == $this->getTemplateName($device_type_id)
+                || $template_code == $this->getTemplateName($device_type_id, true)) {
+            $this->arrErr['err'] = "※ デフォルトテンプレートと、選択中のテンプレートは削除出来ません<br />";
+            return false;
         } else {
-            $contents = "";
-        }
-
-        return $contents;
+            $objQuery =& SC_Query_Ex::getSingletonInstance();
+            $objQuery->begin();
+            $objQuery->delete('dtb_templates', 'template_code = ? AND device_type_id = ?',
+                              array($template_code, $device_type_id));
+
+            $error =  "※ テンプレートの削除ができませんでした<br />";
+            // テンプレート削除
+            $templates_dir = SMARTY_TEMPLATES_REALDIR . $template_code. "/";
+            if (SC_Utils_Ex::sfDelFile($templates_dir) === false) {
+                $this->arrErr['err'] = $error;
+                $objQuery->rollback();
+                return false;
+            }
+            // ユーザーデータ削除
+            $user_dir = USER_TEMPLATE_REALDIR. $template_code. "/";
+            if (SC_Utils_Ex::sfDelFile($user_dir) === false) {
+                $this->arrErr['err'] = $error;
+                $objQuery->rollback();
+                return false;
+            }
+
+            // コンパイル削除
+            $templates_c_dir = DATA_REALDIR. "Smarty/templates_c/". $template_code. "/";
+            if (SC_Utils_Ex::sfDelFile($templates_c_dir) === false) {
+                $this->arrErr['err'] = $error;
+                $objQuery->rollback();
+                return false;
+            }
+            $objQuery->commit();
+            return true;
+        }
+    }
+
+    /**
+     * 登録を実行する.
+     *
+     * 失敗した場合は, エラーメッセージを出力し, false を返す.
+     *
+     * @param string $template_code テンプレートコード
+     * @param integer $device_type_id 端末種別ID
+     * @return boolean 成功した場合 true; 失敗した場合 false
+     */
+    function doRegister($template_code, $device_type_id) {
+
+        $tpl_dir = USER_TEMPLATE_REALDIR . $template_code . '/';
+        if (!is_dir($tpl_dir)) {
+            $this->arrErr['err'] = '※ ' . $tpl_dir . 'が見つかりません<br />';
+            return false;
+        }
+
+        // 更新SQLファイルが存在する場合はブロック位置を更新
+        $sql_file = $tpl_dir . "sql/update_bloc.sql";
+        if (file_exists($sql_file)) {
+            $this->updateBloc($sql_file);
+        }
+
+        $this->doUpdateMasterData($template_code, $device_type_id);
+        // コンパイルファイルのクリア処理
+        $objView = new SC_AdminView_Ex();
+        $objView->_smarty->clear_compiled_tpl();
+        return true;
+    }
+
+    /**
+     * ダウンロードを実行する.
+     *
+     * 指定のテンプレートをアーカイブし, ブラウザに出力する.
+     * 失敗した場合は, エラーメッセージを出力し, false を返す.
+     *
+     * @param string $template_code テンプレートコード
+     * @return boolean 成功した場合 true; 失敗した場合 false
+     */
+    function doDownload($template_code) {
+        $from_dir = USER_TEMPLATE_REALDIR . $template_code . "/";
+        $to_dir = SMARTY_TEMPLATES_REALDIR . $template_code . "/_packages/";
+        if (SC_Utils_Ex::recursiveMkdir($to_dir) === false) {
+            $this->arrErr['err'] = '※ ディレクトリの作成に失敗しました<br />';
+            return false;
+        }
+        SC_Utils_Ex::sfCopyDir($from_dir, $to_dir);
+        if (SC_Helper_FileManager_Ex::downloadArchiveFiles(SMARTY_TEMPLATES_REALDIR . $template_code, $template_code) === false) {
+            $this->arrErr['err'] = '※ アーカイブファイルの作成に失敗しました<br />';
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * テンプレート情報を取得する.
+     *
+     * @param integer $device_type_id 端末種別ID
+     * @return array テンプレート情報の配列
+     */
+    function getAllTemplates($device_type_id) {
+        $objQuery =& SC_Query_Ex::getSingletonInstance();
+        return $objQuery->select('*', 'dtb_templates', "device_type_id = ?", array($device_type_id));
     }
 
     /**
      * テンプレート名を返す.
+     *
+     * @param integer $device_type_id 端末種別ID
+     * @param boolean $isDefault デフォルトテンプレート名を返す場合 true
+     * @return string テンプレート名
      */
     function getTemplateName($device_type_id, $isDefault = false) {
Index: /branches/version-2_11-dev/data/class/pages/admin/design/LC_Page_Admin_Design_UpDown.php
===================================================================
--- /branches/version-2_11-dev/data/class/pages/admin/design/LC_Page_Admin_Design_UpDown.php	(revision 20764)
+++ /branches/version-2_11-dev/data/class/pages/admin/design/LC_Page_Admin_Design_UpDown.php	(revision 20863)
@@ -76,49 +76,31 @@
      */
     function action() {
-        // 端末種別IDを取得
-        if (isset($_REQUEST['device_type_id'])
-            && is_numeric($_REQUEST['device_type_id'])) {
-            $device_type_id = $_REQUEST['device_type_id'];
-        } else {
-            $device_type_id = DEVICE_TYPE_PC;
-        }
-
-        //サブタイトルの追加
-        $this->tpl_subtitle .= ' - ' . $this->arrDeviceType[$device_type_id];
+        $objFormParam = new SC_FormParam_Ex();
+        $this->lfInitParam($objFormParam);
+        $objFormParam->setParam($_REQUEST);
+        $objFormParam->convParam();
+
+        $this->device_type_id = $objFormParam->getValue('device_type_id', DEVICE_TYPE_PC);
 
         switch($this->getMode()) {
-
-            // ダウンロードボタン押下時の処理
-        case 'download':
+        // アップロードボタン押下時の処理
+        case 'upload':
+            $objUpFile = $this->lfInitUploadFile($objFormParam);
+            $this->arrErr = $this->lfCheckError($objFormParam, $objUpFile);
+            if (SC_Utils_Ex::isBlank($this->arrErr)) {
+                if ($this->doUpload($objFormParam, $objUpFile)) {
+                    $this->tpl_onload = "alert('テンプレートファイルをアップロードしました。');";
+                    $objFormParam->setValue('template_name', '');
+                    $objFormParam->setValue('template_code', '');
+                }
+            }
             break;
-            // アップロードボタン押下時の処理
-        case 'upload':
-            // フォームパラメータ初期化
-            $objForm = $this->lfInitUpload();
-            // エラーチェック
-            if ($arrErr = $this->lfValidateUpload($objForm)) {
-                $this->arrErr  = $arrErr;
-                $this->arrForm = $objForm->getFormParamList();
-                break;
-            }
-            // アップロードファイル初期化
-            $objUpFile = $this->lfInitUploadFile($objForm);
-            // 一時ファイルへ保存
-            $errMsg = $objUpFile->makeTempFile('template_file', false);
-            // 書き込みエラーチェック
-            if(isset($errMsg)) {
-                $this->arrErr['template_file'] = $errMsg;
-                $this->arrForm = $objForm->getFormParamList();
-                break;
-            }
-            $this->lfAddTemplates($objForm, $objUpFile, $device_type_id);
-            $this->tpl_onload = "alert('テンプレートファイルをアップロードしました。');";
-            break;
-
-            // 初回表示
+
         default:
             break;
         }
-        $this->device_type_id = $device_type_id;
+        //サブタイトルの追加
+        $this->tpl_subtitle .= ' - ' . $this->arrDeviceType[$this->device_type_id];
+        $this->arrForm = $objFormParam->getFormParamList();
     }
 
@@ -142,38 +124,32 @@
         $objUpFile = new SC_UploadFile_Ex(TEMPLATE_TEMP_REALDIR, $pkg_dir);
         $objUpFile->addFile("テンプレートファイル", 'template_file', array(), TEMPLATE_SIZE, true, 0, 0, false);
-
         return $objUpFile;
     }
+
     /**
      * SC_FormParamクラスの初期化.
      *
-     * @param void
-     * @return object SC_FormParamのインスタンス
-     */
-    function lfInitUpload() {
-        $objForm = new SC_FormParam;
-
-        $objForm->addParam("テンプレートコード", "template_code", STEXT_LEN, 'KVa', array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK", "ALNUM_CHECK"));
-        $objForm->addParam("テンプレート名", "template_name", STEXT_LEN, 'KVa', array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK"));
-        $objForm->setParam($_POST);
-
-        return $objForm;
-    }
+     * @param SC_FormParam $objFormParam SC_FormParamのインスタンス
+     * @return void
+     */
+    function lfInitParam(&$objFormParam) {
+        $objFormParam->addParam("テンプレートコード", "template_code", STEXT_LEN, 'a', array("EXIST_CHECK", "SPTAB_CHECK","MAX_LENGTH_CHECK", "ALNUM_CHECK"));
+        $objFormParam->addParam("テンプレート名", "template_name", STEXT_LEN, 'KVa', array("EXIST_CHECK", "SPTAB_CHECK","MAX_LENGTH_CHECK"));
+        $objFormParam->addParam("端末種別ID", "device_type_id", INT_LEN, 'n', array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));
+    }
+
     /**
      * uploadモードのパラメータ検証を行う.
      *
-     * @param object $objForm SC_FormParamのインスタンス
+     * @param object $objFormParam SC_FormParamのインスタンス
+     * @param object $objUpFile SC_UploadFileのインスタンス
      * @return array エラー情報を格納した連想配列, エラーが無ければ(多分)nullを返す
      */
-    function lfValidateUpload($objForm) {
-        $arrErr = $objForm->checkError();
-        if (!empty($arrErr)) {
-            return $arrErr;
-        }
-
-        $arrForm = $objForm->getHashArray();
+    function lfCheckError(&$objFormParam, &$objUpFile) {
+        $arrErr = $objFormParam->checkError();
+        $template_code = $objFormParam->getValue('template_code');
 
         // 同名のフォルダが存在する場合はエラー
-        if(file_exists(USER_TEMPLATE_REALDIR . $arrForm['template_code'])) {
+        if (file_exists(USER_TEMPLATE_REALDIR . $template_code)) {
             $arrErr['template_code'] = "※ 同名のファイルがすでに存在します。<br/>";
         }
@@ -184,54 +160,71 @@
                                SMARTPHONE_DEFAULT_TEMPLATE_NAME,
                                DEFAULT_TEMPLATE_NAME);
-        if(in_array($arrForm['template_code'], $arrIgnoreCode)) {
+        if (in_array($template_code, $arrIgnoreCode)) {
             $arrErr['template_code'] = "※ このテンプレートコードは使用できません。<br/>";
         }
 
         // DBにすでに登録されていないかチェック
-        $objQuery = new SC_Query_Ex();
-        $ret = $objQuery->count("dtb_templates", "template_code = ?", array($arrForm['template_code']));
-        if(!empty($ret)) {
+        $objQuery =& SC_Query_Ex::getSingletonInstance();
+        $count = $objQuery->count("dtb_templates", "template_code = ?", array($template_code));
+        if ($count > 0) {
             $arrErr['template_code'] = "※ すでに登録されているテンプレートコードです。<br/>";
         }
 
-        // ファイルの拡張子チェック(.tar/tar.gzのみ許可)
-        $errFlag = true;
-        $array_ext = explode(".", $_FILES['template_file']['name']);
-        $ext = $array_ext[ count ( $array_ext ) - 1 ];
-        $ext = strtolower($ext);
-        // .tarチェック
-        if ($ext == 'tar') {
-            $errFlag = false;
-        }
-        $ext = $array_ext[ count ( $array_ext ) - 2 ].".".$ext;
-        $ext = strtolower($ext);
-        // .tar.gzチェック
-        if ($ext== 'tar.gz') {
-            $errFlag = false;
-        }
-
-        if($errFlag) {
-            $arrErr['template_file'] = "※ アップロードするテンプレートファイルで許可されている形式は、tar/tar.gzです。<br />";
-        }
-
+        /*
+         * ファイル形式チェック
+         * ファイルが壊れていることも考慮して, 展開可能かチェックする.
+         */
+        $tar = new Archive_Tar($_FILES['template_file']['tmp_name'], true);
+        $arrArchive = $tar->listContent();
+        if (!is_array($arrArchive)) {
+            $arrErr['template_file'] = "※ テンプレートファイルが解凍できません。許可されている形式は、tar/tar.gzです。<br />";
+        }
+
+        $arrErr['template_file'] = $objUpFile->makeTempFile('template_file', false);
         return $arrErr;
     }
+
     /**
      * DBおよびファイルシステムにテンプレートパッケージを追加する.
      *
-     * @param object $objForm SC_FormParamのインスタンス
+     * エラーが発生した場合は, エラーを出力し, false を返す.
+     *
+     * @param object $objFormParam SC_FormParamのインスタンス
      * @param object $objUpFile SC_UploadFileのインスタンス
-     * @return void
-     */
-    function lfAddTemplates($objForm, $objUpFile, $device_type_id) {
-        $template_code = $objForm->getValue('template_code');
+     * @return boolean 成功した場合 true; 失敗した場合 false
+     */
+    function doUpload($objFormParam, $objUpFile) {
+        $template_code = $objFormParam->getValue('template_code');
+        $template_name = $objFormParam->getValue('template_name');
+        $device_type_id = $objFormParam->getValue('device_type_id');
+
         $template_dir = SMARTY_TEMPLATES_REALDIR . $template_code;
         $compile_dir  = DATA_REALDIR . "Smarty/templates_c/" . $template_code;
+
+        $objQuery =& SC_Query_Ex::getSingletonInstance();
+        $objQuery->begin();
+
+        $arrValues = array('template_code' => $template_code,
+                           'device_type_id' => $device_type_id,
+                           'template_name' => $template_name,
+                           'create_date' => 'now()',
+                           'update_date' => 'now()');
+        $objQuery->insert('dtb_templates', $arrValues);
+
+        $is_error = false;
         // フォルダ作成
-        if(!file_exists($template_dir)) {
-            mkdir($template_dir);
-        }
-        if(!file_exists($compile_dir)) {
-            mkdir($compile_dir);
+        if (!file_exists($template_dir)) {
+            if (!mkdir($template_dir)) {
+                $this->arrErr['err'] = "※ テンプレートフォルダが作成できませんでした。<br/>";
+                $objQuery->rollback();
+                return false;
+            }
+        }
+        if (!file_exists($compile_dir)) {
+            if (!mkdir($compile_dir)) {
+                $this->arrErr['err'] = "※ Smarty コンパイルフォルダが作成できませんでした。<br/>";
+                $objQuery->rollback();
+                return false;
+            }
         }
 
@@ -240,28 +233,21 @@
 
         // 解凍
-        SC_Helper_FileManager_Ex::unpackFile($template_dir . "/" . $_FILES['template_file']['name']);
+        if (!SC_Helper_FileManager_Ex::unpackFile($template_dir . "/" . $_FILES['template_file']['name'])) {
+            $this->arrErr['err'] = "※ テンプレートファイルの解凍に失敗しました。<br/>";
+            $objQuery->rollback();
+            return false;
+        }
         // ユーザデータの下のファイルをコピーする
         $from_dir = SMARTY_TEMPLATES_REALDIR . $template_code . "/_packages/";
         $to_dir = USER_REALDIR . "packages/" . $template_code . "/";
-        SC_Utils_Ex::sfMakeDir($to_dir);
+        if (!SC_Utils_Ex::recursiveMkdir($to_dir)) {
+            $this->arrErr['err'] = "※ " . $to_dir . " の作成に失敗しました。<br/>";
+            $objQuery->rollback();
+            return false;
+        }
         SC_Utils_Ex::sfCopyDir($from_dir, $to_dir);
 
-        // DBにテンプレート情報を保存
-        $this->lfRegisterTemplates($objForm->getHashArray(), $device_type_id);
-    }
-
-    /**
-     * dtb_templatesへ入力内容を登録する.
-     *
-     * @param array $arrForm POSTされたパラメータ
-     * @return void
-     */
-    function lfRegisterTemplates($arrForm, $device_type_id) {
-        $objQuery = new SC_Query_Ex();
-        $sqlval = $arrForm;
-        $sqlval['device_type_id'] = $device_type_id;
-        $sqlval['create_date'] = "now()";
-        $sqlval['update_date'] = "now()";
-        $objQuery->insert('dtb_templates', $sqlval);
+        $objQuery->commit();
+        return true;
     }
 }
Index: /branches/version-2_11-dev/data/Smarty/templates/admin/design/template.tpl
===================================================================
--- /branches/version-2_11-dev/data/Smarty/templates/admin/design/template.tpl	(revision 20764)
+++ /branches/version-2_11-dev/data/Smarty/templates/admin/design/template.tpl	(revision 20863)
@@ -38,5 +38,5 @@
 <input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />
 <input type="hidden" name="mode" value="" />
-<input type="hidden" name="template_code_temp" value="" />
+<input type="hidden" name="template_code" value="" />
 <input type="hidden" name="device_type_id" value="<!--{$device_type_id|h}-->" />
 <div id="design" class="contents-main">
@@ -45,4 +45,11 @@
         選択したテンプレートへデザインを変更することが出来ます。
     </p>
+
+    <!--{if $arrErr.err != ""}-->
+        <div class="message">
+            <span class="attention"><!--{$arrErr.err}--></span>
+        </div>
+    <!--{/if}-->
+
     <table class="list center">
         <colgroup width="5%">
@@ -61,9 +68,9 @@
         <!--{assign var=tplcode value=$tpl.template_code}-->
         <tr class="center">
-            <td><input type="radio" name="template_code" value="<!--{$tplcode|h}-->" <!--{if $tplcode == $tpl_select}-->checked<!--{/if}--> /></td>
+            <td><input type="radio" name="template_code" value="<!--{$tplcode|h}-->" <!--{if $tplcode == $tpl_select}-->checked="checked"<!--{/if}--> /></td>
             <td class="left"><!--{$tpl.template_name|h}--></td>
             <td class="left">data/Smarty/templates/<!--{$tplcode|h}-->/</td>
-            <td><span class="icon_confirm"><a href="#" onClick="fnModeSubmit('download','template_code_temp','<!--{$tplcode}-->');return false;">ダウンロード</a></span></td>
-            <td><span class="icon_delete"><a href="#" onClick="fnModeSubmit('delete','template_code_temp','<!--{$tplcode}-->');return false;">削除</a></span></td>
+            <td><span class="icon_confirm"><a href="javascript:;" onClick="fnFormModeSubmit('form2', 'download','template_code','<!--{$tplcode}-->');return false;">ダウンロード</a></span></td>
+            <td><span class="icon_delete"><a href="javascript:;" onClick="fnFormModeSubmit('form2', 'delete','template_code','<!--{$tplcode}-->');return false;">削除</a></span></td>
         </tr>
         <!--{/foreach}-->
@@ -76,2 +83,8 @@
 </div>
 </form>
+<form name="form2" method="post" action="?">
+  <input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />
+  <input type="hidden" name="mode" value="" />
+  <input type="hidden" name="template_code" value="" />
+  <input type="hidden" name="device_type_id" value="<!--{$device_type_id|h}-->" />
+</form>
Index: /branches/version-2_11-dev/data/Smarty/templates/admin/design/up_down.tpl
===================================================================
--- /branches/version-2_11-dev/data/Smarty/templates/admin/design/up_down.tpl	(revision 20764)
+++ /branches/version-2_11-dev/data/Smarty/templates/admin/design/up_down.tpl	(revision 20863)
@@ -44,4 +44,11 @@
         アップロードしたパッケージは、「テンプレート設定」で選択できるようになります。
     </p>
+
+    <!--{if $arrErr.err != ""}-->
+        <div class="message">
+            <span class="attention"><!--{$arrErr.err}--></span>
+        </div>
+    <!--{/if}-->
+
     <table>
         <!--{assign var=key value="template_code"}-->
