Document the unsafe prefix
authorMarcel Werk <burntime@woltlab.com>
Mon, 29 Apr 2024 16:15:39 +0000 (18:15 +0200)
committerMarcel Werk <burntime@woltlab.com>
Mon, 29 Apr 2024 16:15:39 +0000 (18:15 +0200)
This PR intentionally removes a lot of unnecessary uses of the `@` operator. Having a few more calls to `htmlspecialchars()` makes no difference, but avoids potential security issues now or in the future, for example, when performing refactors.

Closes #424

32 files changed:
docs/javascript/general-usage.md
docs/migration/wsc60/templates.md
docs/php/api/form_builder/structure.md
docs/tutorial/series/part_1.md
docs/tutorial/series/part_2.md
docs/view/template-modifiers.md
docs/view/template-plugins.md
docs/view/templates.md
snippets/tutorial/tutorial-series/part-1/acptemplates/personAdd.tpl
snippets/tutorial/tutorial-series/part-1/acptemplates/personList.tpl
snippets/tutorial/tutorial-series/part-1/templates/personList.tpl
snippets/tutorial/tutorial-series/part-2/templateListener.xml
snippets/tutorial/tutorial-series/part-2/templates/__personListBirthday.tpl
snippets/tutorial/tutorial-series/part-3/acptemplates/personAdd.tpl
snippets/tutorial/tutorial-series/part-3/acptemplates/personList.tpl
snippets/tutorial/tutorial-series/part-3/templates/person.tpl
snippets/tutorial/tutorial-series/part-3/templates/personList.tpl
snippets/tutorial/tutorial-series/part-4/acptemplates/personAdd.tpl
snippets/tutorial/tutorial-series/part-4/acptemplates/personList.tpl
snippets/tutorial/tutorial-series/part-4/templates/boxPersonList.tpl
snippets/tutorial/tutorial-series/part-4/templates/person.tpl
snippets/tutorial/tutorial-series/part-4/templates/personList.tpl
snippets/tutorial/tutorial-series/part-5/acptemplates/personAdd.tpl
snippets/tutorial/tutorial-series/part-5/acptemplates/personList.tpl
snippets/tutorial/tutorial-series/part-5/templates/boxPersonList.tpl
snippets/tutorial/tutorial-series/part-5/templates/person.tpl
snippets/tutorial/tutorial-series/part-5/templates/personList.tpl
snippets/tutorial/tutorial-series/part-6/acptemplates/personAdd.tpl
snippets/tutorial/tutorial-series/part-6/acptemplates/personList.tpl
snippets/tutorial/tutorial-series/part-6/templates/boxPersonList.tpl
snippets/tutorial/tutorial-series/part-6/templates/person.tpl
snippets/tutorial/tutorial-series/part-6/templates/personList.tpl

index 34b6ca58bc2222062e6dd5d8709c10cae3d791a0..6398e82377d3b208d5d4ac80f6359533649f1ba6 100644 (file)
@@ -65,7 +65,7 @@ and thus avoid outdated caches by relying on a unique value, without invalidatin
 the cache more often that it needs to be.
 
 ```html
-<script data-relocate="true" src="{$__wcf->getPath('app')}js/App.js?t={@LAST_UPDATE_TIME}"></script>
+<script data-relocate="true" src="{$__wcf->getPath('app')}js/App.js?t={LAST_UPDATE_TIME}"></script>
 ```
 
 For small scripts you can simply serve the full, non-minified version to the user
@@ -80,7 +80,7 @@ the minified and optimized file to the average visitor. You should use the
 `ENABLE_DEBUG_MODE` constant to decide which version should be loaded.
 
 ```html
-<script data-relocate="true" src="{$__wcf->getPath('app')}js/App{if !ENABLE_DEBUG_MODE}.min{/if}.js?t={@LAST_UPDATE_TIME}"></script>
+<script data-relocate="true" src="{$__wcf->getPath('app')}js/App{if !ENABLE_DEBUG_MODE}.min{/if}.js?t={LAST_UPDATE_TIME}"></script>
 ```
 
 ### The Accelerated Guest View ("Tiny Builds")
@@ -91,7 +91,7 @@ The “Accelerated Guest View” aims to decrease page size and to improve respo
 If you are providing a separate compiled build for this mode, you'll need to include yet another switch to serve the right version to the visitor.
 
 ```html
-<script data-relocate="true" src="{$__wcf->getPath('app')}js/App{if !ENABLE_DEBUG_MODE}{if VISITOR_USE_TINY_BUILD}.tiny{/if}.min{/if}.js?t={@LAST_UPDATE_TIME}"></script>
+<script data-relocate="true" src="{$__wcf->getPath('app')}js/App{if !ENABLE_DEBUG_MODE}{if VISITOR_USE_TINY_BUILD}.tiny{/if}.min{/if}.js?t={LAST_UPDATE_TIME}"></script>
 ```
 
 ### The `{js}` Template Plugin
index cfce471b50468d13a079cf41016ba197369e3f65..c69e8d76c0838b80f25b8698f51bc74186144874 100644 (file)
@@ -1,5 +1,18 @@
 # Migrating from WoltLab Suite 6.0 - Templates
 
+## `unsafe` Prefix
+
+The `unsafe` prefix is intended as a replacement for the `@` prefix in order to output the content of a variable unfiltered. The new prefix offers better readability and makes it easier to find places where the prefix is used unintentionally. The old `@` prefix is still supported, but we recommend using the new prefix for new code.
+
+Usage:
+
+```smarty
+Old: {@$foo}
+New: {unsafe:$foo}
+```
+
+The code listed above outputs the raw content of the variable `$foo`.
+
 ## Shared Templates
 
 Shared templates, applicable both in the frontend and the backend, are now standardized to begin with the
index ee53d4cd69c0c3ce68473f1cd1cea22c1f2510f4..2aaea30f30a0a71cb505a23cd8de62f508e0127c 100644 (file)
@@ -434,7 +434,7 @@ Form fields that have a default id have to use `TDefaultIdFormField` and have to
 The only thing to do in a template to display the **whole** form including all of the necessary JavaScript is to put
 
 ```smarty
-{@$form->getHtml()}
+{unsafe:$form->getHtml()}
 ```
 
 into the template file at the relevant position.
index da64649d05d1b8e9e42a9e2a6b8ed61c745c3b43..74ce02a75d212e34db2cfff3ad2b8aac2f0df96e 100644 (file)
@@ -257,7 +257,7 @@ Because of using form builder, we only have to set up the two form fields for en
 We will now only concentrate on the new parts compared to `personList.tpl`:
 
 1. We use the `$action` variable to distinguish between the languages items used for adding a person and for creating a person.
-1. Because of form builder, we only have to call `{@$form->getHtml()}` to generate all relevant output for the form.
+1. Because of form builder, we only have to call `{unsafe:$form->getHtml()}` to generate all relevant output for the form.
 
 ### Person Edit Form
 
index 1cc95497b1c86208f83826e9f49430eb4086405e..b96e320a2a54f7538aed7bd743967cf3bd84b3a7 100644 (file)
@@ -138,13 +138,13 @@ As the relevant template codes are only one line each, we will simply put them d
 The code for the table head is similar to the other `th` elements:
 
 ```smarty
-<th class="columnDate columnBirthday{if $sortField == 'birthday'} active {$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={@$pageNo}&sortField=birthday&sortOrder={if $sortField == 'birthday' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.birthday{/lang}</a></th>
+<th class="columnDate columnBirthday{if $sortField == 'birthday'} active {$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={$pageNo}&sortField=birthday&sortOrder={if $sortField == 'birthday' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.birthday{/lang}</a></th>
 ```
 
 For the table body’s column, we need to make sure that the birthday is only show if it is actually set:
 
 ```smarty
-<td class="columnDate columnBirthday">{if $person->birthday}{@$person->birthday|strtotime|date}{/if}</td>
+<td class="columnDate columnBirthday">{if $person->birthday}{$person->birthday|strtotime|date}{/if}</td>
 ```
 
 
index 3f70d79b8f06c437ddc57a4d7250968b7def2e24..f2e3dcd9edcd2874b203622f227471fcf7569919 100644 (file)
@@ -54,7 +54,7 @@ A modifier may accept additional parameters that affect its behavior. These para
 
 ```smarty
 <script>
-       var foo = '{@$foo|encodeJS}';
+       var foo = '{unsafe:$foo|encodeJS}';
 </script>
 ```
 
@@ -63,7 +63,7 @@ A modifier may accept additional parameters that affect its behavior. These para
 `escapeCDATA` encodes a string to be used in a `CDATA` element by replacing `]]>` with `]]]]><![CDATA[>`.
 
 ```smarty
-<![CDATA[{@$foo|encodeCDATA}]]>
+<![CDATA[{unsafe:$foo|encodeCDATA}]]>
 ```
 
 
@@ -98,7 +98,7 @@ A modifier may accept additional parameters that affect its behavior. These para
 
 ```smarty
 <script>
-let data = { "title": {@$foo->getTitle()|json} };
+let data = { "title": {unsafe:$foo->getTitle()|json} };
 </script>
 ```
 
index ffd3fc1ead56dcce658766f1ea593ba45641b0cd..9cd137a35ada28118a09b440fff563703a8d4328 100644 (file)
@@ -470,7 +470,7 @@ For detailed information on its usage, we refer to the extensive documentation i
 ```smarty
 {pages controller='FooList' link="pageNo=%d" print=true assign=pagesLinks} {* prints pagination *}
 
-{@$pagesLinks} {* prints same pagination again *}
+{unsafe:$pagesLinks} {* prints same pagination again *}
 ```
 
 | Attribute | Description |
@@ -611,7 +611,7 @@ Examples:
 generates
 
 ```smarty
-<a href="{$user->getLink()}" data-object-id="{$user->userID}" class="userLink">{@$user->getFormattedUsername()}</a>
+<a href="{$user->getLink()}" data-object-id="{$user->userID}" class="userLink">{unsafe:$user->getFormattedUsername()}</a>
 ```
 
 and
@@ -623,5 +623,5 @@ and
 generates
 
 ```smarty
-<a href="{$user->getLink()}" foo="bar">{@$object->getAvatar()->getImageTag(48)}</a>
+<a href="{$user->getLink()}" foo="bar">{unsafe:$object->getAvatar()->getImageTag(48)}</a>
 ```
index 0b08280dd6c9fa222ed10adf551623fe10ef7233..ffd834b4b970e13a7c2dfd6a422077cc0156a99b 100644 (file)
@@ -87,7 +87,7 @@ More information about installing templates can be found on those pages.
                                                {if $errorType == 'empty'}
                                                        {lang}wcf.global.form.error.empty{/lang}
                                                {else}
-                                                       {lang}foo.bar.baz.error.{@$errorType}{/lang}
+                                                       {lang}foo.bar.baz.error.{$errorType}{/lang}
                                                {/if}
                                        </small>
                                {/if}
@@ -99,7 +99,7 @@ More information about installing templates can be found on those pages.
                        <dd>
                                <textarea name="bar" id="bar" cols="40" rows="10">{$bar}</textarea>
                                {if $errorField == 'bar'}
-                                       <small class="innerError">{lang}foo.bar.bar.error.{@$errorType}{/lang}</small>
+                                       <small class="innerError">{lang}foo.bar.bar.error.{$errorType}{/lang}</small>
                                {/if}
                        </dd>
                </dl>
@@ -178,8 +178,9 @@ Template variables can be assigned via `WCF::getTPL()->assign('foo', 'bar')` and
 - `{$foo}` will result in the contents of `$foo` to be passed to `StringUtil::encodeHTML()` before being printed.
 - `{#$foo}` will result in the contents of `$foo` to be passed to `StringUtil::formatNumeric()` before being printed.
   Thus, this method is relevant when printing numbers and having them formatted correctly according the the user’s language.
-- `{@$foo}` will result in the contents of `$foo` to be printed directly.
-  In general, this method should not be used for user-generated input.
+- `{unsafe:$foo}` will result in the contents of `$foo` to be printed directly.
+  This method should only be used if you want to output the content of the variable directly and unfiltered.
+  Never use this method for user-generated input that has not already been sanitized by other means.
 
 Multiple template variables can be assigned by passing an array:
 
index c1df9d11b146cfc21b996f023e1405fad0a17981..198d49dad9b859aaf106337bab752b6bd705db29 100644 (file)
@@ -14,6 +14,6 @@
        </nav>
 </header>
 
-{@$form->getHtml()}
+{unsafe:$form->getHtml()}
 
 {include file='footer'}
index caa87a9af2776837d1fa8b6f834552d41055167c..2b5f5855c8d4b78bc5ef59c142e3e1e66646396f 100644 (file)
@@ -25,9 +25,9 @@
                <table class="table jsObjectActionContainer" data-object-action-class-name="wcf\data\person\PersonAction">
                        <thead>
                                <tr>
-                                       <th class="columnID columnPersonID{if $sortField == 'personID'} active {@$sortOrder}{/if}" colspan="2"><a href="{link controller='PersonList'}pageNo={@$pageNo}&sortField=personID&sortOrder={if $sortField == 'personID' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.global.objectID{/lang}</a></th>
-                                       <th class="columnTitle columnFirstName{if $sortField == 'firstName'} active {@$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={@$pageNo}&sortField=firstName&sortOrder={if $sortField == 'firstName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.firstName{/lang}</a></th>
-                                       <th class="columnTitle columnLastName{if $sortField == 'lastName'} active {@$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={@$pageNo}&sortField=lastName&sortOrder={if $sortField == 'lastName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.lastName{/lang}</a></th>
+                                       <th class="columnID columnPersonID{if $sortField == 'personID'} active {$sortOrder}{/if}" colspan="2"><a href="{link controller='PersonList'}pageNo={$pageNo}&sortField=personID&sortOrder={if $sortField == 'personID' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.global.objectID{/lang}</a></th>
+                                       <th class="columnTitle columnFirstName{if $sortField == 'firstName'} active {$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={$pageNo}&sortField=firstName&sortOrder={if $sortField == 'firstName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.firstName{/lang}</a></th>
+                                       <th class="columnTitle columnLastName{if $sortField == 'lastName'} active {$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={$pageNo}&sortField=lastName&sortOrder={if $sortField == 'lastName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.lastName{/lang}</a></th>
                                        
                                        {event name='columnHeads'}
                                </tr>
@@ -35,7 +35,7 @@
                        
                        <tbody class="jsReloadPageWhenEmpty">
                                {foreach from=$objects item=person}
-                                       <tr class="jsObjectActionObject" data-object-id="{@$person->getObjectID()}">
+                                       <tr class="jsObjectActionObject" data-object-id="{$person->getObjectID()}">
                                                <td class="columnIcon">
                                                        <a href="{link controller='PersonEdit' object=$person}{/link}" title="{lang}wcf.global.button.edit{/lang}" class="jsTooltip">{icon name='pencil'}</a>
                                                        {objectAction action="delete" objectTitle=$person->getTitle()}
@@ -56,7 +56,7 @@
        <footer class="contentFooter">
                {hascontent}
                        <div class="paginationBottom">
-                               {content}{@$pagesLinks}{/content}
+                               {content}{unsafe:$pagesLinks}{/content}
                        </div>
                {/hascontent}
                
index b2eab30687f1617f01341f6f0ff3ee24e9739066..61203a2a3a64f47f762edc82a3fc5216502b01c5 100644 (file)
@@ -2,12 +2,12 @@
 
 {capture assign='headContent'}
        {if $pageNo < $pages}
-               <link rel="next" href="{link controller='PersonList'}pageNo={@$pageNo+1}{/link}">
+               <link rel="next" href="{link controller='PersonList'}pageNo={$pageNo+1}{/link}">
        {/if}
        {if $pageNo > 1}
-               <link rel="prev" href="{link controller='PersonList'}{if $pageNo > 2}pageNo={@$pageNo-1}{/if}{/link}">
+               <link rel="prev" href="{link controller='PersonList'}{if $pageNo > 2}pageNo={$pageNo-1}{/if}{/link}">
        {/if}
-       <link rel="canonical" href="{link controller='PersonList'}{if $pageNo > 1}pageNo={@$pageNo}{/if}{/link}">
+       <link rel="canonical" href="{link controller='PersonList'}{if $pageNo > 1}pageNo={$pageNo}{/if}{/link}">
 {/capture}
 
 {capture assign='sidebarRight'}
@@ -86,7 +86,7 @@
 <footer class="contentFooter">
        {hascontent}
                <div class="paginationBottom">
-                       {content}{@$pagesLinks}{/content}
+                       {content}{unsafe:$pagesLinks}{/content}
                </div>
        {/hascontent}
        
index fbe8f05ecd42c774549cd6d059ddd17bd73a297b..8de475fc7092eb00bc8b0c4760f45f5d487fd024 100644 (file)
@@ -5,13 +5,13 @@
                <templatelistener name="personListBirthdayColumnHead">
                        <eventname>columnHeads</eventname>
                        <environment>admin</environment>
