Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
novicell/customeredit / src / CustomerTextsStorage.php
Size: Mime:
<?php

namespace Drupal\customeredit;

use Drupal\Core\Database\Connection;
use Drupal\Core\Database\Query\Select;
use Drupal\Core\Database\StatementInterface;

class CustomerTextsStorage {

  protected $database;

  /**
   * CustomerTextsStorage constructor.
   * @param \Drupal\Core\Database\Connection $database
   */
  public function __construct(Connection $database) {
    $this->database = $database;
  }

  public function getFullCustomerText($machine_name, $langcode = '') {
    if (empty($langcode)) {
      //$langcode = \Drupal::languageManager()->getCurrentLanguage()->getId();
      $langcode = 'en';
    }
    /** @var Select $query */
    $query = $this->database->select('customeredit_labels', 'ctl');
    $query->innerJoin('customeredit', 'ct', 'ctl.machine_name = ct.machine_name');
    /** @var StatementInterface $result */
    $text = $query->fields('ct')->fields('ctl')
      ->condition('ctl.machine_name', $machine_name)
      ->condition('ctl.langcode', $langcode)
      ->execute()->fetchAssoc();
    $text['text'] = $this->getActualText($machine_name, [], $langcode);
    return $text;
  }

  public function getActualText($machine_name, $data = array(), $langcode = '') {
    if (empty($langcode)) {
      //$langcode = \Drupal::languageManager()->getCurrentLanguage()->getId();
      $langcode = 'en';
    }
    $translatable = ($this->database->select('customeredit')->fields('customeredit', ['translatable'])->condition('machine_name', $machine_name)->execute()->fetchField() != 0);
    if ($translatable) {
      $text = $this->database->select('customeredit_texts')->fields('customeredit_texts', ['data'])->condition('machine_name', $machine_name)->condition('langcode', $langcode)->execute()->fetchField();
      if ($text === FALSE && $langcode != \Drupal::languageManager()->getDefaultLanguage()->getId()) {
        $text = $this->database->select('customeredit_texts')->fields('customeredit_texts', ['data'])->condition('machine_name', $machine_name)->condition('langcode', \Drupal::languageManager()->getDefaultLanguage()->getId())->execute()->fetchField();
      }
      if ($text === FALSE && $langcode != 'en') {
        $text = $this->database->select('customeredit_texts')->fields('customeredit_texts', ['data'])->condition('machine_name', $machine_name)->condition('langcode', 'en')->execute()->fetchField();
      }
    } else {
      $text = $this->database->select('customeredit_texts')->fields('customeredit_texts', ['data'])->condition('machine_name', $machine_name)->condition('langcode', 'zxx')->execute()->fetchField();
      if ($text === FALSE) {
        $text = $this->database->select('customeredit_texts')->fields('customeredit_texts', ['data'])->condition('machine_name', $machine_name)->condition('langcode', 'en')->execute()->fetchField();
      }
    }
    if ($text === FALSE) {
      \Drupal::logger('customeredit')->error('Could not find customer text @machine_name', ['@machine_name' => $machine_name]);
      return '';
    } else {
      return $text;
    }
  }

  public function getText($machine_name, $data = array(), $langcode = '') {
    if (empty($langcode)) {
      //$langcode = \Drupal::languageManager()->getCurrentLanguage()->getId();
      $langcode = 'en';
    }
    $texts = &drupal_static(__FUNCTION__);
    if (!isset($texts)) {
      $texts = [];
    }
    if (!isset($texts[$machine_name])) {
      $texts[$machine_name] = $this->getActualText($machine_name, $data, $langcode);
      if (\Drupal::moduleHandler()->moduleExists('token')) {
        if (!empty($data)) {
          $value = $texts[$machine_name];
          unset($texts[$machine_name]);
          return \Drupal::token()
            ->replace($value, $data);
        } else {
          $texts[$machine_name] = \Drupal::token()
            ->replace($texts[$machine_name]);
        }
      }
    }
    return $texts[$machine_name];
  }

