You are here

public function Rename::renameFile in IMCE Rename (D8/9) 8

Renames file by name.

Throws

\Drupal\Core\Entity\EntityStorageException

1 call to Rename::renameFile()
Rename::opRename in src/Plugin/ImcePlugin/Rename.php
Operation handler: rename.

File

src/Plugin/ImcePlugin/Rename.php, line 159

Class

Rename
Defines Imce Rename plugin.

Namespace

Drupal\imce_rename_plugin\Plugin\ImcePlugin

Code

public function renameFile(ImceFM $fm, string $old_name) {
  $new_name = $this
    ->getNewName($fm);
  $folder = $fm->activeFolder;
  $uri = preg_match('/^public:\\/\\/$/', $folder
    ->getUri()) >= 1 ? $folder
    ->getUri() : $folder
    ->getUri() . '/';

  // Add extension to file name.
  $new_name = $new_name . '.' . pathinfo($old_name, PATHINFO_EXTENSION);
  $new_uri = $uri . $new_name;
  $old_uri = $uri . $old_name;
  if (file_exists($new_uri)) {
    $this->messenger
      ->addMessage($this
      ->t('Failed to rename file because "@old_item" already exists', [
      '@old_item' => utf8_encode($old_name),
    ]), 'error');
    return;
  }

  // Check access to write file and try to change chmod.
  if (!is_writable($old_uri) && !chmod($old_uri, 0664)) {
    $this->messenger
      ->addMessage($this
      ->t('No permissions to write file "@old_item". Please upload the file via IMCE.', [
      '@old_item' => utf8_encode($old_name),
    ]), 'error');
    return;
  }
  $file = Imce::getFileEntity($old_uri);

  // Create entity when there is no entity for the file.
  $file = empty($file) ? Imce::createFileEntity($old_uri) : $file;
  $move = file_move($file, $new_uri, FileSystemInterface::EXISTS_ERROR);
  $move
    ->setFilename($new_name);
  $move
    ->save();

  // Validate message.
  if ($move) {
    $this->messenger
      ->addMessage($this
      ->t('Rename successful! Renamed "@old_item" to "@new_item"', [
      '@old_item' => utf8_encode($old_name),
      '@new_item' => utf8_encode($new_name),
    ]));
    $folder
      ->addFile($new_name)
      ->addToJs();
    $folder
      ->getItem($old_name)
      ->removeFromJs();
  }
  else {
    $this->messenger
      ->addMessage($this
      ->t('Failed to rename file "@old_item" to "@new_item".', [
      '@old_item' => utf8_encode($old_name),
      '@new_item' => utf8_encode($new_name),
    ]), 'error');
  }
}