Directly use native titled codeboxes when `contents` is given
authorTim Düsterhus <duesterhus@woltlab.com>
Thu, 16 Dec 2021 14:09:13 +0000 (15:09 +0100)
committerTim Düsterhus <duesterhus@woltlab.com>
Thu, 16 Dec 2021 14:17:14 +0000 (15:17 +0100)
This makes handling this file much nicer, because regular syntax highlighting
can work.

docs/migration/wsc30/php.md
docs/migration/wsc31/like.md
docs/migration/wsc31/php.md
docs/migration/wsc52/templates.md
docs/migration/wsc53/session.md
docs/migration/wsc54/php.md
docs/php/exceptions.md
docs/tutorial/series/part_6.md

index 2ba1588f26f9477f540efb23cdf22ccfe552913c..25a2786073be9438b4b9aadfb1ff47834a0f5a9b 100644 (file)
@@ -4,33 +4,25 @@
 
 Comments can now be set to require approval by a moderator before being published. This feature is disabled by default if you do not provide a permission in the manager class, enabling it requires a new permission that has to be provided in a special property of your manage implementation.
 
-{jinja{ codebox(
-    language="php",
-    title="files/lib/system/comment/manager/ExampleCommentManager.class.php",
-    contents="""
+```php title="files/lib/system/comment/manager/ExampleCommentManager.class.php"
 <?php
 class ExampleCommentManager extends AbstractCommentManager {
   protected $permissionAddWithoutModeration = 'foo.bar.example.canAddCommentWithoutModeration';
 }
-"""
-) }}
+```
 
 ## Raw HTML in User Activity Events
 
 User activity events were previously encapsulated inside `<div class="htmlContent">…</div>`, with impacts on native elements such as lists. You can now disable the class usage by defining your event as raw HTML:
 
 
-{jinja{ codebox(
-    language="php",
-    title="files/lib/system/user/activity/event/ExampleUserActivityEvent.class.php",
-    contents="""
+```php title="files/lib/system/user/activity/event/ExampleUserActivityEvent.class.php"
 <?php
 class ExampleUserActivityEvent {
   // enables raw HTML for output, defaults to `false`
   protected $isRawHtml = true;
 }
-"""
-) }}
+```
 
 ## Permission to View Likes of an Object
 
@@ -38,10 +30,7 @@ Being able to view the like summary of an object was restricted to users that we
 
 Implement the interface `\wcf\data\like\IRestrictedLikeObjectTypeProvider` in your object provider to add support for this new permission check.
 
-{jinja{ codebox(
-    language="php",
-    title="files/lib/data/example/LikeableExampleProvider.class.php",
-    contents="""
+```php title="files/lib/data/example/LikeableExampleProvider.class.php"
 <?php
 class LikeableExampleProvider extends ExampleProvider implements IRestrictedLikeObjectTypeProvider, IViewableLikeProvider {
   public function canViewLikes(ILikeObject $object) {
@@ -49,8 +38,7 @@ class LikeableExampleProvider extends ExampleProvider implements IRestrictedLike
     return true;
   }
 }
-"""
-) }}
+```
 
 ## Developer Tools: Sync Feature
 
@@ -60,10 +48,7 @@ However, not all PIPs qualify for this kind of execution, especially because it
 
 There's another feature that allows all matching PIPs to be executed in a row using a single button click. In order to solve dependencies on other PIPs, any implementing PIP must also provide the method `getSyncDependencies()` that returns the dependent PIPs in an arbitrary order.
 
