class AjaxController in Sortableviews 8
Controller for sortableviews ajax calls.
Hierarchy
- class \Drupal\sortableviews\Controller\AjaxController implements ContainerInjectionInterface uses StringTranslationTrait
Expanded class hierarchy of AjaxController
1 file declares its use of AjaxController
- AjaxControllerTest.php in tests/src/ Unit/ Controller/ AjaxControllerTest.php 
File
- src/Controller/ AjaxController.php, line 17 
Namespace
Drupal\sortableviews\ControllerView source
class AjaxController implements ContainerInjectionInterface {
  use StringTranslationTrait;
  /**
   * An instance of the entity manager service.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected $entityManager;
  /**
   * Builds a new AjaxController object.
   *
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_manager
   *   The entity manager service.
   */
  public function __construct(EntityTypeManagerInterface $entity_manager) {
    $this->entityManager = $entity_manager;
  }
  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static($container
      ->get('entity_type.manager'));
  }
  /**
   * Returns the entity order adjusted for the view pager.
   *
   * @param \Symfony\Component\HttpFoundation\Request $request
   *   The current request object.
   *
   * @return array
   *   An array with the adjusted sort order where the key
   *   is the entity weight and the value, the entity id.
   */
  protected function retrieveOrderFromRequest(Request $request) {
    // Adjust order for pager in asc fashion.
    if ($request
      ->get('items_per_page') && $request
      ->get('sort_order') == 'asc') {
      $adjusted_order = [];
      foreach ($request
        ->get('current_order') as $index => $value) {
        $new_index = $index + $request
          ->get('page_number') * $request
          ->get('items_per_page');
        $adjusted_order[$new_index] = $value;
      }
      return $adjusted_order;
    }
    // Adjust order for pager in desc fashion.
    if ($request
      ->get('items_per_page') && $request
      ->get('sort_order') == 'desc') {
      $complete_pages = (int) ($request
        ->get('total_rows') / $request
        ->get('items_per_page'));
      if ($complete_pages == $request
        ->get('page_number')) {
        // This is the last page of the view.
        return $request
          ->get('current_order');
      }
      $adjusted_order = [];
      $mod = (int) $request
        ->get('total_rows') % $request
        ->get('items_per_page');
      foreach ($request
        ->get('current_order') as $index => $value) {
        $new_index = $index + ($complete_pages - ($request
          ->get('page_number') + 1)) * $request
          ->get('items_per_page') + $mod;
        $adjusted_order[$new_index] = $value;
      }
      return $adjusted_order;
    }
    return $request
      ->get('current_order');
  }
  /**
   * Saves new weights.
   *
   * @param \Symfony\Component\HttpFoundation\Request $request
   *   The current request object.
   *
   * @return \Drupal\Core\Ajax\AjaxResponse
   *   An response with Ajax commands.
   */
  public function ajaxSave(Request $request) {
    $entity_type = $request
      ->get('entity_type');
    $field = $request
      ->get('weight_field');
    $current_order = $this
      ->retrieveOrderFromRequest($request);
    $entities = $this->entityManager
      ->getStorage($entity_type)
      ->loadMultiple(array_values($current_order));
    foreach ($entities as $entity) {
      $entity
        ->set($field, array_search($entity
        ->id(), $current_order));
      $entity
        ->save();
    }
    $content = [
      '#type' => 'container',
      '#attributes' => [
        'class' => 'status-messages',
      ],
      'messages' => [
        '#theme' => 'status_messages',
        '#message_list' => [
          'status' => [
            $this
              ->t('Changes have been saved.'),
          ],
        ],
      ],
    ];
    $response = new AjaxResponse();
    $response
      ->addCommand(new PrependCommand('.js-view-dom-id-' . $request
      ->get('dom_id'), $content));
    $response
      ->addCommand(new RemoveCommand('.js-view-dom-id-' . $request
      ->get('dom_id') . ' .sortableviews-ajax-trigger'));
    return $response;
  }
}Members
| Name   | Modifiers | Type | Description | Overrides | 
|---|---|---|---|---|
| AjaxController:: | protected | property | An instance of the entity manager service. | |
| AjaxController:: | public | function | Saves new weights. | |
| AjaxController:: | public static | function | Instantiates a new instance of this class. Overrides ContainerInjectionInterface:: | |
| AjaxController:: | protected | function | Returns the entity order adjusted for the view pager. | |
| AjaxController:: | public | function | Builds a new AjaxController object. | |
| StringTranslationTrait:: | protected | property | The string translation service. | 1 | 
| StringTranslationTrait:: | protected | function | Formats a string containing a count of items. | |
| StringTranslationTrait:: | protected | function | Returns the number of plurals supported by a given language. | |
| StringTranslationTrait:: | protected | function | Gets the string translation service. | |
| StringTranslationTrait:: | public | function | Sets the string translation service to use. | 2 | 
| StringTranslationTrait:: | protected | function | Translates a string to the current language or to a given language. | 
