Basically, I have installed slick module and customised code and created a patch file using "git diff" command. Slick module file path is modules/contrib/slick/
directory. Below is the code that i have written in the composser.json file.
"require": {
"drupal/slick": "^2.7",
}
----------------------------------
"patches": {
"drupal/slick": {
"Slick custom changes": "patches/slick/slick.patch"
},
But when running composer install, it just removes this slick package from "modules/contrib/slick, but does not reinstall or add the patch.
If i remove "Slick custom changes": "patches/slick/slick.patch" from composer.json and execute composer install cmd then it install slick module.
How to avoid removing this package and applying the patch?
git apply > "patches/slick/slick.patch" executes successfully and apply patches. But composer install fails to apply patch.
"cweagans/composer-patches" is already installed.
Below is the patch code
diff --git a/docroot/modules/contrib/slick/css/layout/slick.module.css b/docroot/modules/contrib/slick/css/layout/slick.module.css
index 88b0d639f..3f4b10398 100644
--- a/docroot/modules/contrib/slick/css/layout/slick.module.css
+++ b/docroot/modules/contrib/slick/css/layout/slick.module.css
@@ -17,14 +17,15 @@
.slide__caption {
left: 0;
padding: 20px;
- top: 10%;
+ top: 0%;
}
.slide--caption--center .slide__caption,
.slide--caption--center-top .slide__caption,
.slide--caption--left .slide__caption,
.slide--caption--right .slide__caption {
- width: 42%;
+ width: 50%;
+ height: 100%;
}
.slide--caption--center .slide__caption {
diff --git a/docroot/modules/contrib/slick/css/theme/slick.theme.css b/docroot/modules/contrib/slick/css/theme/slick.theme.css
index 79db65f87..0313802ba 100644
--- a/docroot/modules/contrib/slick/css/theme/slick.theme.css
+++ b/docroot/modules/contrib/slick/css/theme/slick.theme.css
@@ -116,12 +116,24 @@
.slide__title {
margin: 10px 0 5px;
line-height: 1.2;
+ font-size: 3em;
+ font-weight: 600;
+ color: #fff;
}
.slide__link {
margin: 30px auto;
}
+.slide__description{
+ font-size: 1.652rem;
+ line-height: 1.2em;
+ font-weight: 400;
+ font-family: "Open Sans",sans-serif;
+ color: #fff;
+ opacity: 1;
+}
+
/* Overrides .slick-slider to make caption text selectable. */
.slide__caption {
cursor: text;
@@ -130,7 +142,11 @@
-o-user-select: text;
-webkit-user-select: text;
user-select: text;
- width: 100%;
+ width: 50%;
+ background: #0b172e8a;;
+ margin-top: auto;
+ margin-bottom: auto;
+ margin-left: 0px;
}
/* Only display when JS is ready. */
@@ -206,13 +222,14 @@
}
.slick-arrow::before {
- color: #ff6d2c;
+ color: #eb0000;
font-size: 36px;
font-size: 2.25rem;
+ opacity: 1;
}
.slick-arrow:hover::before {
- color: #37465b;
+ color: #8c0c0c;
}
/**
@@ -249,6 +266,7 @@ img[data-lazy] {
.slide__media {
overflow: hidden;
position: relative;
+ opacity:0.75
}
/* Center the image to reduce gap at RHS with smaller image, larger container */
@@ -274,3 +292,8 @@ img[data-lazy] {
.slick--less .draggable {
cursor: default;
}
+
+.slick-dots
+{
+ bottom: -25px;
+}
diff --git a/docroot/modules/contrib/slick/templates/slick-slide.html.twig b/docroot/modules/contrib/slick/templates/slick-slide.html.twig
index 987a6c471..6e368485a 100644
--- a/docroot/modules/contrib/slick/templates/slick-slide.html.twig
+++ b/docroot/modules/contrib/slick/templates/slick-slide.html.twig
@@ -73,6 +73,22 @@
<p class="slide__description">{{ item.caption.alt }}</p>
{% endif %}
+ {% if item.caption.caption_img %}
+ <p class="slide__description" >{{ item.caption.caption_img }}</p>
+ {% endif %}
+
+ {% if item.caption.caption_p_cta_url %}
+ <a class="primaryCta__button primaryCta__button--" href={{ item.caption.caption_p_cta_url }} aria-label="button" type="button">
+ {{ item.caption.caption_p_cta }}
+ </a>
+ {% endif %}
+
+ {% if item.caption.caption_s_cta_url %}
+ <a class="secondaryCta__button secondaryCta__button--" href={{ item.caption.caption_s_cta_url }} aria-label="button" type="button">
+ {{ item.caption.caption_s_cta }}
+ </a>
+ {% endif %}
+
{% if item.caption.data %}
<div class="slide__description">{{ item.caption.data }}</div>
{% endif %}
diff --git a/docroot/modules/contrib/slick/templates/slick.theme.inc b/docroot/modules/contrib/slick/templates/slick.theme.inc
index b0bf8f512..6afe4f92c 100644
--- a/docroot/modules/contrib/slick/templates/slick.theme.inc
+++ b/docroot/modules/contrib/slick/templates/slick.theme.inc
@@ -10,6 +10,9 @@
use Drupal\blazy\Blazy;
use Drupal\slick\SlickDefault;
use Drupal\slick\Entity\Slick;
+use Drupal\image_field_caption\ImageCaptionStorage;
+use Drupal\image_field_caption\ImageCaptionItem;
+use Drupal\image_field_caption\ImageFieldCaption;
/**
* Prepares variables for slick.html.twig templates.
@@ -100,6 +103,7 @@ function template_preprocess_slick(&$variables) {
// Process individual item.
$variables['items'] = [];
+ $i=0;
foreach ($element['#items'] as $delta => $item) {
$item_settings = array_merge($settings, (array) ($item['settings'] ?? []));
$item_attrs = (array) ($item['attributes'] ?? []);
@@ -116,9 +120,15 @@ function template_preprocess_slick(&$variables) {
'#settings' => $item_settings,
'#attributes' => $item_attrs,
'#content_attributes' => $content_attrs,
+ '#caption_img' => $variables['element']['#items'][$i]['item']->caption,
+ '#caption_p_cta' => $variables['element']['#items'][$i]['item']->primary_cta,
+ '#caption_p_cta_url' => $variables['element']['#items'][$i]['item']->primary_cta_url,
+ '#caption_s_cta' => $variables['element']['#items'][$i]['item']->secondary_cta,
+ '#caption_s_cta_url' => $variables['element']['#items'][$i]['item']->secondary_cta_url,
];
$variables['items'][$delta] = $slide;
unset($slide);
+ $i++;
}
}
@@ -136,7 +146,7 @@ function template_preprocess_slick_wrapper(&$variables) {
*/
function _slick_preprocess_slick_item(&$variables) {
$element = $variables['element'];
- foreach (['attributes', 'content_attributes', 'delta', 'item', 'settings'] as $key) {
+ foreach (['attributes', 'content_attributes', 'delta', 'item', 'settings', 'caption_img', 'caption_p_cta', 'caption_p_cta_url', 'caption_s_cta', 'caption_s_cta_url'] as $key) {
$default = $key == 'delta' ? NULL : [];
$variables[$key] = $element["#$key"] ?? $default;
}
@@ -168,8 +178,20 @@ function template_preprocess_slick_slide(&$variables) {
_slick_preprocess_slick_item($variables);
// All slide types -- main, thumbnail, grid, overlay -- may have captions.
- foreach (['alt', 'data', 'link', 'overlay', 'title'] as $key) {
- $variables['item']['caption'][$key] = $variables['item']['caption'][$key] ?? [];
+ foreach (['alt', 'data', 'link', 'overlay', 'title', 'caption_img', 'caption_p_cta', 'caption_p_cta_url', 'caption_s_cta', 'caption_s_cta_url'] as $key) {
+ if($key =='caption_img'){
+ $variables['item']['caption'][$key] = $variables['caption_img'] ?? [];
+ } else if ($key == 'caption_p_cta') {
+ $variables['item']['caption'][$key] = $variables['caption_p_cta'] ?? [];
+ } else if ($key == 'caption_p_cta_url') {
+ $variables['item']['caption'][$key] = $variables['caption_p_cta_url'] ?? [];
+ } else if ($key == 'caption_s_cta') {
+ $variables['item']['caption'][$key] = $variables['caption_s_cta'] ?? [];
+ } else if ($key == 'caption_s_cta_url') {
+ $variables['item']['caption'][$key] = $variables['caption_s_cta_url'] ?? [];
+ } else {
+ $variables['item']['caption'][$key] = $variables['item']['caption'][$key] ?? [];
+ }
}
$item = &$variables['item'];
@@ -183,7 +205,7 @@ function template_preprocess_slick_slide(&$variables) {
$item['slide'] = $item['slide'] ?? [];
$item['caption'] = array_filter($item['caption']);
$sets['split'] = !empty($item) && (!empty($sets['caption']) || !empty($sets['title']));
- $sets['data'] = !empty($item['caption']['alt']) || !empty($item['caption']['title']) || !empty($item['caption']['data']);
+ $sets['data'] = !empty($item['caption']['alt']) || !empty($item['caption']['title']) || !empty($item['caption']['data']) || !empty($item['caption']['image_field_caption']);
$sets['fullwidth'] = !empty($sets['skin']) && strpos($sets['skin'], 'full') !== FALSE;
$sets['grid'] = empty($sets['grid']) ? FALSE : $sets['grid'];
$sets['detroy'] = $sets['current_item'] == 'main' && !empty($sets['grid']) && !empty($sets['unslick']);
composer.json code
{
"name": "******",
"description": "*******",
"license": "proprietary",
"authors": [
{
"name": "**********",
"email": "********"
}
],
"type": "project",
"minimum-stability": "dev",
"prefer-stable": true,
"require-dev": {
"behat/behat": "3.6.1",
"behat/mink-extension": "^2.3",
"behat/mink-goutte-driver": "^1.2",
"composer/composer": "^2",
"consolidation/config": "1.2.1",
"deployer/dist": "^6.8",
"deployer/recipes": "^6.2",
"dmore/behat-chrome-extension": "^1.3",
"dmore/chrome-mink-driver": "2.7.0",
"drupal/coder": "8.3.8",
"drupal/drupal-extension": "^4.1",
"drush/drush": "^10.6",
"kint-php/kint": "^3.3",
"mglaman/drupal-check": "^1.2",
"mikey179/vfsstream": "1.6.8",
"mouf/nodejs-installer": "1.0.14",
"phpunit/phpunit": "^9.5",
"symfony/css-selector": "^3.0",
"symfony/phpunit-bridge": "^5.2",
"widgetsburritos/drupal-patch-checker": "^2.0"
},
"require": {
"algolia/places": "1.19.0",
"choices/choices": "9.0.1",
"ckeditor/autogrow": "4.16.2",
"ckeditor/codemirror": "v1.17.12",
"ckeditor/fakeobjects": "4.16.2",
"ckeditor/image": "4.16.2",
"ckeditor/link": "4.16.2",
"codemirror/codemirror": "5.57.0",
"composer/installers": "^1.9",
"cweagans/composer-patches": "1.x-dev#4f3414441522dfeecff697f061ce27412a2b677b",
"drupal/advban": "^1.3",
"drupal/akamai": "^4.0",
"drupal/auditfiles": "^3.0",
"drupal/autoban": "^1.6",
"drupal/better_exposed_filters": "^5.0",
"drupal/blazy": "^2.13",
"drupal/captcha": "^1.0",
"drupal/google_tag": "^1.3",
"drupal/image_field_caption": "^1.2",
"drupal/lazy": "^3.2",
"drupal/lb_settings_report": "1.0.x-dev",
"drupal/libraries": "3.x-dev#3b7ae61a8e68ce37638b313eaccf4febaa48e3fa",
"drupal/path_redirect_import": "^1.0",
"drupal/pathauto": "^1.8",
"drupal/slick": "^2.7",
"drupal/slick_extras": "^1.0@RC",
"drupal/slick_views": "^2.6",
"drupal/smtp": "^1.0",
"drupal/stage_file_proxy": "^1.0",
"drupal/textfield_counter": "^2.0",
"drupal/tmgmt": "^1.10",
"drupal/tmgmt_smartling": "^4.8",
"drupal/token": "1.x-dev#195fca31519225d63f5b543a4e6b039931bfc6ef",
"drupal/token_custom": "^1.0"
},
"repositories": {
"0": {
"type": "composer",
"url": "https://packages.drupal.org/8"
},
"1": {
"type": "composer",
"url": "https://asset-packagist.org"
},
"ckeditor.image": {
"_webform": true,
"type": "package",
"package": {
"name": "ckeditor/image",
"version": "4.16.2",
"type": "drupal-library",
"extra": {
"installer-name": "ckeditor.image"
},
"dist": {
"url": "https://download.ckeditor.com/image/releases/image_4.16.2.zip",
"type": "zip"
}
}
},
"jquery.inputmask": {
"_webform": true,
"type": "package",
"package": {
"name": "jquery/inputmask",
"version": "5.0.5",
"type": "drupal-library",
"extra": {
"installer-name": "jquery.inputmask"
},
"dist": {
"url": "https://github.com/RobinHerbots/jquery.inputmask/archive/5.0.5.zip",
"type": "zip"
}
}
},
"signature_pad": {
"_webform": true,
"type": "package",
"package": {
"name": "signature_pad/signature_pad",
"version": "2.3.0",
"type": "drupal-library",
"extra": {
"installer-name": "signature_pad"
},
"dist": {
"url": "https://github.com/szimek/signature_pad/archive/v2.3.0.zip",
"type": "zip"
}
}
}
},
"scripts": {
"post-install-cmd": [
"Composer\\Config::disableProcessTimeout",
"scripts/post-install.sh",
"npm ci"
],
"post-update-cmd": [
"Composer\\Config::disableProcessTimeout",
"scripts/post-install.sh",
"npm install"
],
"npm": [
"npm"
],
"check:patch": [
"WidgetsBurritos\\DrupalPatchChecker\\DrupalPatchChecker::checkComposerFile"
]
},
"config": {
"bin-dir": "bin/",
"sort-packages": true,
"platform": {
"php": "7.3"
},
"allow-plugins": {
"composer/installers": true,
"cweagans/composer-patches": true,
"drupal/core-composer-scaffold": true,
"oomphinc/composer-installers-extender": true,
"mouf/nodejs-installer": true,
"widgetsburritos/drupal-patch-checker": true
}
},
"extra": {
"composer-patches-skip-reporting": true,
"drupal-scaffold": {
"locations": {
"web-root": "docroot"
},
"file-mapping": {
"[web-root]/robots.txt": false,
"[web-root]/sites/development.services.yml": false,
"[web-root]/sites/example.settings.local.php": false,
"[web-root]/sites/example.sites.php": false,
"[web-root]/web.config": false
}
},
"drush": {
"services": {
"drush.services.yml": "^9"
}
},
"installer-types": [
"rs-library",
"npm-asset"
],
"installer-paths": {
"docroot/core": [
"type:drupal-core"
],
"docroot/libraries/{$name}": [
"type:drupal-library",
"type:npm-asset"
],
"docroot/modules/contrib/{$name}": [
"type:drupal-module"
],
"docroot/profiles/contrib/{$name}": [
"type:drupal-profile"
]
},
"mouf": {
"nodejs": {
"version": "14.10.1",
"forceLocal": true,
"includeBinInPath": true
}
},
"enable-patching": true,
"composer-exit-on-patch-failure": true,
"patches": {
"dmore/chrome-mink-driver": {
"https://github.com/acquia/blt/issues/3224": "patches/drupal-extension/chrome-mink-driver.patch"
},
"drupal/core": {
"3114365 - Vocabulary name not shown in View for Anonymous Users": "patches/core/taxonomy_vocabulary_view_permission-3114365.patch",
"3190265 - guessMimeType declaration not compatible with Symfony interface": "patches/core/3190265-2.patch",
"3114467 - 'Negate' form value for condition plugins should be cast to boolean in validation.": "patches/core/3114467-16.patch"
},
"drupal/advanced_text_formatter": {
"3072029 - Untrimmed text before normalizing can return empty spaces in the event that no html tags are allowed": "patches/advanced_text_formatter/advanced-text-formatter-3072029.patch",
"3068628 - Drupal 9 Deprecated Code Report": "patches/advanced_text_formatter/3068628-11.patch"
},
"drupal/entity_embed": {
"3069448 - Array to string conversion for Media Image": "patches/entity_embed/entity-embed-array-to-string--3069448-19.patch"
},
"drupal/yoast_seo": {
"3119603 - Drupal 9 readiness": "patches/yoast_seo/3119603-14.patch"
},
"drush/drush": {
"3572 - `drush cex` doesn't remove `language` directory when it should": "patches/drush/drush-ops_drush-3572.patch"
},
"drupal/slick": {
"MTE-8015 - Slick slider changes 1": "patches/slick/slick.patch"
}
}
},
"version": "9.2.43"
}
How to apply patch for .install file?
Here is the patch code for .install file
diff --git a/image_field_caption/image_field_caption.install b/image_field_caption/image_field_caption.install
index b339c7a87..25a098b4f 100644
--- a/image_field_caption/image_field_caption.install
+++ b/image_field_caption/image_field_caption.install
@@ -70,6 +70,34 @@ function image_field_caption_schema() {
'length' => 255,
'not null' => FALSE,
),
+ 'primary_cta' => array(
+ 'description' => 'The primary cta.',
+ 'type' => 'text',
+ 'length' => 25,
+ 'not null' => TRUE,
+ 'default' => 'PCTA',
+ ),
+ 'primary_cta_url' => array(
+ 'description' => 'The primary cta url.',
+ 'type' => 'text',
+ 'length' => 250,
+ 'not null' => TRUE,
+ 'default' => 'PCTA',
+ ),
+ 'secondary_cta' => array(
+ 'description' => 'The secondary cta.',
+ 'type' => 'text',
+ 'length' => 25,
+ 'not null' => TRUE,
+ 'default' => 'PCTA',
+ ),
+ 'secondary_cta_url' => array(
+ 'description' => 'The secondary cta url.',
+ 'type' => 'text',
+ 'length' => 25,
+ 'not null' => TRUE,
+ 'default' => 'PCTA',
+ ),
),
'indexes' => array(
'entity_type' => array('entity_type'),
@@ -148,6 +176,34 @@ function image_field_caption_schema() {
'length' => 255,
'not null' => FALSE,
),
+ 'primary_cta' => array(
+ 'description' => 'The primary cta.',
+ 'type' => 'text',
+ 'length' => 25,
+ 'not null' => TRUE,
+ 'default' => 'PCTA',
+ ),
+ 'primary_cta_url' => array(
+ 'description' => 'The primary cta url.',
+ 'type' => 'text',
+ 'length' => 250,
+ 'not null' => TRUE,
+ 'default' => 'PCTA',
+ ),
+ 'secondary_cta' => array(
+ 'description' => 'The secondary cta.',
+ 'type' => 'text',
+ 'length' => 25,
+ 'not null' => TRUE,
+ 'default' => 'PCTA',
+ ),
+ 'secondary_cta_url' => array(
+ 'description' => 'The secondary cta url.',
+ 'type' => 'text',
+ 'length' => 25,
+ 'not null' => TRUE,
+ 'default' => 'PCTA',
+ ),
),
'indexes' => array(
'entity_type' => array('entity_type'),
When i release code to staging it shows error "Drupal\Core\Database\DatabaseExceptionWrapper. SQLSTATE(42502):Base table or view not found: 1146 Table 'www.image_field_caption'. dosent exist: SELECT Distinct 'ifc'.'entity_type' AS 'entity_type' FROM 'image_field_caption' 'ifc'.Array() in Drupal\image_field_caption\ImageCaptionStorage->list()(line 425 of module/contrib/image_field_caption/src/ImageCaptionStorage.php)"
below is the ImageCaptionStorage.php code its shows error for function "public function list(){ ... ->execute() ...}"
<?php
/**
* @file
* Contains \Drupal\image_field_caption\ImageCaptionStorage.
*/
namespace Drupal\image_field_caption;
use Drupal\Core\Database\Connection;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Cache\Cache;
use Drupal\Core\Cache\CacheTagsInvalidator;
class ImageCaptionStorage {
protected $cacheBackend;
protected $cacheTagsInvalidator;
protected $database;
protected $tableData = 'image_field_caption';
protected $tableRevision = 'image_field_caption_revision';
public function __construct(
CacheBackendInterface $cacheBackend,
CacheTagsInvalidator $cacheTagsInvalidator,
Connection $database
) {
$this->cacheBackend = $cacheBackend;
$this->cacheTagsInvalidator = $cacheTagsInvalidator;
$this->database = $database;
}
public function isCaption($entity_type, $bundle, $field_name, $entity_id, $revision_id, $language, $delta, $primary_cta, $primary_cta_url, $secondary_cta, $secondary_cta_url) {
return (!empty(self::getCaption($entity_type, $bundle, $field_name, $entity_id, $revision_id, $language, $delta, $primary_cta, $primary_cta_url, $secondary_cta, $secondary_cta_url))) ? TRUE : FALSE;
}
public function getCaption($entity_type, $bundle, $field_name, $entity_id, $revision_id, $language, $delta, $primary_cta, $primary_cta_url, $secondary_cta, $secondary_cta_url) {
$captions = &drupal_static(__FUNCTION__);
$cacheKey = $this->getCacheKey($entity_type, $entity_id, $revision_id, $language, $field_name, $delta, $primary_cta, $primary_cta_url, $secondary_cta, $secondary_cta_url);
if (isset($captions[$cacheKey])) {
$caption = $captions[$cacheKey];
}
elseif ($cached = $this->cacheBackend->get($cacheKey)) {
$caption = $cached->data;
}
else {
// Query.
$query = $this->database->select($this->tableData, 'ifc');
$result = $query
->fields('ifc', array('caption', 'caption_format', 'primary_cta', 'primary_cta_url', 'secondary_cta', 'secondary_cta_url'))
->condition('entity_type', $entity_type, '=')
->condition('bundle', $bundle, '=')
->condition('field_name', $field_name, '=')
->condition('entity_id', $entity_id, '=')
->condition('revision_id', $revision_id, '=')
->condition('language', $language, '=')
->condition('delta', $delta, '=')
->execute()
->fetchAssoc();
// Caption array.
$caption = array();
if (!empty($result)) {
$caption = $result;
}
// Let the cache depends on the entity.
// TODO: Use getCacheTags() to get the default list.
$this->cacheBackend->set(
$cacheKey,
$caption,
Cache::PERMANENT,
[
$field_name,
'image_field_caption',
]
);
}
return $caption;
}
public function insertCaption($entity_type, $bundle, $field_name, $entity_id, $revision_id, $language, $delta, $caption, $caption_format, $primary_cta, $primary_cta_url, $secondary_cta, $secondary_cta_url) {
$query = $this->database->insert($this->tableData);
$query
->fields(array(
'entity_type' => $entity_type,
'bundle' => $bundle,
'field_name' => $field_name,
'entity_id' => $entity_id,
'revision_id' => $revision_id,
'language' => $language,
'delta' => $delta,
'caption' => $caption,
'caption_format' => $caption_format,
'primary_cta' => $primary_cta,
'primary_cta_url' => $primary_cta_url,
'secondary_cta' => $secondary_cta,
'secondary_cta_url' => $secondary_cta_url,
))
->execute();
$this->clearCache($field_name);
}
public function insertCaptionRevision($entity_type, $bundle, $field_name, $entity_id, $revision_id, $language, $delta, $caption, $caption_format, $primary_cta, $primary_cta_url, $secondary_cta, $secondary_cta_url) {
$query = $this->database->insert($this->tableRevision);
$query
->fields(array(
'entity_type' => $entity_type,
'bundle' => $bundle,
'field_name' => $field_name,
'entity_id' => $entity_id,
'revision_id' => $revision_id,
'language' => $language,
'delta' => $delta,
'caption' => $caption,
'caption_format' => $caption_format,
'primary_cta' => $primary_cta,
'primary_cta_url' => $primary_cta_url,
'secondary_cta' => $secondary_cta,
'secondary_cta_url' => $secondary_cta_url,
))
->execute();
$this->clearCache($field_name);
}
public function deleteCaption($entity_type, $bundle, $field_name, $entity_id, $language) {
$query = $this->database->delete($this->tableData);
$query
->condition('entity_type', $entity_type, '=')
->condition('bundle', $bundle, '=')
->condition('field_name', $field_name, '=')
->condition('entity_id', $entity_id, '=')
->condition('language', $language, '=')
->execute();
$this->clearCache($field_name);
// @todo Try to return the count of the affected rows.
}
public function deleteCaptionRevision($entity_type, $bundle, $field_name, $entity_id, $revision_id, $language) {
$query = $this->database->delete($this->tableRevision);
$query
->condition('entity_type', $entity_type, '=')
->condition('bundle', $bundle, '=')
->condition('field_name', $field_name, '=')
->condition('entity_id', $entity_id, '=')
->condition('revision_id', $revision_id, '=')
->condition('language', $language, '=')
->execute();
$this->clearCache($field_name);
// @todo Try to return the count of the affected rows.
}
public function deleteCaptionRevisions($entity_type, $bundle, $field_name, $entity_id, $language) {
$query = $this->database->delete($this->tableRevision);
$query
->condition('entity_type', $entity_type, '=')
->condition('bundle', $bundle, '=')
->condition('field_name', $field_name, '=')
->condition('entity_id', $entity_id, '=')
->condition('language', $language, '=')
->execute();
$this->clearCache($field_name);
// @todo Try to return the count of the affected rows.
}
public function deleteCaptionRevisionsByRevisionId($revision_id) {
$query = $this->database->delete($this->tableRevision);
$query
->condition('revision_id', $revision_id, '=')
->execute();
}
public function clearCache($field_name) {
$this->cacheTagsInvalidator->invalidateTags([
$field_name,
'image_field_caption',
]);
}
public function getCacheKey($entity_type, $entity_id, $revision_id, $language, $field_name, $delta, $primary_cta, $primary_cta_url, $secondary_cta, $secondary_cta_url) {
return implode(
":",
[
'caption',
$entity_type,
$entity_id,
$revision_id,
$language,
$field_name,
$delta,
$primary_cta,
$primary_cta_url,
$secondary_cta,
$secondary_cta_url,
]
);
}
public function list($key = 'entity_type') {
$list = &drupal_static(__FUNCTION__);
if (!isset($list[$key])) {
// Query.
$query = $this->database->select($this->tableData, 'ifc');
$result = $query
->fields('ifc', array($key))
->distinct()
->execute()
->fetchAll();
$list[$key] = [];
foreach ($result as $row) {
$list[$key][] = $row->{$key};
}
}
return $list[$key];
}
}