Changeset 22678


Ignore:
Timestamp:
2013/03/10 04:12:04 (8 years ago)
Author:
poego
Message:

#2185 SC_Helper_DBが10%くらいできたのでコミット。一部リファクタ

Location:
branches/camp/camp-2_13-tests
Files:
7 added
1 edited

Legend:

Unmodified
Added
Removed
  • branches/camp/camp-2_13-tests/data/class/helper/SC_Helper_DB.php

    r22595 r22678  
    5656     * カラムの生成も行う場合は, $col_type も必須となる. 
    5757     * 
    58      * @param string $table_name テーブル名 
     58     * @param string $$tableName テーブル名 
    5959     * @param string $column_name カラム名 
    6060     * @param string $col_type カラムのデータ型 
     
    6565     *               引数 $add == false でカラムが存在しない場合 false 
    6666     */ 
    67     function sfColumnExists($table_name, $col_name, $col_type = '', $dsn = '', $add = false) 
     67    function sfColumnExists($tableName, $colName, $colType = '', $dsn = '', $add = false) 
    6868    { 
    6969        $dbFactory = SC_DB_DBFactory_Ex::getInstance(); 
     
    7373 
    7474        // テーブルが無ければエラー 
    75         if (!in_array($table_name, $objQuery->listTables())) return false; 
     75        if (!in_array($tableName, $objQuery->listTables())) return false; 
    7676 
    7777        // 正常に接続されている場合 
    7878        if (!$objQuery->isError()) { 
    7979            // カラムリストを取得 
    80             $columns = $objQuery->listTableFields($table_name); 
    81  
    82             if (in_array($col_name, $columns)) { 
     80            $columns = $objQuery->listTableFields($tableName); 
     81 
     82            if (in_array($colName, $columns)) { 
    8383                return true; 
    8484            } 
     
    8787        // カラムを追加する 
    8888        if ($add) { 
    89             $objQuery->query("ALTER TABLE $table_name ADD $col_name $col_type "); 
    90             return true; 
     89            return $this->sfColumnAdd($tableName, $colName, $colType); 
    9190        } 
    9291        return false; 
    9392    } 
     93     
     94    function sfColumnAdd($tableName, $colName, $colType) { 
     95        $objQuery =& SC_Query_Ex::getSingletonInstance($dsn); 
     96        return $objQuery->query("ALTER TABLE $tableName ADD $colName $colType "); 
     97    } 
    9498 
    9599    /** 
    96100     * データの存在チェックを行う. 
    97101     * 
    98      * @param string $table_name テーブル名 
     102     * @param string $tableName テーブル名 
    99103     * @param string $where データを検索する WHERE 句 
    100      * @param string $dsn データソース名 
    101      * @param string $sql @deprecated データの追加を行う場合の SQL文 
    102      * @param bool $add @deprecated データの追加も行う場合 true 
     104     * @param array $arrWhereVal WHERE句のプレースホルダ値 
    103105     * @return bool データが存在する場合 true, データの追加に成功した場合 true, 
    104106     *               $add == false で, データが存在しない場合 false 
    105107     */ 
    106     function sfDataExists($table_name, $where, $arrWhereVal, $dsn = '', $sql = '', $add = false) 
     108    function sfDataExists($tableName, $where, $arrWhereVal) 
    107109    { 
    108110        $dbFactory = SC_DB_DBFactory_Ex::getInstance(); 
     
    110112 
    111113        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    112         $exists = $objQuery->exists($table_name, $where, $arrWhereVal); 
     114        $exists = $objQuery->exists($tableName, $where, $arrWhereVal); 
    113115 
    114116        // データが存在する場合 TRUE 
    115117        if ($exists) { 
    116118            return TRUE; 
    117         // $add が TRUE の場合はデータを追加する 
    118         } elseif ($add) { 
    119             return $objQuery->exec($sql); 
    120         // $add が FALSE で、データが存在しない場合 FALSE 
    121119        } else { 
    122120            return FALSE; 
     
    11601158            $getWhere = "$keyIdColumn = ?"; 
    11611159        } 
    1162         $rank = $objQuery->get('rank', $tableName, $getWhere, array($keyId)); 
     1160        $oldRank = $objQuery->get('rank', $tableName, $getWhere, array($keyId)); 
    11631161 
    11641162        $max = $objQuery->max('rank', $tableName, $where); 
    1165  
    1166         // 値の調整(逆順) 
    1167         if ($pos > $max) { 
    1168             $position = 1; 
    1169         } else if ($pos < 1) { 
    1170             $position = $max; 
    1171         } else { 
    1172             $position = $max - $pos + 1; 
    1173         } 
    1174  
    1175         //入れ替え先の順位が入れ換え元の順位より大きい場合 
    1176         if ($position > $rank) $term = 'rank - 1'; 
    1177  
    1178         //入れ替え先の順位が入れ換え元の順位より小さい場合 
    1179         if ($position < $rank) $term = 'rank + 1'; 
    1180  
    1181         // XXX 入れ替え先の順位が入れ替え元の順位と同じ場合 
    1182         if (!isset($term)) $term = 'rank'; 
    1183  
    1184         // 指定した順位の商品から移動させる商品までのrankを1つずらす 
    1185         $sqlval = array(); 
    1186         $arrRawSql = array( 
    1187             'rank' => $term, 
    1188         ); 
    1189         $str_where = 'rank BETWEEN ? AND ?'; 
    1190         if ($where != '') { 
    1191             $str_where .= " AND $where"; 
    1192         } 
    1193  
    1194         if ($position > $rank) { 
    1195             $arrWhereVal = array($rank + 1, $position); 
    1196             $objQuery->update($tableName, $sqlval, $str_where, $arrWhereVal, $arrRawSql); 
    1197         } 
    1198         if ($position < $rank) { 
    1199             $arrWhereVal = array($position, $rank - 1); 
    1200             $objQuery->update($tableName, $sqlval, $str_where, $arrWhereVal, $arrRawSql); 
     1163         
     1164        // 更新するランク値を取得 
     1165        $newRank = $this->getNewRank($pos, $max); 
     1166        // 他のItemのランクを調整する  
     1167        $ret = $this->moveOtherItemRank($newRank, $oldRank, $objQuery, $tableName, $where); 
     1168        if (!$ret) { 
     1169            // 他のランク変更がなければ処理を行わない 
     1170            return; 
    12011171        } 
    12021172 
    12031173        // 指定した順位へrankを書き換える。 
    12041174        $sqlval = array( 
    1205             'rank' => $position, 
     1175            'rank' => $newRank, 
    12061176        ); 
    12071177        $str_where = "$keyIdColumn = ?"; 
     
    12141184        $objQuery->commit(); 
    12151185    } 
     1186     
     1187    /** 
     1188     * 指定された位置の値をDB用のRANK値に変換する 
     1189     * 指定位置が1番目に移動なら、newRankは最大値 
     1190     * 指定位置が1番下へ移動なら、newRankは1 
     1191     *  
     1192     * @param int $position 指定された位置 
     1193     * @param int $maxRank 現在のランク最大値 
     1194     * @return int $newRank DBに登録するRANK値 
     1195     */  
     1196    function getNewRank($position, $maxRank) { 
     1197         
     1198        if ($position > $maxRank) { 
     1199            $newRank = 1; 
     1200        } else if ($position < 1) { 
     1201            $newRank = $maxRank; 
     1202        } else { 
     1203            $newRank = $maxRank - $position + 1; 
     1204        } 
     1205        return $newRank; 
     1206    } 
     1207 
     1208    /** 
     1209     * 指定した順位の商品から移動させる商品までのrankを1つずらす 
     1210     *  
     1211     * @param int $newRank 
     1212     * @param int $oldRank 
     1213     * @param object $objQuery 
     1214     * @param string $where 
     1215     * @return boolean  
     1216     */ 
     1217    function moveOtherItemRank($newRank, $oldRank, &$objQuery, $tableName, $addWhere) { 
     1218         
     1219        $sqlval = array(); 
     1220        $arrRawSql = array(); 
     1221        $where = 'rank BETWEEN ? AND ?'; 
     1222        if ($addWhere != '') { 
     1223            $where .= " AND $Where"; 
     1224        } 
     1225        if ($newRank > $oldRank) { 
     1226            //位置を上げる場合、他の商品の位置を1つ下げる(ランクを1下げる) 
     1227            $arrRawSql['rank'] = 'rank - 1'; 
     1228            $arrWhereVal = array($oldRank + 1, $newRank); 
     1229        } else if ($newRank < $oldRank) { 
     1230            //位置を下げる場合、他の商品の位置を1つ上げる(ランクを1上げる) 
     1231            $arrRawSql['rank'] = 'rank + 1'; 
     1232            $arrWhereVal = array($newRank, $oldRank - 1); 
     1233        } else { 
     1234            //入れ替え先の順位が入れ替え元の順位と同じ場合なにもしない 
     1235            return false; 
     1236        } 
     1237         
     1238        return $objQuery->update($tableName, $sqlval, $where, $arrWhereVal, $arrRawSql); 
     1239         
     1240    } 
     1241     
    12161242 
    12171243    /** 
Note: See TracChangeset for help on using the changeset viewer.