275 lines
7.7 KiB
PHP
275 lines
7.7 KiB
PHP
<?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);
|
|
}
|