Update code for tutorial series part 1
authorMatthias Schmidt <gravatronics@live.com>
Tue, 20 Apr 2021 05:29:30 +0000 (07:29 +0200)
committerMatthias Schmidt <gravatronics@live.com>
Tue, 20 Apr 2021 05:35:06 +0000 (07:35 +0200)
19 files changed:
snippets/tutorial/tutorial-series/part-1/acpMenu.xml
snippets/tutorial/tutorial-series/part-1/acptemplates/personAdd.tpl
snippets/tutorial/tutorial-series/part-1/acptemplates/personList.tpl
snippets/tutorial/tutorial-series/part-1/files/acp/database/install_com.woltlab.wcf.people.php [new file with mode: 0644]
snippets/tutorial/tutorial-series/part-1/files/lib/acp/form/PersonAddForm.class.php
snippets/tutorial/tutorial-series/part-1/files/lib/acp/form/PersonEditForm.class.php
snippets/tutorial/tutorial-series/part-1/files/lib/acp/page/PersonListPage.class.php
snippets/tutorial/tutorial-series/part-1/files/lib/data/person/Person.class.php
snippets/tutorial/tutorial-series/part-1/files/lib/data/person/PersonAction.class.php
snippets/tutorial/tutorial-series/part-1/files/lib/data/person/PersonEditor.class.php
snippets/tutorial/tutorial-series/part-1/files/lib/data/person/PersonList.class.php
snippets/tutorial/tutorial-series/part-1/files/lib/page/PersonListPage.class.php
snippets/tutorial/tutorial-series/part-1/install.sql [deleted file]
snippets/tutorial/tutorial-series/part-1/language/de.xml
snippets/tutorial/tutorial-series/part-1/language/en.xml
snippets/tutorial/tutorial-series/part-1/menuItem.xml
snippets/tutorial/tutorial-series/part-1/package.xml
snippets/tutorial/tutorial-series/part-1/page.xml
snippets/tutorial/tutorial-series/part-1/userGroupOption.xml

index 8ad2af2cf7af4569a9fc03bb76857ebe7ca5dc0c..6ccf64fdbe0f830d0f6c16503e0c6642144944dd 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/tornado/acpMenu.xsd">
+<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/5.4/acpMenu.xsd">
        <import>
                <acpmenuitem name="wcf.acp.menu.link.person">
                        <parent>wcf.acp.menu.link.content</parent>
index a19603abf461a10f0926d09f80e69d1e0aab60f1..4cf2ec4a7d77e24bf8eb2af81cb5af637792a5d3 100644 (file)
        </nav>
 </header>
 
-{include file='formNotice'}
-
-<form method="post" action="{if $action == 'add'}{link controller='PersonAdd'}{/link}{else}{link controller='PersonEdit' object=$person}{/link}{/if}">
-       <div class="section">
-               <dl{if $errorField == 'firstName'} class="formError"{/if}>
-                       <dt><label for="firstName">{lang}wcf.person.firstName{/lang}</label></dt>
-                       <dd>
-                               <input type="text" id="firstName" name="firstName" value="{$firstName}" required autofocus maxlength="255" class="long">
-                               {if $errorField == 'firstName'}
-                                       <small class="innerError">
-                                               {if $errorType == 'empty'}
-                                                       {lang}wcf.global.form.error.empty{/lang}
-                                               {else}
-                                                       {lang}wcf.acp.person.firstName.error.{$errorType}{/lang}
-                                               {/if}
-                                       </small>
-                               {/if}
-                       </dd>
-               </dl>
-               
-               <dl{if $errorField == 'lastName'} class="formError"{/if}>
-                       <dt><label for="lastName">{lang}wcf.person.lastName{/lang}</label></dt>
-                       <dd>
-                               <input type="text" id="lastName" name="lastName" value="{$lastName}" required maxlength="255" class="long">
-                               {if $errorField == 'lastName'}
-                                       <small class="innerError">
-                                               {if $errorType == 'empty'}
-                                                       {lang}wcf.global.form.error.empty{/lang}
-                                               {else}
-                                                       {lang}wcf.acp.person.lastName.error.{$errorType}{/lang}
-                                               {/if}
-                                       </small>
-                               {/if}
-                       </dd>
-               </dl>
-               
-               {event name='dataFields'}
-       </div>
-       
-       {event name='sections'}
-       
-       <div class="formSubmit">
-               <input type="submit" value="{lang}wcf.global.button.submit{/lang}" accesskey="s">
-               {csrfToken}
-       </div>
-</form>
+{@$form->getHtml()}
 
 {include file='footer'}
