예제 #1
0
 /**
  * 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;
 }