Skip to content

Commit

Permalink
Merge pull request #326 from localgovdrupal/1.x
Browse files Browse the repository at this point in the history
1.7.6
  • Loading branch information
finnlewis committed May 21, 2024
2 parents 7098132 + e4aff62 commit 25fb412
Show file tree
Hide file tree
Showing 5 changed files with 287 additions and 228 deletions.
208 changes: 5 additions & 203 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,207 +9,9 @@ on:
- '1.x'
workflow_dispatch:

env:
LOCALGOV_DRUPAL_PROJECT: localgovdrupal/localgov_alert_banner
LOCALGOV_DRUPAL_PROJECT_PATH: web/modules/contrib/localgov_alert_banner

jobs:

build:
name: Install LocalGov Drupal
runs-on: ubuntu-latest

strategy:
fail-fast: false
matrix:
localgov-version:
- '3.x'
drupal-version:
- '~10.0'
php-version:
- '8.1'
- '8.2'

steps:

- name: Save git branch and git repo names to env if this is not a pull request
if: github.event_name != 'pull_request'
run: |
echo "GIT_BASE=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV
echo "GIT_BRANCH=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV
echo "HEAD_USER=localgovdrupal" >> $GITHUB_ENV
- name: Save git branch and git repo names to env if this is a pull request
if: github.event_name == 'pull_request'
run: |
echo "GIT_BASE=${GITHUB_BASE_REF}" >> $GITHUB_ENV
echo "GIT_BRANCH=${GITHUB_HEAD_REF}" >> $GITHUB_ENV
export HEAD="${{ github.event.pull_request.head.label }}"
echo "HEAD_USER=${HEAD%%:*}" >> $GITHUB_ENV
- name: Set composer branch reference for version branches
if: endsWith(github.ref, '.x')
run: echo "COMPOSER_REF=${GIT_BRANCH}-dev" >> $GITHUB_ENV

- name: Set composer branch reference for non-version branches
if: endsWith(github.ref, '.x') == false
run: echo "COMPOSER_REF=dev-${GIT_BRANCH}" >> $GITHUB_ENV

- name: Get the latest tagged release for branch version
run: |
LATEST_RELEASE=$(curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/${GITHUB_REPOSITORY}/git/matching-refs/tags/${GIT_BASE%'.x'} | grep -Po '(?<=refs/tags/)[^"]+' | tail -1)
if [ -z $LATEST_RELEASE ]; then LATEST_RELEASE=1; fi
echo "LATEST_RELEASE=${LATEST_RELEASE}" >> $GITHUB_ENV
- name: Cached workspace
uses: actions/cache@v2
with:
path: ./html
key: localgov-build-${{ matrix.localgov-version }}-${{ matrix.drupal-version }}-${{ matrix.php-version }}-${{ github.run_id }}-${{ secrets.CACHE_VERSION }}

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}

- name: Clone drupal_container
uses: actions/checkout@v2
with:
repository: localgovdrupal/drupal-container
ref: php${{ matrix.php-version }}

- name: Create LocalGov Drupal project
run: |
composer create-project --stability dev --no-install localgovdrupal/localgov-project ./html "${{ matrix.localgov-version }}"
composer --working-dir=./html require --no-install localgovdrupal/localgov:${{ matrix.localgov-version }}-dev
composer --working-dir=./html require --no-install drupal/core-recommended:${{ matrix.drupal-version }} drupal/core-composer-scaffold:${{ matrix.drupal-version }} drupal/core-project-message:${{ matrix.drupal-version }} drupal/core-dev:${{ matrix.drupal-version }}
composer --working-dir=./html install
- name: Obtain the test target using Composer
if: env.HEAD_USER == 'localgovdrupal'
run: |
composer --working-dir=html config repositories.1 vcs git@github.com:${LOCALGOV_DRUPAL_PROJECT}.git
composer global config github-oauth.github.com ${{ github.token }}
composer --working-dir=./html require --with-all-dependencies ${LOCALGOV_DRUPAL_PROJECT}:"${COMPOSER_REF} as ${LATEST_RELEASE}"
- name: Obtain the test target using Git
if: env.HEAD_USER != 'localgovdrupal'
uses: actions/checkout@v2
with:
path: ${{ env.LOCALGOV_DRUPAL_PROJECT_PATH }}

