PathContext.php in Acquia Lift Connector 8
File
src/Service/Context/PathContext.php
View source
<?php
namespace Drupal\acquia_lift\Service\Context;
use Symfony\Component\HttpFoundation\RequestStack;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Path\CurrentPathStack;
use Drupal\Component\Utility\UrlHelper;
use Drupal\Component\Utility\Html;
use Drupal\user\UserInterface;
use Drupal\acquia_lift\Service\Helper\PathMatcher;
use Drupal\acquia_lift\Service\Helper\SettingsHelper;
class PathContext {
private $credentialSettings;
private $identitySettings;
private $requestPathPatterns;
private $currentPath;
private $pathMatcher;
private $identity;
public function __construct(ConfigFactoryInterface $config_factory, CurrentPathStack $current_path_stack, RequestStack $request_stack, PathMatcher $pathMatcher) {
$settings = $config_factory
->get('acquia_lift.settings');
$credential_settings = $settings
->get('credential');
$identity_settings = $settings
->get('identity');
$visibilitySettings = $settings
->get('visibility');
$this->credentialSettings = $credential_settings;
$this->identitySettings = $identity_settings;
$this->requestPathPatterns = $visibilitySettings['path_patterns'];
$this->currentPath = $current_path_stack
->getPath();
$this->pathMatcher = $pathMatcher;
$this
->setIdentityByRequest($request_stack);
}
public function shouldAttach() {
if (SettingsHelper::isInvalidCredential($this->credentialSettings)) {
return FALSE;
}
if ($this->pathMatcher
->match($this->currentPath, $this->requestPathPatterns)) {
return FALSE;
}
return TRUE;
}
private function setIdentityByRequest($request_stack) {
if (empty($this->identitySettings['identity_parameter'])) {
return;
}
$query_string = $request_stack
->getCurrentRequest()
->getQueryString();
$parsed_query_string = UrlHelper::parse('?' . $query_string);
$queries = $parsed_query_string['query'];
$identity_parameter = $this->identitySettings['identity_parameter'];
if (empty($queries[$identity_parameter])) {
return;
}
$identity_type_parameter = $this->identitySettings['identity_type_parameter'];
$default_identity_type = $this->identitySettings['default_identity_type'];
$identity = $queries[$identity_parameter];
$identityType = empty($default_identity_type) ? SettingsHelper::DEFAULT_IDENTITY_TYPE_DEFAULT : $default_identity_type;
if (!empty($identity_type_parameter) && isset($queries[$identity_type_parameter])) {
$identityType = $queries[$identity_type_parameter];
}
$this
->setIdentity($identity, $identityType);
}
public function setIdentityByUser(UserInterface $user) {
if (empty($this->identitySettings['capture_identity'])) {
return;
}
$this
->setIdentity($user
->getEmail(), 'email');
}
private function setIdentity($identity, $identityType) {
$this->identity['identity'] = Html::escape($identity);
$this->identity['identityType'] = Html::escape($identityType);
}
public function getIdentity() {
return $this->identity;
}
}