Repository URL to install this package:
|
Version:
1.48.1 ▾
|
<?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;
}
}