You are here

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

Renames folder by name.

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

File

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

Class

Rename
Defines Imce Rename plugin.

Namespace

Drupal\imce_rename_plugin\Plugin\ImcePlugin

Code

public function renameFolder(ImceFM $fm, string $old_name) {
  $new_name = $this
    ->getNewName($fm);
  $folder = $fm->activeFolder;
  $uri = preg_match('/^public:\\/\\/$/', $folder
    ->getUri()) >= 1 ? $folder
    ->getUri() : $folder
    ->getUri() . '/';
  $new_uri = $uri . $new_name;
  $old_uri = $uri . $old_name;
  if (file_exists($new_uri)) {
    $this->messenger
      ->addMessage($this
      ->t('Failed to rename folder because "@old_item" already exists', [
      '@old_item' => utf8_encode($old_name),
    ]), 'error');
    return;
  }
  if (rename($old_uri, $new_uri)) {
    $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
      ->addSubfolder($new_name)
      ->addToJs();
    $folder
      ->getItem($old_name)
      ->removeFromJs();

    // Update file uri's in table file_managed.
    $sql_old_uri = $old_uri . "/";
    $sql_new_uri = $new_uri . "/";
    $query = $this->database
      ->select('file_managed', 'fm');
    $query
      ->fields('fm');
    $query
      ->condition('uri', $sql_old_uri . '%', 'LIKE');
    $file_managed = $query
      ->execute()
      ->fetchAll();
    if (!empty($file_managed)) {
      $this->database
        ->update('file_managed', [])
        ->condition('uri', $sql_old_uri . '%', 'LIKE')
        ->expression('uri', "REPLACE(uri, " . "'" . $sql_old_uri . "', '" . $sql_new_uri . "')")
        ->execute();
      $this->messenger
        ->addMessage($this
        ->t('Updated path for @items files.', [
        '@items' => count($file_managed),
      ]));
    }
  }
  else {
    $this->messenger
      ->addMessage($this
      ->t('Sorry, but something wrong when rename a folder'), 'error');
  }
}