/** * @param $name * * @return string */ static function makeFileName($name, $dest) { $info = pathinfo($name); $basename = substr($info['basename'], 0, -(strlen(CRM_Utils_Array::value('extension', $info)) + (CRM_Utils_Array::value('extension', $info) == '' ? 0 : 1))); $filename = null; if (!CRM_Utils_File::isExtensionSafe(CRM_Utils_Array::value('extension', $info))) { // munge extension so it cannot have an embbeded dot in it // The maximum length of a filename for most filesystems is 255 chars. // We'll truncate at 240 to give some room for the extension. $filename = CRM_Utils_String::munge("{$basename}_" . CRM_Utils_Array::value('extension', $info), '_', 240) . ".unknown"; } else { $filename = CRM_Utils_String::munge("{$basename}", '_', 240) . "." . CRM_Utils_Array::value('extension', $info); } $newFilename = $filename; $i = 1; while (file_exists($dest . $newFilename)) { $fileinfo = pathinfo($dest . $filename); $newFilename = $fileinfo['filename'] . '(' . $i++ . ')' . '.' . $fileinfo['extension']; } return $newFilename; }