Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactoring Loaders & Renders #3

Merged
merged 13 commits into from
Apr 17, 2017
6 changes: 6 additions & 0 deletions bamboo_twig.services.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
services:
bamboo_twig.twig.base:
private: true
class: Drupal\bamboo_twig\TwigExtension\TwigExtensionBase
calls:
- [setContainer, ['@service_container']]

# Custom Twig extensions
bamboo_twig.twig.dates:
class: Drupal\bamboo_twig\TwigExtension\Dates
Expand Down
8 changes: 0 additions & 8 deletions bamboo_twig_images/bamboo_twig_images.info.yml

This file was deleted.

6 changes: 0 additions & 6 deletions bamboo_twig_images/bamboo_twig_images.services.yml

This file was deleted.

98 changes: 0 additions & 98 deletions bamboo_twig_images/src/TwigExtension/Images.php

This file was deleted.

8 changes: 8 additions & 0 deletions bamboo_twig_loader/bamboo_twig_loader.info.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
name: Bamboo Twig - Loaders
description: 'Several "Loaders & Render" Twig extensions.'
package: Bamboo Twig
type: module
core: 8.x

dependencies:
- drupal:disrupt_tools
12 changes: 12 additions & 0 deletions bamboo_twig_loader/bamboo_twig_loader.services.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
services:
# Custom Twig extensions
bamboo_twig_loader.twig.loader:
class: Drupal\bamboo_twig_loader\TwigExtension\Loader
tags:
- { name: twig.extension }
parent: bamboo_twig.twig.base
bamboo_twig_loader.twig.render:
class: Drupal\bamboo_twig_loader\TwigExtension\Render
tags:
- { name: twig.extension }
parent: bamboo_twig.twig.base
122 changes: 122 additions & 0 deletions bamboo_twig_loader/src/TwigExtension/Loader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
<?php

namespace Drupal\bamboo_twig_loader\TwigExtension;

use Drupal\bamboo_twig\TwigExtension\TwigExtensionBase;

/**
* Provides some loaders as Twig Extensions.
*/
class Loader extends TwigExtensionBase {

/**
* {@inheritdoc}
*/
public function getFunctions() {
return [
new \Twig_SimpleFunction('bamboo_load_entity', [$this, 'loadEntity']),
new \Twig_SimpleFunction('bamboo_load_field', [$this, 'loadField']),
new \Twig_SimpleFunction('bamboo_load_currentuser', [$this, 'loadCurrentUser']),
new \Twig_SimpleFunction('bamboo_load_image', [$this, 'loadImage']),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add bamboo_load_menu ?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Create a issue for this here : #7
People will chose.

];
}

/**
* Unique identifier for this Twig extension.
*/
public function getName() {
return 'bamboo_twig_loader.twig.loader';
}

/**
* Returns an entity object.
*
* @param string $entity_type
* The entity type.
* @param mixed $id
* (optional) The ID of the entity to load.
*
* @return null|Drupal\Core\Entity\EntityInterface
* An entity object for the entity or NULL if the entity does not exist.
*/
public function loadEntity($entity_type, $id = NULL) {
$entity = $id ?
$this->getEntityTypeManager()->getStorage($entity_type)->load($id) :
$this->getCurrentRouteMatch()->getParameter($entity_type);

if (!$entity) {
return NULL;
}

return $entity;
}

/**
* Returns the field object for a single entity field.
*
* @param string $field_name
* The field name.
* @param string $entity_type
* The entity type.
* @param mixed $id
* (optional) The ID of the entity to render.
* @param string $langcode
* (optional) Language code to load translation.
*
* @return null|Drupal\Core\Field\FieldItemListInterface
* A field object for the entity or NULL if the value does not exist.
*/
public function loadField($field_name, $entity_type, $id = NULL, $langcode = NULL) {
$entity = $this->loadEntity($entity_type, $id);

if ($entity && $langcode && $entity->hasTranslation($langcode)) {
$entity = $entity->getTranslation($langcode);
}

// Ensure the entity has the requested field.
if (!$entity->hasField($field_name)) {
return NULL;
}

// Do not continue if the field is empty.
if ($entity->get($field_name)->isEmpty()) {
return NULL;
}

if (isset($entity->{$field_name})) {
return $entity->{$field_name};
}

return NULL;
}

/**
* Return the current user object.
*
* @return \Drupal\user\Entity\User|null
* The current user object or NULL when anonymous.
*/
public function loadCurrentUser() {
$currentUser = $this->getCurrentUser();

if ($currentUser->isAnonymous()) {
return NULL;
}

return $this->getUserStorage()->load($currentUser->id());
}

/**
* Load a ImageInterface object for an original image path or URI.
*
* @param string $path
* The path or URI to the original image.
*
* @return \Drupal\Core\Image\ImageInterface
* An Image object.
*/
public function loadImage($path) {
return $this->getImageFactory()->get($path);
}

}
Loading