- name: Obtain suggested dependencies
run: composer --working-dir=./html/${LOCALGOV_DRUPAL_PROJECT_PATH} suggests --list | xargs composer --working-dir=./html require

phpcs:
name: Coding standards checks
needs: build
runs-on: ubuntu-latest

strategy:
fail-fast: false
matrix:
localgov-version:
- '3.x'
drupal-version:
- '~10.0'
php-version:
- '8.1'
- '8.2'

steps:

- name: Cached workspace
uses: actions/cache@v2
with:
path: ./html
key: localgov-build-${{ matrix.localgov-version }}-${{ matrix.drupal-version }}-${{ matrix.php-version }}-${{ github.run_id }}-${{ secrets.CACHE_VERSION }}
restore-keys: |
localgov-build-${{ matrix.localgov-version }}-${{ matrix.drupal-version }}-${{ matrix.php-version }}-
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}

- name: Run coding standards checks
run: |
cd html
./bin/phpcs -p ${LOCALGOV_DRUPAL_PROJECT_PATH}
phpstan:
name: Deprecated code checks
needs: build
runs-on: ubuntu-latest

strategy:
fail-fast: false
matrix:
localgov-version:
- '3.x'
drupal-version:
- '~10.0'
php-version:
- '8.1'
- '8.2'

steps:

- name: Cached workspace
uses: actions/cache@v2
with:
path: ./html
key: localgov-build-${{ matrix.localgov-version }}-${{ matrix.drupal-version }}-${{ matrix.php-version }}-${{ github.run_id }}-${{ secrets.CACHE_VERSION }}
restore-keys: |
localgov-build-${{ matrix.localgov-version }}-${{ matrix.drupal-version }}-${{ matrix.php-version }}-
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}

- name: Run deprecated code checks
run: |
cd html
./bin/phpstan analyse -c ./phpstan.neon ${LOCALGOV_DRUPAL_PROJECT_PATH}
phpunit:
name: PHPUnit tests
needs: build
runs-on: ubuntu-latest

strategy:
fail-fast: false
matrix:
localgov-version:
- '3.x'
drupal-version:
- '~10.0'
php-version:
- '8.1'
- '8.2'

steps:

- name: Clone Drupal container
uses: actions/checkout@v2
with:
repository: localgovdrupal/drupal-container
ref: php${{ matrix.php-version }}

- name: Cached workspace
uses: actions/cache@v2
with:
path: ./html
key: localgov-build-${{ matrix.localgov-version }}-${{ matrix.drupal-version }}-${{ matrix.php-version }}-${{ github.run_id }}-${{ secrets.CACHE_VERSION }}
restore-keys: |
localgov-build-${{ matrix.localgov-version }}-${{ matrix.drupal-version }}-${{ matrix.php-version }}-
- name: Start Docker environment
run: docker-compose -f docker-compose.yml up -d

