/** * Generates filename for new file according to storage's configuration. * @param string|null $originFilename name of origin file. * If `saveOriginNames` is true the storage will analyse and use this property for new filename. * Otherwise the storage will analyse and use only extension from this property. * @return string generated new filename. */ public function createNewFilename($originFilename = null) { if ($originFilename !== null) { $extension = FileSystemHelper::extension($originFilename); $extension = FileSystemHelper::normalizeFilename($extension); if (!$this->isValidExtension($extension)) { $extension = null; } if ($this->saveOriginNames) { $filename = FileSystemHelper::filename($originFilename); $filename = FileSystemHelper::normalizeFilename($filename); if (!$this->isValidFileName($filename)) { $filename = null; } } else { $filename = null; } $charset = Yii::$app->charset; if ($filename !== null) { if (mb_strlen($extension === null ? $filename : "{$filename}.{$extension}", $charset) > $this->maxLength) { $filename = null; } } if ($filename === null && $extension !== null) { if ($this->fileNamesLength + 1 + mb_strlen($extension, $charset) > $this->maxLength) { $extension = null; } } } if (!isset($filename)) { $filename = $this->generateRandomString($this->fileNamesLength); } return isset($extension) ? "{$filename}.{$extension}" : $filename; }