index fc7dc36e24fbbf7b71312c34ea0ad251cd83fd2b..71766eff5a05d7043891dc14be4a018476b5a3a1 100644 (file)
@@ -21,8 +21,8 @@
 {/hascontent}
 
 {if $objects|count}
-       <div class="section tabularBox" id="personTableContainer">
-               <table class="table">
+       <div class="section tabularBox">
+               <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>
                        
                        <tbody class="jsReloadPageWhenEmpty">
                                {foreach from=$objects item=person}
-                                       <tr class="jsPersonRow">
+                                       <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"><span class="icon icon16 fa-pencil"></span></a>
-                                                       <span class="icon icon16 fa-times jsDeleteButton jsTooltip pointer" title="{lang}wcf.global.button.delete{/lang}" data-object-id="{@$person->personID}" data-confirm-message-html="{lang __encode=true}wcf.acp.person.delete.confirmMessage{/lang}"></span>
+                                                       {objectAction action="delete" objectTitle=$person->getTitle()}
                                                        
                                                        {event name='rowButtons'}
                                                </td>
        <p class="info">{lang}wcf.global.noItems{/lang}</p>
 {/if}
 
-<script data-relocate="true">
-       $(function() {
-               new WCF.Action.Delete('wcf\\data\\person\\PersonAction', '.jsPersonRow');
-       });
-</script>
-
 {include file='footer'}
diff --git a/snippets/tutorial/tutorial-series/part-1/files/acp/database/install_com.woltlab.wcf.people.php b/snippets/tutorial/tutorial-series/part-1/files/acp/database/install_com.woltlab.wcf.people.php
new file mode 100644 (file)
index 0000000..57b341b
--- /dev/null
@@ -0,0 +1,14 @@
+<?php
+
+use wcf\system\database\table\column\NotNullVarchar255DatabaseTableColumn;
+use wcf\system\database\table\column\ObjectIdDatabaseTableColumn;
+use wcf\system\database\table\DatabaseTable;
+
+return [
+    DatabaseTable::create('wcf1_person')
+        ->columns([
+            ObjectIdDatabaseTableColumn::create('personID'),
+            NotNullVarchar255DatabaseTableColumn::create('firstName'),
+            NotNullVarchar255DatabaseTableColumn::create('lastName'),
+        ]),
+];
index fd3beeb800ddd2eb4197ccfecb5b72389422847a..212155208a5998b3b05896cc327c3c5d6791da68 100644 (file)
 <?php
+
 namespace wcf\acp\form;
+
 use wcf\data\person\PersonAction;
-use wcf\form\AbstractForm;
-use wcf\system\exception\UserInputException;
-use wcf\system\request\LinkHandler;
-use wcf\system\WCF;
-use wcf\util\StringUtil;
+use wcf\form\AbstractFormBuilderForm;
+use wcf\system\form\builder\container\FormContainer;
+use wcf\system\form\builder\field\TextFormField;
 
 /**
  * Shows the form to create a new person.
- * 
- * @author     Matthias Schmidt
- * @copyright  2001-2019 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    WoltLabSuite\Core\Acp\Form
+ *
+ * @author  Matthias Schmidt
+ * @copyright   2001-2021 WoltLab GmbH
+ * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package WoltLabSuite\Core\Acp\Form
  */