-{jinja{ codebox(
-    language="php",
-    title="files/lib/data/package/plugin/ExamplePackageInstallationPlugin.class.php",
-    contents="""
+```php title="files/lib/data/package/plugin/ExamplePackageInstallationPlugin.class.php"
 <?php
 class ExamplePackageInstallationPlugin extends AbstractXMLPackageInstallationPlugin implements IIdempotentPackageInstallationPlugin {
   public static function getSyncDependencies() {
@@ -71,8 +56,7 @@ class ExamplePackageInstallationPlugin extends AbstractXMLPackageInstallationPlu
     return [];
   }
 }
-"""
-) }}
+```
 
 ## Media Providers
 
index 74f920743112b50a27979dbc0708533725e2ac6f..eab6986d760e52b084d79c7e1d6290ee0c179b39 100644 (file)
@@ -82,18 +82,14 @@ Jemandem hat auf {if LANGUAGE_USE_INFORMAL_VARIANT}dein(en){else}Ihr(en){/if} {o
 
 To adjust entries in the Recent Activity, only three small steps are necessary. First we pass the concrete reaction to the language variable, so that we can use the reaction object there. To do this, we add the following variable to the text of the `\wcf\system\user\activity\event\IUserActivityEvent` object: `$event->reactionType`. Typically we name the variable `reactionType`. In the second step, we mark the event as compatible. Therefore we set the parameter `supportsReactions` in the [`objectType.xml`](../../package/pip/object-type.md) to `1`. So for example the entry looks like this:
 
-{jinja{ codebox(
-language="xml",
-title="objectType.xml",
-contents="""
+```xml title="objectType.xml"
 <type>
     <name>com.woltlab.example.likeableObject.recentActivityEvent</name>
     <definitionname>com.woltlab.wcf.user.recentActivityEvent</definitionname>
-    <classname>wcf\system\\user\activity\event\LikeableObjectUserActivityEvent</classname>
+    <classname>wcf\system\user\activity\event\LikeableObjectUserActivityEvent</classname>
     <supportsReactions>1</supportsReactions>
 </type>
-"""
-)}}
+```
 
 Finally we modify our language variable. To ensure a consistent usability, the same formulations should be used as in the WoltLab Suite Core.
 
@@ -123,19 +119,15 @@ Hat mit <span title="{$reactionType->getTitle()}" class="jsTooltip">{@$reactionT
 If comments send notifications, they must also be updated. The language variables are changed in the same way as described in the section [Notifications / Language](like.md#Language-Variables). After that comment must be marked as compatible. Therefore we set the parameter `supportsReactions` in the [`objectType.xml`](../../package/pip/object-type.md) to `1`. So for example the entry looks like this: 
 
 
-{jinja{ codebox(
-language="xml",
-title="objectType.xml",
-contents="""
+```xml title="objectType.xml"
 <type>
     <name>com.woltlab.wcf.objectComment.response.like.notification</name>
     <definitionname>com.woltlab.wcf.notification.objectType</definitionname>
-    <classname>wcf\system\\user\notification\object\type\LikeUserNotificationObjectType</classname>
+    <classname>wcf\system\user\notification\object\type\LikeUserNotificationObjectType</classname>
     <category>com.woltlab.example</category>
     <supportsReactions>1</supportsReactions>
 </type>
-"""
-)}}
+```
 
 ## Forward Compatibility 
 
index 91d13ef11b2b05c5e0abe1b4db3ee315ddae2d3c..854dba704555bd8e80d598f180a1910acc681cc9 100644 (file)
@@ -20,12 +20,9 @@ User content providers help the WoltLab Suite to find user generated content. Th
 
 First, we create the PHP class that provides our interface to provide the data. The class must implement interface `wcf\system\user\content\provider\IUserContentProvider` in any case. Mostly we process data which is based on [`wcf\data\DatabaseObject`](../../php/database-objects.md). In this case, the WoltLab Suite provides an abstract class `wcf\system\user\content\provider\AbstractDatabaseUserContentProvider` that can be used to automatically generates the standardized classes to generate the list and deletes objects via the DatabaseObjectAction. For example, if we would create a content provider for comments, the class would look like this: 
 
-{jinja{ codebox(
-language="php",
-title="files/lib/system/user/content/provider/CommentUserContentProvider.class.php",
-contents="""
+```php title="files/lib/system/user/content/provider/CommentUserContentProvider.class.php"
 <?php
-namespace wcf\system\\user\content\provider;
+namespace wcf\system\user\content\provider;
 use wcf\data\comment\Comment;
 
 /**
@@ -34,7 +31,7 @@ use wcf\data\comment\Comment;
  * @author     Joshua Ruesweg
  * @copyright  2001-2018 WoltLab GmbH
  * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    WoltLabSuite\Core\System\\User\Content\Provider
+ * @package    WoltLabSuite\Core\System\User\Content\Provider
  * @since      5.2
  */
 class CommentUserContentProvider extends AbstractDatabaseUserContentProvider {
@@ -45,8 +42,7 @@ class CommentUserContentProvider extends AbstractDatabaseUserContentProvider {
                return Comment::class;
        }
 }
-"""
-)}}
+```
 
 ### Object Type
 
@@ -76,4 +72,4 @@ The specified list of comma-separated object types are automatically removed dur
 ## PHP Database API
 
 WoltLab Suite 5.2 introduces a new way to update the database scheme:
-[database PHP API](../../package/database-php-api.md).
\ No newline at end of file
+[database PHP API](../../package/database-php-api.md).
index 54fa5094ec2b84424d33846c0991a63dfbd737ac..9de9ec0925a1a42553ba5c0fe1498f98b2e86493 100644 (file)
@@ -90,22 +90,15 @@ We unified the approach for such links:
 
 Example:
 
-{jinja{ codebox(
-    language="php",
-    title="files/lib/data/foo/Foo.class.php",
-    contents="""
+```php title="files/lib/data/foo/Foo.class.php"
 class Foo extends DatabaseObject implements IPopoverObject {
     public function getPopoverLinkClass() {
         return 'fooLink';
     }
 }
