content_sync-8.x-2.x-dev/src/Content/ContentDatabaseStorage.php

src/Content/ContentDatabaseStorage.php
<?php

namespace Drupal\content_sync\Content;

use Drupal\Core\Config\DatabaseStorage as DatabaseStorage;
use Drupal\Core\Database\Database;

/**
 * Defines the Database storage.
 */
class ContentDatabaseStorage extends DatabaseStorage {

  /**
   * {@inheritdoc}
   */
  public function cs_write($name, array $data, $collection) {
    $data = $this->encode($data);
    try {
      return $this->cs_doWrite($name, $data, $collection);
    }
    catch (\Exception $e) {
      // If there was an exception, try to create the table.
      if ($this->ensureTableExists()) {
        return $this->cs_doWrite($name, $data, $collection);
      }
      // Some other failure that we can not recover from.
      throw $e;
    }
  }

  /**
   * Helper method so we can re-try a write.
   *
   * @param string $name
   *   The content name.
   * @param string $data
   *   The content data, already dumped to a string.
   * @param string $collection
   *   The content collection name, entity type + bundle.
   *
   * @return bool
   */
  protected function cs_doWrite($name, $data, $collection) {
    $options = ['return' => Database::RETURN_AFFECTED] + $this->options;
    $this->connection->delete($this->table, $options)
      ->condition('name', $name)
      ->execute();

    return (bool) $this->connection->merge($this->table, $options)
      ->keys(['collection', 'name'], [$collection, $name])
      ->fields(['data' => $data])
      ->execute();
  }

  /**
   * {@inheritdoc}
   */
  public function cs_read($name) {
    $data = FALSE;
    try {
      $raw = $this->connection->query('SELECT data FROM {' . $this->connection->escapeTable($this->table) . '} WHERE name = :name', [':name' => $name], $this->options)->fetchField();
      if ($raw !== FALSE) {
        $data = $this->decode($raw);
      }
    }
    catch (\Exception $e) {
      // If we attempt a read without actually having the database or the table
      // available, just return FALSE so the caller can handle it.
    }
    return $data;
  }

  /**
   * Implements Drupal\Core\Config\StorageInterface::delete().
   *
   * @throws PDOException
   *
   * @todo Ignore replica targets for data manipulation operations.
   */
  public function cs_delete($name) {
    $options = ['return' => Database::RETURN_AFFECTED] + $this->options;
    return (bool) $this->connection->delete($this->table, $options)
      ->condition('name', $name)
      ->execute();
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc