Block.php

Same filename in this branch
  1. 11.x core/modules/views/src/Plugin/views/display/Block.php
  2. 11.x core/modules/block/src/Entity/Block.php
  3. 11.x core/lib/Drupal/Core/Block/Attribute/Block.php
  4. 11.x core/lib/Drupal/Core/Block/Annotation/Block.php
Same filename and directory in other branches
  1. 9 core/modules/views/src/Plugin/views/display/Block.php
  2. 9 core/modules/block/src/Entity/Block.php
  3. 9 core/modules/block/src/Plugin/migrate/source/Block.php
  4. 9 core/lib/Drupal/Core/Block/Annotation/Block.php
  5. 8.9.x core/modules/views/src/Plugin/views/display/Block.php
  6. 8.9.x core/modules/block/src/Entity/Block.php
  7. 8.9.x core/modules/block/src/Plugin/migrate/source/Block.php
  8. 8.9.x core/lib/Drupal/Core/Block/Annotation/Block.php
  9. 10 core/modules/views/src/Plugin/views/display/Block.php
  10. 10 core/modules/block/src/Entity/Block.php
  11. 10 core/modules/block/src/Plugin/migrate/source/Block.php
  12. 10 core/lib/Drupal/Core/Block/Attribute/Block.php
  13. 10 core/lib/Drupal/Core/Block/Annotation/Block.php

Namespace

Drupal\block\Plugin\migrate\source

File

core/modules/block/src/Plugin/migrate/source/Block.php

View source
<?php

namespace Drupal\block\Plugin\migrate\source;

use Drupal\migrate\Row;
use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
// cspell:ignore whois

/**
 * Drupal 6/7 block source from database.
 *
 * For available configuration keys, refer to the parent classes.
 *
 * @see \Drupal\migrate\Plugin\migrate\source\SqlBase
 * @see \Drupal\migrate\Plugin\migrate\source\SourcePluginBase
 *
 * @MigrateSource(
 *   id = "block",
 *   source_module = "block"
 * )
 */
class Block extends DrupalSqlBase {
    
    /**
     * The default theme name.
     *
     * @var string
     */
    protected $defaultTheme;
    
    /**
     * The admin theme name.
     *
     * @var string
     */
    protected $adminTheme;
    
    /**
     * Table containing block configuration.
     *
     * @var string
     */
    protected $blockTable;
    
    /**
     * Table mapping blocks to user roles.
     *
     * @var string
     */
    protected $blockRoleTable;
    
    /**
     * Table listing user roles.
     *
     * @var string
     */
    protected $userRoleTable;
    
    /**
     * {@inheritdoc}
     */
    public function query() {
        if ($this->getModuleSchemaVersion('system') >= 7000) {
            $this->blockTable = 'block';
            $this->blockRoleTable = 'block_role';
        }
        else {
            $this->blockTable = 'blocks';
            $this->blockRoleTable = 'blocks_roles';
        }
        // Drupal 6 & 7 both use the same name for the user roles table.
        $this->userRoleTable = 'role';
        return $this->select($this->blockTable, 'b')
            ->fields('b');
    }
    
    /**
     * {@inheritdoc}
     */
    protected function initializeIterator() {
        $this->defaultTheme = $this->variableGet('theme_default', 'Garland');
        $this->adminTheme = $this->variableGet('admin_theme', NULL);
        return parent::initializeIterator();
    }
    
    /**
     * {@inheritdoc}
     */
    public function fields() {
        return [
            'bid' => $this->t('The block numeric identifier.'),
            'module' => $this->t('The module providing the block.'),
            'delta' => $this->t("The block's delta."),
            'theme' => $this->t('Which theme the block is placed in.'),
            'status' => $this->t('Whether or not the block is enabled.'),
            'weight' => $this->t('Weight of the block for ordering within regions.'),
            'region' => $this->t('Region the block is placed in.'),
            'visibility' => $this->t('Visibility expression.'),
            'pages' => $this->t('Pages list.'),
            'title' => $this->t('Block title.'),
            'cache' => $this->t('Cache rule.'),
        ];
    }
    
    /**
     * {@inheritdoc}
     */
    public function getIds() {
        $ids['module']['type'] = 'string';
        $ids['delta']['type'] = 'string';
        $ids['theme']['type'] = 'string';
        return $ids;
    }
    
    /**
     * {@inheritdoc}
     */
    public function prepareRow(Row $row) {
        $row->setSourceProperty('default_theme', $this->defaultTheme);
        $row->setSourceProperty('admin_theme', $this->adminTheme);
        $module = $row->getSourceProperty('module');
        $delta = $row->getSourceProperty('delta');
        $query = $this->select($this->blockRoleTable, 'br')
            ->fields('br', [
            'rid',
        ])
            ->condition('module', $module)
            ->condition('delta', $delta);
        $query->join($this->userRoleTable, 'ur', '[br].[rid] = [ur].[rid]');
        $roles = $query->execute()
            ->fetchCol();
        $row->setSourceProperty('roles', $roles);
        $settings = [];
        switch ($module) {
            case 'aggregator':
                [
                    $type,
                    $id,
                ] = explode('-', $delta);
                if ($type == 'feed') {
                    $item_count = $this->select('aggregator_feed', 'af')
                        ->fields('af', [
                        'block',
                    ])
                        ->condition('fid', $id)
                        ->execute()
                        ->fetchField();
                }
                else {
                    $item_count = $this->select('aggregator_category', 'ac')
                        ->fields('ac', [
                        'block',
                    ])
                        ->condition('cid', $id)
                        ->execute()
                        ->fetchField();
                }
                $settings['aggregator']['item_count'] = $item_count;
                break;
            case 'book':
                $settings['book']['block_mode'] = $this->variableGet('book_block_mode', 'all pages');
                break;
            case 'forum':
                $settings['forum']['block_num'] = $this->variableGet('forum_block_num_' . $delta, 5);
                break;
            case 'statistics':
                foreach ([
                    'statistics_block_top_day_num',
                    'statistics_block_top_all_num',
                    'statistics_block_top_last_num',
                ] as $name) {
                    $settings['statistics'][$name] = $this->variableGet($name, 0);
                }
                break;
            case 'user':
                switch ($delta) {
                    case 2:
                    case 'new':
                        $settings['user']['block_whois_new_count'] = $this->variableGet('user_block_whois_new_count', 5);
                        break;
                    case 3:
                    case 'online':
                        $settings['user']['block_seconds_online'] = $this->variableGet('user_block_seconds_online', 900);
                        $settings['user']['max_list_count'] = $this->variableGet('user_block_max_list_count', 10);
                        break;
                }
                break;
        }
        $row->setSourceProperty('settings', $settings);
        return parent::prepareRow($row);
    }

}

Classes

Title Deprecated Summary
Block Drupal 6/7 block source from database.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.