-"""
-)}}
+```
 
-{jinja{ codebox(
-    language="php",
-    title="files/lib/data/foo/FooAction.class.php",
-    contents="""
+```php title="files/lib/data/foo/FooAction.class.php"
 class FooAction extends AbstractDatabaseObjectAction implements IPopoverAction {
     public function validateGetPopover() {
         // …
@@ -117,14 +110,13 @@ class FooAction extends AbstractDatabaseObjectAction implements IPopoverAction {
         ];
     }
 }
-"""
-)}}
+```
 
 ```js
 require(['WoltLabSuite/Core/Controller/Popover'], function(ControllerPopover) {
        ControllerPopover.init({
                className: 'fooLink',
-               dboAction: 'wcf\\datafoo\\FooAction',
+               dboAction: 'wcf\\data\\foo\\FooAction',
                identifier: 'com.woltlab.wcf.foo'
        });
 });
index b2ee95640aaf41870dfe412e2781fa48c4589533..f4136f4a64f74ac94f47eed9da21731943d13661 100644 (file)
@@ -121,19 +121,15 @@ if ($isPending) {
 
 Adding your own multi-factor method requires the implementation of a single object type:
 
-{jinja{ codebox(
-   language="xml",
-   title="objectType.xml",
-   contents="""
+```xml title="objectType.xml"
 <type>
    <name>com.example.multifactor.foobar</name>
    <definitionname>com.woltlab.wcf.multifactor</definitionname>
    <icon><!-- Font Awesome 4 Icon Name goes here. --></icon>
    <priority><!-- Determines the sort order, higher priority will be preferred for authentication. --></priority>
-   <classname>wcf\system\\user\multifactor\FoobarMultifactorMethod</classname>
+   <classname>wcf\system\user\multifactor\FoobarMultifactorMethod</classname>
 </type>
-"""
-)}}
+```
 
 The given classname must implement the [`IMultifactorMethod`](https://github.com/WoltLab/WCF/blob/master/wcfsetup/install/files/lib/system/user/multifactor/IMultifactorMethod.class.php) interface.
 
index 5cb254f7d3f0fb0d6bcb3d53026312a908c2161c..8ac49ee6bde8c9990bfaeab73cd2e856c2d7b66e 100644 (file)
@@ -25,16 +25,13 @@ It is recommended to wait for a future version before migrating these types of c
 
 Previously:
 
-{jinja{ codebox(
-    language="php",
-    title="lib/action/ExampleRedirectAction.class.php",
-    contents="""
+```php title="lib/action/ExampleRedirectAction.class.php"
 <?php
 
-namespace wcf\\action;
+namespace wcf\action;
 
-use wcf\\system\\request\\LinkHandler;
-use wcf\\util\\HeaderUtil;
+use wcf\system\request\LinkHandler;
+use wcf\util\HeaderUtil;
 
 final class ExampleRedirectAction extends AbstractAction
 {
@@ -50,21 +47,17 @@ final class ExampleRedirectAction extends AbstractAction
         exit;
     }
 }
-"""
-) }}
+```
 
 Now:
 
