better endpoint fields
This commit is contained in:
parent
bee9f98667
commit
f5abdd8ed9
274
endpoints/NodesController.php
Normal file
274
endpoints/NodesController.php
Normal file
@ -0,0 +1,274 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Drupal\endpoint_get_publication\Controller;
|
||||||
|
|
||||||
|
use Drupal\Core\Controller\ControllerBase;
|
||||||
|
use Drupal\node\Entity\Node;
|
||||||
|
use Drupal\media\Plugin\media\Source;
|
||||||
|
use Drupal\media\Entity;
|
||||||
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
use Drupal\Core\Url;
|
||||||
|
use Drupal\Core\Language\LanguageInterface;
|
||||||
|
use Drupal\Core\TempStore;
|
||||||
|
|
||||||
|
class NodesController extends ControllerBase {
|
||||||
|
|
||||||
|
private const NODE_TYPE = 'publication'; // Editable
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Used for : Taxonomy reference field
|
||||||
|
* Value : single ID of field_article_category value
|
||||||
|
* Url : optional URL argument - single value
|
||||||
|
* Example : /api/en/articles/1234
|
||||||
|
*/
|
||||||
|
private const FIELD_CATEGORY = 'field_publication_category'; // Editable
|
||||||
|
|
||||||
|
/* Used for : Taxonomy reference field
|
||||||
|
* Value : multiple ID's of field_article_subcategory values
|
||||||
|
* Url : optional URL query params - accept multiple values
|
||||||
|
* Example : /api/en/articles/1234?subcategory=55,66,77
|
||||||
|
*/
|
||||||
|
private const FIELD_SUBCATEGORY = 'field_publication_subcategory'; // Editable
|
||||||
|
|
||||||
|
private const HTTP_BAD_REQUEST = 400;
|
||||||
|
private const HTTP_NOT_FOUND = 404;
|
||||||
|
private const HTTP_OK = 200;
|
||||||
|
private array $response = [];
|
||||||
|
private int $statusCode = self::HTTP_OK;
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Main
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function getNodes(Request $request, $lang, $category = 'all') {
|
||||||
|
$nodes = $this->loadNodes($request, $lang, $category);
|
||||||
|
$nodes_response = $this->buildNodes($nodes, $lang, $category);
|
||||||
|
|
||||||
|
$this->response = [
|
||||||
|
'code' => $this->statusCode,
|
||||||
|
'count' => count($nodes_response),
|
||||||
|
'nodes' => $nodes_response
|
||||||
|
];
|
||||||
|
return new JsonResponse($this->response, $this->statusCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Response List
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private function buildNodes(array $nodes, $lang): array {
|
||||||
|
$nodes_response = [];
|
||||||
|
foreach ($nodes as $node) {
|
||||||
|
/* don't show node if it hasn't translation */
|
||||||
|
if ( $node->hasTranslation($lang)) {
|
||||||
|
$node = $node->getTranslation($lang);
|
||||||
|
$published = $node->get('status')->value;
|
||||||
|
|
||||||
|
/* USER - get user name */
|
||||||
|
$uid = $node->getOwnerId();
|
||||||
|
$user = \Drupal\user\Entity\User::load($uid);
|
||||||
|
$name = $user->getDisplayName();
|
||||||
|
// AUTO_ADD_CODE_BELLOW_extractor
|
||||||
|
|
||||||
|
$manager = '';
|
||||||
|
if ($node->hasField('manager') && !$node->get('manager')->isEmpty()) {
|
||||||
|
$manager = $node->get('manager')->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
$manager = '';
|
||||||
|
if ($node->hasField('manager') && !$node->get('manager')->isEmpty()) {
|
||||||
|
$manager = $node->get('manager')->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
$manager = '';
|
||||||
|
if ($node->hasField('manager') && !$node->get('manager')->isEmpty()) {
|
||||||
|
$manager = $node->get('manager')->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
$manager = '';
|
||||||
|
if ($node->hasField('manager') && !$node->get('manager')->isEmpty()) {
|
||||||
|
$manager = $node->get('manager')->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
$manager = '';
|
||||||
|
if ($node->hasField('manager') && !$node->get('manager')->isEmpty()) {
|
||||||
|
$manager = $node->get('manager')->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
$manager = '';
|
||||||
|
if ($node->hasField('manager') && !$node->get('manager')->isEmpty()) {
|
||||||
|
$manager = $node->get('manager')->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
$manager = '';
|
||||||
|
if ($node->hasField('manager') && !$node->get('manager')->isEmpty()) {
|
||||||
|
$manager = $node->get('manager')->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
$manager = '';
|
||||||
|
if ($node->hasField('manager') && !$node->get('manager')->isEmpty()) {
|
||||||
|
$manager = $node->get('manager')->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
$body = '';
|
||||||
|
if ($node->hasField('body') && !$node->get('body')->isEmpty()) {
|
||||||
|
$body = $node->get('body')->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($published == 1) {
|
||||||
|
$nodes_response[] = [
|
||||||
|
'id' => intval($node->id()),
|
||||||
|
'title' => $node->getTitle(),
|
||||||
|
'lang' => $node->get('langcode')->value,
|
||||||
|
'alias' => $node->get('path')->alias,
|
||||||
|
'author' => $name,
|
||||||
|
// AUTO_ADD_CODE_BELLOW_response
|
||||||
|
'manager' => $manager,
|
||||||
|
'manager' => $manager,
|
||||||
|
'manager' => $manager,
|
||||||
|
'manager' => $manager,
|
||||||
|
'manager' => $manager,
|
||||||
|
'manager' => $manager,
|
||||||
|
'manager' => $manager,
|
||||||
|
'manager' => $manager,
|
||||||
|
'created' => $node->get('created')->value
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $nodes_response;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// FIELD_EXPLODE
|
||||||
|
//
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Multivalue fields
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
// private function getTerms(Node $node, string $field): array {
|
||||||
|
// $terms = $node->get($field)->referencedEntities();
|
||||||
|
// $response = [];
|
||||||
|
// foreach ($terms as $term) {
|
||||||
|
// $name = $term->getName();
|
||||||
|
// $tid = $term->id();
|
||||||
|
// $response[] = array(
|
||||||
|
// 'name' => $name,
|
||||||
|
// 'id' => $tid
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// return $response;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// private function getFiles(Node $node, string $field): array {
|
||||||
|
// $uris = [];
|
||||||
|
// foreach ($node->get($field) as $value) {
|
||||||
|
// $file = \Drupal::entityTypeManager()
|
||||||
|
// ->getStorage('file')
|
||||||
|
// ->load($value->getValue()['target_id']);
|
||||||
|
// $url = \Drupal::service('file_url_generator')
|
||||||
|
// ->generateAbsoluteString($file->getFileUri());
|
||||||
|
// $uris[] = array("url" => $url);
|
||||||
|
// }
|
||||||
|
// return $uris;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// private function getImages(Node $node, string $field): array {
|
||||||
|
// $uris = [];
|
||||||
|
// foreach ($node->get($field)->getValue() as $value) {
|
||||||
|
// $file = \Drupal::entityTypeManager()
|
||||||
|
// ->getStorage('file')
|
||||||
|
// ->load($value['target_id']);
|
||||||
|
// $url = \Drupal::service('file_url_generator')
|
||||||
|
// ->generateAbsoluteString($file->getFileUri());
|
||||||
|
// $uris[] = array("url" => $url, "alt" => $value['alt']);
|
||||||
|
// }
|
||||||
|
// return $uris;
|
||||||
|
// }
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* get response nodes
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private function loadNodes($request, $lang, $category) {
|
||||||
|
|
||||||
|
/* build the query for nodes */
|
||||||
|
$query = \Drupal::entityTypeManager()
|
||||||
|
->getStorage('node')
|
||||||
|
->getQuery()
|
||||||
|
->accessCheck(false);
|
||||||
|
|
||||||
|
/* if category exist as URL parameter, create a query condition */
|
||||||
|
if ($category != 'all'){
|
||||||
|
$query->condition(self::FIELD_CATEGORY, $category);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if subcategory exist as URL query, create the query condition */
|
||||||
|
if ($request->query->get('subcategory')){
|
||||||
|
$or_group = $query->orConditionGroup();
|
||||||
|
$terms = explode(',', $request->query->get('subcategory'));
|
||||||
|
foreach ($terms as $term) {
|
||||||
|
$or_group->condition(self::FIELD_SUBCATEGORY.'.target_id', $term);
|
||||||
|
}
|
||||||
|
$query->condition($or_group);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add pager */
|
||||||
|
$query->range($request->get('start'), $request->get('length'));
|
||||||
|
|
||||||
|
/* sort results by DESC or ASC */
|
||||||
|
if ($request->get('sort')) {
|
||||||
|
$sort = $request->get('sort');
|
||||||
|
if(strcasecmp($sort, 'desc') == 0 || strcasecmp($sort, 'asc') == 0){
|
||||||
|
$sort = $request->get('sort');
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$sort = 'DESC';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$sort = 'DESC';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* sort results by field */
|
||||||
|
if ($request->get('sortby')) {
|
||||||
|
$sortby = $request->get('sortby');
|
||||||
|
if(strcasecmp($sortby, 'title') == 0 || strcasecmp($sortby, 'created') == 0){
|
||||||
|
$sortby = $request->get('sortby');
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$sortby = 'created';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$sortby = 'title';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* execute query to get node ids */
|
||||||
|
$nodeIds = $query
|
||||||
|
->condition('type', self::NODE_TYPE)
|
||||||
|
->sort($sortby, $sort, $lang)
|
||||||
|
->execute();
|
||||||
|
|
||||||
|
/* get nodes from ids */
|
||||||
|
$nodes=\Drupal::entityTypeManager()
|
||||||
|
->getStorage('node')
|
||||||
|
->loadMultiple($nodeIds);
|
||||||
|
|
||||||
|
/* Response List */
|
||||||
|
$nodeList=[];
|
||||||
|
foreach ($nodes as $node) {
|
||||||
|
$tid = $node->id();
|
||||||
|
$nodeList[$tid] = $node->hasTranslation($lang) ? $node->getTranslation($lang) : $node;
|
||||||
|
$node->currentTranslation = $lang;
|
||||||
|
}
|
||||||
|
return $nodeList;
|
||||||
|
}
|
||||||
|
// \Drupal::logger('Bundle publication')->notice(''.$some_var);
|
||||||
|
}
|
||||||
289
endpoints/NodesController.php.bk
Normal file
289
endpoints/NodesController.php.bk
Normal file
@ -0,0 +1,289 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Drupal\endpoint_get_publication\Controller;
|
||||||
|
|
||||||
|
use Drupal\Core\Controller\ControllerBase;
|
||||||
|
use Drupal\node\Entity\Node;
|
||||||
|
use Drupal\media\Plugin\media\Source;
|
||||||
|
use Drupal\media\Entity;
|
||||||
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
use Drupal\Core\Url;
|
||||||
|
use Drupal\Core\Language\LanguageInterface;
|
||||||
|
use Drupal\Core\TempStore;
|
||||||
|
|
||||||
|
class NodesController extends ControllerBase {
|
||||||
|
|
||||||
|
private const NODE_TYPE = 'publication'; // Editable
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Used for : Taxonomy reference field
|
||||||
|
* Value : single ID of field_article_category value
|
||||||
|
* Url : optional URL argument - single value
|
||||||
|
* Example : /api/en/articles/1234
|
||||||
|
*/
|
||||||
|
private const FIELD_CATEGORY = 'field_publication_category'; // Editable
|
||||||
|
|
||||||
|
/* Used for : Taxonomy reference field
|
||||||
|
* Value : multiple ID's of field_article_subcategory values
|
||||||
|
* Url : optional URL query params - accept multiple values
|
||||||
|
* Example : /api/en/articles/1234?subcategory=55,66,77
|
||||||
|
*/
|
||||||
|
private const FIELD_SUBCATEGORY = 'field_publication_subcategory'; // Editable
|
||||||
|
|
||||||
|
private const HTTP_BAD_REQUEST = 400;
|
||||||
|
private const HTTP_NOT_FOUND = 404;
|
||||||
|
private const HTTP_OK = 200;
|
||||||
|
private array $response = [];
|
||||||
|
private int $statusCode = self::HTTP_OK;
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Main
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function getNodes(Request $request, $lang, $category = 'all') {
|
||||||
|
$nodes = $this->loadNodes($request, $lang, $category);
|
||||||
|
$nodes_response = $this->buildNodes($nodes, $lang, $category);
|
||||||
|
|
||||||
|
$this->response = [
|
||||||
|
'code' => $this->statusCode,
|
||||||
|
'count' => count($nodes_response),
|
||||||
|
'nodes' => $nodes_response
|
||||||
|
];
|
||||||
|
return new JsonResponse($this->response, $this->statusCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Response List
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private function buildNodes(array $nodes, $lang): array {
|
||||||
|
$nodes_response = [];
|
||||||
|
foreach ($nodes as $node) {
|
||||||
|
/* don't show node if it hasn't translation */
|
||||||
|
if ( $node->hasTranslation($lang)) {
|
||||||
|
$node = $node->getTranslation($lang);
|
||||||
|
$published = $node->get('status')->value;
|
||||||
|
|
||||||
|
/* USER - get user name */
|
||||||
|
$uid = $node->getOwnerId();
|
||||||
|
$user = \Drupal\user\Entity\User::load($uid);
|
||||||
|
$name = $user->getDisplayName();
|
||||||
|
//
|
||||||
|
// FIELD_EXTRACT
|
||||||
|
//
|
||||||
|
|
||||||
|
$body = '';
|
||||||
|
if ($node->hasField('body') && !$node->get('body')->isEmpty()) {
|
||||||
|
$body = $node->get('body')->value;
|
||||||
|
}
|
||||||
|
/* BODY Field - absolute urls for body inline images */
|
||||||
|
// $base_url = Url::fromRoute('<current>')->setAbsolute()->toString();
|
||||||
|
// $url_components = parse_url($base_url);
|
||||||
|
// $domain = $url_components['scheme'].'://'.$url_components['host'].':'.$url_components['port'];
|
||||||
|
// $body = str_replace(
|
||||||
|
// '/sites/default/',
|
||||||
|
// $domain.'/sites/default/',
|
||||||
|
// $node->get('body')->value
|
||||||
|
// );
|
||||||
|
|
||||||
|
/* LINK Field */
|
||||||
|
// $field_link = [];
|
||||||
|
// if ($node->hasField('field_link') && !$node->get('field_link')->isEmpty()) {
|
||||||
|
// $link_field = $node->get('field_link')->first();
|
||||||
|
// $url = $link_field->getUrl();
|
||||||
|
// $title = $link_field->getTitle();
|
||||||
|
// if ($url) {
|
||||||
|
// $field_link['url'] = $url->toString();
|
||||||
|
// }
|
||||||
|
// if ($title) {
|
||||||
|
// $field_link['title'] = $link_field->getTitle();
|
||||||
|
// } else {
|
||||||
|
// $field_link['title'] = $url->toString();;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
/* GEOLOCATION Field */
|
||||||
|
// $field_geolocation = [];
|
||||||
|
// if ($node->hasField('field_geolocation') && !$node->get('field_geolocation')->isEmpty()) {
|
||||||
|
// $geolocation_field = $node->get('field_geolocation')->first();
|
||||||
|
// $latitude = $geolocation_field->lat;
|
||||||
|
// $longitude = $geolocation_field->lng;
|
||||||
|
// if ($latitude && $longitude) {
|
||||||
|
// $field_geolocation['lat'] = $latitude;
|
||||||
|
// $field_geolocation['lng'] = $longitude;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
if ($published == 1) {
|
||||||
|
$nodes_response[] = [
|
||||||
|
'id' => intval($node->id()),
|
||||||
|
'title' => $node->getTitle(),
|
||||||
|
'lang' => $node->get('langcode')->value,
|
||||||
|
'alias' => $node->get('path')->alias,
|
||||||
|
'author' => $name,
|
||||||
|
//
|
||||||
|
// FIELD_RESPONSE
|
||||||
|
//
|
||||||
|
// 'field_geolocation' => $field_geolocation,
|
||||||
|
// 'field_link' => $field_link,
|
||||||
|
'body' => $body,
|
||||||
|
// 'file' => $this->getFiles($node, 'field_file'),
|
||||||
|
// 'image' => $this->getImages($node, 'field_image'),
|
||||||
|
// 'category_id' => (
|
||||||
|
// $node
|
||||||
|
// ->get(self::FIELD_CATEGORY)
|
||||||
|
// ->entity)?\Drupal::service('entity.repository')
|
||||||
|
// ->getTranslationFromContext(
|
||||||
|
// $node->get(self::FIELD_CATEGORY)->entity,
|
||||||
|
// $node->currentTranslation
|
||||||
|
// )->id():'',
|
||||||
|
// 'category_label' => (
|
||||||
|
// $node
|
||||||
|
// ->get(self::FIELD_CATEGORY)
|
||||||
|
// ->entity)?\Drupal::service('entity.repository')
|
||||||
|
// ->getTranslationFromContext(
|
||||||
|
// $node->get(self::FIELD_CATEGORY)->entity,
|
||||||
|
// $node->currentTranslation
|
||||||
|
// )->getName():'',
|
||||||
|
// 'subcategory' => $this->getTerms($node, self::FIELD_SUBCATEGORY)
|
||||||
|
'created' => $node->get('created')->value
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $nodes_response;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// FIELD_EXPLODE
|
||||||
|
//
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Multivalue fields
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
// private function getTerms(Node $node, string $field): array {
|
||||||
|
// $terms = $node->get($field)->referencedEntities();
|
||||||
|
// $response = [];
|
||||||
|
// foreach ($terms as $term) {
|
||||||
|
// $name = $term->getName();
|
||||||
|
// $tid = $term->id();
|
||||||
|
// $response[] = array(
|
||||||
|
// 'name' => $name,
|
||||||
|
// 'id' => $tid
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// return $response;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// private function getFiles(Node $node, string $field): array {
|
||||||
|
// $uris = [];
|
||||||
|
// foreach ($node->get($field) as $value) {
|
||||||
|
// $file = \Drupal::entityTypeManager()
|
||||||
|
// ->getStorage('file')
|
||||||
|
// ->load($value->getValue()['target_id']);
|
||||||
|
// $url = \Drupal::service('file_url_generator')
|
||||||
|
// ->generateAbsoluteString($file->getFileUri());
|
||||||
|
// $uris[] = array("url" => $url);
|
||||||
|
// }
|
||||||
|
// return $uris;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// private function getImages(Node $node, string $field): array {
|
||||||
|
// $uris = [];
|
||||||
|
// foreach ($node->get($field)->getValue() as $value) {
|
||||||
|
// $file = \Drupal::entityTypeManager()
|
||||||
|
// ->getStorage('file')
|
||||||
|
// ->load($value['target_id']);
|
||||||
|
// $url = \Drupal::service('file_url_generator')
|
||||||
|
// ->generateAbsoluteString($file->getFileUri());
|
||||||
|
// $uris[] = array("url" => $url, "alt" => $value['alt']);
|
||||||
|
// }
|
||||||
|
// return $uris;
|
||||||
|
// }
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* get response nodes
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private function loadNodes($request, $lang, $category) {
|
||||||
|
|
||||||
|
/* build the query for nodes */
|
||||||
|
$query = \Drupal::entityTypeManager()
|
||||||
|
->getStorage('node')
|
||||||
|
->getQuery()
|
||||||
|
->accessCheck(false);
|
||||||
|
|
||||||
|
/* if category exist as URL parameter, create a query condition */
|
||||||
|
if ($category != 'all'){
|
||||||
|
$query->condition(self::FIELD_CATEGORY, $category);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if subcategory exist as URL query, create the query condition */
|
||||||
|
if ($request->query->get('subcategory')){
|
||||||
|
$or_group = $query->orConditionGroup();
|
||||||
|
$terms = explode(',', $request->query->get('subcategory'));
|
||||||
|
foreach ($terms as $term) {
|
||||||
|
$or_group->condition(self::FIELD_SUBCATEGORY.'.target_id', $term);
|
||||||
|
}
|
||||||
|
$query->condition($or_group);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add pager */
|
||||||
|
$query->range($request->get('start'), $request->get('length'));
|
||||||
|
|
||||||
|
/* sort results by DESC or ASC */
|
||||||
|
if ($request->get('sort')) {
|
||||||
|
$sort = $request->get('sort');
|
||||||
|
if(strcasecmp($sort, 'desc') == 0 || strcasecmp($sort, 'asc') == 0){
|
||||||
|
$sort = $request->get('sort');
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$sort = 'DESC';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$sort = 'DESC';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* sort results by field */
|
||||||
|
if ($request->get('sortby')) {
|
||||||
|
$sortby = $request->get('sortby');
|
||||||
|
if(strcasecmp($sortby, 'title') == 0 || strcasecmp($sortby, 'created') == 0){
|
||||||
|
$sortby = $request->get('sortby');
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$sortby = 'created';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$sortby = 'title';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* execute query to get node ids */
|
||||||
|
$nodeIds = $query
|
||||||
|
->condition('type', self::NODE_TYPE)
|
||||||
|
->sort($sortby, $sort, $lang)
|
||||||
|
->execute();
|
||||||
|
|
||||||
|
/* get nodes from ids */
|
||||||
|
$nodes=\Drupal::entityTypeManager()
|
||||||
|
->getStorage('node')
|
||||||
|
->loadMultiple($nodeIds);
|
||||||
|
|
||||||
|
/* Response List */
|
||||||
|
$nodeList=[];
|
||||||
|
foreach ($nodes as $node) {
|
||||||
|
$tid = $node->id();
|
||||||
|
$nodeList[$tid] = $node->hasTranslation($lang) ? $node->getTranslation($lang) : $node;
|
||||||
|
$node->currentTranslation = $lang;
|
||||||
|
}
|
||||||
|
return $nodeList;
|
||||||
|
}
|
||||||
|
// \Drupal::logger('Bundle publication')->notice(''.$some_var);
|
||||||
|
}
|
||||||
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# example:
|
# example:
|
||||||
#
|
#
|
||||||
# add-fields.sh klimatologia4/web/modules/custom/src/Nodes.php manager string
|
# add-fields.sh klimatologia4/web/modules/custom/src/Nodes.php string manager
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
|
||||||
@ -14,54 +14,65 @@ B="\e[0;34m"
|
|||||||
W="\e[0;97m"
|
W="\e[0;97m"
|
||||||
E="\e[00m"
|
E="\e[00m"
|
||||||
|
|
||||||
# Check parameters
|
# Check for 3 parameters
|
||||||
[ $# -ne 3 ] && echo 'Parameter missing' && exit
|
[ $# -ne 3 ] && echo 'Parameter missing' && exit
|
||||||
|
|
||||||
# Check Target file
|
# Check Target file
|
||||||
PHP="${1}"
|
DST_FILE="${1}"
|
||||||
[ ! -f ${PHP} ] && echo 'File ${PHP} does not exist' && exit
|
[ ! -f ${DSTS_FILE} ] && echo 'File ${DSTS_FILE} does not exist' && exit
|
||||||
|
|
||||||
# Field name
|
# Field name
|
||||||
NAME="${2}"
|
NAME="${3}"
|
||||||
|
|
||||||
# Field source files
|
# Field source files
|
||||||
TYPE="${3}"
|
TYPE="${2}"
|
||||||
FIELD_DIR="/root/dev/endpoints/endpoint_get_fields/"
|
FIELD_DIR="/root/dev/endpoints/endpoint_get_fields/"
|
||||||
ls -1 $FIELD_DIR | grep -E "${TYPE}_(extractor|response|splitter)" > /dev/null
|
ls -1 $FIELD_DIR | grep -E "${TYPE}-(extractor|response|splitter)" > /dev/null
|
||||||
[ "$?" -ne 0 ] && echo -e "File for field ${R}${TYPE}${E} not found"
|
[ "$?" -ne 0 ] && echo -e "File for field ${R}${TYPE}${E} not found"
|
||||||
|
|
||||||
#
|
#
|
||||||
# Iterate source files
|
# Iterate source files
|
||||||
#
|
#
|
||||||
for FILE in `ls -1 $FIELD_DIR | grep -E "^${TYPE}_(extractor|response|splitter)"`; do
|
for SRC_FILE in `ls -1 $FIELD_DIR | grep -E "^${TYPE}-(extractor|response|splitter)"`; do
|
||||||
COMMENT=$(echo ${FILE} | awk -F_ '{print $2}')
|
COMMENT=$(echo ${SRC_FILE} | awk -F- '{print "// AUTO_ADD_CODE_BELLOW_"$2}')
|
||||||
COMMENT=$(echo ${FILE} | awk -F_ '{print $2}')
|
NEW_CODE=$(cat ${FIELD_DIR}/${SRC_FILE} | sed -e "s/FFFFF/${NAME}/g")
|
||||||
echo Adding 🍓 ${FILE} to 📦 $(basename ${PHP})
|
COMMENT_LINE=$(grep -n "$COMMENT" "$DST_FILE" | cut -d ":" -f 1)
|
||||||
|
INSERT_LINE=$((${COMMENT_LINE} + 1))
|
||||||
|
echo -e " 📦 ${W}SOURCE :${E} ${SRC_FILE}"
|
||||||
|
echo -e " 📦 ${W}DESTGINATION :${E} $(basename ${DST_FILE})"
|
||||||
|
echo -e " 🏁 ${W}AFTER COMMENT :${E} ${COMMENT}"
|
||||||
|
echo -e " 🏁 ${W}INSERT LINE :${E} ${INSERT_LINE}"
|
||||||
|
echo -e " 🧩 ${W}CODE :${E} ${NEW_CODE}"
|
||||||
|
|
||||||
|
awk -v insert="${INSERT_LINE}" -v text="${NEW_CODE}" 'NR == insert {print text} {print}' "$DST_FILE" > tmpfile && mv tmpfile "$DST_FILE"
|
||||||
|
|
||||||
|
echo
|
||||||
done
|
done
|
||||||
|
|
||||||
exit
|
exit
|
||||||
|
|
||||||
|
|
||||||
comment="// FIELDS " ${}
|
comment="// FIELDS " ${}
|
||||||
|
|
||||||
exit
|
exit
|
||||||
new_code=$(cat << 'EOF'
|
# new_code=$(cat << 'EOF'
|
||||||
<?php
|
# <?php
|
||||||
// Your new code here
|
# // Your new code here
|
||||||
$new_variable = 'New value';
|
# $new_variable = 'New value';
|
||||||
?>
|
# ?>
|
||||||
EOF
|
# EOF
|
||||||
)
|
# )
|
||||||
|
|
||||||
|
|
||||||
# Find the line number of the comment
|
# Find the line number of the comment
|
||||||
comment_line=$(grep -n "$comment" "$php_file" | cut -d ":" -f 1)
|
comment_line=$(grep -n "$comment" "$DST_FILE" | cut -d ":" -f 1)
|
||||||
|
|
||||||
if [[ -n "$comment_line" ]]; then
|
if [[ -n "$comment_line" ]]; then
|
||||||
# Calculate the line number to insert the new code
|
# Calculate the line number to insert the new code
|
||||||
insert_line=$((comment_line + 1))
|
insert_line=$((comment_line + 1))
|
||||||
|
|
||||||
# Insert the new code into the PHP file
|
# Insert the new code into the PHP file
|
||||||
awk -v insert="$insert_line" -v text="$new_code" 'NR == insert {print text} {print}' "$php_file" > tmpfile && mv tm
|
awk -v insert="$insert_line" -v text="$NEW_CODE" 'NR == insert {print text} {print}' "$DST_FILES" > tmpfile && mv tmpfile "$DST_FILE"
|
||||||
pfile "$php_file"
|
|
||||||
|
|
||||||
echo "New code added successfully!"
|
echo "New code added successfully!"
|
||||||
else
|
else
|
||||||
|
|||||||
@ -1,8 +0,0 @@
|
|||||||
name: 'AAAAA bundle'
|
|
||||||
description: 'AAAAA bundle'
|
|
||||||
package: DOTSOFT
|
|
||||||
|
|
||||||
type: module
|
|
||||||
version: 1.0
|
|
||||||
|
|
||||||
core_version_requirement: ^10
|
|
||||||
@ -1,39 +0,0 @@
|
|||||||
bundle_AAAAA.node:
|
|
||||||
path: '/api/{lang}/AAAAAs/{alias}'
|
|
||||||
defaults:
|
|
||||||
_controller: 'Drupal\bundle_AAAAA\Controller\NodeController::getNode'
|
|
||||||
methods: [GET]
|
|
||||||
requirements:
|
|
||||||
_access: 'TRUE'
|
|
||||||
options:
|
|
||||||
no_cache: 'TRUE'
|
|
||||||
|
|
||||||
bundle_AAAAA.nodes:
|
|
||||||
path: '/api/{lang}/AAAAAs'
|
|
||||||
defaults:
|
|
||||||
_controller: 'Drupal\bundle_AAAAA\Controller\NodesController::getNodes'
|
|
||||||
methods: [GET]
|
|
||||||
requirements:
|
|
||||||
_access: 'TRUE'
|
|
||||||
options:
|
|
||||||
no_cache: 'TRUE'
|
|
||||||
|
|
||||||
# bundle_AAAAA.categories:
|
|
||||||
# path: '/api/{lang}/AAAAAs/categories'
|
|
||||||
# defaults:
|
|
||||||
# _controller: 'Drupal\bundle_AAAAA\Controller\CategoryController::getCategories'
|
|
||||||
# methods: [GET]
|
|
||||||
# requirements:
|
|
||||||
# _access: 'TRUE'
|
|
||||||
# options:
|
|
||||||
# no_cache: 'TRUE'
|
|
||||||
|
|
||||||
# bundle_AAAAA.nodes_category:
|
|
||||||
# path: '/api/{lang}/AAAAAs/categories/{category}'
|
|
||||||
# defaults:
|
|
||||||
# _controller: 'Drupal\bundle_AAAAA\Controller\NodesController::getNodes'
|
|
||||||
# methods: [GET]
|
|
||||||
# requirements:
|
|
||||||
# _access: 'TRUE'
|
|
||||||
# options:
|
|
||||||
# no_cache: 'TRUE'
|
|
||||||
@ -1,65 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Drupal\bundle_article\Controller;
|
|
||||||
use Drupal\Core\Controller\ControllerBase;
|
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
|
||||||
|
|
||||||
class CategoryController extends ControllerBase {
|
|
||||||
|
|
||||||
private const VOCABULARY = 'AAAAA_category'; // Editable
|
|
||||||
|
|
||||||
private const HTTP_BAD_REQUEST = 400;
|
|
||||||
private const HTTP_OK = 200;
|
|
||||||
private array $response = [];
|
|
||||||
private int $statusCode = self::HTTP_OK;
|
|
||||||
|
|
||||||
// MAIN
|
|
||||||
|
|
||||||
public function getCategories(Request $request, $lang) {
|
|
||||||
$this->response = [
|
|
||||||
'code' => $this->statusCode,
|
|
||||||
'lang' => $lang,
|
|
||||||
'categories' => $this->buildVocabulary($lang)];
|
|
||||||
|
|
||||||
return new JsonResponse($this->response, $this->statusCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
// RESPONSE ARRAY
|
|
||||||
|
|
||||||
private function buildVocabulary($lang): array {
|
|
||||||
$terms = $this->loadTerms($lang);
|
|
||||||
$terms_response = [];
|
|
||||||
foreach ($terms as $type) {
|
|
||||||
$terms_response[] = [
|
|
||||||
'id' => $type->id(),
|
|
||||||
'name' => $type->getName()
|
|
||||||
];
|
|
||||||
}
|
|
||||||
return $terms_response;
|
|
||||||
}
|
|
||||||
|
|
||||||
// RESPONSE ARRAY VALUES
|
|
||||||
|
|
||||||
private function loadTerms($lang) {
|
|
||||||
|
|
||||||
// All terms from the vocabulary
|
|
||||||
$terms=\Drupal::entityTypeManager()
|
|
||||||
->getStorage('taxonomy_term')
|
|
||||||
->loadByProperties([
|
|
||||||
'vid' => self::VOCABULARY,
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Current language only
|
|
||||||
$termList=[];
|
|
||||||
foreach($terms as $term) {
|
|
||||||
if($term->hasTranslation($lang)){
|
|
||||||
$tid = $term->id();
|
|
||||||
$translated_term = \Drupal::service('entity.repository')->getTranslationFromContext($term, $lang);
|
|
||||||
$termList[$tid] = $translated_term;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $termList;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,163 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Drupal\bundle_article\Controller;
|
|
||||||
use Drupal\Core\Controller\ControllerBase;
|
|
||||||
use Drupal\node\Entity\Node;
|
|
||||||
use Drupal\media\Plugin\media\Source;
|
|
||||||
use Drupal\media\Entity;
|
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
|
||||||
use Drupal\Core\Url;
|
|
||||||
use Drupal\Core\Language\LanguageInterface;
|
|
||||||
use Drupal\Core\TempStore;
|
|
||||||
|
|
||||||
class NodeController extends ControllerBase {
|
|
||||||
|
|
||||||
private const FIELD_CATEGORY = 'field_AAAAA_category'; // Editable
|
|
||||||
|
|
||||||
private const HTTP_BAD_REQUEST = 400;
|
|
||||||
private const HTTP_NOT_FOUND = 404;
|
|
||||||
private const HTTP_OK = 200;
|
|
||||||
private array $response = [];
|
|
||||||
private int $statusCode = self::HTTP_OK;
|
|
||||||
|
|
||||||
// Main
|
|
||||||
|
|
||||||
public function getNode(Request $request, $lang, $alias) {
|
|
||||||
|
|
||||||
// check if alias exist in path
|
|
||||||
if (empty($alias)) {
|
|
||||||
$this->errorAliasMissing();
|
|
||||||
return new JsonResponse($this->response, $this->statusCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
// check if alias exist in drupal
|
|
||||||
$path_alias = '/'.$alias;
|
|
||||||
$path = \Drupal::service('path_alias.manager')->getPathByAlias($path_alias);
|
|
||||||
if ( $path_alias == $path) {
|
|
||||||
$this->errorNodeNotExist($alias, $path);
|
|
||||||
return new JsonResponse($this->response, $this->statusCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
// check if node has translation
|
|
||||||
$nid = Url::fromUri('internal:' . $path_alias)->getRouteParameters()['node'];
|
|
||||||
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
|
|
||||||
if (! $node->hasTranslation($lang)) {
|
|
||||||
$this->errorTranslationNotExist($lang, $alias);
|
|
||||||
return new JsonResponse($this->response, $this->statusCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
// build response
|
|
||||||
$this->buildNodeResponse($lang, $alias);
|
|
||||||
return new JsonResponse($this->response, $this->statusCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Response
|
|
||||||
|
|
||||||
private function buildNodeResponse($lang, $alias) {
|
|
||||||
$path = \Drupal::service('path_alias.manager')->getPathByAlias($alias);
|
|
||||||
$nid = Url::fromUri('internal:/' . $path)->getRouteParameters()['node'];
|
|
||||||
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid)->getTranslation($lang);
|
|
||||||
|
|
||||||
$uid = $node->getOwnerId();
|
|
||||||
$user = \Drupal\user\Entity\User::load($uid);
|
|
||||||
$name = $user->getDisplayName();
|
|
||||||
|
|
||||||
$this->response = [
|
|
||||||
'code' => $this->statusCode,
|
|
||||||
'alias' => $alias,
|
|
||||||
'path' => $path,
|
|
||||||
'nid' => $nid,
|
|
||||||
'title' => $node->get('title')->value,
|
|
||||||
'body' => $node->get('body')->value,
|
|
||||||
'lang' => $node->get('langcode')->value,
|
|
||||||
'alias' => $node->get('path')->alias,
|
|
||||||
'created' => $node->get('created')->value,
|
|
||||||
'author' => $name,
|
|
||||||
// 'files' => $this->getFiles($node, 'field_file'),
|
|
||||||
// 'images' => $this->getImages($node, 'field_image'),
|
|
||||||
// 'category' => $this->getTerms($node, self::FIELD_CATEGORY)
|
|
||||||
// // single value taxonomy field
|
|
||||||
// 'tag' => (
|
|
||||||
// $node
|
|
||||||
// ->get('field_tags')
|
|
||||||
// ->entity)?\Drupal::service('entity.repository')
|
|
||||||
// ->getTranslationFromContext(
|
|
||||||
// $node->get('field_tags')->entity,
|
|
||||||
// $node->currentTranslation
|
|
||||||
// )->getName():''
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Multiple vallue fields
|
|
||||||
|
|
||||||
// private function getTerms(Node $node, string $field): array {
|
|
||||||
// $terms = $node->get($field)->referencedEntities();
|
|
||||||
// $response = [];
|
|
||||||
// foreach ($terms as $term) {
|
|
||||||
// $name = $term->getName();
|
|
||||||
// $tid = $term->id();
|
|
||||||
// $response[] = array(
|
|
||||||
// 'name' => $name,
|
|
||||||
// 'id' => $tid
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
// return $response;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// private function getFiles(Node $node, string $field): array {
|
|
||||||
// $uris = [];
|
|
||||||
// foreach ($node->get($field) as $value) {
|
|
||||||
// $file = \Drupal::entityTypeManager()
|
|
||||||
// ->getStorage('file')
|
|
||||||
// ->load($value->getValue()['target_id']);
|
|
||||||
//
|
|
||||||
// $url = \Drupal::service('file_url_generator')
|
|
||||||
// ->generateAbsoluteString($file->getFileUri());
|
|
||||||
//
|
|
||||||
// $uris[] = array("url" => $url);
|
|
||||||
// }
|
|
||||||
// return $uris;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// private function getImages(Node $node, string $field): array {
|
|
||||||
// $uris = [];
|
|
||||||
// foreach ($node->get($field)->getValue() as $value) {
|
|
||||||
// $file = \Drupal::entityTypeManager()
|
|
||||||
// ->getStorage('file')
|
|
||||||
// ->load($value['target_id']);
|
|
||||||
// $url = \Drupal::service('file_url_generator')
|
|
||||||
// ->generateAbsoluteString($file->getFileUri());
|
|
||||||
// $uris[] = array("url" => $url, "alt" => $value['alt']);
|
|
||||||
// }
|
|
||||||
// return $uris;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Error functions
|
|
||||||
|
|
||||||
private function errorNodeNotExist($alias, $path) {
|
|
||||||
$this->statusCode = self::HTTP_NOT_FOUND;
|
|
||||||
$this->response = [
|
|
||||||
'code' => $this->statusCode,
|
|
||||||
"message" => "Node with alias " . $alias . " does not exist." . $path
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
private function errorTranslationNotExist($lang, $alias) {
|
|
||||||
$this->statusCode = self::HTTP_NOT_FOUND;
|
|
||||||
$this->response = [
|
|
||||||
'code' => $this->statusCode,
|
|
||||||
"message" => "Node with alias " . $alias . " does not have a translation for language code " . $lang
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
private function errorAliasMissing() {
|
|
||||||
$this->statusCode = self::HTTP_BAD_REQUEST;
|
|
||||||
$this->response = [
|
|
||||||
'code' => $this->statusCode,
|
|
||||||
'message' => 'Query parameter "alias" is mandatory and is missing.'
|
|
||||||
];
|
|
||||||
}
|
|
||||||
// \Drupal::logger('hello')->notice(''.$nid);
|
|
||||||
}
|
|
||||||
@ -1,238 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Drupal\bundle_article\Controller;
|
|
||||||
|
|
||||||
use Drupal\Core\Controller\ControllerBase;
|
|
||||||
use Drupal\node\Entity\Node;
|
|
||||||
use Drupal\media\Plugin\media\Source;
|
|
||||||
use Drupal\media\Entity;
|
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
|
||||||
use Drupal\Core\Url;
|
|
||||||
use Drupal\Core\Language\LanguageInterface;
|
|
||||||
use Drupal\Core\TempStore;
|
|
||||||
|
|
||||||
class NodesController extends ControllerBase {
|
|
||||||
|
|
||||||
private const NODE_TYPE = 'AAAAA'; // Editable
|
|
||||||
|
|
||||||
// Taxonomy reference field
|
|
||||||
// Used for : optional URL argument
|
|
||||||
// Value : single ID of field_article_category value
|
|
||||||
// Example : /api/en/articles/1234
|
|
||||||
private const FIELD_CATEGORY = 'field_AAAAA_category'; // Editable
|
|
||||||
|
|
||||||
// Taxonomy reference field
|
|
||||||
// Used for : optional URL query params - accept multiple values
|
|
||||||
// Value : multiple ID's of field_article_subcategory values
|
|
||||||
// Example : /api/en/articles/1234?subcategory=55,66,77
|
|
||||||
private const FIELD_SUBCATEGORY = 'field_AAAAA_subcategory'; // Editable
|
|
||||||
|
|
||||||
private const HTTP_BAD_REQUEST = 400;
|
|
||||||
private const HTTP_NOT_FOUND = 404;
|
|
||||||
private const HTTP_OK = 200;
|
|
||||||
|
|
||||||
private array $response = [];
|
|
||||||
private int $statusCode = self::HTTP_OK;
|
|
||||||
|
|
||||||
// Main
|
|
||||||
|
|
||||||
public function getNodes(Request $request, $lang, $category = 'all') {
|
|
||||||
$nodes = $this->loadNodes($request, $lang, $category);
|
|
||||||
$nodes_response = $this->buildNodes($nodes, $lang, $category);
|
|
||||||
|
|
||||||
$this->response = [
|
|
||||||
'code' => $this->statusCode,
|
|
||||||
'count' => count($nodes_response),
|
|
||||||
'nodes' => $nodes_response
|
|
||||||
];
|
|
||||||
return new JsonResponse($this->response, $this->statusCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Response List
|
|
||||||
|
|
||||||
private function buildNodes(array $nodes, $lang): array {
|
|
||||||
$nodes_response = [];
|
|
||||||
foreach ($nodes as $node) {
|
|
||||||
// don't show node if it hasn't translation
|
|
||||||
if ( $node->hasTranslation($lang)) {
|
|
||||||
$node = $node->getTranslation($lang);
|
|
||||||
$published = $node->get('status')->value;
|
|
||||||
|
|
||||||
// get user name
|
|
||||||
$uid = $node->getOwnerId();
|
|
||||||
$user = \Drupal\user\Entity\User::load($uid);
|
|
||||||
$name = $user->getDisplayName();
|
|
||||||
|
|
||||||
if ($published == 1) {
|
|
||||||
$nodes_response[] = [
|
|
||||||
'id' => $node->id(),
|
|
||||||
'title' => $node->getTitle(),
|
|
||||||
'body' => $node->get('body')->value,
|
|
||||||
'lang' => $node->get('langcode')->value,
|
|
||||||
'created' => $node->get('created')->value,
|
|
||||||
'alias' => $node->get('path')->alias,
|
|
||||||
'author' => $name,
|
|
||||||
// 'file' => $this->getFiles($node, 'field_file'),
|
|
||||||
// 'image' => $this->getImages($node, 'field_image'),
|
|
||||||
// 'category_id' => (
|
|
||||||
// $node
|
|
||||||
// ->get(self::FIELD_CATEGORY)
|
|
||||||
// ->entity)?\Drupal::service('entity.repository')
|
|
||||||
// ->getTranslationFromContext(
|
|
||||||
// $node->get(self::FIELD_CATEGORY)->entity,
|
|
||||||
// $node->currentTranslation
|
|
||||||
// )->id():'',
|
|
||||||
// 'category_label' => (
|
|
||||||
// $node
|
|
||||||
// ->get(self::FIELD_CATEGORY)
|
|
||||||
// ->entity)?\Drupal::service('entity.repository')
|
|
||||||
// ->getTranslationFromContext(
|
|
||||||
// $node->get(self::FIELD_CATEGORY)->entity,
|
|
||||||
// $node->currentTranslation
|
|
||||||
// )->getName():'',
|
|
||||||
// 'subcategory_id' => (
|
|
||||||
// $node
|
|
||||||
// ->get(self::FIELD_SUBCATEGORY)
|
|
||||||
// ->entity)?\Drupal::service('entity.repository')
|
|
||||||
// ->getTranslationFromContext(
|
|
||||||
// $node->get(self::FIELD_SUBCATEGORY)->entity,
|
|
||||||
// $node->currentTranslation
|
|
||||||
// )->id():'',
|
|
||||||
// 'subcategory_label' => (
|
|
||||||
// $node
|
|
||||||
// ->get(self::FIELD_SUBCATEGORY)
|
|
||||||
// ->entity)?\Drupal::service('entity.repository')
|
|
||||||
// ->getTranslationFromContext(
|
|
||||||
// $node->get(self::FIELD_SUBCATEGORY)->entity,
|
|
||||||
// $node->currentTranslation
|
|
||||||
// )->getName():'',
|
|
||||||
// 'terms' => $this->getTerms($node, 'field_tags')
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $nodes_response;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Multivalue fields
|
|
||||||
|
|
||||||
private function getTerms(Node $node, string $field): array {
|
|
||||||
$terms = $node->get($field)->referencedEntities();
|
|
||||||
$response = [];
|
|
||||||
foreach ($terms as $term) {
|
|
||||||
$name = $term->getName();
|
|
||||||
$tid = $term->id();
|
|
||||||
$response[] = array(
|
|
||||||
'name' => $name,
|
|
||||||
'id' => $tid
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return $response;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getFiles(Node $node, string $field): array {
|
|
||||||
$uris = [];
|
|
||||||
foreach ($node->get($field) as $value) {
|
|
||||||
$file = \Drupal::entityTypeManager()
|
|
||||||
->getStorage('file')
|
|
||||||
->load($value->getValue()['target_id']);
|
|
||||||
$url = \Drupal::service('file_url_generator')
|
|
||||||
->generateAbsoluteString($file->getFileUri());
|
|
||||||
$uris[] = array("url" => $url);
|
|
||||||
}
|
|
||||||
return $uris;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getImages(Node $node, string $field): array {
|
|
||||||
$uris = [];
|
|
||||||
foreach ($node->get($field)->getValue() as $value) {
|
|
||||||
$file = \Drupal::entityTypeManager()
|
|
||||||
->getStorage('file')
|
|
||||||
->load($value['target_id']);
|
|
||||||
$url = \Drupal::service('file_url_generator')
|
|
||||||
->generateAbsoluteString($file->getFileUri());
|
|
||||||
$uris[] = array("url" => $url, "alt" => $value['alt']);
|
|
||||||
}
|
|
||||||
return $uris;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// get response data
|
|
||||||
|
|
||||||
private function loadNodes($request, $lang, $category) {
|
|
||||||
|
|
||||||
// build query for nodes
|
|
||||||
$query = \Drupal::entityTypeManager()
|
|
||||||
->getStorage('node')
|
|
||||||
->getQuery()
|
|
||||||
->accessCheck(false);
|
|
||||||
|
|
||||||
// category is a URL parameter, matched with a taxonomy field
|
|
||||||
if ($category != 'all'){
|
|
||||||
$query->condition(self::FIELD_CATEGORY, $category);
|
|
||||||
}
|
|
||||||
|
|
||||||
// add subcategory URL query filter, matched with a taxonomy field
|
|
||||||
if ($request->query->get('subcategory')){
|
|
||||||
$or_group = $query->orConditionGroup();
|
|
||||||
$terms = explode(',', $request->query->get('subcategory'));
|
|
||||||
foreach ($terms as $term) {
|
|
||||||
$or_group->condition(self::FIELD_SUBCATEGORY.'.target_id', $term);
|
|
||||||
}
|
|
||||||
$query->condition($or_group);
|
|
||||||
}
|
|
||||||
// add pager
|
|
||||||
$query->range($request->get('start'), $request->get('length'));
|
|
||||||
|
|
||||||
// sort results by DESC or ASC
|
|
||||||
if ($request->get('sort')) {
|
|
||||||
$sort = $request->get('sort');
|
|
||||||
if(strcasecmp($sort, 'desc') == 0 || strcasecmp($sort, 'asc') == 0){
|
|
||||||
$sort = $request->get('sort');
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$sort = 'DESC';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$sort = 'DESC';
|
|
||||||
}
|
|
||||||
|
|
||||||
// sort results by field
|
|
||||||
if ($request->get('sortby')) {
|
|
||||||
$sortby = $request->get('sortby');
|
|
||||||
if(strcasecmp($sortby, 'title') == 0 || strcasecmp($sortby, 'created') == 0){
|
|
||||||
$sortby = $request->get('sortby');
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$sortby = 'created';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$sortby = 'created';
|
|
||||||
}
|
|
||||||
|
|
||||||
// execute query to get node ids
|
|
||||||
$nodeIds = $query
|
|
||||||
->condition('type', self::NODE_TYPE)
|
|
||||||
->sort($sortby, $sort, $lang)
|
|
||||||
->execute();
|
|
||||||
|
|
||||||
// get nodes from ids
|
|
||||||
$nodes=\Drupal::entityTypeManager()
|
|
||||||
->getStorage('node')
|
|
||||||
->loadMultiple($nodeIds);
|
|
||||||
|
|
||||||
// Response List
|
|
||||||
$nodeList=[];
|
|
||||||
foreach ($nodes as $node) {
|
|
||||||
$tid = $node->id();
|
|
||||||
$nodeList[$tid] = $node->hasTranslation($lang) ? $node->getTranslation($lang) : $node;
|
|
||||||
$node->currentTranslation = $lang;
|
|
||||||
}
|
|
||||||
return $nodeList;
|
|
||||||
|
|
||||||
}
|
|
||||||
// \Drupal::logger('Bundle AAAAA')->notice(''.$some_var);
|
|
||||||
}
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
name: 'Builders test'
|
|
||||||
description: 'Builders test'
|
|
||||||
package: Testing
|
|
||||||
|
|
||||||
type: module
|
|
||||||
version: 1.0
|
|
||||||
@ -1,101 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Drupal\builders_test;
|
|
||||||
|
|
||||||
use Drupal\node\Entity\Node;
|
|
||||||
|
|
||||||
class ArticleBuilder {
|
|
||||||
|
|
||||||
private Node $node;
|
|
||||||
private int $typeId = 1;
|
|
||||||
private string $title = 'Title';
|
|
||||||
private string $description = 'Description';
|
|
||||||
private int $thumbnail = 1;
|
|
||||||
private int $authorId = 1;
|
|
||||||
private int $created = 1234567890;
|
|
||||||
private string $languageCode = 'en';
|
|
||||||
private string $summary;
|
|
||||||
private array $photos;
|
|
||||||
private array $videos;
|
|
||||||
private array $files;
|
|
||||||
private array $sources;
|
|
||||||
private array $links;
|
|
||||||
private string $facebookPage;
|
|
||||||
|
|
||||||
public function __construct() {
|
|
||||||
$this->node = Node::create([
|
|
||||||
'type' => 'article',
|
|
||||||
'langcode' => $this->languageCode,
|
|
||||||
'title' => $this->title,
|
|
||||||
'field_article_type' => $this->typeId,
|
|
||||||
'field_article_description' => $this->description,
|
|
||||||
'field_thumbnail' => $this->thumbnail,
|
|
||||||
'uid' => $this->authorId,
|
|
||||||
'created' => $this->created
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function create(): ArticleBuilder {
|
|
||||||
return new ArticleBuilder();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function withLanguageCode(string $languageCode): ArticleBuilder {
|
|
||||||
$this->languageCode = $languageCode;
|
|
||||||
$this->node->set('langcode', $this->languageCode);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function withType(int $typeId): ArticleBuilder {
|
|
||||||
$this->typeId = $typeId;
|
|
||||||
$this->node->set('field_article_type', $this->typeId);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function withSummary(string $summary): ArticleBuilder {
|
|
||||||
$this->summary = $summary;
|
|
||||||
$this->node->set('field_summary', $this->summary);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function withPhotos(array $photos): ArticleBuilder {
|
|
||||||
$this->photos = $photos;
|
|
||||||
$this->node->set('field_article_photos', $this->photos);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function withVideos(array $videos): ArticleBuilder {
|
|
||||||
$this->videos = $videos;
|
|
||||||
$this->node->set('field_article_videos', $this->videos);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function withFiles(array $files): ArticleBuilder {
|
|
||||||
$this->files = $files;
|
|
||||||
$this->node->set('field_article_files', $this->files);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function withSources(array $sources): ArticleBuilder {
|
|
||||||
$this->sources = $sources;
|
|
||||||
$this->node->set('field_source', $this->sources);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function withLinks(array $links): ArticleBuilder {
|
|
||||||
$this->links = $links;
|
|
||||||
$this->node->set('field_url', $this->links);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function withFacebookPage(string $facebookPage): ArticleBuilder {
|
|
||||||
$this->facebookPage = $facebookPage;
|
|
||||||
$this->node->set('field_facebook_page', $this->facebookPage);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function build(): Node {
|
|
||||||
$this->node->save();
|
|
||||||
return $this->node;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,36 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Drupal\builders_test;
|
|
||||||
|
|
||||||
use Drupal\taxonomy\Entity\Term;
|
|
||||||
|
|
||||||
class ArticleTypeBuilder {
|
|
||||||
|
|
||||||
private Term $term;
|
|
||||||
private string $languageCode = 'en';
|
|
||||||
private string $name = 'Type';
|
|
||||||
|
|
||||||
public function __construct() {
|
|
||||||
$this->term = Term::create([
|
|
||||||
'vid' => 'article_types',
|
|
||||||
'langcode' => $this->languageCode,
|
|
||||||
'name' => $this->name
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function create(): ArticleTypeBuilder {
|
|
||||||
return new ArticleTypeBuilder();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function withLanguageCode(string $languageCode): ArticleTypeBuilder {
|
|
||||||
$this->languageCode = $languageCode;
|
|
||||||
$this->term->set('langcode', $this->languageCode);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function build(): Term {
|
|
||||||
$this->term->save();
|
|
||||||
return $this->term;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,34 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Drupal\builders_test;
|
|
||||||
|
|
||||||
use Drupal\file\Entity\File;
|
|
||||||
|
|
||||||
class FileBuilder {
|
|
||||||
|
|
||||||
private File $file;
|
|
||||||
private string $baseUrl = 'https://example.com';
|
|
||||||
private string $fileName = 'filename.jpg';
|
|
||||||
|
|
||||||
public function __construct() {
|
|
||||||
$this->file = File::create([
|
|
||||||
'uri' => $this->baseUrl . '/' . $this->fileName
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function create(): FileBuilder {
|
|
||||||
return new FileBuilder();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function withFileName(string $fileName): FileBuilder {
|
|
||||||
$this->fileName = $fileName;
|
|
||||||
$this->file->set('uri', $this->baseUrl . '/' . $this->fileName);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function build(): File {
|
|
||||||
$this->file->save();
|
|
||||||
return $this->file;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,30 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Drupal\builders_test;
|
|
||||||
|
|
||||||
use Drupal\node\Entity\Node;
|
|
||||||
|
|
||||||
class PageBuilder {
|
|
||||||
|
|
||||||
private Node $node;
|
|
||||||
private string $title = 'Title';
|
|
||||||
private string $languageCode = 'en';
|
|
||||||
|
|
||||||
public function __construct() {
|
|
||||||
$this->node = Node::create([
|
|
||||||
'type' => 'page',
|
|
||||||
'langcode' => $this->languageCode,
|
|
||||||
'title' => $this->title
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function create(): PageBuilder {
|
|
||||||
return new PageBuilder();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function build(): Node {
|
|
||||||
$this->node->save();
|
|
||||||
return $this->node;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,30 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Drupal\builders_test;
|
|
||||||
|
|
||||||
use Drupal\user\Entity\User;
|
|
||||||
|
|
||||||
class UserBuilder {
|
|
||||||
|
|
||||||
private User $user;
|
|
||||||
private string $name = 'Name';
|
|
||||||
private string $surname = 'Surname';
|
|
||||||
|
|
||||||
public function __construct() {
|
|
||||||
$this->user = User::create([
|
|
||||||
'name' => $this->name . '@' . $this->surname . '.com',
|
|
||||||
'field_user_name' => $this->name,
|
|
||||||
'field_user_surname' => $this->surname
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function create(): UserBuilder {
|
|
||||||
return new UserBuilder();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function build(): User {
|
|
||||||
$this->user->save();
|
|
||||||
return $this->user;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
name: 'Article bundle test'
|
|
||||||
description: 'Article bundle test'
|
|
||||||
package: Testing
|
|
||||||
|
|
||||||
type: module
|
|
||||||
version: 1.0
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
config:
|
|
||||||
- field.storage.node.field_article_description
|
|
||||||
- node.type.article
|
|
||||||
module:
|
|
||||||
- text
|
|
||||||
id: node.article.field_article_description
|
|
||||||
field_name: field_article_description
|
|
||||||
entity_type: node
|
|
||||||
bundle: article
|
|
||||||
label: 'Description'
|
|
||||||
description: ''
|
|
||||||
required: true
|
|
||||||
translatable: false
|
|
||||||
default_value: { }
|
|
||||||
default_value_callback: ''
|
|
||||||
settings: { }
|
|
||||||
field_type: text_long
|
|
||||||
@ -1,26 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
config:
|
|
||||||
- field.storage.node.field_article_files
|
|
||||||
- node.type.article
|
|
||||||
module:
|
|
||||||
- file
|
|
||||||
id: node.article.field_article_files
|
|
||||||
field_name: field_article_files
|
|
||||||
entity_type: node
|
|
||||||
bundle: article
|
|
||||||
label: 'Files'
|
|
||||||
description: ''
|
|
||||||
required: false
|
|
||||||
translatable: false
|
|
||||||
default_value: { }
|
|
||||||
default_value_callback: ''
|
|
||||||
settings:
|
|
||||||
file_directory: '[date:custom:Y]-[date:custom:m]'
|
|
||||||
file_extensions: 'txt rtf doc csv docx ppt pptx xls xlsx xlsm pdf odf odg odp ods odt fodt fods fodp fodg key numbers pages asc zip ppsx svg'
|
|
||||||
max_filesize: ''
|
|
||||||
description_field: false
|
|
||||||
handler: 'default:file'
|
|
||||||
handler_settings: { }
|
|
||||||
field_type: file
|
|
||||||
@ -1,37 +0,0 @@
|
|||||||
langcode: el
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
config:
|
|
||||||
- field.storage.node.field_article_photos
|
|
||||||
- node.type.article
|
|
||||||
module:
|
|
||||||
- image
|
|
||||||
id: node.article.field_article_photos
|
|
||||||
field_name: field_article_photos
|
|
||||||
entity_type: node
|
|
||||||
bundle: article
|
|
||||||
label: 'Photos'
|
|
||||||
description: ''
|
|
||||||
required: false
|
|
||||||
translatable: false
|
|
||||||
default_value: { }
|
|
||||||
default_value_callback: ''
|
|
||||||
settings:
|
|
||||||
file_directory: '[date:custom:Y]-[date:custom:m]'
|
|
||||||
file_extensions: 'png gif jpg jpeg'
|
|
||||||
max_filesize: ''
|
|
||||||
max_resolution: ''
|
|
||||||
min_resolution: ''
|
|
||||||
alt_field: true
|
|
||||||
alt_field_required: true
|
|
||||||
title_field: true
|
|
||||||
title_field_required: false
|
|
||||||
default_image:
|
|
||||||
uuid: ''
|
|
||||||
alt: ''
|
|
||||||
title: ''
|
|
||||||
width: null
|
|
||||||
height: null
|
|
||||||
handler: 'default:file'
|
|
||||||
handler_settings: { }
|
|
||||||
field_type: image
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
config:
|
|
||||||
- field.storage.node.field_article_type
|
|
||||||
- node.type.article
|
|
||||||
- taxonomy.vocabulary.article_types
|
|
||||||
id: node.article.field_article_type
|
|
||||||
field_name: field_article_type
|
|
||||||
entity_type: node
|
|
||||||
bundle: article
|
|
||||||
label: 'Article type'
|
|
||||||
description: ''
|
|
||||||
required: false
|
|
||||||
translatable: false
|
|
||||||
default_value: { }
|
|
||||||
default_value_callback: ''
|
|
||||||
settings:
|
|
||||||
handler: 'default:taxonomy_term'
|
|
||||||
handler_settings:
|
|
||||||
target_bundles:
|
|
||||||
article_types: article_types
|
|
||||||
sort:
|
|
||||||
field: name
|
|
||||||
direction: asc
|
|
||||||
auto_create: false
|
|
||||||
auto_create_bundle: ''
|
|
||||||
field_type: entity_reference
|
|
||||||
@ -1,26 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
config:
|
|
||||||
- field.storage.node.field_article_videos
|
|
||||||
- node.type.article
|
|
||||||
module:
|
|
||||||
- file
|
|
||||||
id: node.article.field_article_videos
|
|
||||||
field_name: field_article_videos
|
|
||||||
entity_type: node
|
|
||||||
bundle: article
|
|
||||||
label: 'Videos'
|
|
||||||
description: ''
|
|
||||||
required: false
|
|
||||||
translatable: false
|
|
||||||
default_value: { }
|
|
||||||
default_value_callback: ''
|
|
||||||
settings:
|
|
||||||
file_directory: '[date:custom:Y]-[date:custom:m]'
|
|
||||||
file_extensions: 'mp4 ogv'
|
|
||||||
max_filesize: ''
|
|
||||||
description_field: false
|
|
||||||
handler: 'default:file'
|
|
||||||
handler_settings: { }
|
|
||||||
field_type: file
|
|
||||||
@ -1,22 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
config:
|
|
||||||
- field.storage.node.field_facebook_page
|
|
||||||
- node.type.article
|
|
||||||
module:
|
|
||||||
- link
|
|
||||||
id: node.article.field_facebook_page
|
|
||||||
field_name: field_facebook_page
|
|
||||||
entity_type: node
|
|
||||||
bundle: article
|
|
||||||
label: 'Facebook page'
|
|
||||||
description: ''
|
|
||||||
required: false
|
|
||||||
translatable: false
|
|
||||||
default_value: { }
|
|
||||||
default_value_callback: ''
|
|
||||||
settings:
|
|
||||||
link_type: 17
|
|
||||||
title: 1
|
|
||||||
field_type: link
|
|
||||||
@ -1,22 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
config:
|
|
||||||
- field.storage.node.field_source
|
|
||||||
- node.type.article
|
|
||||||
module:
|
|
||||||
- link
|
|
||||||
id: node.article.field_source
|
|
||||||
field_name: field_source
|
|
||||||
entity_type: node
|
|
||||||
bundle: article
|
|
||||||
label: 'Sources'
|
|
||||||
description: ''
|
|
||||||
required: false
|
|
||||||
translatable: false
|
|
||||||
default_value: { }
|
|
||||||
default_value_callback: ''
|
|
||||||
settings:
|
|
||||||
link_type: 17
|
|
||||||
title: 1
|
|
||||||
field_type: link
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
config:
|
|
||||||
- field.storage.node.field_summary
|
|
||||||
- node.type.article
|
|
||||||
module:
|
|
||||||
- text
|
|
||||||
id: node.article.field_summary
|
|
||||||
field_name: field_summary
|
|
||||||
entity_type: node
|
|
||||||
bundle: article
|
|
||||||
label: 'Summary'
|
|
||||||
description: ''
|
|
||||||
required: false
|
|
||||||
translatable: false
|
|
||||||
default_value: { }
|
|
||||||
default_value_callback: ''
|
|
||||||
settings: { }
|
|
||||||
field_type: text_long
|
|
||||||
@ -1,37 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
config:
|
|
||||||
- field.storage.node.field_thumbnail
|
|
||||||
- node.type.article
|
|
||||||
module:
|
|
||||||
- image
|
|
||||||
id: node.article.field_thumbnail
|
|
||||||
field_name: field_thumbnail
|
|
||||||
entity_type: node
|
|
||||||
bundle: article
|
|
||||||
label: 'Κεντρική φωτογραφία'
|
|
||||||
description: ''
|
|
||||||
required: false
|
|
||||||
translatable: false
|
|
||||||
default_value: { }
|
|
||||||
default_value_callback: ''
|
|
||||||
settings:
|
|
||||||
file_directory: '[date:custom:Y]-[date:custom:m]'
|
|
||||||
file_extensions: 'png gif jpg jpeg'
|
|
||||||
max_filesize: ''
|
|
||||||
max_resolution: ''
|
|
||||||
min_resolution: ''
|
|
||||||
alt_field: true
|
|
||||||
alt_field_required: true
|
|
||||||
title_field: true
|
|
||||||
title_field_required: false
|
|
||||||
default_image:
|
|
||||||
uuid: ''
|
|
||||||
alt: ''
|
|
||||||
title: ''
|
|
||||||
width: null
|
|
||||||
height: null
|
|
||||||
handler: 'default:file'
|
|
||||||
handler_settings: { }
|
|
||||||
field_type: image
|
|
||||||
@ -1,22 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
config:
|
|
||||||
- field.storage.node.field_url
|
|
||||||
- node.type.article
|
|
||||||
module:
|
|
||||||
- link
|
|
||||||
id: node.article.field_url
|
|
||||||
field_name: field_url
|
|
||||||
entity_type: node
|
|
||||||
bundle: article
|
|
||||||
label: 'Links'
|
|
||||||
description: ''
|
|
||||||
required: false
|
|
||||||
translatable: false
|
|
||||||
default_value: { }
|
|
||||||
default_value_callback: ''
|
|
||||||
settings:
|
|
||||||
link_type: 17
|
|
||||||
title: 1
|
|
||||||
field_type: link
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
config:
|
|
||||||
- field.storage.user.field_user_name
|
|
||||||
module:
|
|
||||||
- user
|
|
||||||
id: user.user.field_user_name
|
|
||||||
field_name: field_user_name
|
|
||||||
entity_type: user
|
|
||||||
bundle: user
|
|
||||||
label: 'Name'
|
|
||||||
description: ''
|
|
||||||
required: true
|
|
||||||
translatable: false
|
|
||||||
default_value: { }
|
|
||||||
default_value_callback: ''
|
|
||||||
settings: { }
|
|
||||||
field_type: string
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
config:
|
|
||||||
- field.storage.user.field_user_surname
|
|
||||||
module:
|
|
||||||
- user
|
|
||||||
id: user.user.field_user_surname
|
|
||||||
field_name: field_user_surname
|
|
||||||
entity_type: user
|
|
||||||
bundle: user
|
|
||||||
label: 'Surname'
|
|
||||||
description: ''
|
|
||||||
required: true
|
|
||||||
translatable: false
|
|
||||||
default_value: { }
|
|
||||||
default_value_callback: ''
|
|
||||||
settings: { }
|
|
||||||
field_type: string
|
|
||||||
@ -1,18 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
module:
|
|
||||||
- node
|
|
||||||
- text
|
|
||||||
id: node.field_article_description
|
|
||||||
field_name: field_article_description
|
|
||||||
entity_type: node
|
|
||||||
type: text_long
|
|
||||||
settings: { }
|
|
||||||
module: text
|
|
||||||
locked: false
|
|
||||||
cardinality: 1
|
|
||||||
translatable: true
|
|
||||||
indexes: { }
|
|
||||||
persist_with_no_fields: false
|
|
||||||
custom_storage: false
|
|
||||||
@ -1,22 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
module:
|
|
||||||
- file
|
|
||||||
- node
|
|
||||||
id: node.field_article_files
|
|
||||||
field_name: field_article_files
|
|
||||||
entity_type: node
|
|
||||||
type: file
|
|
||||||
settings:
|
|
||||||
display_field: true
|
|
||||||
display_default: true
|
|
||||||
uri_scheme: public
|
|
||||||
target_type: file
|
|
||||||
module: file
|
|
||||||
locked: false
|
|
||||||
cardinality: -1
|
|
||||||
translatable: true
|
|
||||||
indexes: { }
|
|
||||||
persist_with_no_fields: false
|
|
||||||
custom_storage: false
|
|
||||||
@ -1,29 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
module:
|
|
||||||
- file
|
|
||||||
- image
|
|
||||||
- node
|
|
||||||
id: node.field_article_photos
|
|
||||||
field_name: field_article_photos
|
|
||||||
entity_type: node
|
|
||||||
type: image
|
|
||||||
settings:
|
|
||||||
uri_scheme: public
|
|
||||||
default_image:
|
|
||||||
uuid: ''
|
|
||||||
alt: ''
|
|
||||||
title: ''
|
|
||||||
width: null
|
|
||||||
height: null
|
|
||||||
target_type: file
|
|
||||||
display_field: false
|
|
||||||
display_default: false
|
|
||||||
module: image
|
|
||||||
locked: false
|
|
||||||
cardinality: -1
|
|
||||||
translatable: true
|
|
||||||
indexes: { }
|
|
||||||
persist_with_no_fields: false
|
|
||||||
custom_storage: false
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
module:
|
|
||||||
- node
|
|
||||||
- taxonomy
|
|
||||||
id: node.field_article_type
|
|
||||||
field_name: field_article_type
|
|
||||||
entity_type: node
|
|
||||||
type: entity_reference
|
|
||||||
settings:
|
|
||||||
target_type: taxonomy_term
|
|
||||||
module: core
|
|
||||||
locked: false
|
|
||||||
cardinality: 1
|
|
||||||
translatable: true
|
|
||||||
indexes: { }
|
|
||||||
persist_with_no_fields: false
|
|
||||||
custom_storage: false
|
|
||||||
@ -1,22 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
module:
|
|
||||||
- file
|
|
||||||
- node
|
|
||||||
id: node.field_article_videos
|
|
||||||
field_name: field_article_videos
|
|
||||||
entity_type: node
|
|
||||||
type: file
|
|
||||||
settings:
|
|
||||||
display_field: true
|
|
||||||
display_default: true
|
|
||||||
uri_scheme: public
|
|
||||||
target_type: file
|
|
||||||
module: file
|
|
||||||
locked: false
|
|
||||||
cardinality: -1
|
|
||||||
translatable: true
|
|
||||||
indexes: { }
|
|
||||||
persist_with_no_fields: false
|
|
||||||
custom_storage: false
|
|
||||||
@ -1,18 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
module:
|
|
||||||
- link
|
|
||||||
- node
|
|
||||||
id: node.field_facebook_page
|
|
||||||
field_name: field_facebook_page
|
|
||||||
entity_type: node
|
|
||||||
type: link
|
|
||||||
settings: { }
|
|
||||||
module: link
|
|
||||||
locked: false
|
|
||||||
cardinality: 1
|
|
||||||
translatable: true
|
|
||||||
indexes: { }
|
|
||||||
persist_with_no_fields: false
|
|
||||||
custom_storage: false
|
|
||||||
@ -1,18 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
module:
|
|
||||||
- link
|
|
||||||
- node
|
|
||||||
id: node.field_source
|
|
||||||
field_name: field_source
|
|
||||||
entity_type: node
|
|
||||||
type: link
|
|
||||||
settings: { }
|
|
||||||
module: link
|
|
||||||
locked: false
|
|
||||||
cardinality: -1
|
|
||||||
translatable: true
|
|
||||||
indexes: { }
|
|
||||||
persist_with_no_fields: false
|
|
||||||
custom_storage: false
|
|
||||||
@ -1,18 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
module:
|
|
||||||
- node
|
|
||||||
- text
|
|
||||||
id: node.field_summary
|
|
||||||
field_name: field_summary
|
|
||||||
entity_type: node
|
|
||||||
type: text_long
|
|
||||||
settings: { }
|
|
||||||
module: text
|
|
||||||
locked: false
|
|
||||||
cardinality: 1
|
|
||||||
translatable: true
|
|
||||||
indexes: { }
|
|
||||||
persist_with_no_fields: false
|
|
||||||
custom_storage: false
|
|
||||||
@ -1,29 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
module:
|
|
||||||
- file
|
|
||||||
- image
|
|
||||||
- node
|
|
||||||
id: node.field_thumbnail
|
|
||||||
field_name: field_thumbnail
|
|
||||||
entity_type: node
|
|
||||||
type: image
|
|
||||||
settings:
|
|
||||||
uri_scheme: public
|
|
||||||
default_image:
|
|
||||||
uuid: ''
|
|
||||||
alt: ''
|
|
||||||
title: ''
|
|
||||||
width: null
|
|
||||||
height: null
|
|
||||||
target_type: file
|
|
||||||
display_field: false
|
|
||||||
display_default: false
|
|
||||||
module: image
|
|
||||||
locked: false
|
|
||||||
cardinality: 1
|
|
||||||
translatable: true
|
|
||||||
indexes: { }
|
|
||||||
persist_with_no_fields: false
|
|
||||||
custom_storage: false
|
|
||||||
@ -1,18 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
module:
|
|
||||||
- link
|
|
||||||
- node
|
|
||||||
id: node.field_url
|
|
||||||
field_name: field_url
|
|
||||||
entity_type: node
|
|
||||||
type: link
|
|
||||||
settings: { }
|
|
||||||
module: link
|
|
||||||
locked: false
|
|
||||||
cardinality: -1
|
|
||||||
translatable: true
|
|
||||||
indexes: { }
|
|
||||||
persist_with_no_fields: false
|
|
||||||
custom_storage: false
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
module:
|
|
||||||
- user
|
|
||||||
id: user.field_user_name
|
|
||||||
field_name: field_user_name
|
|
||||||
entity_type: user
|
|
||||||
type: string
|
|
||||||
settings:
|
|
||||||
max_length: 255
|
|
||||||
is_ascii: false
|
|
||||||
case_sensitive: false
|
|
||||||
module: core
|
|
||||||
locked: false
|
|
||||||
cardinality: 1
|
|
||||||
translatable: true
|
|
||||||
indexes: { }
|
|
||||||
persist_with_no_fields: false
|
|
||||||
custom_storage: false
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
dependencies:
|
|
||||||
module:
|
|
||||||
- user
|
|
||||||
id: user.field_user_surname
|
|
||||||
field_name: field_user_surname
|
|
||||||
entity_type: user
|
|
||||||
type: string
|
|
||||||
settings:
|
|
||||||
max_length: 255
|
|
||||||
is_ascii: false
|
|
||||||
case_sensitive: false
|
|
||||||
module: core
|
|
||||||
locked: false
|
|
||||||
cardinality: 1
|
|
||||||
translatable: true
|
|
||||||
indexes: { }
|
|
||||||
persist_with_no_fields: false
|
|
||||||
custom_storage: false
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
langcode: en
|
|
||||||
status: true
|
|
||||||
name: 'Article'
|
|
||||||
type: article
|
|
||||||
description: ''
|
|
||||||
help: ''
|
|
||||||
new_revision: false
|
|
||||||
preview_mode: 1
|
|
||||||
display_submitted: false
|
|
||||||
@ -1,41 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use Drupal\builders_test\ArticleTypeBuilder;
|
|
||||||
use Drupal\KernelTests\KernelTestBase;
|
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
|
||||||
|
|
||||||
class GetArticleTypesTest extends KernelTestBase {
|
|
||||||
|
|
||||||
public static $modules = [
|
|
||||||
'bundle_article',
|
|
||||||
'taxonomy',
|
|
||||||
'text',
|
|
||||||
'user'
|
|
||||||
];
|
|
||||||
|
|
||||||
protected function setUp() {
|
|
||||||
parent::setUp();
|
|
||||||
$this->installEntitySchema('taxonomy_term');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testShouldReturnListOfArticleTypesInRequestedLanguage() {
|
|
||||||
ArticleTypeBuilder::create()->build();
|
|
||||||
ArticleTypeBuilder::create()->withLanguageCode('el')->build();
|
|
||||||
ArticleTypeBuilder::create()->build();
|
|
||||||
|
|
||||||
$request = Request::create('/type/article?languageCode=en');
|
|
||||||
$response = $this->container->get('http_kernel')->handle($request);
|
|
||||||
|
|
||||||
$this->assertEquals(200, $response->getStatusCode());
|
|
||||||
$this->assertEquals('{"code":200,"languageCode":"en","types":[{"id":"1","name":"Type"},{"id":"3","name":"Type"}]}', $response->getContent());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testShouldReturnErrorMessageWhenLanguageCodeQueryParameterIsMissing() {
|
|
||||||
$request = Request::create('/type/article');
|
|
||||||
$response = $this->container->get('http_kernel')->handle($request);
|
|
||||||
|
|
||||||
$this->assertEquals(400, $response->getStatusCode());
|
|
||||||
$this->assertEquals('{"code":400,"message":"Query parameter \u0022languageCode\u0022 is mandatory and is missing."}', $response->getContent());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,134 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Drupal\bundle_article\Tests\Kernel;
|
|
||||||
|
|
||||||
use Drupal\builders_test\ArticleBuilder;
|
|
||||||
use Drupal\builders_test\ArticleTypeBuilder;
|
|
||||||
use Drupal\builders_test\FileBuilder;
|
|
||||||
use Drupal\builders_test\PageBuilder;
|
|
||||||
use Drupal\builders_test\UserBuilder;
|
|
||||||
use Drupal\KernelTests\KernelTestBase;
|
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
|
||||||
|
|
||||||
class GetArticlesTest extends KernelTestBase {
|
|
||||||
|
|
||||||
public static $modules = [
|
|
||||||
'bundle_article',
|
|
||||||
'bundle_article_test',
|
|
||||||
'taxonomy',
|
|
||||||
'user',
|
|
||||||
'node',
|
|
||||||
'file',
|
|
||||||
'field',
|
|
||||||
'text',
|
|
||||||
'image',
|
|
||||||
'link',
|
|
||||||
'system'
|
|
||||||
];
|
|
||||||
|
|
||||||
protected function setUp() {
|
|
||||||
parent::setUp();
|
|
||||||
$this->installEntitySchema('taxonomy_term');
|
|
||||||
$this->installEntitySchema('user');
|
|
||||||
$this->installSchema('system', ['sequences']);
|
|
||||||
$this->installEntitySchema('node');
|
|
||||||
$this->installEntitySchema('file');
|
|
||||||
$this->installSchema('file', ['file_usage']);
|
|
||||||
$this->installConfig('bundle_article_test');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testShouldReturnListOfArticles() {
|
|
||||||
ArticleTypeBuilder::create()->build();
|
|
||||||
FileBuilder::create()->build();
|
|
||||||
UserBuilder::create()->build();
|
|
||||||
PageBuilder::create()->build();
|
|
||||||
ArticleBuilder::create()->build();
|
|
||||||
ArticleBuilder::create()->build();
|
|
||||||
|
|
||||||
$request = Request::create('/articles?languageCode=en');
|
|
||||||
$response = $this->container->get('http_kernel')->handle($request);
|
|
||||||
|
|
||||||
$secondArticleAsJson = '{"id":"2","typeId":"1","typeName":"Type","title":"Title","summary":"","description":"Description","thumbnail":"https:\/\/example.com\/filename.jpg","photos":[],"videos":[],"files":[],"sources":[],"links":[],"facebookEvent":"","author":"Name Surname","date":"1234567890"}';
|
|
||||||
$thirdArticleAsJson = '{"id":"3","typeId":"1","typeName":"Type","title":"Title","summary":"","description":"Description","thumbnail":"https:\/\/example.com\/filename.jpg","photos":[],"videos":[],"files":[],"sources":[],"links":[],"facebookEvent":"","author":"Name Surname","date":"1234567890"}';
|
|
||||||
$this->assertEquals(200, $response->getStatusCode());
|
|
||||||
$this->assertEquals('{"code":200,"languageCode":"en","articles":[' . $secondArticleAsJson . ',' . $thirdArticleAsJson . ']}', $response->getContent());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function testShouldReturnListOfArticlesInRequestedLanguage() {
|
|
||||||
ArticleTypeBuilder::create()->build();
|
|
||||||
$photo = FileBuilder::create()->build();
|
|
||||||
$video = FileBuilder::create()->withFileName('filename.mp4')->build();
|
|
||||||
$file = FileBuilder::create()->withFileName('filename.pdf')->build();
|
|
||||||
UserBuilder::create()->build();
|
|
||||||
ArticleBuilder::create()->withSummary('Summary')
|
|
||||||
->withPhotos([$photo->id(), $photo->id(), $photo->id()])
|
|
||||||
->withVideos([$video->id(), $video->id(), $video->id()])
|
|
||||||
->withFiles([$file->id(), $file->id(), $file->id()])
|
|
||||||
->withSources(['https://example.com/source1', 'https://example.com/source2', 'https://example.com/source3'])
|
|
||||||
->withLinks(['https://example.com/link1', 'https://example.com/link2', 'https://example.com/link3'])
|
|
||||||
->withFacebookPage('https://facebook.com/event1')
|
|
||||||
->build();
|
|
||||||
ArticleBuilder::create()->withLanguageCode('el')->build();
|
|
||||||
ArticleBuilder::create()->build();
|
|
||||||
|
|
||||||
$request = Request::create('/articles?languageCode=en');
|
|
||||||
$response = $this->container->get('http_kernel')->handle($request);
|
|
||||||
|
|
||||||
$firstArticleAsJson = '{"id":"1","typeId":"1","typeName":"Type","title":"Title","summary":"Summary","description":"Description","thumbnail":"https:\/\/example.com\/filename.jpg","photos":["https:\/\/example.com\/filename.jpg","https:\/\/example.com\/filename.jpg","https:\/\/example.com\/filename.jpg"],"videos":["https:\/\/example.com\/filename.mp4","https:\/\/example.com\/filename.mp4","https:\/\/example.com\/filename.mp4"],"files":["https:\/\/example.com\/filename.pdf","https:\/\/example.com\/filename.pdf","https:\/\/example.com\/filename.pdf"],"sources":["https:\/\/example.com\/source1","https:\/\/example.com\/source2","https:\/\/example.com\/source3"],"links":["https:\/\/example.com\/link1","https:\/\/example.com\/link2","https:\/\/example.com\/link3"],"facebookEvent":"https:\/\/facebook.com\/event1","author":"Name Surname","date":"1234567890"}';
|
|
||||||
$thirdArticleAsJson = '{"id":"3","typeId":"1","typeName":"Type","title":"Title","summary":"","description":"Description","thumbnail":"https:\/\/example.com\/filename.jpg","photos":[],"videos":[],"files":[],"sources":[],"links":[],"facebookEvent":"","author":"Name Surname","date":"1234567890"}';
|
|
||||||
$this->assertEquals(200, $response->getStatusCode());
|
|
||||||
$this->assertEquals('{"code":200,"languageCode":"en","articles":[' . $firstArticleAsJson . ',' . $thirdArticleAsJson . ']}', $response->getContent());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testShouldReturnArticleWithRequestedIdAndLanguage() {
|
|
||||||
ArticleTypeBuilder::create()->build();
|
|
||||||
FileBuilder::create()->build();
|
|
||||||
UserBuilder::create()->build();
|
|
||||||
ArticleBuilder::create()->build();
|
|
||||||
ArticleBuilder::create()->build();
|
|
||||||
ArticleBuilder::create()->build();
|
|
||||||
|
|
||||||
$request = Request::create('/articles?languageCode=en&id=2');
|
|
||||||
$response = $this->container->get('http_kernel')->handle($request);
|
|
||||||
|
|
||||||
$secondArticleAsJson = '{"id":"2","typeId":"1","typeName":"Type","title":"Title","summary":"","description":"Description","thumbnail":"https:\/\/example.com\/filename.jpg","photos":[],"videos":[],"files":[],"sources":[],"links":[],"facebookEvent":"","author":"Name Surname","date":"1234567890"}';
|
|
||||||
$this->assertEquals(200, $response->getStatusCode());
|
|
||||||
$this->assertEquals('{"code":200,"languageCode":"en","articles":[' . $secondArticleAsJson . ']}', $response->getContent());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testShouldReturnErrorWhenArticleForRequestedIdDoesNotExist() {
|
|
||||||
$request = Request::create('/articles?languageCode=en&id=1');
|
|
||||||
$response = $this->container->get('http_kernel')->handle($request);
|
|
||||||
|
|
||||||
$this->assertEquals(404, $response->getStatusCode());
|
|
||||||
$this->assertEquals('{"code":404,"message":"Article with id 1 does not exist."}', $response->getContent());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testShouldReturnListOfArticlesForRequestedType() {
|
|
||||||
ArticleTypeBuilder::create()->build();
|
|
||||||
ArticleTypeBuilder::create()->build();
|
|
||||||
FileBuilder::create()->build();
|
|
||||||
UserBuilder::create()->build();
|
|
||||||
ArticleBuilder::create()->build();
|
|
||||||
ArticleBuilder::create()->withType(2)->build();
|
|
||||||
ArticleBuilder::create()->build();
|
|
||||||
|
|
||||||
$request = Request::create('/articles?languageCode=en&typeId=1');
|
|
||||||
$response = $this->container->get('http_kernel')->handle($request);
|
|
||||||
|
|
||||||
$firstArticleAsJson = '{"id":"1","typeId":"1","typeName":"Type","title":"Title","summary":"","description":"Description","thumbnail":"https:\/\/example.com\/filename.jpg","photos":[],"videos":[],"files":[],"sources":[],"links":[],"facebookEvent":"","author":"Name Surname","date":"1234567890"}';
|
|
||||||
$thirdArticleAsJson = '{"id":"3","typeId":"1","typeName":"Type","title":"Title","summary":"","description":"Description","thumbnail":"https:\/\/example.com\/filename.jpg","photos":[],"videos":[],"files":[],"sources":[],"links":[],"facebookEvent":"","author":"Name Surname","date":"1234567890"}';
|
|
||||||
$this->assertEquals(200, $response->getStatusCode());
|
|
||||||
$this->assertEquals('{"code":200,"languageCode":"en","articles":[' . $firstArticleAsJson . ',' . $thirdArticleAsJson . ']}', $response->getContent());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testShouldReturnErrorMessageWhenLanguageCodeQueryParameterIsMissing() {
|
|
||||||
$request = Request::create('/articles');
|
|
||||||
$response = $this->container->get('http_kernel')->handle($request);
|
|
||||||
|
|
||||||
$this->assertEquals(400, $response->getStatusCode());
|
|
||||||
$this->assertEquals('{"code":400,"message":"Query parameter \u0022languageCode\u0022 is mandatory and is missing."}', $response->getContent());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -13,7 +13,9 @@ MODULES="modules/custom"
|
|||||||
cd /var/www/sites/${SITE}
|
cd /var/www/sites/${SITE}
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# if module does not exist
|
#
|
||||||
|
# module exist
|
||||||
|
#
|
||||||
../vendor/drush/drush/drush pml --fields=name,status | grep "endpoint_get_${NODE}"
|
../vendor/drush/drush/drush pml --fields=name,status | grep "endpoint_get_${NODE}"
|
||||||
if [ $? -ne 0 ];then
|
if [ $? -ne 0 ];then
|
||||||
echo -n " 🌈 Cannot find module ${B}endpoint_get_${NODE}${E}"
|
echo -n " 🌈 Cannot find module ${B}endpoint_get_${NODE}${E}"
|
||||||
@ -21,27 +23,35 @@ if [ $? -ne 0 ];then
|
|||||||
fi
|
fi
|
||||||
echo -e " 🍓 Found module ${B}endpoint_get_${NODE}${E}"
|
echo -e " 🍓 Found module ${B}endpoint_get_${NODE}${E}"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Clear cache
|
||||||
|
#
|
||||||
../vendor/drush/drush/drush cr
|
../vendor/drush/drush/drush cr
|
||||||
|
|
||||||
# if is enabled, disable it
|
#
|
||||||
|
# if module is enabled, disable it
|
||||||
|
#
|
||||||
../vendor/drush/drush/drush pml --fields=name,status > /tmp/.drush.pml
|
../vendor/drush/drush/drush pml --fields=name,status > /tmp/.drush.pml
|
||||||
cat /tmp/.drush.pml | grep -e "Enabled" | grep "endpoint_get_${NODE}"
|
cat /tmp/.drush.pml | grep -e "Enabled" | grep "endpoint_get_${NODE}"
|
||||||
# cat ./drush.pml | grep -e "Enabled" | grep "(endpoint_get_${NODE})" &> /dev/null
|
|
||||||
if [ $? -eq 0 ];then
|
if [ $? -eq 0 ];then
|
||||||
echo -n " 🍓 Disabling module ${B}endpoint_get_${NODE}${E}"
|
echo -n "\e 🍓 Disabling module ${B}endpoint_get_${NODE}${E}"
|
||||||
../vendor/drush/drush/drush pmu "endpoint_get_${NODE}"
|
../vendor/drush/drush/drush pmu "endpoint_get_${NODE}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
# if is not disabled, dont delete it
|
# if is not disabled, dont delete it
|
||||||
|
#
|
||||||
../vendor/drush/drush/drush pml --fields=name,status > /tmp/.drush.pml
|
../vendor/drush/drush/drush pml --fields=name,status > /tmp/.drush.pml
|
||||||
cat ./drush.pml | grep -e "Enabled" | grep "endpoint_get_${NODE}"
|
cat ./drush.pml | grep -e "Enabled" | grep "endpoint_get_${NODE}"
|
||||||
if [ $? -eq 0 ];then
|
if [ $? -eq 0 ];then
|
||||||
echo -n " 🌈 Cannot delete enabled module ${B}endpoint_get_${NODE}${E}"
|
echo -n "\n 🌈 Cannot delete enabled module ${B}endpoint_get_${NODE}${E}"
|
||||||
../vendor/drush/drush/drush pml --fields=name,status | grep "endpoint_get_${NODE}"
|
../vendor/drush/drush/drush pml --fields=name,status | grep "endpoint_get_${NODE}"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
# delete the damn thing
|
# delete the damn thing
|
||||||
|
#
|
||||||
rm "/var/www/sites/${SITE}/modules/custom/endpoint_get_${NODE}" -rf
|
rm "/var/www/sites/${SITE}/modules/custom/endpoint_get_${NODE}" -rf
|
||||||
if [ $? -eq 0 ];then
|
if [ $? -eq 0 ];then
|
||||||
echo -e " 🍓 Directory ${B}${SITE}/modules/custom/endpoint_get_${NODE}${E} deleted"
|
echo -e " 🍓 Directory ${B}${SITE}/modules/custom/endpoint_get_${NODE}${E} deleted"
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
C="\e[0;36m"
|
C="\e[0;36m"
|
||||||
G="\e[0;32m"
|
G="\e[0;32m"
|
||||||
|
R="\e[0;31m"
|
||||||
B="\e[0;34m"
|
B="\e[0;34m"
|
||||||
W="\e[0;97m"
|
W="\e[0;97m"
|
||||||
E="\e[00m"
|
E="\e[00m"
|
||||||
@ -13,6 +14,7 @@ BASE_DIR="/var/www/sites"
|
|||||||
MODULES="modules/custom"
|
MODULES="modules/custom"
|
||||||
|
|
||||||
SITE=${1}
|
SITE=${1}
|
||||||
|
SITE_COMPOSER=${1}
|
||||||
NODE=${2}
|
NODE=${2}
|
||||||
IFS=$'\n'
|
IFS=$'\n'
|
||||||
|
|
||||||
@ -38,7 +40,7 @@ function log() {
|
|||||||
echo -e "${G}[ OK ]${E}"
|
echo -e "${G}[ OK ]${E}"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
echo -e "${G}[FAIL]${E}"
|
echo -e "${R}[FAIL]${E}"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -111,7 +113,6 @@ function file_permissions() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function enable_module() {
|
function enable_module() {
|
||||||
return 0
|
|
||||||
echo
|
echo
|
||||||
echo -en " 🌈 Enable module"
|
echo -en " 🌈 Enable module"
|
||||||
cd /var/www/sites/${SITE}
|
cd /var/www/sites/${SITE}
|
||||||
@ -136,23 +137,27 @@ function test_module() {
|
|||||||
ENDPOINT_STATUS=$(curl -sI --location --request GET $BASE_URL/$ENDPOINT?_format=json \
|
ENDPOINT_STATUS=$(curl -sI --location --request GET $BASE_URL/$ENDPOINT?_format=json \
|
||||||
-b cookie.txt \
|
-b cookie.txt \
|
||||||
--header "Content-type: application/json" | grep HTTP | awk {'print $2'})
|
--header "Content-type: application/json" | grep HTTP | awk {'print $2'})
|
||||||
RESPONSE=$(curl -s --location --request GET $BASE_URL/$ENDPOINT | head -c100)
|
|
||||||
|
|
||||||
|
if [ "${ENDPOINT_STATUS}" == "200" ];then
|
||||||
echo -e "\n 🍒 GET $BASE_URL/$ENDPOINT $ENDPOINT_STATUS"
|
echo -e "\n 🍒 GET $BASE_URL/$ENDPOINT $ENDPOINT_STATUS"
|
||||||
[ "${ENDPOINT_STATUS}" == "200" ] && curl -s --location --request GET $BASE_URL/$ENDPOINT | head -c75
|
curl -s --location --request GET $BASE_URL/$ENDPOINT | head -c75
|
||||||
echo
|
echo -e "${G}[ OK ]${E}"
|
||||||
|
else
|
||||||
|
echo -e "\n 🍒 GET $BASE_URL/$ENDPOINT $ENDPOINT_STATUS ${R}[FAIL]${E}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
echo
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function add_fields () {
|
function add_fields () {
|
||||||
for FIELD in $(bash ${SCRIPT_DIR}/get-fields.sh ${SITE} node ${NODE});do
|
for FIELD in $(bash ${SCRIPT_DIR}/get-fields.sh ${SITE_COMPOSER} node ${NODE});do
|
||||||
FIELD_NAME=$(echo $FIELD | awk '{print $1}')
|
FIELD_NAME=$(echo $FIELD | awk '{print $1}')
|
||||||
FIELD_TYPE=$(echo $FIELD | awk '{print $2}')
|
FIELD_TYPE=$(echo $FIELD | awk '{print $2}')
|
||||||
echo
|
echo
|
||||||
echo -en "Add field ${C}${FIELD_NAME}${E} of type ${C}${FIELD_TYPE}${E} ? [y/n] "
|
echo -en " 🍏 Add field ${C}${FIELD_NAME}${E} of type ${C}${FIELD_TYPE}${E} ? [y/n] "
|
||||||
read -n 1 response
|
read -n 1 response
|
||||||
echo
|
echo
|
||||||
if [[ "$response" =~ ^([yY])$ ]]
|
if [[ "$response" =~ ^([yY])$ ]]
|
||||||
|
|||||||
@ -17,16 +17,9 @@ NAME=$3
|
|||||||
|
|
||||||
cd /var/www/sites/$SITE_DIR
|
cd /var/www/sites/$SITE_DIR
|
||||||
|
|
||||||
for FIELD in $(../vendor/drush/drush/drush fi ${TYPE} ${NAME} | tail -n +3 | grep -v '\-\-\-'); do
|
for FIELD in $(vendor/drush/drush/drush --fields="Field name","Field type" fi ${TYPE} ${NAME} | tail -n +3 | grep -v '\-\-\-'); do
|
||||||
NAME=$(echo $FIELD | awk '{print $1}')
|
NAME=$(echo $FIELD | awk '{print $1}')
|
||||||
TYPE=$(echo $FIELD | awk '{print $2}')
|
TYPE=$(echo $FIELD | awk '{print $2}')
|
||||||
COUNT=$(echo $TYPE | wc -c)
|
|
||||||
THIRD=$(echo $FIELD | awk '{print $3}')
|
|
||||||
|
|
||||||
if [ "$COUNT" -lt 5 ] && [ -z "${SECOND// }" ]; then
|
|
||||||
TYPE=$THIRD
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$NAME $TYPE"
|
echo "$NAME $TYPE"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user