Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release/3.15.3 #113

Merged
merged 5 commits into from
Jun 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ before starting to add changes. Use example [placed in the end of the page](#exa

## [Unreleased]

## [3.15.3] 2024-06-25

- [OS-74] Replacing DAWA matrikula select with Datafordeler select

## [3.15.2] 2024-05-27

- [#108](https://github.com/OS2Forms/os2forms/pull/108)
Expand Down
44 changes: 25 additions & 19 deletions modules/os2forms_dawa/src/Element/DawaElementAddressMatrikula.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,14 @@ public static function getCompositeElements(array $element) {
* Array of matrikula options key and the values are identical.
*/
private static function getMatrikulaOptions($addressValue, array $element) {
$options = [];

/** @var \Drupal\os2forms_dawa\Service\DawaService $dawaService */
$dawaService = \Drupal::service('os2forms_dawa.service');

/** @var \Drupal\os2forms_dawa\Plugin\os2web\DataLookup\DatafordelerDataLookupInterface $datafordelerLookup */
$datafordelerLookup = \Drupal::service('plugin.manager.os2web_datalookup')->createInstance('datafordeler_data_lookup');

// Getting address.
$addressParams = new ParameterBag();
$addressParams->set('q', $addressValue);
Expand All @@ -106,29 +111,30 @@ private static function getMatrikulaOptions($addressValue, array $element) {
$address = $dawaService->getSingleAddress($addressParams);

if ($address) {
// Getting matrikula options.
$matrikulaParams = new ParameterBag();
// Getting municipality code from address.
if ($municipality_code = $address->getMunicipalityCode()) {
$matrikulaParams->set('limit_by_municipality', $municipality_code);
}
// Getting property nr from address.
if ($property_nr = $address->getPropertyNumber()) {
$matrikulaParams->set('limit_by_property', $property_nr);
}
// If the matrikula option must not have the code.
if (isset($element['#remove_code'])) {
$matrikulaParams->set('remove_code', $element['#remove_code']);
}
$addressAccessId = $address->getAccessAddressId();

// Get the options.
$matrikulaOptions = $dawaService->getMatrikulaMatches($matrikulaParams);
// Find matrikula list from the houseid (husnummer):
$matrikulaIdList = $datafordelerLookup->getMatrikulaIds($addressAccessId);

// Use values as keys.
return array_combine($matrikulaOptions, $matrikulaOptions);
// Find Matrikula entry from matrikulas ID.
if (!empty($matrikulaIdList)) {
foreach ($matrikulaIdList as $matrikulaId) {
$matrikula = $datafordelerLookup->getMatrikulaEntry($matrikulaId);

if ($matrikula) {
$matrikulaOption = $matrikula->getMatrikulaNumber() . ' ' . $matrikula->getOwnershipName();

if (isset($element['#remove_code']) && !$element['#remove_code']) {
$matrikulaOption .= ' (' . $matrikula->getOwnerLicenseCode() . ')';
}

$options[$matrikulaOption] = $matrikulaOption;
}
}
}
}

return [];
return $options;
}

/**
Expand Down
83 changes: 83 additions & 0 deletions modules/os2forms_dawa/src/Entity/DatafordelerMatrikula.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
<?php

namespace Drupal\os2forms_dawa\Entity;

/**
* Class DatafordelerMatrikula.
*
* Wrapper class for Datafordeler matrikula object that easies
* the matrikula property access.
*/
class DatafordelerMatrikula {

/**
* Owner licence code / ejerlavskode.
*
* @var string
*/
protected string $ownerLicenseCode;

/**
* Ownership name / ejerlavsnavn.
*
* @var string
*/
protected string $ownershipName;


/**
* Matrikula number / matrikelnummer.
*
* @var string
*/
protected string $matrikulaNumber;

/**
* DawaAddress constructor.
*
* Fills the property from the provided JSON metadata.
*
* @param array $json
* Address properties as JSON metadata.
*/
public function __construct(array $json) {
if (isset($json['features']) && is_array($json['features'])) {
$jordstykke = $json['features'][0]['properties']['jordstykke'][0];

$this->ownerLicenseCode = $jordstykke['properties']['ejerlavskode'];
$this->ownershipName = $jordstykke['properties']['ejerlavsnavn'];
$this->matrikulaNumber = $jordstykke['properties']['matrikelnummer'];
}
}

/**
* Returns owner licence code.
*
* @return string
* Owners licence code.
*/
public function getOwnerLicenseCode(): string {
return $this->ownerLicenseCode;
}

/**
* Returns ownership name.
*
* @return string
* ownership name.
*/
public function getOwnershipName(): string {
return $this->ownershipName;
}

/**
* Returns makrikula number.
*
* @return string
* Matrikula number
*/
public function getMatrikulaNumber(): string {
return $this->matrikulaNumber;
}

}
18 changes: 18 additions & 0 deletions modules/os2forms_dawa/src/Entity/DawaAddress.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,13 @@ class DawaAddress {
*/
protected $longitude;

/**
* Address access ID.
*
* @var string
*/
protected $accessAddressId;

/**
* DawaAddress constructor.
*
Expand All @@ -61,6 +68,7 @@ public function __construct(array $json) {
$this->propertyNumber = $json['adgangsadresse']['esrejendomsnr'];
$this->longitude = $json['adgangsadresse']['adgangspunkt']['koordinater'][0];
$this->latitude = $json['adgangsadresse']['adgangspunkt']['koordinater'][1];
$this->accessAddressId = $json['adgangsadresse']['id'];
}
}

Expand Down Expand Up @@ -114,4 +122,14 @@ public function getLongitude() {
return $this->longitude;
}

/**
* Gets Address access ID.
*
* @return string
* Address access ID.
*/
public function getAccessAddressId() {
return $this->accessAddressId;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
<?php

namespace Drupal\os2forms_dawa\Plugin\os2web\DataLookup;

use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\os2forms_dawa\Entity\DatafordelerMatrikula;
use Drupal\os2web_datalookup\Plugin\os2web\DataLookup\DataLookupBase;
use GuzzleHttp\ClientInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
* Defines a plugin for Datafordeler Data.
*
* @DataLookup(
* id = "datafordeler_data_lookup",
* label = @Translation("Datafordeler Address Lookup"),
* )
*/
class DatafordelerDataLookup extends DataLookupBase implements DatafordelerDataLookupInterface, ContainerFactoryPluginInterface {

/**
* The HTTP client to fetch the feed data with.
*
* @var \GuzzleHttp\ClientInterface
*/
protected $httpClient;

/**
* {@inheritdoc}
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, ClientInterface $httpClient) {
$this->httpClient = $httpClient;
parent::__construct($configuration, $plugin_id, $plugin_definition);
}

/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static(
$configuration,
$plugin_id,
$plugin_definition,
$container->get('http_client'),
);
}

/**
* {@inheritdoc}
*/
public function getMatrikulaIds(string $addressAccessId) : array {
$url = "https://services.datafordeler.dk/BBR/BBRPublic/1/rest/grund";

$configuration = $this->getConfiguration();
$json = $this->httpClient->request('GET', $url, [
'query' => [
'husnummer' => $addressAccessId,
'status' => 7,
'username' => $configuration['username'],
'password' => $configuration['password'],
],
])->getBody();

$jsonDecoded = json_decode($json, TRUE);
if (is_array($jsonDecoded)) {
return $jsonDecoded[0]['jordstykkeList'];
}

return [];
}

/**
* {@inheritdoc}
*/
public function getMatrikulaEntry(string $matrikulaId) : ?DatafordelerMatrikula {
$url = "https://services.datafordeler.dk/Matriklen2/Matrikel/2.0.0/rest/SamletFastEjendom";

$configuration = $this->getConfiguration();
$json = $this->httpClient->request('GET', $url, [
'query' => [
'jordstykkeid' => $matrikulaId,
'username' => $configuration['username'],
'password' => $configuration['password'],
],
])->getBody();

$jsonDecoded = json_decode($json, TRUE);
if (is_array($jsonDecoded)) {
return new DatafordelerMatrikula($jsonDecoded);
}

return NULL;
}

/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'username' => '',
'password' => '',
] + parent::defaultConfiguration();
}

/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form['username'] = [
'#type' => 'textfield',
'#title' => $this->t('Username for service calls'),
'#default_value' => $this->configuration['username'],
'#required' => TRUE,
'#description' => $this->t('Username required for performing API requests'),
];
$form['password'] = [
'#type' => 'textfield',
'#title' => $this->t('Password for service calls'),
'#default_value' => $this->configuration['password'],
'#required' => TRUE,
'#description' => $this->t('Password required for performing API requests'),
];

return $form;
}

/**
* {@inheritdoc}
*/
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
$configuration = $this->getConfiguration();
$configuration['username'] = $form_state->getValue('username');
$configuration['password'] = $form_state->getValue('password');
$this->setConfiguration($configuration);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

namespace Drupal\os2forms_dawa\Plugin\os2web\DataLookup;

use Drupal\os2forms_dawa\Entity\DatafordelerMatrikula;
use Drupal\os2web_datalookup\Plugin\os2web\DataLookup\DataLookupInterface;

/**
* DatafordelerDataLookupInterface plugin interface.
*
* Provides functions for getting the plugin configuration values.
*
* @ingroup plugin_api
*/
interface DatafordelerDataLookupInterface extends DataLookupInterface {

/**
* Returns list of ID for Matrikula / jordstykke related with this address.
*
* @param string $addressAccessId
* Address to make search against.
*
* @return array
* List if IDs.
*/
public function getMatrikulaIds(string $addressAccessId) : array;

/**
* Returns matrikule entry that is found byt this ID.
*
* @param string $matrikulaId
* Id to make search against.
*
* @return \Drupal\os2forms_dawa\Entity\DatafordelerMatrikula|null
* Matrikula entry or NULL.
*/
public function getMatrikulaEntry(string $matrikulaId) : ?DatafordelerMatrikula;

}
4 changes: 2 additions & 2 deletions modules/os2forms_dawa/src/Service/DawaService.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
use Symfony\Component\HttpFoundation\ParameterBag;

/**
* Class AuthProviderService.
* DAWA API service class.
*
* @package Drupal\os2web_nemlogin\Service
* @package Drupal\os2forms_dawa\Service
*/
class DawaService {

Expand Down
Loading