-{jinja{ codebox(
-    language="php",
-    title="lib/action/ExampleRedirectAction.class.php",
-    contents="""
+```php title="lib/action/ExampleRedirectAction.class.php"
 <?php
 
-namespace wcf\\action;
+namespace wcf\action;
 
-use Laminas\\Diactoros\\Response\\RedirectResponse;
-use wcf\\system\\request\\LinkHandler;
+use Laminas\Diactoros\Response\RedirectResponse;
+use wcf\system\request\LinkHandler;
 
 final class ExampleRedirectAction extends AbstractAction
 {
@@ -78,22 +71,18 @@ final class ExampleRedirectAction extends AbstractAction
         );
     }
 }
-"""
-) }}
+```
 
 #### Migrating JSON responses
 
 Previously:
 
-{jinja{ codebox(
-    language="php",
-    title="lib/action/ExampleJsonAction.class.php",
-    contents="""
+```php title="lib/action/ExampleJsonAction.class.php"
 <?php
 
-namespace wcf\\action;
+namespace wcf\action;
 
-use wcf\\util\\JSON;
+use wcf\util\JSON;
 
 final class ExampleJsonAction extends AbstractAction
 {
@@ -110,20 +99,16 @@ final class ExampleJsonAction extends AbstractAction
         exit;
     }
 }
-"""
-) }}
+```
 
 Now:
 
-{jinja{ codebox(
-    language="php",
-    title="lib/action/ExampleJsonAction.class.php",
-    contents="""
+```php title="lib/action/ExampleJsonAction.class.php"
 <?php
 
-namespace wcf\\action;
+namespace wcf\action;
 
-use Laminas\\Diactoros\\Response\\JsonResponse;
+use Laminas\Diactoros\Response\JsonResponse;
 
 final class ExampleJsonAction extends AbstractAction
 {
@@ -136,8 +121,7 @@ final class ExampleJsonAction extends AbstractAction
         ]);
     }
 }
-"""
-) }}
+```
 
 ## Events
 
@@ -171,15 +155,12 @@ $parameters = [
 EventHandler::getInstance()->fireAction($this, 'valueAvailable', $parameters);
 ```
 
-{jinja{ codebox(
-    language="php",
-    title="lib/system/event/listener/ValueDumpListener.class.php",
-    contents="""
+```php title="lib/system/event/listener/ValueDumpListener.class.php"
 <?php
 
-namespace wcf\\system\\event\\listener;
+namespace wcf\system\event\listener;
 
-use wcf\\form\\ValueForm;
+use wcf\form\ValueForm;
 
 final class ValueDumpListener implements IParameterizedEventListener
 {
@@ -192,8 +173,7 @@ final class ValueDumpListener implements IParameterizedEventListener
         var_dump($parameters['value']);
     }
 }
-"""
-) }}
+```
 
 Now:
 
@@ -201,15 +181,12 @@ Now:
 EventHandler::getInstance()->fire(new ValueAvailable(\random_int(1, 1024)));
 ```
 
-{jinja{ codebox(
-    language="php",
-    title="lib/system/foo/event/ValueAvailable.class.php",
-    contents="""
+```php title="lib/system/foo/event/ValueAvailable.class.php"
 <?php
 
-namespace wcf\\system\\foo\\event;
+namespace wcf\system\foo\event;
 
-use wcf\\system\\event\\IEvent;
+use wcf\system\event\IEvent;
 
 final class ValueAvailable implements IEvent
 {
@@ -228,18 +205,14 @@ final class ValueAvailable implements IEvent
         return $this->value;
     }
 }
-"""
-) }}
+```
 
-{jinja{ codebox(
-    language="php",
-    title="lib/system/event/listener/ValueDumpListener.class.php",
-    contents="""
+```php title="lib/system/event/listener/ValueDumpListener.class.php"
 <?php
 
-namespace wcf\\system\\event\\listener;
+namespace wcf\system\event\listener;
 
-use wcf\\system\\foo\event\\ValueAvailable;
+use wcf\system\foo\event\ValueAvailable;
 
 final class ValueDumpListener
 {
@@ -248,8 +221,7 @@ final class ValueDumpListener
         var_dump($event->getValue());
     }
 }
-"""
-) }}
+```
 
 See [WoltLab/WCF#4000](https://github.com/WoltLab/WCF/pull/4000) and [WoltLab/WCF#4265](https://github.com/WoltLab/WCF/pull/4265) for details.
 
index 7c2323f8d39b0a23774cce38f6fbb4b1053a1968..b5160297e6e7df61281496d3a3cd2508c78219dd 100644 (file)
@@ -37,13 +37,10 @@ Make sure to insert a linebreak between the attribute and the parameter name.
 
 Example:
 
-{jinja{ codebox(
-    language="php",
-    title="wcfsetup/install/files/lib/data/user/User.class.php",
-    contents="""
+```php title="wcfsetup/install/files/lib/data/user/User.class.php"
 <?php
 