  /**
   * @param string $machine_name
   * @param string $key
   * @param array $data
   * @param string $langcode
   *
   * @return string
   */
  public function getTextValue($machine_name, $key, $data = array(), $langcode = '') {
    if (empty($langcode)) {
      //$langcode = \Drupal::languageManager()->getCurrentLanguage()->getId();
      $langcode = 'en';
    }
    $texts = &drupal_static(__FUNCTION__);
    if (!isset($texts)) {
      $texts = [];
    }
    if (!isset($texts[$machine_name][$key])) {
      if (!isset($texts[$machine_name])) {
        $texts[$machine_name] = array();
      }
      $text = json_decode($this->getActualText($machine_name, $data, $langcode), TRUE);
      if (\Drupal::moduleHandler()->moduleExists('token')) {
        if (!empty($data)) {
          return \Drupal::token()
            ->replace($text[$key], $data);
        }
        else {
          $texts[$machine_name][$key] = \Drupal::token()
            ->replace($text[$key]);
        }
      } else {
        $texts[$machine_name] = $text;
      }
    }
    return $texts[$machine_name][$key];
  }

  /**
   * @param string $machine_name
   * @param string $key
   * @param array $data
   * @param string $langcode
   *
   * @return \Drupal\Core\Url|bool
   */
  public function getUrlValue($machine_name, $key = 'url', $data = array(), $langcode = '') {
    if (empty($langcode)) {
      //$langcode = \Drupal::languageManager()->getCurrentLanguage()->getId();
      $langcode = 'en';
    }
    $texts = &drupal_static(__FUNCTION__);
    if (!isset($texts)) {
      $texts = [];
    }
    if (!isset($texts[$machine_name][$key])) {
      if (!isset($texts[$machine_name])) {
        $texts[$machine_name] = array();
      }
      $text = json_decode($this->getActualText($machine_name, $data, $langcode), TRUE);
      if (\Drupal::moduleHandler()->moduleExists('token')) {
        if (!empty($data)) {
          return \Drupal::token()
            ->replace($text[$key], $data);
        }
        else {
          $texts[$machine_name][$key] = \Drupal::token()
            ->replace($text[$key]);
        }
      } else {
        $texts[$machine_name] = $text;
      }
    }
    return customeredit_textToUrl($texts[$machine_name][$key]);
  }

  public function setText($machine_name, $text, $langcode = 'en') {
    $this->database->update('customeredit_texts')->fields(['data' => $text])->condition('machine_name', $machine_name)->condition('langcode', $langcode)->execute();
  }

  public function getCategory($category) {
    //$langcode = \Drupal::languageManager()->getCurrentLanguage()->getId();
    $langcode = 'en';
    $texts = [];
    /** @var Select $query */
    $query = $this->database->select('customeredit', 'ct');
    $query->innerJoin('customeredit_labels', 'ctl', 'ct.machine_name = ctl.machine_name');
    /** @var StatementInterface $result */
    $result = $query->fields('ct')->fields('ctl')
      ->condition('ctl.category', $category)
      ->condition('ctl.langcode', $langcode)
      ->execute();
    while ($text = $result->fetchAssoc()) {
      $text['text'] = $this->getActualText($text['machine_name'], [], $langcode);
      $texts[] = $text;
    }
    return $texts;
  }

  public function getCategories() {
    //$langcode = \Drupal::languageManager()->getCurrentLanguage()->getId();
    $langcode = 'en';
    /** @var StatementInterface $result */
    $result = $this->database->select('customeredit_labels')->fields('customeredit_labels', ['category'])->groupBy('category')->condition('langcode', $langcode)->orderBy('category')->execute();
    $categories = $result->fetchCol();
    return $categories;
  }

  public function getTitles() {
    //$langcode = \Drupal::languageManager()->getCurrentLanguage()->getId();
    $langcode = 'en';
    $texts = [];
    /** @var StatementInterface $result */
    $result = $this->database->select('customeredit_labels')->fields('customeredit_labels', ['machine_name','title'])->condition('langcode', $langcode)->execute();
    while ($text = $result->fetchAssoc()) {
      $texts[$text['machine_name']] = $text['title'];
    }
    return $texts;
  }
}