-                       <templatecode><![CDATA[<th class="columnDate columnBirthday{if $sortField == 'birthday'} active {@$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={@$pageNo}&sortField=birthday&sortOrder={if $sortField == 'birthday' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.birthday{/lang}</a></th>]]></templatecode>
+                       <templatecode><![CDATA[<th class="columnDate columnBirthday{if $sortField == 'birthday'} active {$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={$pageNo}&sortField=birthday&sortOrder={if $sortField == 'birthday' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.birthday{/lang}</a></th>]]></templatecode>
                        <templatename>personList</templatename>
                </templatelistener>
                <templatelistener name="personListBirthdayColumn">
                        <eventname>columns</eventname>
                        <environment>admin</environment>
-                       <templatecode><![CDATA[<td class="columnDate columnBirthday">{if $person->birthday}{@$person->birthday|strtotime|date}{/if}</td>]]></templatecode>
+                       <templatecode><![CDATA[<td class="columnDate columnBirthday">{if $person->birthday}{$person->birthday|strtotime|date}{/if}</td>]]></templatecode>
                        <templatename>personList</templatename>
                </templatelistener>
                <!-- /admin -->
index 5cdf561eb0a0c2c56be56480933dd8b94a6297d8..8179d40a9bd39418e34185a6332193a5f3934e6a 100644 (file)
@@ -1,4 +1,4 @@
 {if $person->birthday}
        <dt>{lang}wcf.person.birthday{/lang}</dt>
-       <dd>{@$person->birthday|strtotime|date}</dd>
+       <dd>{$person->birthday|strtotime|date}</dd>
 {/if}
index c1df9d11b146cfc21b996f023e1405fad0a17981..198d49dad9b859aaf106337bab752b6bd705db29 100644 (file)
@@ -14,6 +14,6 @@
        </nav>
 </header>
 
-{@$form->getHtml()}
+{unsafe:$form->getHtml()}
 
 {include file='footer'}
index caa87a9af2776837d1fa8b6f834552d41055167c..2b5f5855c8d4b78bc5ef59c142e3e1e66646396f 100644 (file)
@@ -25,9 +25,9 @@
                <table class="table jsObjectActionContainer" data-object-action-class-name="wcf\data\person\PersonAction">
                        <thead>
                                <tr>
-                                       <th class="columnID columnPersonID{if $sortField == 'personID'} active {@$sortOrder}{/if}" colspan="2"><a href="{link controller='PersonList'}pageNo={@$pageNo}&sortField=personID&sortOrder={if $sortField == 'personID' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.global.objectID{/lang}</a></th>
-                                       <th class="columnTitle columnFirstName{if $sortField == 'firstName'} active {@$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={@$pageNo}&sortField=firstName&sortOrder={if $sortField == 'firstName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.firstName{/lang}</a></th>
-                                       <th class="columnTitle columnLastName{if $sortField == 'lastName'} active {@$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={@$pageNo}&sortField=lastName&sortOrder={if $sortField == 'lastName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.lastName{/lang}</a></th>
+                                       <th class="columnID columnPersonID{if $sortField == 'personID'} active {$sortOrder}{/if}" colspan="2"><a href="{link controller='PersonList'}pageNo={$pageNo}&sortField=personID&sortOrder={if $sortField == 'personID' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.global.objectID{/lang}</a></th>
+                                       <th class="columnTitle columnFirstName{if $sortField == 'firstName'} active {$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={$pageNo}&sortField=firstName&sortOrder={if $sortField == 'firstName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.firstName{/lang}</a></th>
+                                       <th class="columnTitle columnLastName{if $sortField == 'lastName'} active {$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={$pageNo}&sortField=lastName&sortOrder={if $sortField == 'lastName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.lastName{/lang}</a></th>
                                        
                                        {event name='columnHeads'}
                                </tr>
@@ -35,7 +35,7 @@
                        
                        <tbody class="jsReloadPageWhenEmpty">
                                {foreach from=$objects item=person}
-                                       <tr class="jsObjectActionObject" data-object-id="{@$person->getObjectID()}">
+                                       <tr class="jsObjectActionObject" data-object-id="{$person->getObjectID()}">
                                                <td class="columnIcon">
                                                        <a href="{link controller='PersonEdit' object=$person}{/link}" title="{lang}wcf.global.button.edit{/lang}" class="jsTooltip">{icon name='pencil'}</a>
                                                        {objectAction action="delete" objectTitle=$person->getTitle()}
@@ -56,7 +56,7 @@
        <footer class="contentFooter">
                {hascontent}
                        <div class="paginationBottom">
-                               {content}{@$pagesLinks}{/content}
+                               {content}{unsafe:$pagesLinks}{/content}
                        </div>
                {/hascontent}
                
index 4f6bebd2a0cc6b08d2d5f170aff067f27f40805e..977127f903075aff57b2943765eb2e3bbf04e0d5 100644 (file)
                        <div class="personComments">
                                <ul id="personCommentList" class="commentList containerList" {*
                                        *}data-can-add="{if $commentCanAdd}true{else}false{/if}" {*
-                                       *}data-object-id="{@$person->personID}" {*
-                                       *}data-object-type-id="{@$commentObjectTypeID}" {*
-                                       *}data-comments="{if $person->comments}{@$commentList->countObjects()}{else}0{/if}" {*
-                                       *}data-last-comment-time="{@$lastCommentTime}" {*
+                                       *}data-object-id="{$person->personID}" {*
+                                       *}data-object-type-id="{$commentObjectTypeID}" {*
+                                       *}data-comments="{if $person->comments}{$commentList->countObjects()}{else}0{/if}" {*
+                                       *}data-last-comment-time="{$lastCommentTime}" {*
                                *}>
                                        {include file='commentListAddComment' wysiwygSelector='personCommentListAddComment'}
                                        {include file='commentList'}
index 089b0fa79e02ddbf79e475ef730cc6099f537a9a..680bf58b5e536bd2d0f3579a2b906bf50b8356de 100644 (file)
@@ -2,12 +2,12 @@
 
 {capture assign='headContent'}
        {if $pageNo < $pages}
-               <link rel="next" href="{link controller='PersonList'}pageNo={@$pageNo+1}{/link}">
+               <link rel="next" href="{link controller='PersonList'}pageNo={$pageNo+1}{/link}">
        {/if}
        {if $pageNo > 1}
-               <link rel="prev" href="{link controller='PersonList'}{if $pageNo > 2}pageNo={@$pageNo-1}{/if}{/link}">
+               <link rel="prev" href="{link controller='PersonList'}{if $pageNo > 2}pageNo={$pageNo-1}{/if}{/link}">
        {/if}
-       <link rel="canonical" href="{link controller='PersonList'}{if $pageNo > 1}pageNo={@$pageNo}{/if}{/link}">
+       <link rel="canonical" href="{link controller='PersonList'}{if $pageNo > 1}pageNo={$pageNo}{/if}{/link}">
 {/capture}
 
 {capture assign='sidebarRight'}
@@ -93,7 +93,7 @@
 <footer class="contentFooter">
        {hascontent}
                <div class="paginationBottom">
-                       {content}{@$pagesLinks}{/content}
+                       {content}{unsafe:$pagesLinks}{/content}
                </div>
        {/hascontent}
        
index c1df9d11b146cfc21b996f023e1405fad0a17981..198d49dad9b859aaf106337bab752b6bd705db29 100644 (file)
@@ -14,6 +14,6 @@
        </nav>
 </header>
 
-{@$form->getHtml()}
+{unsafe:$form->getHtml()}
 
 {include file='footer'}
index caa87a9af2776837d1fa8b6f834552d41055167c..2b5f5855c8d4b78bc5ef59c142e3e1e66646396f 100644 (file)
@@ -25,9 +25,9 @@
                <table class="table jsObjectActionContainer" data-object-action-class-name="wcf\data\person\PersonAction">
                        <thead>
                                <tr>
-                                       <th class="columnID columnPersonID{if $sortField == 'personID'} active {@$sortOrder}{/if}" colspan="2"><a href="{link controller='PersonList'}pageNo={@$pageNo}&sortField=personID&sortOrder={if $sortField == 'personID' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.global.objectID{/lang}</a></th>
-                                       <th class="columnTitle columnFirstName{if $sortField == 'firstName'} active {@$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={@$pageNo}&sortField=firstName&sortOrder={if $sortField == 'firstName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.firstName{/lang}</a></th>
-                                       <th class="columnTitle columnLastName{if $sortField == 'lastName'} active {@$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={@$pageNo}&sortField=lastName&sortOrder={if $sortField == 'lastName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.lastName{/lang}</a></th>
+                                       <th class="columnID columnPersonID{if $sortField == 'personID'} active {$sortOrder}{/if}" colspan="2"><a href="{link controller='PersonList'}pageNo={$pageNo}&sortField=personID&sortOrder={if $sortField == 'personID' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.global.objectID{/lang}</a></th>
+                                       <th class="columnTitle columnFirstName{if $sortField == 'firstName'} active {$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={$pageNo}&sortField=firstName&sortOrder={if $sortField == 'firstName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.firstName{/lang}</a></th>
+                                       <th class="columnTitle columnLastName{if $sortField == 'lastName'} active {$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={$pageNo}&sortField=lastName&sortOrder={if $sortField == 'lastName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.lastName{/lang}</a></th>
                                        
                                        {event name='columnHeads'}
                                </tr>
@@ -35,7 +35,7 @@
                        
                        <tbody class="jsReloadPageWhenEmpty">
                                {foreach from=$objects item=person}
-                                       <tr class="jsObjectActionObject" data-object-id="{@$person->getObjectID()}">
+                                       <tr class="jsObjectActionObject" data-object-id="{$person->getObjectID()}">
                                                <td class="columnIcon">
                                                        <a href="{link controller='PersonEdit' object=$person}{/link}" title="{lang}wcf.global.button.edit{/lang}" class="jsTooltip">{icon name='pencil'}</a>
                                                        {objectAction action="delete" objectTitle=$person->getTitle()}
@@ -56,7 +56,7 @@
        <footer class="contentFooter">
                {hascontent}
                        <div class="paginationBottom">
-                               {content}{@$pagesLinks}{/content}
+                               {content}{unsafe:$pagesLinks}{/content}
                        </div>
                {/hascontent}
                
index 4343d76325cb1da2e402ed3c246b1441f481c6fa..b24b75100d119e31746bc9ee8ee2b4ef76dd56ba 100644 (file)
@@ -7,7 +7,7 @@
                 <h3>{anchor object=$boxPerson}</h3>
                 {capture assign='__boxPersonDescription'}{lang __optional=true}wcf.person.boxList.description.{$boxSortField}{/lang}{/capture}
                 {if $__boxPersonDescription}
-                    <small>{@$__boxPersonDescription}</small>
+                    <small>{unsafe:$__boxPersonDescription}</small>
                 {/if}
             </div>
         </li>
index 4f6bebd2a0cc6b08d2d5f170aff067f27f40805e..977127f903075aff57b2943765eb2e3bbf04e0d5 100644 (file)
                        <div class="personComments">
                                <ul id="personCommentList" class="commentList containerList" {*
                                        *}data-can-add="{if $commentCanAdd}true{else}false{/if}" {*
-                                       *}data-object-id="{@$person->personID}" {*
-                                       *}data-object-type-id="{@$commentObjectTypeID}" {*
-                                       *}data-comments="{if $person->comments}{@$commentList->countObjects()}{else}0{/if}" {*
-                                       *}data-last-comment-time="{@$lastCommentTime}" {*
+                                       *}data-object-id="{$person->personID}" {*
+                                       *}data-object-type-id="{$commentObjectTypeID}" {*
+                                       *}data-comments="{if $person->comments}{$commentList->countObjects()}{else}0{/if}" {*
+                                       *}data-last-comment-time="{$lastCommentTime}" {*
                                *}>
                                        {include file='commentListAddComment' wysiwygSelector='personCommentListAddComment'}
                                        {include file='commentList'}
index 089b0fa79e02ddbf79e475ef730cc6099f537a9a..680bf58b5e536bd2d0f3579a2b906bf50b8356de 100644 (file)
@@ -2,12 +2,12 @@
 
 {capture assign='headContent'}
        {if $pageNo < $pages}
-               <link rel="next" href="{link controller='PersonList'}pageNo={@$pageNo+1}{/link}">
+               <link rel="next" href="{link controller='PersonList'}pageNo={$pageNo+1}{/link}">
        {/if}
        {if $pageNo > 1}
-               <link rel="prev" href="{link controller='PersonList'}{if $pageNo > 2}pageNo={@$pageNo-1}{/if}{/link}">
+               <link rel="prev" href="{link controller='PersonList'}{if $pageNo > 2}pageNo={$pageNo-1}{/if}{/link}">
        {/if}
-       <link rel="canonical" href="{link controller='PersonList'}{if $pageNo > 1}pageNo={@$pageNo}{/if}{/link}">
+       <link rel="canonical" href="{link controller='PersonList'}{if $pageNo > 1}pageNo={$pageNo}{/if}{/link}">
 {/capture}
 
 {capture assign='sidebarRight'}
@@ -93,7 +93,7 @@
 <footer class="contentFooter">
        {hascontent}
                <div class="paginationBottom">
-                       {content}{@$pagesLinks}{/content}
+                       {content}{unsafe:$pagesLinks}{/content}
                </div>
        {/hascontent}
        
index c1df9d11b146cfc21b996f023e1405fad0a17981..198d49dad9b859aaf106337bab752b6bd705db29 100644 (file)
@@ -14,6 +14,6 @@
        </nav>
 </header>
 
-{@$form->getHtml()}
+{unsafe:$form->getHtml()}
 
 {include file='footer'}
index caa87a9af2776837d1fa8b6f834552d41055167c..2b5f5855c8d4b78bc5ef59c142e3e1e66646396f 100644 (file)
@@ -25,9 +25,9 @@
                <table class="table jsObjectActionContainer" data-object-action-class-name="wcf\data\person\PersonAction">
                        <thead>
                                <tr>
-                                       <th class="columnID columnPersonID{if $sortField == 'personID'} active {@$sortOrder}{/if}" colspan="2"><a href="{link controller='PersonList'}pageNo={@$pageNo}&sortField=personID&sortOrder={if $sortField == 'personID' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.global.objectID{/lang}</a></th>
-                                       <th class="columnTitle columnFirstName{if $sortField == 'firstName'} active {@$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={@$pageNo}&sortField=firstName&sortOrder={if $sortField == 'firstName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.firstName{/lang}</a></th>
-                                       <th class="columnTitle columnLastName{if $sortField == 'lastName'} active {@$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={@$pageNo}&sortField=lastName&sortOrder={if $sortField == 'lastName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.lastName{/lang}</a></th>
+                                       <th class="columnID columnPersonID{if $sortField == 'personID'} active {$sortOrder}{/if}" colspan="2"><a href="{link controller='PersonList'}pageNo={$pageNo}&sortField=personID&sortOrder={if $sortField == 'personID' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.global.objectID{/lang}</a></th>
+                                       <th class="columnTitle columnFirstName{if $sortField == 'firstName'} active {$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={$pageNo}&sortField=firstName&sortOrder={if $sortField == 'firstName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.firstName{/lang}</a></th>
+                                       <th class="columnTitle columnLastName{if $sortField == 'lastName'} active {$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={$pageNo}&sortField=lastName&sortOrder={if $sortField == 'lastName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.lastName{/lang}</a></th>
                                        
                                        {event name='columnHeads'}
                                </tr>
@@ -35,7 +35,7 @@
                        
                        <tbody class="jsReloadPageWhenEmpty">
                                {foreach from=$objects item=person}
-                                       <tr class="jsObjectActionObject" data-object-id="{@$person->getObjectID()}">
+                                       <tr class="jsObjectActionObject" data-object-id="{$person->getObjectID()}">
                                                <td class="columnIcon">
                                                        <a href="{link controller='PersonEdit' object=$person}{/link}" title="{lang}wcf.global.button.edit{/lang}" class="jsTooltip">{icon name='pencil'}</a>
                                                        {objectAction action="delete" objectTitle=$person->getTitle()}
@@ -56,7 +56,7 @@
        <footer class="contentFooter">
                {hascontent}
                        <div class="paginationBottom">
-                               {content}{@$pagesLinks}{/content}
+                               {content}{unsafe:$pagesLinks}{/content}
                        </div>
                {/hascontent}
                
index 4343d76325cb1da2e402ed3c246b1441f481c6fa..b24b75100d119e31746bc9ee8ee2b4ef76dd56ba 100644 (file)
@@ -7,7 +7,7 @@
                 <h3>{anchor object=$boxPerson}</h3>
                 {capture assign='__boxPersonDescription'}{lang __optional=true}wcf.person.boxList.description.{$boxSortField}{/lang}{/capture}
                 {if $__boxPersonDescription}
-                    <small>{@$__boxPersonDescription}</small>
+                    <small>{unsafe:$__boxPersonDescription}</small>
                 {/if}
             </div>
         </li>
index 1d61b7f5618bdc88c46e4ef279bb0739251f9f1e..0578048ea838e1ba5134006ae613e38175104d8b 100644 (file)
@@ -32,7 +32,7 @@
                        {/if}
                        
                        {foreach from=$person->getInformation() item=$information}
-                               <li class="comment personInformation jsObjectActionObject" data-object-id="{@$information->getObjectID()}">
+                               <li class="comment personInformation jsObjectActionObject" data-object-id="{$information->getObjectID()}">
                                        <div class="box48{if $__wcf->getUserProfileHandler()->isIgnoredUser($information->userID, 2)} ignoredUserContent{/if}">
                                                {user object=$information->getUserProfile() type='avatar48' ariaHidden='true' tabindex='-1'}
                                                
                                                                                        <span>{$information->username}</span>
                                                                                {/if}
                                                                                
-                                                                               <small class="separatorLeft">{@$information->time|time}</small>
+                                                                               <small class="separatorLeft">{unsafe:$information->time|time}</small>
                                                                        </h3>
                                                                </div>
                                                                
-                                                               <div class="htmlContent userMessage" id="personInformation{@$information->getObjectID()}">
-                                                                       {@$information->getFormattedInformation()}
+                                                               <div class="htmlContent userMessage" id="personInformation{$information->getObjectID()}">
+                                                                       {unsafe:$information->getFormattedInformation()}
                                                                </div>
                                                                
                                                                <nav class="jsMobileNavigation buttonGroupNavigation">
                        <div class="personComments">
                                <ul id="personCommentList" class="commentList containerList" {*
                                        *}data-can-add="{if $commentCanAdd}true{else}false{/if}" {*
-                                       *}data-object-id="{@$person->personID}" {*
-                                       *}data-object-type-id="{@$commentObjectTypeID}" {*
-                                       *}data-comments="{if $person->comments}{@$commentList->countObjects()}{else}0{/if}" {*
-                                       *}data-last-comment-time="{@$lastCommentTime}" {*
+                                       *}data-object-id="{$person->personID}" {*
+                                       *}data-object-type-id="{$commentObjectTypeID}" {*
+                                       *}data-comments="{if $person->comments}{$commentList->countObjects()}{else}0{/if}" {*
+                                       *}data-last-comment-time="{$lastCommentTime}" {*
                                *}>
                                        {include file='commentListAddComment' wysiwygSelector='personCommentListAddComment'}
                                        {include file='commentList'}
                        'wcf.person.information.edit.success': '{jslang}wcf.person.information.edit.success{/jslang}',
                });
                
-               ControllerPerson.init({@$person->personID}, {
+               ControllerPerson.init({$person->personID}, {
                        canAddInformation: {if $__wcf->session->getPermission('user.person.canAddInformation')}true{else}false{/if},
                });
        });
index 96a9dca4865d39fe74d1330799e1270e77d011f4..a2c8443335b88a7976cd6a9f2b1a491693ef9bbd 100644 (file)
@@ -2,12 +2,12 @@
 
 {capture assign='headContent'}
        {if $pageNo < $pages}
-               <link rel="next" href="{link controller='PersonList'}pageNo={@$pageNo+1}{/link}">
+               <link rel="next" href="{link controller='PersonList'}pageNo={$pageNo+1}{/link}">
        {/if}
        {if $pageNo > 1}
-               <link rel="prev" href="{link controller='PersonList'}{if $pageNo > 2}pageNo={@$pageNo-1}{/if}{/link}">
+               <link rel="prev" href="{link controller='PersonList'}{if $pageNo > 2}pageNo={$pageNo-1}{/if}{/link}">
        {/if}
-       <link rel="canonical" href="{link controller='PersonList'}{if $pageNo > 1}pageNo={@$pageNo}{/if}{/link}">
+       <link rel="canonical" href="{link controller='PersonList'}{if $pageNo > 1}pageNo={$pageNo}{/if}{/link}">
 {/capture}
 
 {capture assign='sidebarRight'}
@@ -97,7 +97,7 @@
 <footer class="contentFooter">
        {hascontent}
                <div class="paginationBottom">
-                       {content}{@$pagesLinks}{/content}
+                       {content}{unsafe:$pagesLinks}{/content}
                </div>
        {/hascontent}
        
index c1df9d11b146cfc21b996f023e1405fad0a17981..198d49dad9b859aaf106337bab752b6bd705db29 100644 (file)
@@ -14,6 +14,6 @@
        </nav>
 </header>
 
-{@$form->getHtml()}
+{unsafe:$form->getHtml()}
 
 {include file='footer'}
index caa87a9af2776837d1fa8b6f834552d41055167c..2b5f5855c8d4b78bc5ef59c142e3e1e66646396f 100644 (file)
@@ -25,9 +25,9 @@
                <table class="table jsObjectActionContainer" data-object-action-class-name="wcf\data\person\PersonAction">
                        <thead>
                                <tr>
-                                       <th class="columnID columnPersonID{if $sortField == 'personID'} active {@$sortOrder}{/if}" colspan="2"><a href="{link controller='PersonList'}pageNo={@$pageNo}&sortField=personID&sortOrder={if $sortField == 'personID' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.global.objectID{/lang}</a></th>
-                                       <th class="columnTitle columnFirstName{if $sortField == 'firstName'} active {@$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={@$pageNo}&sortField=firstName&sortOrder={if $sortField == 'firstName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.firstName{/lang}</a></th>
-                                       <th class="columnTitle columnLastName{if $sortField == 'lastName'} active {@$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={@$pageNo}&sortField=lastName&sortOrder={if $sortField == 'lastName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.lastName{/lang}</a></th>
+                                       <th class="columnID columnPersonID{if $sortField == 'personID'} active {$sortOrder}{/if}" colspan="2"><a href="{link controller='PersonList'}pageNo={$pageNo}&sortField=personID&sortOrder={if $sortField == 'personID' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.global.objectID{/lang}</a></th>
+                                       <th class="columnTitle columnFirstName{if $sortField == 'firstName'} active {$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={$pageNo}&sortField=firstName&sortOrder={if $sortField == 'firstName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.firstName{/lang}</a></th>
+                                       <th class="columnTitle columnLastName{if $sortField == 'lastName'} active {$sortOrder}{/if}"><a href="{link controller='PersonList'}pageNo={$pageNo}&sortField=lastName&sortOrder={if $sortField == 'lastName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.person.lastName{/lang}</a></th>
                                        
                                        {event name='columnHeads'}
                                </tr>
@@ -35,7 +35,7 @@
                        
                        <tbody class="jsReloadPageWhenEmpty">
                                {foreach from=$objects item=person}
-                                       <tr class="jsObjectActionObject" data-object-id="{@$person->getObjectID()}">
+                                       <tr class="jsObjectActionObject" data-object-id="{$person->getObjectID()}">
                                                <td class="columnIcon">
                                                        <a href="{link controller='PersonEdit' object=$person}{/link}" title="{lang}wcf.global.button.edit{/lang}" class="jsTooltip">{icon name='pencil'}</a>
                                                        {objectAction action="delete" objectTitle=$person->getTitle()}
@@ -56,7 +56,7 @@
        <footer class="contentFooter">
                {hascontent}
                        <div class="paginationBottom">
-                               {content}{@$pagesLinks}{/content}
+                               {content}{unsafe:$pagesLinks}{/content}
                        </div>
                {/hascontent}
                
index 4343d76325cb1da2e402ed3c246b1441f481c6fa..b24b75100d119e31746bc9ee8ee2b4ef76dd56ba 100644 (file)
@@ -7,7 +7,7 @@
                 <h3>{anchor object=$boxPerson}</h3>
                 {capture assign='__boxPersonDescription'}{lang __optional=true}wcf.person.boxList.description.{$boxSortField}{/lang}{/capture}
                 {if $__boxPersonDescription}
-                    <small>{@$__boxPersonDescription}</small>
+                    <small>{unsafe:$__boxPersonDescription}</small>
                 {/if}
             </div>
         </li>
index 1d61b7f5618bdc88c46e4ef279bb0739251f9f1e..0578048ea838e1ba5134006ae613e38175104d8b 100644 (file)
@@ -32,7 +32,7 @@
                        {/if}
                        
                        {foreach from=$person->getInformation() item=$information}
-                               <li class="comment personInformation jsObjectActionObject" data-object-id="{@$information->getObjectID()}">
+                               <li class="comment personInformation jsObjectActionObject" data-object-id="{$information->getObjectID()}">
                                        <div class="box48{if $__wcf->getUserProfileHandler()->isIgnoredUser($information->userID, 2)} ignoredUserContent{/if}">
                                                {user object=$information->getUserProfile() type='avatar48' ariaHidden='true' tabindex='-1'}
                                                
                                                                                        <span>{$information->username}</span>
                                                                                {/if}
                                                                                
-                                                                               <small class="separatorLeft">{@$information->time|time}</small>
+                                                                               <small class="separatorLeft">{unsafe:$information->time|time}</small>
                                                                        </h3>
                                                                </div>
                                                                
-                                                               <div class="htmlContent userMessage" id="personInformation{@$information->getObjectID()}">
-                                                                       {@$information->getFormattedInformation()}
+                                                               <div class="htmlContent userMessage" id="personInformation{$information->getObjectID()}">
+                                                                       {unsafe:$information->getFormattedInformation()}
                                                                </div>
                                                                
                                                                <nav class="jsMobileNavigation buttonGroupNavigation">
                        <div class="personComments">
                                <ul id="personCommentList" class="commentList containerList" {*
                                        *}data-can-add="{if $commentCanAdd}true{else}false{/if}" {*
-                                       *}data-object-id="{@$person->personID}" {*
-                                       *}data-object-type-id="{@$commentObjectTypeID}" {*
-                                       *}data-comments="{if $person->comments}{@$commentList->countObjects()}{else}0{/if}" {*
-                                       *}data-last-comment-time="{@$lastCommentTime}" {*
+                                       *}data-object-id="{$person->personID}" {*
+                                       *}data-object-type-id="{$commentObjectTypeID}" {*
+                                       *}data-comments="{if $person->comments}{$commentList->countObjects()}{else}0{/if}" {*
+                                       *}data-last-comment-time="{$lastCommentTime}" {*
                                *}>
                                        {include file='commentListAddComment' wysiwygSelector='personCommentListAddComment'}
                                        {include file='commentList'}
                        'wcf.person.information.edit.success': '{jslang}wcf.person.information.edit.success{/jslang}',
                });
                