- name: Run PHPUnit tests
run: |
mkdir -p ./html/web/sites/simpletest && chmod 777 ./html/web/sites/simpletest
sed -i "s#http://localgov.lndo.site#http://drupal#" ./html/phpunit.xml.dist
docker exec -t drupal bash -c 'chown docker:docker -R /var/www/html'
docker exec -u docker -t drupal bash -c "cd /var/www/html && ./bin/paratest --processes=4 /var/www/html/${{ env.LOCALGOV_DRUPAL_PROJECT_PATH }}"
tests:
uses: localgovdrupal/localgov_shared_workflows/.github/workflows/test-module.yml@1.x
with:
project: 'localgovdrupal/localgov_alert_banner'
project_path: 'web/modules/contrib/localgov_alert_banner'
1 change: 1 addition & 0 deletions src/Entity/AlertBannerEntity.php
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
->setLabel(t('Title'))
->setDescription(t('The title of the Alert banner.'))
->setRevisionable(TRUE)
->setTranslatable(TRUE)
->setSettings([
'max_length' => 50,
'text_processing' => 0,
Expand Down
42 changes: 21 additions & 21 deletions src/Plugin/Block/AlertBannerBlock.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Drupal\Core\Block\BlockBase;
use Drupal\Core\Cache\Cache;
use Drupal\Core\Entity\EntityRepositoryInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
Expand Down Expand Up @@ -37,11 +38,11 @@ class AlertBannerBlock extends BlockBase implements ContainerFactoryPluginInterf
protected $currentUser;

/**
* Current alert banners.
* The entity repository services.
*
* @var \Drupal\localgov_alert_banner\Entity\AlertBannerEntity[]
* @var \Drupal\Core\Entity\EntityRepositoryInterface
*/
protected $currentAlertBanners = [];
protected $entityRepository;

/**
* Constructs a new AlertBannerBlock.
Expand All @@ -56,12 +57,14 @@ class AlertBannerBlock extends BlockBase implements ContainerFactoryPluginInterf
* The entity type manager service.
* @param \Drupal\Core\Session\AccountProxyInterface $current_user
* Current user service.
* @param Drupal\Core\Entity\EntityRepositoryInterface $entity_repository
* The entity repository service.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, AccountProxyInterface $current_user) {
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, AccountProxyInterface $current_user, EntityRepositoryInterface $entity_repository) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->entityTypeManager = $entity_type_manager;
$this->currentUser = $current_user;
$this->currentAlertBanners = $this->getCurrentAlertBanners();
$this->entityRepository = $entity_repository;
}

/**
Expand All @@ -84,7 +87,8 @@ public static function create(ContainerInterface $container, array $configuratio
$plugin_id,
$plugin_definition,
$container->get('entity_type.manager'),
$container->get('current_user')
$container->get('current_user'),
$container->get('entity.repository'),
);
}

Expand Down Expand Up @@ -131,6 +135,7 @@ public function blockSubmit($form, FormStateInterface $form_state) {
* {@inheritdoc}
*/
public function build() {

// Fetch the current published banner.
$published_alert_banners = $this->getCurrentAlertBanners();

Expand All @@ -141,7 +146,9 @@ public function build() {

// Render the alert banner.
$build = [];
foreach ($this->currentAlertBanners as $alert_banner) {
$contexts = [];
foreach ($published_alert_banners as $alert_banner) {
$contexts = Cache::mergeContexts($contexts, $alert_banner->getCacheContexts());

// Only add to the build if it is visible.
// @see #154.
Expand All @@ -150,6 +157,7 @@ public function build() {
->view($alert_banner);
}
}
$build['#cache']['contexts'] = $contexts;
return $build;
}

Expand All @@ -163,7 +171,8 @@ public function build() {
* Array of all published and visible alert banners.
*/
protected function getCurrentAlertBanners() {
$alert_banners = [];

$current_alert_banners = [];

// Get list of published alert banner IDs.
$types = $this->mapTypesConfigToQuery();
Expand Down Expand Up @@ -194,13 +203,15 @@ protected function getCurrentAlertBanners() {
// Visibility check happens in build, so we get cache contexts on all.
foreach ($published_alert_banners as $alert_banner_id) {
$alert_banner = $this->entityTypeManager->getStorage('localgov_alert_banner')->load($alert_banner_id);
$alert_banner = $this->entityRepository->getTranslationFromContext($alert_banner);

$is_accessible = $alert_banner->access('view', $this->currentUser);
if ($is_accessible) {
$alert_banners[] = $alert_banner;
$current_alert_banners[] = $alert_banner;
}
}

return $alert_banners;
return $current_alert_banners;
}

/**
Expand All @@ -216,17 +227,6 @@ protected function mapTypesConfigToQuery() : array {
});
}

/**
* {@inheritdoc}
*/
public function getCacheContexts() {
$contexts = [];
foreach ($this->currentAlertBanners as $alert_banner) {
$contexts = Cache::mergeContexts($contexts, $alert_banner->getCacheContexts());
}
return Cache::mergeContexts(parent::getCacheContexts(), $contexts);
}

/**
* {@inheritdoc}
*/
Expand Down

0 comments on commit 25fb412

Please sign in to comment.