[Svn-src-all:859] [version-2_5-dev 19746] #652 (CSVダウンロードの改善) 商品CSVダウンロード修正。

AMUAMU admin @ mail.ec-cube.net
2010年 12月 19日 (日) 13:34:00 JST


Subversion committed to /home/svn/open 19746
http://svn.ec-cube.net/open_trac/changeset/19746
┌────────────────────────────┐
│更新者 :  AMUAMU                                       │
│更新日時:  2010-12-19 13:34:00 +0900 (日, 19 12月 2010)│
└────────────────────────────┘

Log:
--------------------------------------------------------
#652 (CSVダウンロードの改善) 商品CSVダウンロード修正。
#582 category_id が末尾に移動される不具合 の解決。
r19742 で発生したWarningの除去

Changed:                      [U:修正,A:追加,D:削除]
--------------------------------------------------------
U   branches/version-2_5-dev/data/class/SC_Product.php
U   branches/version-2_5-dev/data/class/SC_Query.php
U   branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php
U   branches/version-2_5-dev/data/class/helper/SC_Helper_CSV.php
U   branches/version-2_5-dev/html/install/sql/insert_data.sql

変更: branches/version-2_5-dev/data/class/SC_Product.php
===================================================================
--- branches/version-2_5-dev/data/class/SC_Product.php	2010-12-19 01:50:48 UTC (rev 19745)
+++ branches/version-2_5-dev/data/class/SC_Product.php	2010-12-19 04:34:00 UTC (rev 19746)
@@ -763,6 +763,7 @@
                      ON dtb_class_combination.classcategory_id = Tcc1.classcategory_id
                  LEFT JOIN dtb_classcategory as Tcc2
                      ON Tpcm.classcategory_id = Tcc2.classcategory_id
+             $whereCause
         ) as prdcls
 __EOS__;
         return $sql;

変更: branches/version-2_5-dev/data/class/SC_Query.php
===================================================================
--- branches/version-2_5-dev/data/class/SC_Query.php	2010-12-19 01:50:48 UTC (rev 19745)
+++ branches/version-2_5-dev/data/class/SC_Query.php	2010-12-19 04:34:00 UTC (rev 19746)
@@ -240,7 +240,7 @@
         }
         
         while($data = $affected->fetchRow($fetchmode)) {
-            $result = call_user_func($cbFunc, &$data);
+            $result = call_user_func($cbFunc, $data);
             if($result === false) {
                 break;
             }

変更: branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php
===================================================================
--- branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php	2010-12-19 01:50:48 UTC (rev 19745)
+++ branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php	2010-12-19 04:34:00 UTC (rev 19746)
@@ -70,6 +70,8 @@
         $sql = $this->sfChangeRANDOM($sql);
         // TRUNCをTRUNCATEに変換する
         $sql = $this->sfChangeTrunc($sql);
+        // ARRAY_TO_STRINGをGROUP_CONCATに変換する
+        $sql = $this->sfChangeArrayToString($sql);
         return $sql;
     }
 
@@ -275,8 +277,27 @@
         $changesql = eregi_replace("( TRUNC)", " TRUNCATE", $sql);
         return $changesql;
     }