-namespace wcf\\data\\user;
+namespace wcf\data\user;
 
 // …
 
@@ -60,5 +57,4 @@ final class User extends DatabaseObject implements IPopoverObject, IRouteControl
 
     // …
 }
-"""
-) }}
+```
index 13da5faa3b7fcb9b3ebeeabca980769a96fce979..33eccdfa84342bab2ceb1fffe7c05e8886b9739f 100644 (file)
@@ -51,17 +51,13 @@ For all changes, please refer to the [source code on GitHub]({jinja{ config.repo
 
 The first step to support activity points is to register an object type for the `com.woltlab.wcf.user.activityPointEvent` object type definition for created person information and specify the default number of points awarded per piece of information:
 
-{jinja{ codebox(
-    language="xml",
-    title="objectType.xml",
-    contents="""
+```xml title="objectType.xml"
 <type>
     <name>com.woltlab.wcf.people.information</name>
     <definitionname>com.woltlab.wcf.user.activityPointEvent</definitionname>
     <points>2</points>
 </type>
-    """
-) }}
+```
 
 Additionally, the phrase `wcf.user.activityPoint.objectType.com.woltlab.wcf.people.information` (in general: `wcf.user.activityPoint.objectType.{objectType}`) has to be added.
 
@@ -70,17 +66,13 @@ The activity points are awarded when new pieces are created via `PersonInformati
 Lastly, we have to add two components for updating data:
 First, we register a new rebuild data worker
 
-{jinja{ codebox(
-language="xml",
-title="objectType.xml",
-contents="""
+```xml title="objectType.xml"
 <type>
     <name>com.woltlab.wcf.people.information</name>
     <definitionname>com.woltlab.wcf.rebuildData</definitionname>
     <classname>wcf\system\worker\PersonInformationRebuildDataWorker</classname>
 </type>
-"""
-) }}
+```
 
 {jinja{ codebox(
     title="files/lib/system/worker/PersonInformationRebuildDataWorker.class.php",
@@ -93,18 +85,14 @@ which updates the number of instances for which any user received person informa
 
 Second, we add an event listener for `UserActivityPointItemsRebuildDataWorker` to update the total user activity points awarded for person information:
 
-{jinja{ codebox(
-    language="xml",
-    title="eventListener.xml",
-    contents="""
-<eventlistener name=\"execute@wcf\system\worker\\UserActivityPointItemsRebuildDataWorker\">
-    <eventclassname>wcf\system\worker\\UserActivityPointItemsRebuildDataWorker</eventclassname>
+```xml title="eventListener.xml"
+<eventlistener name="execute@wcf\system\worker\UserActivityPointItemsRebuildDataWorker">
+    <eventclassname>wcf\system\worker\UserActivityPointItemsRebuildDataWorker</eventclassname>
     <eventname>execute</eventname>
     <listenerclassname>wcf\system\event\listener\PersonUserActivityPointItemsRebuildDataWorkerListener</listenerclassname>
     <environment>admin</environment>
 </eventlistener>
-"""
-) }}
+```
 
 {jinja{ codebox(
     title="files/lib/system/event/listener/PersonUserActivityPointItemsRebuildDataWorkerListener.class.php",
@@ -117,17 +105,13 @@ Second, we add an event listener for `UserActivityPointItemsRebuildDataWorker` t
 
 To support user activity events, an object type for `com.woltlab.wcf.user.recentActivityEvent` has to be registered with a class implementing `wcf\system\user\activity\event\IUserActivityEvent`:
 
-{jinja{ codebox(
-language="xml",
-title="objectType.xml",
-contents="""
+```xml title="objectType.xml"
 <type>
     <name>com.woltlab.wcf.people.information</name>
     <definitionname>com.woltlab.wcf.user.recentActivityEvent</definitionname>
-    <classname>wcf\system\\user\activity\event\PersonInformationUserActivityEvent</classname>
+    <classname>wcf\system\user\activity\event\PersonInformationUserActivityEvent</classname>
 </type>
-"""
-) }}
+```
 
 {jinja{ codebox(
     title="files/lib/system/user/activity/event/PersonInformationUserActivityEvent.class.php",