Index: branches/RC/core/kernel/utility/formatters/upload_formatter.php =================================================================== diff -u -r9313 -r9560 --- branches/RC/core/kernel/utility/formatters/upload_formatter.php (.../upload_formatter.php) (revision 9313) +++ branches/RC/core/kernel/utility/formatters/upload_formatter.php (.../upload_formatter.php) (revision 9560) @@ -62,9 +62,21 @@ $max_files = 1; } $fret = array(); + + // don't delete uploaded file, when it's name matches delete file name + $var_name = $object->getPrefixSpecial().'_file_pending_actions'.$this->Application->GetVar('m_wid'); + $schedule = $this->Application->RecallVar($var_name); + $schedule = $schedule ? unserialize($schedule) : Array(); + $files2delete = Array(); + foreach ($schedule as $data) { + if ($data['action'] == 'delete') { + $files2delete[] = $data['file']; + } + } + for ($i=0; $iValidateFileName($this->FullPath, $real_name); + $real_name = $this->ValidateFileName($this->FullPath, $real_name, $files2delete); $file_name = $this->FullPath.$real_name; $tmp_file = (defined('WRITEABLE') ? WRITEABLE.'/tmp/' : FULL_PATH.'/kernel/cache/').$swf_uploaded_ids[$i].'_'.$swf_uploaded_names[$i]; @@ -249,13 +261,13 @@ return sprintf($format, $value); } - function ValidateFileName($path, $name) + function ValidateFileName($path, $name, $forbidden_names = Array()) { $parts = pathinfo($name); $ext = '.'.$parts['extension']; $filename = substr($parts['basename'], 0, -strlen($ext)); $new_name = $filename.$ext; - while ( file_exists($path.'/'.$new_name) ) + while ( file_exists($path.'/'.$new_name) || in_array(rtrim($path, '/').'/'.$new_name, $forbidden_names) ) { if ( preg_match('/('.preg_quote($filename, '/').'_)([0-9]*)('.preg_quote($ext, '/').')/', $new_name, $regs) ) { $new_name = $regs[1].($regs[2]+1).$regs[3];