Ignore:
Timestamp:
2011/01/18 02:51:57 (13 years ago)
Author:
spiritofof
Message:

#846(IMAGE_RENAME = false で商品複製時に画像が消失する場合がある)対応。

  • 画像削除前に商品テーブルの同名ファイル登録有無を確認。
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php

    r19943 r19948  
    201201                $objDb->sfMaker_Count($objQuery); 
    202202                // 一時ファイルを本番ディレクトリに移動する 
    203                 $this->objUpFile->moveTempFile(); 
     203                // TODO: SC_UploadFile::moveTempFileの画像削除条件見直し要 
     204                $objImage = new SC_Image($this->objUpFile->temp_dir); 
     205                $arrKeyName = $this->objUpFile->keyname; 
     206                $arrTempFile = $this->objUpFile->temp_file; 
     207                $arrSaveFile = $this->objUpFile->save_file; 
     208                $arrImageKey = array(); 
     209                foreach ($arrTempFile as $key => $temp_file) { 
     210                    if ($temp_file) { 
     211                        $objImage->moveTempImage($temp_file, $this->objUpFile->save_dir); 
     212                        $arrImageKey[] = $arrKeyName[$key]; 
     213                        if (!empty($arrSaveFile[$key]) && !$this->lfHasSameProductImage($this->arrForm['product_id'], $arrImageKey, $arrSaveFile[$key]) && !in_array($temp_file, $arrSaveFile)) { 
     214                            $objImage->deleteImage($arrSaveFile[$key], $this->objUpFile->save_dir); 
     215                        } 
     216                    } 
     217                } 
    204218                $this->objDownFile->moveTempDownFile(); 
    205219 
     
    219233            // 画像の削除 
    220234            case 'delete_image': 
    221                 $this->objUpFile->deleteFile($_POST['image_key']); 
     235                // TODO: SC_UploadFile::deleteFileの画像削除条件見直し要 
     236                $arrTempFile = $this->objUpFile->temp_file; 
     237                $arrKeyName = $this->objUpFile->keyname; 
     238                foreach ($arrKeyName as $key => $keyname) { 
     239                    if ($keyname != $_POST['image_key']) continue; 
     240                    if (!empty($arrTempFile[$key])) { 
     241                        $temp_file = $arrTempFile[$key]; 
     242                        $arrTempFile[$key] = ''; 
     243                        if (!in_array($temp_file, $arrTempFile)) { 
     244                            $this->objUpFile->deleteFile($_POST['image_key']); 
     245                        } else { 
     246                            $this->objUpFile->temp_file[$key] = ''; 
     247                            $this->objUpFile->save_file[$key] = ''; 
     248                        } 
     249                    } else { 
     250                        $this->objUpFile->temp_file[$key] = ''; 
     251                        $this->objUpFile->save_file[$key] = ''; 
     252                    } 
     253                } 
    222254                $this->lfProductPage(); // 商品登録ページ 
    223255                break; 
     
    536568            // 削除要求のあった既存ファイルの削除 
    537569            $arrRet = $this->lfGetProduct($arrList['product_id']); 
    538             $this->objUpFile->deleteDBFile($arrRet); 
     570            // TODO: SC_UploadFile::deleteDBFileの画像削除条件見直し要 
     571            $objImage = new SC_Image($this->objUpFile->temp_dir); 
     572            $arrKeyName = $this->objUpFile->keyname; 
     573            $arrSaveFile = $this->objUpFile->save_file; 
     574            $arrImageKey = array(); 
     575            foreach ($arrKeyName as $key => $keyname) { 
     576                if ($arrRet[$keyname] && !$arrSaveFile[$key]) { 
     577                    $arrImageKey[] = $keyname; 
     578                    $has_same_image = $this->lfHasSameProductImage($arrList['product_id'], $arrImageKey, $arrRet[$keyname]); 
     579                    if (!$has_same_image) { 
     580                        $objImage->deleteImage($arrRet[$keyname], $this->objUpFile->save_dir); 
     581                    } 
     582                } 
     583            } 
    539584            $this->objDownFile->deleteDBDownFile($arrRet); 
    540585 
     
    898943        $this->objDownFile->addFile("ダウンロード販売用ファイル", 'down_file', explode(",", DOWNLOAD_EXTENSION),DOWN_SIZE, true, 0, 0); 
    899944    } 
     945 
     946    /** 
     947     * 同名画像ファイル登録の有無を確認する. 
     948     * 
     949     * 画像ファイルの削除可否判定用。 
     950     * 同名ファイルの登録がある場合には画像ファイルの削除を行わない。 
     951     * 戻り値: 同名ファイル有り(true) 同名ファイル無し(false) 
     952     * 
     953     * @param string $product_id 商品ID 
     954     * @param string $arrImageKey 対象としない画像カラム名 
     955     * @param string $image_file_name 画像ファイル名 
     956     * @return boolean 
     957     */ 
     958    function lfHasSameProductImage($product_id, $arrImageKey, $image_file_name) { 
     959        if (!SC_Utils_Ex::sfIsInt($product_id)) return false; 
     960        if (!$arrImageKey) return false; 
     961        if (!$image_file_name) return false; 
     962 
     963        $arrWhere = array(); 
     964        $sqlval = array('0', $product_id); 
     965        foreach ($arrImageKey as $image_key) { 
     966            $arrWhere[] = "{$image_key} = ?"; 
     967            $sqlval[] = $image_file_name; 
     968        } 
     969        $where = implode(" OR ", $arrWhere); 
     970        $where = "del_flg = ? AND ((product_id <> ? AND ({$where}))"; 
     971 
     972        $arrKeyName = $this->objUpFile->keyname; 
     973        foreach ($arrKeyName as $key => $keyname) { 
     974            if (in_array($keyname, $arrImageKey)) continue; 
     975            $where .= " OR {$keyname} = ?"; 
     976            $sqlval[] = $image_file_name; 
     977        } 
     978        $where .= ")"; 
     979 
     980        $objQuery = new SC_Query(); 
     981        $count = $objQuery->count('dtb_products', $where, $sqlval); 
     982        if (!$count) return false; 
     983        return true; 
     984    } 
    900985} 
    901986?> 
Note: See TracChangeset for help on using the changeset viewer.