-
+    
     /**
+     * ARRAY_TO_STRING(ARRAY(A),B) を GROUP_CONCAT() に変換する.
+     *
+     * @access private
+     * @param string $sql SQL文
+     * @return string 変換後の SQL 文
+     */
+    function sfChangeArrayToString($sql){
+        if(stripos($sql, 'ARRAY_TO_STRING') !== FALSE) {
+            preg_match_all('/ARRAY_TO_STRING.*?\(.*?ARRAY\(.*?SELECT (.+?) FROM (.+?) WHERE (.+?)\).*?\,.*?\'(.+?)\'.*?\)/is', $sql, $match, PREG_SET_ORDER);
+            
+            foreach($match as $item) {
+                $replace = 'GROUP_CONCAT(' . $item[1] . ' SEPARATOR \'' . $item[4] . '\') FROM ' . $item[2] . ' WHERE ' . $item[3];
+                $sql = str_replace($item[0], $replace, $sql);
+            }
+        }
+        return $sql;
+    }
+    
+    /**
      * WHERE 句置換用の配列を返す.
      *
      * @access private

変更: branches/version-2_5-dev/data/class/helper/SC_Helper_CSV.php
===================================================================
--- branches/version-2_5-dev/data/class/helper/SC_Helper_CSV.php	2010-12-19 01:50:48 UTC (rev 19745)
+++ branches/version-2_5-dev/data/class/helper/SC_Helper_CSV.php	2010-12-19 04:34:00 UTC (rev 19746)
@@ -131,6 +131,8 @@
 
     // CSVを送信する。(商品)
     function sfDownloadProductsCsv($where, $arrval, $order, $is_download = false) {
+        // 実行時間を制限しない
+        @set_time_limit(0);
 
         // CSV出力タイトル行の作成
         $arrOutput = SC_Utils_Ex::sfSwapArray($this->sfgetCsvOutput(1, 'status = 1'));

変更: branches/version-2_5-dev/html/install/sql/insert_data.sql
===================================================================
--- branches/version-2_5-dev/html/install/sql/insert_data.sql	2010-12-19 01:50:48 UTC (rev 19745)
+++ branches/version-2_5-dev/html/install/sql/insert_data.sql	2010-12-19 04:34:00 UTC (rev 19746)
@@ -213,7 +213,7 @@
 INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, rw_flg, status, create_date, update_date) VALUES (42, 1, 'sub_comment5', '詳細-サブコメント(5)', 42, 1, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
 INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, rw_flg, status, create_date, update_date) VALUES (43, 1, 'sub_image5', '詳細-サブ画像(5)', 43, 1, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
 INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, rw_flg, status, create_date, update_date) VALUES (44, 1, 'sub_large_image5', '詳細-サブ拡大画像(5)', 44, 1, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
-INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, rw_flg, status, create_date, update_date) VALUES (45, 1, 'deliv_date_id', '発送日目安', 45, 1, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
+INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, rw_flg, status, create_date, update_date) VALUES (45, 1, 'deliv_date_id', '発送日目安ID', 45, 1, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
 INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, rw_flg, status, create_date, update_date) VALUES (46, 1, 'del_flg', '削除フラグ', 46, 1, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
 INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, rw_flg, status, create_date, update_date) VALUES (47, 1, 'product_type_id', '商品種別ID', 47, 1, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
 INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, rw_flg, status, create_date, update_date) VALUES (48, 1, 'product_code', '商品コード', 48, 1, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
@@ -363,7 +363,14 @@
 INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, status, create_date, update_date) VALUES (191, 5, 'parent_category_id', '親カテゴリID', 3, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
 INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, status, create_date, update_date) VALUES (192, 5, 'level', '階層', NULL, 2, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
 INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, status, create_date, update_date) VALUES (193, 5, 'rank', '表示ランク', NULL, 2, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
+INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, status, create_date, update_date) VALUES (194, 1, '(SELECT ARRAY_TO_STRING(ARRAY(SELECT product_status_id FROM dtb_product_status WHERE dtb_product_status.product_id = prdcls.product_id and del_flg = 0 ORDER BY dtb_product_status.product_status_id), '','')) as product_statuses', '商品ステータス', 194, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
+INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, status, create_date, update_date) VALUES (195, 1, '(SELECT ARRAY_TO_STRING(ARRAY(SELECT name FROM dtb_product_status LEFT JOIN mtb_status ON  dtb_product_status.product_status_id = mtb_status.id  WHERE dtb_product_status.product_id = prdcls.product_id and del_flg = 0 ORDER BY dtb_product_status.product_status_id), '','')) as product_status_names', '商品ステータス名', 195, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
+INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, status, create_date, update_date) VALUES (196, 1, '(SELECT ARRAY_TO_STRING(ARRAY(SELECT payment_id FROM dtb_payment_options WHERE dtb_payment_options.product_class_id = prdcls.product_class_id ORDER BY dtb_payment_options.rank), '','')) as product_payment_ids', '支払い方法フラグ', 196, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
+INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, status, create_date, update_date) VALUES (197, 1, '(SELECT ARRAY_TO_STRING(ARRAY(SELECT payment_method FROM dtb_payment_options LEFT JOIN dtb_payment ON dtb_payment_options.payment_id = dtb_payment.payment_id WHERE dtb_payment_options.product_class_id = prdcls.product_class_id ORDER BY dtb_payment_options.rank), '','')) as product_namess', '支払い方法名', 197, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
+INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, status, create_date, update_date) VALUES (198, 1, '(SELECT ARRAY_TO_STRING(ARRAY(SELECT category_id FROM dtb_product_categories WHERE dtb_product_categories.product_id = prdcls.product_id ORDER BY dtb_product_categories.rank), '','')) as category_ids', 'カテゴリID', 198, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
+INSERT INTO dtb_csv (no, csv_id, col, disp_name, rank, status, create_date, update_date) VALUES (199, 1, '(SELECT ARRAY_TO_STRING(ARRAY(SELECT category_name FROM dtb_product_categories LEFT JOIN dtb_category ON dtb_product_categories.category_id = dtb_category.category_id WHERE dtb_product_categories.product_id = prdcls.product_id ORDER BY dtb_product_categories.rank), '','')) as category_names', 'カテゴリ名', 199, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
 
+
 INSERT INTO dtb_deliv (deliv_id, product_type_id, name, service_name, confirm_url, rank, status, del_flg, creator_id, create_date, update_date) VALUES (1, 1, 'サンプル業者', 'サンプル業者', NULL, 1, 1, 0, 2, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
 
 INSERT INTO dtb_delivfee (deliv_id, fee_id, fee, pref) VALUES (1, 1, 1000, 1);




Svn-src-all メーリングリストの案内