You are here

public function TokenProcessor::tokenReplace in Lightweight Directory Access Protocol (LDAP) 8.3

Replace a token.

Parameters

array|UserInterface $resource: The resource to act upon.

string $text: The text such as "[dn]", "[cn]@my.org", "[displayName] [sn]", "Drupal Provisioned".

string $resource_type: What kind of type to replace.

Return value

string The text with tokens replaced or NULL if replacement not available.

File

ldap_servers/src/Processor/TokenProcessor.php, line 48

Class

TokenProcessor
Helper to manage LDAP tokens and process their content.

Namespace

Drupal\ldap_servers\Processor

Code

public function tokenReplace($resource, $text, $resource_type = 'ldap_entry') {

  // Desired tokens are of form "cn","mail", etc.
  $desired_tokens = ConversionHelper::findTokensNeededForTemplate($text);
  if (empty($desired_tokens)) {

    // If no tokens exist in text, return text itself.  It is literal value.
    return $text;
  }
  $tokens = [];
  switch ($resource_type) {
    case 'ldap_entry':
      $tokens = $this
        ->tokenizeLdapEntry($resource, $desired_tokens, self::PREFIX, self::SUFFIX);
      break;
    case 'user_account':
      $tokens = $this
        ->tokenizeUserAccount($resource, $desired_tokens, self::PREFIX, self::SUFFIX);
      break;
  }

  // Add lowercase tokens to avoid case sensitivity.
  foreach ($tokens as $attribute => $value) {
    $tokens[mb_strtolower($attribute)] = $value;
  }

  // Array of attributes (sn, givenname, etc)
  $attributes = array_keys($tokens);

  // Array of attribute values (Lincoln, Abe, etc)
  $values = array_values($tokens);

  // TODO: This comparison is likely not ideal:
  // The sub-functions redundantly lowercase replacements in addition to the
  // source formatting. Otherwise comparison would fail here in
  // case-insensitive requests. Ideally, a reimplementation would resolve this
  // redundant and inconsistent approach with a clearer API.
  $result = str_replace($attributes, $values, $text);

  // Strip out any unreplace tokens.
  $result = preg_replace('/^\\[.*\\]$/', '', $result);

  // Return NULL if $result is empty, else $result.
  if ($result == '') {
    return NULL;
  }
  else {
    return $result;
  }
}