content_planner-8.x-1.x-dev/modules/content_calendar/src/ContentCalendarService.php

modules/content_calendar/src/ContentCalendarService.php
<?php

namespace Drupal\content_calendar;

use Drupal\Core\Database\Connection;

/**
 * Implements ContentCalendarService class.
 */
class ContentCalendarService {

  /**
   * The database connection.
   *
   * @var \Drupal\Core\Database\Connection
   */
  protected $database;

  /**
   * Drupal\content_calendar\ContentTypeConfigService definition.
   *
   * @var \Drupal\content_calendar\ContentTypeConfigService
   */
  protected $contentTypeConfigService;

  /**
   * Constructs a new ContentCalendarService object.
   */
  public function __construct(
    Connection $database,
    ContentTypeConfigService $content_type_config_service
  ) {
    $this->database = $database;
    $this->contentTypeConfigService = $content_type_config_service;
  }

  /**
   * Get Nodes by Type.
   *
   * @param int $node_type
   *   The node type id.
   * @param array $filters
   *   An array with the filters.
   *
   * @return array
   *   Return node fields data array.
   */
  public function getNodesByType($node_type, array $filters = []) {

    // Basic table.
    $query = $this->database->select('node_field_data', 'nfd');

    // Joins.
    $query->innerJoin(
      'users_field_data',
      'ufd',
      'nfd.uid = ufd.uid'
    );
    $query->innerJoin(
      'content_moderation_state_field_data',
      'cmfd',
      'nfd.nid = cmfd.content_entity_id AND cmfd.content_entity_type_id = :entity_type_id',
      [':entity_type_id' => 'node']
    );

    // Fields.
    $query->addField('nfd', 'nid');
    $query->addField('nfd', 'type');
    $query->addField('nfd', 'title');
    $query->addField('nfd', 'created');
    $query->addField('nfd', 'status');
    $query->addField('nfd', 'uid');
    $query->addField('ufd', 'name', 'username');
    $query->addField('nfd', 'publish_on');
    $query->addField('cmfd', 'moderation_state');

    // Conditions.
    $query->condition('nfd.type', $node_type);
    // $query->isNotNull('nfd.publish_on');
    // Sort.
    $query->orderBy('nfd.created', 'ASC');

    // Add year filter.
    if (isset($filters['year']) && $filters['year'] && is_numeric($filters['year'])) {

      if (isset($filters['month']) && $filters['month'] && is_numeric($filters['month'])) {
        $month_from = $filters['month'];
        $month_to = $filters['month'];
      }
      else {
        $month_from = 1;
        $month_to = 12;
      }

      // From datetime.
      $datetime_from = DateTimeHelper::getFirstDayOfMonth($month_from, $filters['year']);

      // To datetime.
      $datetime_to = DateTimeHelper::getLastDayOfMonth($month_to, $filters['year']);

      $or_conditions = $query->orConditionGroup();

      // Date range conditions for scheduler date.
      $scheduler_date_conditions = $query->andConditionGroup();
      $scheduler_date_conditions->condition('nfd.publish_on', $datetime_from->format('U'), '>=');
      $scheduler_date_conditions->condition('nfd.publish_on', $datetime_to->format('U'), '<=');
      $or_conditions->condition($scheduler_date_conditions);

      // Date range conditions for created date.
      $created_date_conditions = $query->andConditionGroup();
      $created_date_conditions->condition('nfd.created', $datetime_from->format('U'), '>=');
      $created_date_conditions->condition('nfd.created', $datetime_to->format('U'), '<=');
      $or_conditions->condition($created_date_conditions);

      $query->condition($or_conditions);
    }

    $result = $query->execute()->fetchAll();

    if ($result) {
      return $result;
    }

    return [];
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc