<?php

/**
 * @file
 * Allows core Views to have greater control over Blocks.
 */

use Drupal\views\Plugin\views\display\Block as CoreBlock;
use Drupal\ctools_views\Plugin\Display\Block;

/**
 * Implements hook_views_plugins_display_alter().
 */
function ctools_views_views_plugins_display_alter(&$displays) {
  if (!empty($displays['block']['class']) && $displays['block']['class'] == CoreBlock::class) {
    $displays['block']['class'] = Block::class;
  }
}

/**
 * Implements hook_config_schema_info_alter().
 */
function ctools_views_config_schema_info_alter(&$definitions) {
  // Add to the views block plugin schema.
  $definitions['views_block']['mapping']['pager'] = [
    'type' => 'string',
    'label' => 'Pager type',
  ];
  $definitions['views_block']['mapping']['fields'] = [
    'type' => 'sequence',
    'label' => 'Fields settings',
    'sequence' => [
      [
        'type' => 'mapping',
        'label' => 'Field settings',
        'mapping' => [
          'hide' => [
            'type' => 'boolean',
            'label' => 'Hide field',
          ],
          'weight' => [
            'type' => 'integer',
            'label' => 'Field weight',
          ],
        ],
      ],
    ],
  ];
  $definitions['views_block']['mapping']['filter'] = [
    'type' => 'sequence',
    'label' => 'Filters settings',
    'sequence' => [
      [
        'type' => 'mapping',
        'label' => 'Filter settings',
        'mapping' => [
          'type' => [
            'type' => 'string',
            'label' => 'Plugin id',
          ],
          'disable' => [
            'type' => 'boolean',
            'label' => 'Disable filter',
          ],
        ],
      ],
    ],
  ];
  $definitions['views_block']['mapping']['sort'] = [
    'type' => 'sequence',
    'label' => 'Sort settings',
    'sequence' => [
      [
        'type' => 'string',
        'label' => 'Sort order value',
      ],
    ],
  ];
  $definitions['views_block']['mapping']['pager_offset'] = [
    'type' => 'integer',
    'label' => 'Pager offset',
  ];

  // Add to the views block display plugin schema.
  $definitions['views.display.block']['mapping']['allow']['mapping']['offset'] = [
    'type' => 'string',
    'label' => 'Pager offset',
  ];
  $definitions['views.display.block']['mapping']['allow']['mapping']['pager'] = [
    'type' => 'string',
    'label' => 'Pager type',
  ];
  $definitions['views.display.block']['mapping']['allow']['mapping']['hide_fields'] = [
    'type' => 'string',
    'label' => 'Hide fields',
  ];
  $definitions['views.display.block']['mapping']['allow']['mapping']['sort_fields'] = [
    'type' => 'string',
    'label' => 'Sort fields',
  ];
  $definitions['views.display.block']['mapping']['allow']['mapping']['disable_filters'] = [
    'type' => 'string',
    'label' => 'Disable filters',
  ];
  $definitions['views.display.block']['mapping']['allow']['mapping']['configure_sorts'] = [
    'type' => 'string',
    'label' => 'Configure sorts',
  ];
}