-class PersonAddForm extends AbstractForm {
-       /**
-        * @inheritDoc
-        */
-       public $activeMenuItem = 'wcf.acp.menu.link.person.add';
-       
-       /**
-        * first name of the person
-        * @var string
-        */
-       public $firstName = '';
-       
-       /**
-        * last name of the person
-        * @var string
-        */
-       public $lastName = '';
-       
-       /**
-        * @inheritDoc
-        */
-       public $neededPermissions = ['admin.content.canManagePeople'];
-       
-       /**
-        * @inheritDoc
-        */
-       public function assignVariables() {
-               parent::assignVariables();
-               
-               WCF::getTPL()->assign([
-                       'action' => 'add',
-                       'firstName' => $this->firstName,
-                       'lastName' => $this->lastName
-               ]);
-       }
-       
-       /**
-        * @inheritDoc
-        */
-       public function readFormParameters() {
-               parent::readFormParameters();
-               
-               if (isset($_POST['firstName'])) $this->firstName = StringUtil::trim($_POST['firstName']);
-               if (isset($_POST['lastName'])) $this->lastName = StringUtil::trim($_POST['lastName']);
-       }
-       
-       /**
-        * @inheritDoc
-        */
-       public function save() {
-               parent::save();
-               
-               $this->objectAction = new PersonAction([], 'create', [
-                       'data' => array_merge($this->additionalFields, [
-                               'firstName' => $this->firstName,
-                               'lastName' => $this->lastName
-                       ])
-               ]);
-               $returnValues = $this->objectAction->executeAction();
-               
-               $this->saved();
-               
-               // reset values
-               $this->firstName = '';
-               $this->lastName = '';
-               
-               // show success message
-               WCF::getTPL()->assign([
-                       'success' => true,
-                       'objectEditLink' => LinkHandler::getInstance()->getControllerLink(PersonEditForm::class, ['id' => $returnValues['returnValues']->personID]),
-               ]);
-       }
-       
-       /**
-        * @inheritDoc
-        */
-       public function validate() {
-               parent::validate();
-               
-               // validate first name
-               if (empty($this->firstName)) {
-                       throw new UserInputException('firstName');
-               }
-               if (mb_strlen($this->firstName) > 255) {
-                       throw new UserInputException('firstName', 'tooLong');
-               }
-               
-               // validate last name
-               if (empty($this->lastName)) {
-                       throw new UserInputException('lastName');
-               }
-               if (mb_strlen($this->lastName) > 255) {
-                       throw new UserInputException('lastName', 'tooLong');
-               }
-       }
+class PersonAddForm extends AbstractFormBuilderForm
+{
+    /**
+     * @inheritDoc
+     */
+    public $activeMenuItem = 'wcf.acp.menu.link.person.add';
+
+    /**
+     * @inheritDoc
+     */
+    public $formAction = 'create';
+
+    /**
+     * @inheritDoc
+     */
+    public $neededPermissions = ['admin.content.canManagePeople'];
+
+    /**
+     * @inheritDoc
+     */
+    public $objectActionClass = PersonAction::class;
+
+    /**
+     * @inheritDoc
+     */
+    public $objectEditLinkController = PersonEditForm::class;
+
+    /**
+     * @inheritDoc
+     */
+    public function createForm()
+    {
+        parent::createForm();
+
+        $this->form->appendChild(
+            FormContainer::create('data')
+                ->label('wcf.global.form.data')
+                ->appendChildren([
+                    TextFormField::create('firstName')
+                        ->label('wcf.person.firstName')
+                        ->required()
+                        ->autoFocus()
+                        ->maximumLength(255),
+
+                    TextFormField::create('lastName')
+                        ->label('wcf.person.lastName')
+                        ->required()
+                        ->maximumLength(255),
+                ])
+        );
+    }
 }
index ad8f86a81a4b88149129acc2adf88dbb75ae2ec9..47c2b7650089156233252d2fe666353f7d5bdf1c 100644 (file)
@@ -1,91 +1,43 @@
 <?php
+
 namespace wcf\acp\form;
+
 use wcf\data\person\Person;
-use wcf\data\person\PersonAction;
-use wcf\form\AbstractForm;
 use wcf\system\exception\IllegalLinkException;
-use wcf\system\WCF;
 
 /**
  * Shows the form to edit an existing person.
- * 
- * @author     Matthias Schmidt
- * @copyright  2001-2019 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    WoltLabSuite\Core\Acp\Form
+ *
+ * @author  Matthias Schmidt
+ * @copyright   2001-2021 WoltLab GmbH
+ * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package WoltLabSuite\Core\Acp\Form
  */
-class PersonEditForm extends PersonAddForm {
-       /**
-        * @inheritDoc
-        */
-       public $activeMenuItem = 'wcf.acp.menu.link.person';
-       
-       /**
-        * edited person object
-        * @var Person
-        */
-       public $person = null;
-       
-       /**
-        * id of the edited person
-        * @var integer
-        */
-       public $personID = 0;
-       
-       /**
-        * @inheritDoc
-        */
-       public function assignVariables() {
-               parent::assignVariables();
-               
-               WCF::getTPL()->assign([
-                       'action' => 'edit',
-                       'person' => $this->person
-               ]);
-       }
-       
-       /**
-        * @inheritDoc
-        */
-       public function readData() {
-               parent::readData();
-               
-               if (empty($_POST)) {
-                       $this->firstName = $this->person->firstName;
-                       $this->lastName = $this->person->lastName;
-               }
-       }
-       
-       /**
-        * @inheritDoc
-        */
-       public function readParameters() {
-               parent::readParameters();
-               
-               if (isset($_REQUEST['id'])) $this->personID = intval($_REQUEST['id']);
-               $this->person = new Person($this->personID);
-               if (!$this->person->personID) {
-                       throw new IllegalLinkException();
-               }
-       }
-       
-       /**
-        * @inheritDoc
-        */
-       public function save() {
-               AbstractForm::save();
-               
-               $this->objectAction = new PersonAction([$this->person], 'update', [
-                       'data' => array_merge($this->additionalFields, [
-                               'firstName' => $this->firstName,
-                               'lastName' => $this->lastName
-                       ])
-               ]);
-               $this->objectAction->executeAction();
-               
-               $this->saved();
-               
-               // show success message
-               WCF::getTPL()->assign('success', true);
-       }
+class PersonEditForm extends PersonAddForm
+{
+    /**
+     * @inheritDoc
+     */
+    public $activeMenuItem = 'wcf.acp.menu.link.person';
+
+    /**
+     * @inheritDoc
+     */
+    public $formAction = 'update';
+
+    /**
+     * @inheritDoc
+     */
+    public function readParameters()
+    {
+        parent::readParameters();
+
+        if (isset($_REQUEST['id'])) {
+            $this->formObject = new Person($_REQUEST['id']);
+
+            if (!$this->formObject->getObjectID()) {
+                throw new IllegalLinkException();
+            }
+        }
+    }
 }
index a16f28dd5e90e599528c0a0f3e1c9c6a628faa03..9d57855b7eb116875efb5950063536c381bf7430 100644 (file)
@@ -1,34 +1,37 @@
 <?php
+
 namespace wcf\acp\page;
+
 use wcf\data\person\PersonList;
 use wcf\page\SortablePage;
 
 /**
  * Shows the list of people.
- * 
- * @author     Matthias Schmidt
- * @copyright  2001-2019 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    WoltLabSuite\Core\Acp\Page
+ *
+ * @author  Matthias Schmidt
+ * @copyright   2001-2021 WoltLab GmbH
+ * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package WoltLabSuite\Core\Acp\Page
  */
-class PersonListPage extends SortablePage {
-       /**
-        * @inheritDoc
-        */
-       public $activeMenuItem = 'wcf.acp.menu.link.person.list';
-       
-       /**
-        * @inheritDoc
-        */
-       public $neededPermissions = ['admin.content.canManagePeople'];
-       
-       /**
-        * @inheritDoc
-        */
-       public $objectListClassName = PersonList::class;
-       
-       /**
-        * @inheritDoc
-        */
-       public $validSortFields = ['personID', 'firstName', 'lastName'];
+class PersonListPage extends SortablePage
+{
+    /**
+     * @inheritDoc
+     */
+    public $activeMenuItem = 'wcf.acp.menu.link.person.list';
+
+    /**
+     * @inheritDoc
+     */
+    public $neededPermissions = ['admin.content.canManagePeople'];
+
+    /**
+     * @inheritDoc
+     */
+    public $objectListClassName = PersonList::class;
+
+    /**
+     * @inheritDoc
+     */
+    public $validSortFields = ['personID', 'firstName', 'lastName'];
 }
index fe30af443b23d14aa9c5db0243c5044636b0ea75..00ff194fe17136f8fc1826a37d41a282b4e32c3b 100644 (file)
@@ -1,34 +1,39 @@
 <?php
+
 namespace wcf\data\person;
+
 use wcf\data\DatabaseObject;
 use wcf\system\request\IRouteController;
 
 /**
  * Represents a person.
- * 
- * @author     Matthias Schmidt
- * @copyright  2001-2019 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    WoltLabSuite\Core\Data\Person
- * 
- * @property-read      integer         $personID       unique id of the person
- * @property-read      string          $firstName      first name of the person
- * @property-read      string          $lastName       last name of the person
+ *
+ * @author  Matthias Schmidt
+ * @copyright   2001-2021 WoltLab GmbH
+ * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package WoltLabSuite\Core\Data\Person
+ *
+ * @property-read   integer     $personID   unique id of the person
+ * @property-read   string      $firstName  first name of the person
+ * @property-read   string      $lastName   last name of the person
  */
-class Person extends DatabaseObject implements IRouteController {
-       /**
-        * Returns the first and last name of the person if a person object is treated as a string.
-        * 
-        * @return      string
-        */
-       public function __toString() {
-               return $this->getTitle();
-       }
-       
-       /**
-        * @inheritDoc
-        */
-       public function getTitle() {
-               return $this->firstName . ' ' . $this->lastName;
-       }
+class Person extends DatabaseObject implements IRouteController
+{
+    /**
+     * Returns the first and last name of the person if a person object is treated as a string.
+     *
+     * @return  string
+     */
+    public function __toString()
+    {
+        return $this->getTitle();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getTitle()
+    {
+        return $this->firstName . ' ' . $this->lastName;
+    }
 }
index d76b926758de1e05a360206fc4efefd752602148..3f34655613dc06c9cf574eaa630b9b636f54648a 100644 (file)
@@ -1,27 +1,30 @@
 <?php
+
 namespace wcf\data\person;
+
 use wcf\data\AbstractDatabaseObjectAction;
 
 /**
  * Executes person-related actions.
- * 
- * @author     Matthias Schmidt
- * @copyright  2001-2019 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    WoltLabSuite\Core\Data\Person
  *
- * @method     Person          create()
- * @method     PersonEditor[]  getObjects()
- * @method     PersonEditor    getSingleObject()
+ * @author  Matthias Schmidt
+ * @copyright   2001-2021 WoltLab GmbH
+ * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package WoltLabSuite\Core\Data\Person
+ *
+ * @method  Person      create()
+ * @method  PersonEditor[]  getObjects()
+ * @method  PersonEditor    getSingleObject()
  */
-class PersonAction extends AbstractDatabaseObjectAction {
-       /**
-        * @inheritDoc
-        */
-       protected $permissionsDelete = ['admin.content.canManagePeople'];
-       
-       /**
-        * @inheritDoc
-        */
-       protected $requireACP = ['delete'];
+class PersonAction extends AbstractDatabaseObjectAction
+{
+    /**
+     * @inheritDoc
+     */
+    protected $permissionsDelete = ['admin.content.canManagePeople'];
+
+    /**
+     * @inheritDoc
+     */
+    protected $requireACP = ['delete'];
 }
index 3890bc1009c8b88fb087f1bb31bf063436f48198..b8d5a3ce73cbcaccf6eb04a7e87258fd7dadce3d 100644 (file)
@@ -1,22 +1,25 @@
 <?php
+
 namespace wcf\data\person;
+
 use wcf\data\DatabaseObjectEditor;
 
 /**
  * Provides functions to edit people.
- * 
- * @author     Matthias Schmidt
- * @copyright  2001-2019 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    WoltLabSuite\Core\Data\Person
- * 
- * @method static      Person  create(array $parameters = [])
- * @method             Person  getDecoratedObject()
- * @mixin              Person
+ *
+ * @author  Matthias Schmidt
+ * @copyright   2001-2021 WoltLab GmbH
+ * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package WoltLabSuite\Core\Data\Person
+ *
+ * @method static   Person  create(array $parameters = [])
+ * @method      Person  getDecoratedObject()
+ * @mixin       Person
  */
-class PersonEditor extends DatabaseObjectEditor {
-       /**
-        * @inheritDoc
-        */
-       protected static $baseClass = Person::class;
+class PersonEditor extends DatabaseObjectEditor
+{
+    /**
+     * @inheritDoc
+     */
+    protected static $baseClass = Person::class;
 }
index bedf543c5f51e666dec76f3937908e93e2e8a384..4e16a0d0e2ae4bcdcb4e41d166b3adc731a74ede 100644 (file)
@@ -1,18 +1,22 @@
 <?php
+
 namespace wcf\data\person;
+
 use wcf\data\DatabaseObjectList;
 
 /**
  * Represents a list of people.
- * 
- * @author     Matthias Schmidt
- * @copyright  2001-2019 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    WoltLabSuite\Core\Data\Person
- * 
- * @method     Person          current()
- * @method     Person[]        getObjects()
- * @method     Person|null     search($objectID)
- * @property   Person[]        $objects
+ *
+ * @author  Matthias Schmidt
+ * @copyright   2001-2021 WoltLab GmbH
+ * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package WoltLabSuite\Core\Data\Person
+ *
+ * @method  Person      current()
+ * @method  Person[]    getObjects()
+ * @method  Person|null search($objectID)
+ * @property    Person[]    $objects
  */
-class PersonList extends DatabaseObjectList {}
+class PersonList extends DatabaseObjectList
+{
+}
index 839b3e2a035f8ac8cb4517159fed7eb39f448b14..5fbacd4412ad607ff29998c7160b3d30028d74fd 100644 (file)
@@ -1,28 +1,31 @@
 <?php
+
 namespace wcf\page;
+
 use wcf\data\person\PersonList;
 
 /**
  * Shows the list of people.
- * 
- * @author     Matthias Schmidt
- * @copyright  2001-2019 WoltLab GmbH
- * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package    WoltLabSuite\Core\Page
+ *
+ * @author  Matthias Schmidt
+ * @copyright   2001-2021 WoltLab GmbH
+ * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package WoltLabSuite\Core\Page
  */
-class PersonListPage extends SortablePage {
-       /**
-        * @inheritDoc
-        */
-       public $defaultSortField = 'lastName';
-       
-       /**
-        * @inheritDoc
-        */
-       public $objectListClassName = PersonList::class;
-       
-       /**
-        * @inheritDoc
-        */
-       public $validSortFields = ['personID', 'firstName', 'lastName'];
+class PersonListPage extends SortablePage
+{
+    /**
+     * @inheritDoc
+     */
+    public $defaultSortField = 'lastName';
+
+    /**
+     * @inheritDoc
+     */
+    public $objectListClassName = PersonList::class;
+
+    /**
+     * @inheritDoc
+     */
+    public $validSortFields = ['personID', 'firstName', 'lastName'];
 }
diff --git a/snippets/tutorial/tutorial-series/part-1/install.sql b/snippets/tutorial/tutorial-series/part-1/install.sql
deleted file mode 100644 (file)
index 111a0f8..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-DROP TABLE IF EXISTS wcf1_person;
-CREATE TABLE wcf1_person (
-       personID INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
-       firstName VARCHAR(255) NOT NULL,
-       lastName VARCHAR(255) NOT NULL
-);
index c046856287daed1358439c7a0f2e6d50fe5d6e63..cb217919b451f8e78d6fa16e90d32f01123c83db 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<language xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/tornado/language.xsd" languagecode="de">
+<language xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/5.4/language.xsd" languagecode="de">
        <category name="wcf.acp.group">
                <item name="wcf.acp.group.option.admin.content.canManagePeople"><![CDATA[Kann Personen verwalten]]></item>
        </category>
        
        <category name="wcf.acp.person">
                <item name="wcf.acp.person.add"><![CDATA[Person hinzufügen]]></item>
-               <item name="wcf.acp.person.delete.confirmMessage"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Willst du{else}Wollen Sie{/if} die Person <span class="confirmationObject">{$person}</span> wirklich löschen?]]></item>
                <item name="wcf.acp.person.edit"><![CDATA[Person bearbeiten]]></item>
-               <item name="wcf.acp.person.firstName.error.tooLong"><![CDATA[Der Vorname darf nicht länger als 255 Zeichen sein.]]></item>
-               <item name="wcf.acp.person.lastName.error.tooLong"><![CDATA[Der Nachname darf nicht länger als 255 Zeichen sein.]]></item>
                <item name="wcf.acp.person.list"><![CDATA[Personen]]></item>
        </category>
        
index bff83cfff089979dbd9d61ab8bea13f5c3c85bda..a76387ca8fa3d8b91d53ad1f76be4bd153074130 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<language xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/tornado/language.xsd" languagecode="en">
+<language xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/5.4/language.xsd" languagecode="en">
        <category name="wcf.acp.group">
                <item name="wcf.acp.group.option.admin.content.canManagePeople"><![CDATA[Can manage people]]></item>
        </category>
        
        <category name="wcf.acp.person">
                <item name="wcf.acp.person.add"><![CDATA[Add Person]]></item>
-               <item name="wcf.acp.person.delete.confirmMessage"><![CDATA[Do you really want to delete the person <span class="confirmationObject">{$person}</span>?]]></item>
                <item name="wcf.acp.person.edit"><![CDATA[Edit Person]]></item>
-               <item name="wcf.acp.person.firstName.error.tooLong"><![CDATA[The first name must not be longer than 255 characters.]]></item>
-               <item name="wcf.acp.person.lastName.error.tooLong"><![CDATA[The last name must not be longer than 255 characters.]]></item>
                <item name="wcf.acp.person.list"><![CDATA[People]]></item>
        </category>
        
index 378a2973eff701f20d840e6081ae3626bfb16ead..bcf3e04d0c93db6f35dde00bea2a81200ac7a78a 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/tornado/menuItem.xsd">
+<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/5.4/menuItem.xsd">
        <import>
                <item identifier="com.woltlab.wcf.people.PersonList">
                        <menu>com.woltlab.wcf.MainMenu</menu>
index 5beddeda944d2c33f9bfc8da5e5e439ebb0844fb..ecc46fd173a228bec1beb1d71621af52bb217fcf 100644 (file)
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<package name="com.woltlab.wcf.people" xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/tornado/package.xsd">
+<package name="com.woltlab.wcf.people" xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/5.4/package.xsd">
        <packageinformation>
                <packagename>WoltLab Suite Core Tutorial: People</packagename>
                <packagedescription>Adds a simple management system for people as part of a tutorial to create packages.</packagedescription>
-               <version>3.1.0</version>
-               <date>2018-03-30</date>
+               <version>5.4.0</version>
+               <date>2021-04-16</date>
        </packageinformation>
        
        <authorinformation>
        </authorinformation>
        
        <requiredpackages>
-               <requiredpackage minversion="3.1.0">com.woltlab.wcf</requiredpackage>
+               <requiredpackage minversion="5.4.0 Alpha 1">com.woltlab.wcf</requiredpackage>
        </requiredpackages>
        
        <excludedpackages>
-               <excludedpackage version="3.2.0 Alpha 1">com.woltlab.wcf</excludedpackage>
+               <excludedpackage version="6.0.0 Alpha 1">com.woltlab.wcf</excludedpackage>
        </excludedpackages>
-
-       <compatibility>
-               <api version="2018" />
-       </compatibility>
        
        <instructions type="install">
                <instruction type="acpTemplate" />
                <instruction type="file" />
-               <instruction type="sql" />
+               <instruction type="database">acp/database/install_com.woltlab.wcf.people.php</instruction>
                <instruction type="template" />
                <instruction type="language" />
                
index 3f80ef8bb288f9886625072e198f11ff781a22d5..72cf47b7d79d2f77deddd964fca21a6924be3201 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/tornado/page.xsd">
+<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/5.4/page.xsd">
        <import>
                <page identifier="com.woltlab.wcf.people.PersonList">
                        <pageType>system</pageType>
index 2e041d387f42a8ffe0f4844416ddb14e3d66a094..15397b9d3c2bef62f1025035bae87140308dc042 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/tornado/userGroupOption.xsd">
+<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/5.4/userGroupOption.xsd">
        <import>
                <options>
                        <option name="admin.content.canManagePeople">