Skip to content

Commit

Permalink
Fixes #457, #454, #452
Browse files Browse the repository at this point in the history
### Fixed
- Remove trailing `?` if token removed from URL (Fixes #457 part 2)
- Restore whitespace in SEO tokens (Fixes #452)

### Changed
- Sanitize URL before outputting in meta (Fixes #454)
  • Loading branch information
Tam committed Aug 23, 2023
1 parent f2b657b commit dc9fa7f
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 11 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
## 4.2.1 - 2023-08-23
### Fixed
- Remove trailing `?` if token removed from URL (Fixes #457 part 2)
- Restore whitespace in SEO tokens (Fixes #452)

### Changed
- Sanitize URL before outputting in meta (Fixes #454)

## 4.2.0 - 2023-08-18
### Fixed
- Fixed absolute URL including token query parameter (Fixes #457)
Expand Down
21 changes: 16 additions & 5 deletions src/models/data/SeoData.php
Original file line number Diff line number Diff line change
Expand Up @@ -385,16 +385,16 @@ public function getCanonical ()

public function getAbsolute ()
{
$url = Craft::$app->getRequest()->getAbsoluteUrl();
$url = filter_var(Craft::$app->getRequest()->getAbsoluteUrl(), FILTER_SANITIZE_URL);
$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $parts);

if (empty($parts)) return $url;

// Remove token param
unset($parts['token']);
unset($parts[Craft::$app->getConfig()->general->tokenParam]);

return preg_replace('/\?([^#]*)/m', '?' . http_build_query($parts), $url);
return rtrim(preg_replace('/\?([^#]*)/m', '?' . http_build_query($parts), $url), '?');
}

// Helpers
Expand Down Expand Up @@ -494,7 +494,7 @@ private function _render ($template, $variables)
$craft->sites->setCurrentSite($this->_element->site);
$craft->view->setTemplateMode(View::TEMPLATE_MODE_SITE);

$ret = Craft::$app->view->renderObjectTemplate(
$ret = $this->_renderObjectTemplate(
$template,
$variables
);
Expand All @@ -504,16 +504,27 @@ private function _render ($template, $variables)
}
else
{
$ret = Craft::$app->view->renderObjectTemplate(
$ret = $this->_renderObjectTemplate(
$template,
$variables
);
}

} catch (\Exception $e) {
$ret = 'ERROR: ' . $e->getMessage();
}

return $ret;
}

private function _renderObjectTemplate (string $template, mixed $object): string
{
$str = Craft::$app->view->renderObjectTemplate($template, $object);

// Craft trims whitespace which isn't what we want, so we'll restore it
preg_match_all('/^(?<s>\s+)|(?<e>\s+)$/m', $template, $matches, PREG_SET_ORDER);

return @$matches[0]['s'] . $str . @$matches[1]['e'];
}

}
8 changes: 2 additions & 6 deletions src/templates/_seo/fieldtype.twig
Original file line number Diff line number Diff line change
Expand Up @@ -98,13 +98,9 @@
{% for t in titleTemplate %}
{% set v = value.titleRaw[t.key] ?? value.titleAsTokens[t.key] ?? t.template %}
{% if t.locked %}
<span class="seo--snippet-title-locked" data-key="{{ t.key }}">
{{- v -}}
</span>
<span class="seo--snippet-title-locked" data-key="{{ t.key }}">{{ v }}</span>
{% else %}
<span class="seo--snippet-title-editable" contenteditable="true" data-key="{{ t.key }}">
{{- v -}}
</span>
<span class="seo--snippet-title-editable" contenteditable="true" data-key="{{ t.key }}">{{ v }}</span>
<input
type="hidden"
name="{{ name }}[titleRaw][{{ t.key }}]"
Expand Down

0 comments on commit dc9fa7f

Please sign in to comment.