live_blog-1.0.4/src/Controller/APIController.php

src/Controller/APIController.php
<?php

namespace Drupal\live_blog\Controller;

use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Ajax\AjaxResponse;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Drupal\Core\Ajax\AppendCommand;
use Drupal\Core\Ajax\PrependCommand;
use Drupal\Core\Ajax\ReplaceCommand;
use Drupal\Core\Ajax\RemoveCommand;
use Drupal\Core\Ajax\InvokeCommand;
use Drupal\Core\Render\Renderer;
use Drupal\live_blog\Entity\LiveBlogEntity;

/**
 * API Controller.
 */
class APIController extends ControllerBase {

  /**
   * Request stack.
   *
   * @var Symfony\Component\HttpFoundation\RequestStack
   */
  public $requestStack;

  /**
   * Renderer service.
   *
   * @var Drupal\Core\Render\Renderer
   */
  public $renderer;

  /**
   * Class constructor.
   *
   * @param \Symfony\Component\HttpFoundation\RequestStack $requestStack
   *   Request stack.
   * @param \Drupal\Core\Render\Renderer $renderer
   *   Renderer service.
   */
  public function __construct(RequestStack $requestStack,
                              Renderer $renderer) {
    $this->request = $requestStack->getCurrentRequest();
    $this->renderer = $renderer;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    // Instantiates this class.
    return new static(
      // Load the service required to construct this class.
      $container->get('request_stack'),
      $container->get('renderer')
    );
  }

  /**
   * Get method.
   */
  public function get($parent_id, $lid) {
    // Prepare AJAX response.
    $response = new AjaxResponse();

    // Load Post IDs from the Log.
    $logs = live_blog_log_load($parent_id, $lid);

    // Load Posts.
    $posts = LiveBlogEntity::loadMultiple(array_keys($logs));

    // Build HTML of all posts.
    foreach ($posts as $post) {
      // View a post.
      $view_builder = \Drupal::entityTypeManager()->getViewBuilder('live_blog');
      $live_blog = $view_builder->view($post);

      // Prepare post.
      $build = [
        '#theme' => 'live_blog_post',
        '#post' => $live_blog,
        '#node' => $post->getParentNode(),
      ];

      // Renter HTML.
      $logs[$post->id()]->html = $this->renderer->render($build);
    }

    // Generate wrap ID.
    $wrap_id = '.live-blog-posts[data-parent-id=' . $parent_id . ']';

    if (!empty($logs)) {
      foreach ($logs as $log) {
        switch ($log->action) {
          case 'create':
            // Check sort.
            if ($this->request->request->get('sort') == 'asc') {
              // Add after.
              $response->addCommand(new AppendCommand($wrap_id, $log->html));
            }
            else {
              // Add before.
              $response->addCommand(new PrependCommand($wrap_id, $log->html));
            }
            break;

          case 'update':
            // Replace.
            $response->addCommand(new ReplaceCommand('#live-blog-post-' . $log->id, $log->html));
            break;

          case 'delete':
            // Remove.
            $response->addCommand(new RemoveCommand('#live-blog-post-' . $log->id));
            break;
        }
      }
    }

    // Run submitFormSuccess.
    $response->addCommand(new InvokeCommand(NULL, 'completeLiveBlogAPI', [
      [
        'wrap' => $wrap_id,
        'lid' => $log->lid ?? $lid,
      ],
    ]));

    return $response;
  }

}

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

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