纏めると
public function lfSaveUploadFiles(&$objUpFile, &$objDownFile, $product_id)
{
// TODO: SC_UploadFile::moveTempFileの画像削除条件見直し要
$objImage = new SC_Image_Ex($objUpFile->temp_dir);
$arrKeyName = $objUpFile->keyname;
$arrTempFile = $objUpFile->temp_file;
$arrSaveFile = $objUpFile->save_file;
$arrImageKey = array();
foreach ($arrTempFile as $key => $temp_file) {
if ($temp_file) {
$objImage->moveTempImage($temp_file, $objUpFile->save_dir);
$arrImageKey[] = $arrKeyName[$key];
if (!empty($arrSaveFile[$key])
&& !$this->lfHasSameProductImage($product_id, $arrImageKey, $arrSaveFile[$key],$objUpFile)
&& !in_array($temp_file, $arrSaveFile)
) {
$objImage->deleteImage($arrSaveFile[$key], $objUpFile->save_dir);
}
}
}
$objDownFile->moveTempDownFile();
}
/**
* 同名画像ファイル登録の有無を確認する.
*
* 画像ファイルの削除可否判定用。
* 同名ファイルの登録がある場合には画像ファイルの削除を行わない。
* 戻り値: 同名ファイル有り(true) 同名ファイル無し(false)
*
* @param string $product_id 商品ID
* @param string $arrImageKey 対象としない画像カラム名
* @param string $image_file_name 画像ファイル名
* @return boolean
*/
public function lfHasSameProductImage($product_id, $arrImageKey, $image_file_name,&$objUpFile)
{
if (!SC_Utils_Ex::sfIsInt($product_id)) return false;
if (!$arrImageKey) return false;
if (!$image_file_name) return false;
$arrWhere = array();
$sqlval = array('0', $product_id);
foreach ($arrImageKey as $image_key) {
$arrWhere[] = "{$image_key} = ?";
$sqlval[] = $image_file_name;
}
$where = implode(' OR ', $arrWhere);
$where = "del_flg = ? AND ((product_id <> ? AND ({$where}))";
$arrKeyName = $objUpFile->keyname;
foreach ($arrKeyName as $key => $keyname) {
if (in_array($keyname, $arrImageKey)) continue;
$where .= " OR {$keyname} = ?";
$sqlval[] = $image_file_name;
}
$where .= ')';
$objQuery =& SC_Query_Ex::getSingletonInstance();
$exists = $objQuery->exists('dtb_products', $where, $sqlval);
return $exists;
}
こんな感じです。
同名画像ファイルのチェックを省くだけでも解決するかもしれないですが、念のため。