Skip to content

Commit

Permalink
Add Drupal 9.2 compatibility (#3604)
Browse files Browse the repository at this point in the history
This adds support for Drupal 9.2, and drops support for Drupal 9.0 and older.
  • Loading branch information
thierrydallacroce committed Nov 15, 2021
1 parent cab19f0 commit 9e33db8
Show file tree
Hide file tree
Showing 50 changed files with 232 additions and 208 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@ tagfile
/vendor
/tests/reports
/web
.phpunit.result.cache
18 changes: 9 additions & 9 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,14 @@
"minimum-stability": "dev",
"description": "DKAN Open Data Catalog",
"require": {
"cweagans/composer-patches": "^1.7",
"drupal/admin_toolbar": "^2.3",
"drupal/config_update": "^1.6",
"cweagans/composer-patches": "^1.7",
"drupal/indexer": "1.0.x-dev",
"drupal/moderated_content_bulk_publish": "^2.0",
"drupal/search_api": "^1.15",
"drupal/select_or_other": "1.x-dev",
"drupal/select2": "1.x-dev",
"drupal/views_bulk_operations": "^3.6",
"ext-json": "*",
"ezyang/htmlpurifier" : "^4.11",
Expand All @@ -19,23 +22,20 @@
"getdkan/file-fetcher" : "^4.1.0",
"getdkan/harvest": "^1.0.0",
"getdkan/json-schema-provider": "^0.1.2",
"getdkan/rooted-json-data": "^0.0.2",
"getdkan/sql-parser": "^2.0.0",
"guzzlehttp/guzzle" : "^6.3",
"ilbee/csv-response": "^1.0",
"m1x0n/opis-json-schema-error-presenter": "^0.5.2",
"ramsey/uuid" : "^3.8.0",
"getdkan/rooted-json-data": "^0.0.2",
"drupal/select_or_other": "1.x-dev",
"drupal/select2": "1.x-dev",
"npm-asset/select2": "^4.0",
"ilbee/csv-response": "^1.0",
"oomphinc/composer-installers-extender": "^2.0",
"stolt/json-merge-patch": "^1.0",
"drupal/openapi_ui": "^1.0@RC"
"ramsey/uuid" : "^3.8.0",
"stolt/json-merge-patch": "^1.0"
},
"require-dev": {
"getdkan/mock-chain": "^1.3.0",
"weitzman/drupal-test-traits": "^1.5",
"phpunit/phpunit": "^7.5"
"phpunit/phpunit": "^8.5.14 || ^9"
},
"repositories": {
"drupal": {
Expand Down
3 changes: 1 addition & 2 deletions dkan.info.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
name: DKAN
description: 'DKAN Open Data Portal'
type: module
core: 8.x
core_version_requirement: ^8 || ^9
core_version_requirement: ^9.1
package: DKAN
dependencies:
- metastore
Expand Down
2 changes: 1 addition & 1 deletion modules/common/common.info.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: Common
description: Provides common utilities, functions, and base api endpoints used by other DKAN modules.
type: module
core_version_requirement: ^8 || ^9
core_version_requirement: ^9.1
package: DKAN
2 changes: 1 addition & 1 deletion modules/common/modules/dkan_alt_api/dkan_alt_api.info.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: 'Alternate API'
description: 'Provides alternate routes to access data and allows varying permissions on an api when logged in or anonymous.'
type: module
core_version_requirement: ^8 || ^9
core_version_requirement: ^9.1
package: DKAN
dependencies:
- metastore
Expand Down
2 changes: 1 addition & 1 deletion modules/common/src/Events/Event.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Drupal\common\Events;

use Symfony\Component\EventDispatcher\Event as SymfonyEvent;
use Drupal\Component\EventDispatcher\Event as SymfonyEvent;

/**
* Class Event.
Expand Down
2 changes: 1 addition & 1 deletion modules/common/src/Storage/AbstractDatabaseTable.php
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ private function setTable() {
*
* Drop the database table.
*/
public function destroy() {
public function destruct() {
if ($this->tableExist($this->getTableName())) {
$this->connection->schema()->dropTable($this->getTableName());
}
Expand Down
2 changes: 1 addition & 1 deletion modules/common/src/Storage/DatabaseTableInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ interface DatabaseTableInterface extends StorageInterface, StorerInterface, Retr
/**
* Destroy.
*/
public function destroy();
public function destruct();

/**
* Query.
Expand Down
91 changes: 42 additions & 49 deletions modules/common/src/Storage/SelectFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@ class SelectFactory {
*/
private $alias;

/**
* Our select object.
*
* @var \Drupal\Core\Database\Query\Select
*/
private $dbQuery;

/**
* Constructor function.
*
Expand All @@ -44,57 +51,53 @@ public function __construct(Connection $connection, string $alias = 't') {
* DKAN Query object.
*/
public function create(Query $query): Select {
$db_query = $this->connection->select($query->collection, $this->alias);
$this->dbQuery = $this->connection->select($query->collection, $this->alias);

$this->setQueryProperties($db_query, $query);
$this->setQueryConditions($db_query, $query);
$this->setQueryOrderBy($db_query, $query);
$this->setQueryLimitAndOffset($db_query, $query);
$this->setQueryJoins($db_query, $query);
$this->setQueryProperties($query);
$this->setQueryConditions($query);
$this->setQueryOrderBy($query);
$this->setQueryLimitAndOffset($query);
$this->setQueryJoins($query);

// $string = $db_query->__toString();
// $string = $this->dbQuery->__toString();
if ($query->count) {
$db_query = $db_query->countQuery();
$this->dbQuery = $this->dbQuery->countQuery();
}
return $db_query;
return $this->dbQuery;
}

/**
* Specify fields on DB query.
*
* @param Drupal\Core\Database\Query\Select $db_query
* A Drupal database query API object.
* @param Drupal\common\Storage\Query $query
* A DKAN query object.
*/
private function setQueryProperties(Select $db_query, Query $query) {
private function setQueryProperties(Query $query) {
// If properties is empty, just get all from base collection.
if (empty($query->properties)) {
$db_query->fields($this->alias);
$this->dbQuery->fields($this->alias);
return;
}

foreach ($query->properties as $p) {
$this->setQueryProperty($db_query, $p);
$this->setQueryProperty($p);
}
}

/**
* Set a single property.
*
* @param SeDrupal\Core\Database\Query\Select $db_query
* A Drupal database query API object.
* @param mixed $property
* One property from a query properties array.
*/
private function setQueryProperty(Select $db_query, $property) {
private function setQueryProperty($property) {
if (isset($property->expression)) {
$expressionStr = $this->expressionToString($property->expression);
$db_query->addExpression($expressionStr, $property->alias);
$this->dbQuery->addExpression($expressionStr, $property->alias);
}
else {
$property = $this->normalizeProperty($property);
$db_query->addField($property->collection, $property->property, $property->alias);
$this->dbQuery->addField($property->collection, $property->property, $property->alias);
}
}

Expand Down Expand Up @@ -226,51 +229,49 @@ private function propertyToString($property) {
/**
* Set filter conditions on DB query.
*
* @param Drupal\Core\Database\Query\Select $db_query
* A Drupal database query API object.
* @param Drupal\common\Storage\Query $query
* A DKAN query object.
*/
private function setQueryConditions(Select $db_query, Query $query) {
private function setQueryConditions(Query $query) {
foreach ($query->conditions as $c) {
if (isset($c->groupOperator)) {
$this->addConditionGroup($db_query, $c);
$this->addConditionGroup($this->dbQuery, $c);
}
else {
$this->addCondition($db_query, $c);
$this->addCondition($this->dbQuery, $c);
}
}
}

/**
* Add a condition to the DB query object.
*
* @param mixed $db_query
* @param \Drupal\Core\Database\Query\Select|\Drupal\Core\Database\Query\Condition $statementObj
* Drupal DB API select object or condition object.
* @param object $condition
* A condition from the DKAN query object.
*/
private function addCondition($db_query, $condition) {
private function addCondition($statementObj, $condition) {
if (!isset($condition->operator)) {
$condition->operator = '=';
}
$field = (isset($condition->collection) ? $condition->collection : $this->alias)
. '.'
. $condition->property;
$db_query->condition($field, $condition->value, strtoupper($condition->operator));
$statementObj->condition($field, $condition->value, strtoupper($condition->operator));
}

/**
* Add a condition group to the database query.
*
* @param Drupal\Core\Database\Query\Select|Drupal\Core\Database\Query\Condition $db_query
* @param Drupal\Core\Database\Query\Select|Drupal\Core\Database\Query\Condition $statementObj
* Drupal DB API select object.
* @param object $conditionGroup
* A condition from the DKAN query object.
*/
private function addConditionGroup($db_query, $conditionGroup) {
private function addConditionGroup($statementObj, $conditionGroup) {
$groupMethod = "{$conditionGroup->groupOperator}ConditionGroup";
$group = $db_query->$groupMethod();
$group = $this->dbQuery->$groupMethod();
foreach ($conditionGroup->conditions as $c) {
if (isset($c->groupOperator)) {
$this->addConditionGroup($group, $c);
Expand All @@ -279,20 +280,18 @@ private function addConditionGroup($db_query, $conditionGroup) {
$this->addCondition($group, $c);
}
}
$db_query->condition($group);
$statementObj->condition($group);
}

/**
* Set sort order on DB query.
*
* @param Drupal\Core\Database\Query\Select $db_query
* A Drupal database query API object.
* @param Query $query
* A DKAN query object.
*/
private function setQueryOrderBy(Select $db_query, Query $query) {
private function setQueryOrderBy(Query $query) {
foreach ($query->sorts as $sort) {
$this->setQueryDirectionOrderBy($sort, $db_query);
$this->setQueryDirectionOrderBy($sort, $this->dbQuery);
}
}

Expand All @@ -303,10 +302,8 @@ private function setQueryOrderBy(Select $db_query, Query $query) {
*
* @param object $sort
* The sort properties.
* @param Drupal\Core\Database\Query\Select $db_query
* A Drupal database query API object.
*/
private function setQueryDirectionOrderBy($sort, Select $db_query) {
private function setQueryDirectionOrderBy($sort) {
if (!is_object($sort) || !in_array($sort->order, ["asc", "desc"])) {
throw new \InvalidArgumentException("Invalid sort.");
}
Expand All @@ -318,41 +315,37 @@ private function setQueryDirectionOrderBy($sort, Select $db_query) {
if (isset($sort->collection)) {
$propertyStr = "{$sort->collection}.{$propertyStr}";
}
$db_query->orderBy($propertyStr, strtoupper($sort->order));
$this->dbQuery->orderBy($propertyStr, strtoupper($sort->order));
}

/**
* Set limit and offset on DB query.
*
* @param Drupal\Core\Database\Query\Select $db_query
* A Drupal database query API object.
* @param Query $query
* A DKAN query object.
*/
private function setQueryLimitAndOffset(Select $db_query, Query $query) {
private function setQueryLimitAndOffset(Query $query) {
if (isset($query->limit) && $query->limit !== NULL) {
$db_query->range(($query->offset ?? 0), ($query->limit));
$this->dbQuery->range(($query->offset ?? 0), ($query->limit));
}
elseif (isset($query->offset) && $query->offset) {
$db_query->range(($query->offset));
$this->dbQuery->range(($query->offset));
}
}

/**
* Add joins to the DB query.
*
* @param Drupal\Core\Database\Query\Select $db_query
* A Drupal database query API object.
* @param Query $query
* A DKAN query object.
*/
private function setQueryJoins(Select $db_query, Query $query) {
private function setQueryJoins(Query $query) {
foreach ($query->joins as $join) {
if (isset($join->condition)) {
$db_query->join($join->collection, $join->alias, $this->conditionString($join->condition));
$this->dbQuery->join($join->collection, $join->alias, $this->conditionString($join->condition));
}
if (empty($query->properties)) {
$db_query->fields($join->alias);
$this->dbQuery->fields($join->alias);
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions modules/common/tests/src/Functional/DkanStreamWrapperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@ public function testPublicScheme() {
$scheme = $manager->getScheme($uri);
$this->assertEquals("dkan", $scheme);
$descriptions = $manager->getDescriptions();
$this->assertContains("Simple way to request DKAN", "$descriptions[$scheme]");
$this->assertStringContainsString("Simple way to request DKAN", "$descriptions[$scheme]");
$names = $manager->getNames();
$this->assertEquals("DKAN documents", "$names[$scheme]");

$path = $manager->getViaScheme($scheme)->getDirectoryPath();
$this->assertContains("/api/1", $path);
$this->assertStringContainsString("/api/1", $path);
$ext = $manager->getViaScheme($scheme)->getExternalUrl();
$this->assertContains("http://web/api/1", $ext);
$this->assertStringContainsString("http://web/api/1", $ext);
}

}
8 changes: 6 additions & 2 deletions modules/common/tests/src/Traits/ServiceCheckTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
use MockChain\Options;

/**
*
* Provide methods for fetching and parsing container service arguments.
*/
trait ServiceCheckTrait {

Expand All @@ -18,8 +18,12 @@ trait ServiceCheckTrait {
private function getContainerOptionsForService($serviceName): Options {
$options = (new Options())->index(0);
$service = $this->checkService($serviceName);
$arguments = $service['arguments'];
// Extract services from service arguments.
$arguments = array_filter($service['arguments'], function ($arg) {
return preg_match('/^@[^@]/', $arg, $matches) === 1;
});
foreach ($arguments as $arg) {
// Extract service name from argument.
$arg = str_replace("@", '', $arg);
$argService = $this->checkService($arg);
$class = $argService['class'];
Expand Down
10 changes: 10 additions & 0 deletions modules/common/tests/src/Unit/Connection.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,16 @@ class Connection extends CoreConnection {
*/
public $driver = 'fake';

/**
* {@inheritdoc}
*/
protected $identifierQuotes = ['', ''];

/**
* {@inheritdoc}
*/
protected $statementClass = NULL;

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

0 comments on commit 9e33db8

Please sign in to comment.