Changeset 15163


Ignore:
Timestamp:
2007/08/02 19:11:21 (14 years ago)
Author:
nanasess
Message:

定数定義出力に対応

Location:
branches/feature-module-update
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/feature-module-update/data/class/db/SC_DB_MasterData.php

    r15158 r15163  
    193193     * 引数 $name のマスタデータキャッシュを生成する. 
    194194     * 既存のキャッシュが存在する場合は上書きする. 
     195     * 引数 $isDefine が true の場合は, 定数を生成する. 
    195196     * 
    196197     * @param string $name マスタデータ名 
    197198     * @param array $masterData マスタデータ 
     199     * @param bool $isDefine 定数を生成する場合 true 
    198200     * @return bool キャッシュの生成に成功した場合 true 
    199201     */ 
    200     function createCache($name, $masterData) { 
    201  
    202         // 配列の定義を文字列にする 
    203         $data = "<?php\n" 
    204               . "\$_" . $name . "_master = array(\n"; 
     202    function createCache($name, $masterData, $isDefine = false) { 
     203 
     204        // マスタデータを文字列にする 
     205        $data = "<?php\n"; 
     206        if ($isDefine) { 
     207            $data .= $this->getMasterDataAsDefine($masterData); 
     208        } else { 
     209            $data .= $this->getMasterDataAsString($name, $masterData); 
     210        } 
     211        $data .=  "?>\n"; 
     212 
     213        // ファイルを書き出しモードで開く 
     214        $path = MASTER_DATA_DIR . $name . ".php"; 
     215        $handle = fopen($path, "w"); 
     216        if (!$handle) { 
     217            return false; 
     218        } 
     219        // ファイルの内容を書き出す. 
     220        if (fwrite($handle, $data) === false) { 
     221            return false; 
     222        } 
     223        return true; 
     224    } 
     225 
     226    // }}} 
     227    // {{{ private functions 
     228 
     229    /** 
     230     * DBからマスタデータを取得する. 
     231     * 
     232     * キャッシュの有無に関係なく, DBからマスタデータを検索し, 取得する. 
     233     * 
     234     * 返り値は, key => value 形式の配列である. 
     235     * 
     236     * @access private 
     237     * @param string $name マスタデータ名 
     238     * @param array $columns [0] => キー, [1] => 表示文字列, [2] => 表示順 
     239     *                        を表すカラム名を格納した配列 
     240     * @return array マスタデータ 
     241     */ 
     242    function getDbMasterData($name, $columns = array()) { 
     243 
     244        $columns = $this->getDefaultColumnName($columns); 
     245 
     246        $this->objQuery = new SC_Query(); 
     247        $this->objQuery->setorder($columns[2]); 
     248        $results = $this->objQuery->select($columns[0] . ", " . $columns[1], $name); 
     249 
     250        // 結果を key => value 形式に格納 
     251        $masterData = array(); 
     252        foreach ($results as $result) { 
     253 
     254            $masterData[$result[$columns[0]]] = $result[$columns[1]]; 
     255        } 
     256        return $masterData; 
     257    } 
     258 
     259    /** 
     260     * デフォルトのカラム名の配列を返す. 
     261     * 
     262     * 引数 $columns が空の場合, デフォルトのカラム名の配列を返す. 
     263     * 空でない場合は, 引数の値をそのまま返す. 
     264     * 
     265     * @param array $columns [0] => キー, [1] => 表示文字列, [2] => 表示順 
     266     *                        を表すカラム名を格納した配列 
     267     * @return array カラム名を格納した配列 
     268     */ 
     269    function getDefaultColumnName($columns = array()) { 
     270        if (!empty($columns)) { 
     271            return $columns; 
     272        } 
     273        return $this->columns; 
     274    } 
     275 
     276    /** 
     277     * マスタデータの配列を配列定義の文字列として出力する. 
     278     * 
     279     * @access private 
     280     * @param string $name マスタデータ名 
     281     * @param array $masterData マスタデータの配列 
     282     * @return string 配列定義の文字列 
     283     */ 
     284    function getMasterDataAsString($name, $masterData) { 
     285        $data = "\$_" . $name . "_master = array(\n"; 
    205286        $i = count($masterData); 
    206287        foreach ($masterData as $key => $val) { 
     
    211292            $i--; 
    212293        } 
    213         $data .= ");\n" 
    214               .  "?>\n"; 
    215  
    216         // ファイルを書き出しモードで開く 
    217         $path = MASTER_DATA_DIR . $name . ".php"; 
    218         $handle = fopen($path, "w"); 
    219         if (!$handle) { 
    220             return false; 
    221         } 
    222         // ファイルの内容を書き出す. 
    223         if (fwrite($handle, $data) === false) { 
    224             return false; 
    225         } 
    226         return true; 
    227     } 
    228  
    229     // }}} 
    230     // {{{ private functions 
    231  
    232     /** 
    233      * DBからマスタデータを取得する. 
    234      * 
    235      * キャッシュの有無に関係なく, DBからマスタデータを検索し, 取得する. 
    236      * 
    237      * 返り値は, key => value 形式の配列である. 
     294        $data .= ");\n"; 
     295        return $data; 
     296    } 
     297 
     298    /** 
     299     * マスタデータの配列を定数定義の文字列として出力する. 
    238300     * 
    239301     * @access private 
    240      * @param string $name マスタデータ名 
    241      * @param array $columns [0] => キー, [1] => 表示文字列, [2] => 表示順 
    242      *                        を表すカラム名を格納した配列 
    243      * @return array マスタデータ 
    244      */ 
    245     function getDbMasterData($name, $columns = array()) { 
    246  
    247         $columns = $this->getDefaultColumnName($columns); 
    248  
    249         $this->objQuery = new SC_Query(); 
    250         $this->objQuery->setorder($columns[2]); 
    251         $results = $this->objQuery->select($columns[0] . ", " . $columns[1], $name); 
    252  
    253         // 結果を key => value 形式に格納 
    254         $masterData = array(); 
    255         foreach ($results as $result) { 
    256  
    257             $masterData[$result[$columns[0]]] = $result[$columns[1]]; 
    258         } 
    259         return $masterData; 
    260     } 
    261  
    262     /** 
    263      * デフォルトのカラム名の配列を返す. 
    264      * 
    265      * 引数 $columns が空の場合, デフォルトのカラム名の配列を返す. 
    266      * 空でない場合は, 引数の値をそのまま返す. 
    267      * 
    268      * @param array $columns [0] => キー, [1] => 表示文字列, [2] => 表示順 
    269      *                        を表すカラム名を格納した配列 
    270      * @return array カラム名を格納した配列 
    271      */ 
    272     function getDefaultColumnName($columns = array()) { 
    273         if (!empty($columns)) { 
    274             return $columns; 
    275         } 
    276         return $this->columns; 
     302     * @param array $masterData マスタデータの配列 
     303     * @return string 定数定義の文字列 
     304     */ 
     305    function getMasterDataAsDefine($masterData) { 
     306        $data = ""; 
     307        foreach ($masterData as $key => $val) { 
     308            $data .= "define('" . $key . "', " . $val . ");\n"; 
     309        } 
     310        return $data; 
    277311    } 
    278312} 
  • branches/feature-module-update/test/class/db/SC_DB_MasterData_Test.php

    r15139 r15163  
    77 
    88// {{{ requires 
     9if (!defined("CLASS_PATH")) { 
     10    //define("CLASS_PATH", "../../data/class/"); 
     11} 
    912require_once(CLASS_PATH . "db_extends/SC_DB_MasterData_Ex.php"); 
    1013require_once("PHPUnit/TestCase.php"); 
     
    6568        $masterData->clearCache("mtb_pref"); 
    6669    } 
     70 
     71    /** 
     72     * SC_DB_MasterData::createCache() のテストケース. 
     73     */ 
     74    function testCreateCache() { 
     75        $masterData = new SC_DB_MasterData_Ex(); 
     76        $masterData->createCache("mtb_constants", $masterData->getMasterData("mtb_constants"), true); 
     77 
     78        $this->assertEquals(true, defined("ECCUBE_VERSION")); 
     79    } 
    6780} 
    6881?> 
Note: See TracChangeset for help on using the changeset viewer.