-               ControllerPerson.init({@$person->personID}, {
+               ControllerPerson.init({$person->personID}, {
                        canAddInformation: {if $__wcf->session->getPermission('user.person.canAddInformation')}true{else}false{/if},
                });
        });
index 96a9dca4865d39fe74d1330799e1270e77d011f4..a2c8443335b88a7976cd6a9f2b1a491693ef9bbd 100644 (file)
@@ -2,12 +2,12 @@
 
 {capture assign='headContent'}
        {if $pageNo < $pages}
-               <link rel="next" href="{link controller='PersonList'}pageNo={@$pageNo+1}{/link}">
+               <link rel="next" href="{link controller='PersonList'}pageNo={$pageNo+1}{/link}">
        {/if}
        {if $pageNo > 1}
-               <link rel="prev" href="{link controller='PersonList'}{if $pageNo > 2}pageNo={@$pageNo-1}{/if}{/link}">
+               <link rel="prev" href="{link controller='PersonList'}{if $pageNo > 2}pageNo={$pageNo-1}{/if}{/link}">
        {/if}
-       <link rel="canonical" href="{link controller='PersonList'}{if $pageNo > 1}pageNo={@$pageNo}{/if}{/link}">
+       <link rel="canonical" href="{link controller='PersonList'}{if $pageNo > 1}pageNo={$pageNo}{/if}{/link}">
 {/capture}
 
 {capture assign='sidebarRight'}
@@ -97,7 +97,7 @@
 <footer class="contentFooter">
        {hascontent}
                <div class="paginationBottom">
-                       {content}{@$pagesLinks}{/content}
+                       {content}{unsafe:$pagesLinks}{/content}
                </div>
        {/hascontent}