]> git.mxchange.org Git - city.git/commitdiff
Added a lot stuff for confirming email address and resending confirmation link.
authorRoland Haeder <roland@mxchange.org>
Tue, 7 Apr 2015 21:34:18 +0000 (23:34 +0200)
committerRoland Haeder <roland@mxchange.org>
Tue, 7 Apr 2015 21:34:18 +0000 (23:34 +0200)
Yes, all is generic stuff (what happens with every browser-based game or
application) so let's finish this quickly.

Signed-off-by: Roland Haeder <roland@mxchange.org>
application/city/config.php
application/city/main/actions/html/class_HtmlCityLoginProfileAction.php [new file with mode: 0644]
application/city/main/actions/html/class_HtmlCityLoginStatusProblemAction.php [new file with mode: 0644]
application/city/main/controller/html/class_CityHtmlConfirmController.php [new file with mode: 0644]
application/city/templates/de/code/confirm_link.ctp [new file with mode: 0644]
application/city/templates/de/code/mail_debug.ctp [new file with mode: 0644]
application/city/templates/de/emails/.htaccess [new file with mode: 0644]
application/city/templates/de/emails/text_resend_link.tpl [new file with mode: 0644]
application/city/templates/de/menu/generic_menu_entries.xml
application/city/templates/de/menu/login_area_menu_entries.xml
core

index de73d4914d287b1694a53d19c4fec6b7c99a66b4..c0d76648c18899d470f1af1af58df55ef187ca47 100644 (file)
@@ -80,6 +80,12 @@ $cfg->setConfigEntry('news_reader_register_class', 'DefaultNewsReader');
 // CFG: NEWS-READER-LOGIN-AREA-CLASS
 $cfg->setConfigEntry('news_reader_login_area_class', 'DefaultNewsReader');
 
+// CFG: NEWS-READER-LOGIN-AREA-PROFILE-CLASS
+$cfg->setConfigEntry('news_reader_login_area_profile_class', 'DefaultNewsReader');
+
+// CFG: NEWS-READER-LOGIN-AREA-STATUS-PROBLEM-CLASS
+$cfg->setConfigEntry('news_reader_login_area_status_problem_class', 'DefaultNewsReader');
+
 // CFG: NEWS-HOME-LIMIT
 $cfg->setConfigEntry('news_home_limit', 10);
 
@@ -227,23 +233,20 @@ $cfg->setConfigEntry('random_string_length', 100);
 // CFG: IMAGE-TEMPLATE-CLASS
 $cfg->setConfigEntry('image_template_class', 'ImageTemplateEngine');
 
-// CFG: CAPTCHA-ENCRYPT-VALIDATOR-FILTER
-$cfg->setConfigEntry('captcha_encrypt_validator_filter', 'CaptchaEncryptFilter');
+// CFG: MAIL-TEMPLATE-CLASS
+$cfg->setConfigEntry('mail_template_class', 'MailTemplateEngine');
 
-// CFG: CITY-HTML-CMD-DO-FORM-RESOLVER-CLASS
-$cfg->setConfigEntry('city_html_cmd_do_form_resolver_class', 'HtmlCommandResolver');
-
-// CFG: CITY-HTML-CMD-LOGIN-AREA-RESOLVER-CLASS
-$cfg->setConfigEntry('city_html_cmd_login_area_resolver_class', 'HtmlCommandResolver');
+// CFG EMAIl-TPL-RESEND-LINK
+$cfg->setConfigEntry('email_tpl_resend_link', 'text');
 
-// CFG: CITY-HTML-CMD-CONFIRM-RESOLVER-CLASS
-$cfg->setConfigEntry('city_html_cmd_confirm_resolver_class', 'HtmlCommandResolver');
+// CFG: ADMIN-EMAIL
+$cfg->setConfigEntry('admin_email', 'you@some-hoster.invalid');
 
-// CFG: CITY-HTML-CMD-PROBLEM-RESOLVER-CLASS
-$cfg->setConfigEntry('city_html_cmd_problem_resolver_class', 'HtmlCommandResolver');
+// CFG: CAPTCHA-ENCRYPT-VALIDATOR-FILTER
+$cfg->setConfigEntry('captcha_encrypt_validator_filter', 'CaptchaEncryptFilter');
 
-// CFG: CITY-HTML-CMD-LOGOUT-RESOLVER-CLASS
-$cfg->setConfigEntry('city_html_cmd_logout_resolver_class', 'HtmlCommandResolver');
+// CFG: USER-STATUS-CONFIRMED-FILTER
+$cfg->setConfigEntry('user_status_confirmed_filter', 'UserStatusConfimedUpdateFilter');
 
 // CFG: CAPTCHA-GUEST-VERIFIER-FILTER
 $cfg->setConfigEntry('captcha_guest_verifier_filter', 'GraphicalCodeCaptchaVerifierFilter');
@@ -272,6 +275,30 @@ $cfg->setConfigEntry('birthday_register_verifier_filter', 'BirthdayVerifierFilte
 // CFG: BIRTHDAY-PROFILE-VERIFIER-FILTER
 $cfg->setConfigEntry('birthday_profile_verifier_filter', 'BirthdayVerifierFilter');
 
+// CFG: CITY-HTML-CMD-DO-FORM-RESOLVER-CLASS
+$cfg->setConfigEntry('city_html_cmd_do_form_resolver_class', 'HtmlCommandResolver');
+
+// CFG: CITY-HTML-CMD-LOGIN-AREA-RESOLVER-CLASS
+$cfg->setConfigEntry('city_html_cmd_login_area_resolver_class', 'HtmlCommandResolver');
+
+// CFG: CITY-HTML-CMD-CONFIRM-RESOLVER-CLASS
+$cfg->setConfigEntry('city_html_cmd_confirm_resolver_class', 'HtmlCommandResolver');
+
+// CFG: CITY-HTML-CMD-PROBLEM-RESOLVER-CLASS
+$cfg->setConfigEntry('city_html_cmd_problem_resolver_class', 'HtmlCommandResolver');
+
+// CFG: CITY-HTML-CMD-LOGOUT-RESOLVER-CLASS
+$cfg->setConfigEntry('city_html_cmd_logout_resolver_class', 'HtmlCommandResolver');
+
+// CFG: EMAIL-CHANGE-ALLOWED
+$cfg->setConfigEntry('email_change_allowed', 'Y');
+
+// CFG: EMAIL-CHANGE-CONFIRMATION
+$cfg->setConfigEntry('email_change_confirmation', 'Y');
+
+// CFG: GUEST-LOGIN-ALLOWED
+$cfg->setConfigEntry('guest_login_allowed', 'Y');
+
 // CFG: GUEST-LOGIN-USERNAME
 $cfg->setConfigEntry('guest_login_user', 'guest');
 
diff --git a/application/city/main/actions/html/class_HtmlCityLoginProfileAction.php b/application/city/main/actions/html/class_HtmlCityLoginProfileAction.php
new file mode 100644 (file)
index 0000000..d9d704f
--- /dev/null
@@ -0,0 +1,82 @@
+<?php
+/**
+ * An action for profile (editing) page
+ *
+ * @author             Roland Haeder <webmaster@shipsimu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2015 City Developer Team
+ * @license            GNU GPL 3.0 or any newer version
+ * @link               http://www.shipsimu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class HtmlCityLoginProfileAction extends BaseCityAction implements Commandable, Registerable {
+       /**
+        * Protected constructor
+        *
+        * @return      void
+        */
+       protected function __construct () {
+               // Call parent constructor
+               parent::__construct(__CLASS__);
+       }
+
+       /**
+        * Creates an instance of this action
+        *
+        * @param       $resolverInstance       An instance of an action resolver
+        * @return      $actionInstance         An instance of this action class
+        */
+       public static final function createHtmlCityLoginProfileAction (ActionResolver $resolverInstance) {
+               // Get a new instance
+               $actionInstance = new HtmlCityLoginProfileAction();
+
+               // Set the resolver instance
+               $actionInstance->setResolverInstance($resolverInstance);
+
+               // Return the instance
+               return $actionInstance;
+       }
+
+       /**
+        * Executes the command with given request and response objects
+        *
+        * @param       $requestInstance        An instance of a class with an Requestable interface
+        * @param       $responseInstance       An instance of a class with an Responseable interface
+        * @return      void
+        * @todo        0% done
+        */
+       public function execute (Requestable $requestInstance, Responseable $responseInstance) {
+               // Call parent execute method
+               parent::execute($requestInstance, $responseInstance);
+
+               // Add your code here...
+       }
+
+       /**
+        * Adds extra filters to the given controller instance
+        *
+        * @param       $controllerInstance             A controller instance
+        * @param       $requestInstance                An instance of a class with an Requestable interface
+        * @return      void
+        * @todo        Add some filters here
+        */
+       public function addExtraFilters (Controller $controllerInstance, Requestable $requestInstance) {
+               // Check for user status by default
+               $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('user_status_filter'));
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/city/main/actions/html/class_HtmlCityLoginStatusProblemAction.php b/application/city/main/actions/html/class_HtmlCityLoginStatusProblemAction.php
new file mode 100644 (file)
index 0000000..7d278f2
--- /dev/null
@@ -0,0 +1,82 @@
+<?php
+/**
+ * An action for status problem handling
+ *
+ * @author             Roland Haeder <webmaster@shipsimu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2015 City Developer Team
+ * @license            GNU GPL 3.0 or any newer version
+ * @link               http://www.shipsimu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class HtmlCityLoginStatusProblemAction extends BaseCityAction implements Commandable, Registerable {
+       /**
+        * Protected constructor
+        *
+        * @return      void
+        */
+       protected function __construct () {
+               // Call parent constructor
+               parent::__construct(__CLASS__);
+       }
+
+       /**
+        * Creates an instance of this action
+        *
+        * @param       $resolverInstance       An instance of an action resolver
+        * @return      $actionInstance         An instance of this action class
+        */
+       public static final function createHtmlCityLoginStatusProblemAction (ActionResolver $resolverInstance) {
+               // Get a new instance
+               $actionInstance = new HtmlCityLoginStatusProblemAction();
+
+               // Set the resolver instance
+               $actionInstance->setResolverInstance($resolverInstance);
+
+               // Return the instance
+               return $actionInstance;
+       }
+
+       /**
+        * Executes the command with given request and response objects
+        *
+        * @param       $requestInstance        An instance of a class with an Requestable interface
+        * @param       $responseInstance       An instance of a class with an Responseable interface
+        * @return      void
+        * @todo        0% done
+        */
+       public function execute (Requestable $requestInstance, Responseable $responseInstance) {
+               // Call parent method
+               parent::execute($requestInstance, $responseInstance);
+
+               // Add your code
+       }
+
+       /**
+        * Adds extra filters to the given controller instance
+        *
+        * @param       $controllerInstance             A controller instance
+        * @param       $requestInstance                An instance of a class with an Requestable interface
+        * @return      void
+        * @todo        Add some filters here
+        */
+       public function addExtraFilters (Controller $controllerInstance, Requestable $requestInstance) {
+               // Check for user status by default
+               $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('user_status_filter'));
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/city/main/controller/html/class_CityHtmlConfirmController.php b/application/city/main/controller/html/class_CityHtmlConfirmController.php
new file mode 100644 (file)
index 0000000..3d90c4a
--- /dev/null
@@ -0,0 +1,73 @@
+<?php
+/**
+ * Controller for confirmation link
+ *
+ * @author             Roland Haeder <webmaster@shipsimu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2015 City Developer Team
+ * @license            GNU GPL 3.0 or any newer version
+ * @link               http://www.shipsimu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class CityHtmlConfirmController extends BaseController implements Controller {
+       /**
+        * Protected constructor
+        *
+        * @return      void
+        */
+       protected function __construct () {
+               // Call parent constructor
+               parent::__construct(__CLASS__);
+       }
+
+       /**
+        * Creates an instance of this class
+        *
+        * @param       $resolverInstance               An instance of a command resolver class
+        * @return      $controllerInstance             A prepared instance of this class
+        * @todo        Add some filters to this controller
+        */
+       public static final function createCityHtmlConfirmController (CommandResolver $resolverInstance) {
+               // Create the instance
+               $controllerInstance = new CityHtmlConfirmController();
+
+               // Set the command resolver
+               $controllerInstance->setResolverInstance($resolverInstance);
+
+               // Add filters for handling confirmation code and username
+               $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('username_verifier_filter'));
+               $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('user_unconfirmed_filter'));
+               $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('confirm_code_verifier_filter'));
+               $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('user_status_confirmed_filter'));
+
+               // Return the prepared instance
+               return $controllerInstance;
+       }
+
+       /**
+        * Handles the given request and response
+        *
+        * @param       $requestInstance        An instance of a request class
+        * @param       $responseInstance       An instance of a response class
+        * @return      void
+        */
+       public function handleRequest (Requestable $requestInstance, Responseable $responseInstance) {
+               // Generic pre-post command execution
+               $this->executeGenericPrePostCommand($requestInstance, $responseInstance);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/city/templates/de/code/confirm_link.ctp b/application/city/templates/de/code/confirm_link.ctp
new file mode 100644 (file)
index 0000000..bf8e6a6
--- /dev/null
@@ -0,0 +1,25 @@
+<?php
+// Get helper instance
+$helperInstance = ObjectFactory::createObjectByConfiguredName('html_link_helper_class', array($this, 'direct_login'));
+
+// Set link text
+$helperInstance->addLinkWithTextById('direct_login');
+
+// Flush the content
+$helperInstance->flushContent();
+
+// [EOC]
+?>
+<div id="content_header">
+       Best&auml;tigung Deiner Email-Adresse:
+</div>
+
+<div id="content_body">
+       Hallo <span class="data_username">{?username?}</span>! Du hast heute deine
+       Email-Addresse best&auml;tigt, wodurch alle Spielefunktionen entsperrt
+       worden sind. Viel Spass beim Spielen!
+</div>
+
+<div id="content_footer">
+       {?direct_login?}
+</div>
diff --git a/application/city/templates/de/code/mail_debug.ctp b/application/city/templates/de/code/mail_debug.ctp
new file mode 100644 (file)
index 0000000..e62dd07
--- /dev/null
@@ -0,0 +1,25 @@
+<div class="debug_header">
+       Mail-Debug-Ausgabe:
+</div>
+
+<div class="mail_header">
+       <div class="mail_header_line">
+               <span class="mail_sender">Von:</span> <span class="mail_info">{?sender?}</span>
+       </div>
+       <div class="mail_header_line">
+               <span class="mail_recipient">An:</span> <span class="mail_info">{?recipient?}</span>
+       </div>
+       <div class="mail_header_line">
+               <span class="mail_subject">Betreff:</span> <span class="mail_info">{?subject?}</span>
+       </div>
+</div>
+
+<div class="mail_text_box">
+       <div class="mail_message">
+               Nachricht:
+       </div>
+
+       <div class="mail_content">
+               {?message?}
+       </div>
+</div>
diff --git a/application/city/templates/de/emails/.htaccess b/application/city/templates/de/emails/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/application/city/templates/de/emails/text_resend_link.tpl b/application/city/templates/de/emails/text_resend_link.tpl
new file mode 100644 (file)
index 0000000..9b79056
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<text-mail>
+       <mail-data>
+               <sender-address value="{?admin_email?}" />
+               <subject-line><![CDATA[Anforderung deines Best&auml;tigungslinks]]></subject-line>
+               <recipient-address value="{?email?}" />
+               <message>
+               <![CDATA[Hallo {?username?}!
+
+Du (oder ein anderer) hattest soeben deinen Best&auml;tigungslink erneut angefordert. Solltest du dies nicht gewesen sein, bitten wir dich den Vorfall zu entschuldigen.
+
+Hier ist nun dein Best&auml;tigungslink. Der alte aus der Anmeldemail ist somit nicht mehr g&uuml;ltig!
+
+{?base_url?}/index.php?app={?app_short_name?}&command=confirm&username={?username?}&confirm={?confirm_hash?}
+
+Solltest du die URL nicht anklicken k&ouml;nnen, versuche diese in die Adresszeile deines Browsers zu kopieren.
+
+Alternativ kannst du im Spielebereich unter Best&auml;tigungscode den folgenden Code reinkopieren oder eingeben:
+
+{?confirm_hash?}
+
+Solltest du Fragen dazu oder Probleme mit der Best&auml;tigung haben, so melde dich bitte beim Support-Team.
+
+Mit freundlichen Gr&uuml;&szlig;en,
+  Dein {?app_short_name?}-Team
+
+{?mail_footer?}]]>
+               </message>
+       </mail-data>
+</text-mail>
index e048d51f0dd4aa751c8099f9ddd780576aa9f54d..41c8fe9de356a45b86ff930ced162e81e88d7e9b 100644 (file)
@@ -31,6 +31,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                                        <title-text><![CDATA[Home:]]></title-text>
                                </title>
                        </block-header>
+
                        <entry-list entry-count="{?entry_count?}">
                                <entry>
                                        <entry-id><![CDATA[home_entry]]></entry-id>
@@ -41,6 +42,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                                                <anchor-href><![CDATA[index.php?app={?app_short_name?}]]></anchor-href>
                                        </anchor>
                                </entry>
+
                                <entry>
                                        <entry-id><![CDATA[login_entry]]></entry-id>
                                        <anchor>
@@ -50,6 +52,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                                                <anchor-href><![CDATA[index.php?app={?app_short_name?}&amp;command=login]]></anchor-href>
                                        </anchor>
                                </entry>
+
                                <entry>
                                        <entry-id><![CDATA[register_entry]]></entry-id>
                                        <anchor>
@@ -59,6 +62,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                                                <anchor-href><![CDATA[index.php?app={?app_short_name?}&amp;command=register]]></anchor-href>
                                        </anchor>
                                </entry>
+
                                <entry>
                                        <entry-id><![CDATA[infos_entry]]></entry-id>
                                        <anchor>
@@ -68,6 +72,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                                                <anchor-href><![CDATA[index.php?app={?app_short_name?}&amp;command=infos]]></anchor-href>
                                        </anchor>
                                </entry>
+
                                <entry>
                                        <entry-id><![CDATA[pillory_entry]]></entry-id>
                                        <anchor>
@@ -78,12 +83,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                                        </anchor>
                                </entry>
                        </entry-list>
+
                        <block-footer>
                                <footer-id><![CDATA[home_menu_footer]]></footer-id>
                                <footer-class><![CDATA[menu_footer]]></footer-class>
                                <footer-text><![CDATA[Unterhalb Hauptauswahl]]></footer-text>
                        </block-footer>
                </block>
+
                <block>
                        <block-header>
                                <title>
@@ -92,6 +99,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                                        <title-text><![CDATA[Rechtliches:]]></title-text>
                                </title>
                        </block-header>
+
                        <entry-list entry-count="{?entry_count?}">
                                <entry>
                                        <entry-id><![CDATA[imprint_entry]]></entry-id>
@@ -102,6 +110,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                                                <anchor-href><![CDATA[index.php?app={?app_short_name?}&amp;command=imprint]]></anchor-href>
                                        </anchor>
                                </entry>
+
                                <entry>
                                        <entry-id><![CDATA[terms_entry]]></entry-id>
                                        <anchor>
@@ -112,6 +121,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                                        </anchor>
                                </entry>
                        </entry-list>
+
                        <block-footer>
                                <footer-id><![CDATA[law_menu_footer]]></footer-id>
                                <footer-class><![CDATA[menu_footer]]></footer-class>
index c93c2e5d4ef984d6123ac73e91750f222e900968..efe4db37aba314b911a218c6087543510e2985c6 100644 (file)
@@ -31,6 +31,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                                        <title-text><![CDATA[Home:]]></title-text>
                                </title>
                        </block-header>
+
                        <entry-list entry-count="{?entry_count?}">
                                <entry>
                                        <entry-id><![CDATA[welcome_entry]]></entry-id>
@@ -41,13 +42,55 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                                                <anchor-href><![CDATA[index.php?app={?app_short_name?}&amp;command=login_area]]></anchor-href>
                                        </anchor>
                                </entry>
+
+                               <entry>
+                                       <entry-id><![CDATA[city_map_entry]]></entry-id>
+                                       <anchor>
+                                               <anchor-id><![CDATA[menu_city_map]]></anchor-id>
+                                               <anchor-text><![CDATA[Stadtkarte]]></anchor-text>
+                                               <anchor-title><![CDATA[Zur Stadtkarte]]></anchor-title>
+                                               <anchor-href><![CDATA[index.php?app={?app_short_name?}&amp;command=login_area&amp;action=city_map]]></anchor-href>
+                                       </anchor>
+                               </entry>
+
+                               <entry>
+                                       <entry-id><![CDATA[region_map_entry]]></entry-id>
+                                       <anchor>
+                                               <anchor-id><![CDATA[menu_region_map]]></anchor-id>
+                                               <anchor-text><![CDATA[Gebietskarte]]></anchor-text>
+                                               <anchor-title><![CDATA[Zur Gebietskarte]]></anchor-title>
+                                               <anchor-href><![CDATA[index.php?app={?app_short_name?}&amp;command=login_area&amp;action=region_map]]></anchor-href>
+                                       </anchor>
+                               </entry>
+
+                               <entry>
+                                       <entry-id><![CDATA[government_entry]]></entry-id>
+                                       <anchor>
+                                               <anchor-id><![CDATA[menu_government]]></anchor-id>
+                                               <anchor-text><![CDATA[Staat]]></anchor-text>
+                                               <anchor-title><![CDATA[Zum fiktiven Staat gehen]]></anchor-title>
+                                               <anchor-href><![CDATA[index.php?app={?app_short_name?}&amp;command=login_area&amp;action=government]]></anchor-href>
+                                       </anchor>
+                               </entry>
+
+                               <entry>
+                                       <entry-id><![CDATA[profile_entry]]></entry-id>
+                                       <anchor>
+                                               <anchor-id><![CDATA[menu_profile]]></anchor-id>
+                                               <anchor-text><![CDATA[Mein Profil]]></anchor-text>
+                                               <anchor-title><![CDATA[Zum Spielerprofil]]></anchor-title>
+                                               <anchor-href><![CDATA[index.php?app={?app_short_name?}&amp;command=login_area&amp;action=profile]]></anchor-href>
+                                       </anchor>
+                               </entry>
                        </entry-list>
+
                        <block-footer>
                                <footer-id><![CDATA[overview_menu_footer]]></footer-id>
                                <footer-class><![CDATA[menu_footer]]></footer-class>
                                <footer-text><![CDATA[Unterhalb Hauptauswahl]]></footer-text>
                        </block-footer>
                </block>
+
                <block>
                        <block-header>
                                <title>
@@ -56,16 +99,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                                        <title-text><![CDATA[Weiteres:]]></title-text>
                                </title>
                        </block-header>
+
                        <entry-list entry-count="{?entry_count?}">
-                               <entry>
-                                       <entry-id><![CDATA[pillory_entry]]></entry-id>
-                                       <anchor>
-                                               <anchor-id><![CDATA[menu_pillory]]></anchor-id>
-                                               <anchor-text><![CDATA[Pranger]]></anchor-text>
-                                               <anchor-title><![CDATA[Zum Pranger]]></anchor-title>
-                                               <anchor-href><![CDATA[index.php?app={?app_short_name?}&amp;command=pillory]]></anchor-href>
-                                       </anchor>
-                               </entry>
                                <entry>
                                        <entry-id><![CDATA[support_entry]]></entry-id>
                                        <anchor>
@@ -75,6 +110,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                                                <anchor-href><![CDATA[index.php?app={?app_short_name?}&amp;command=support]]></anchor-href>
                                        </anchor>
                                </entry>
+
                                <entry>
                                        <entry-id><![CDATA[terms_entry]]></entry-id>
                                        <anchor>
@@ -84,7 +120,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
                                                <anchor-href><![CDATA[index.php?app={?app_short_name?}&amp;command=terms]]></anchor-href>
                                        </anchor>
                                </entry>
+
+                               <entry>
+                                       <entry-id><![CDATA[pillory_entry]]></entry-id>
+                                       <anchor>
+                                               <anchor-id><![CDATA[menu_pillory]]></anchor-id>
+                                               <anchor-text><![CDATA[Pranger]]></anchor-text>
+                                               <anchor-title><![CDATA[Zum Pranger]]></anchor-title>
+                                               <anchor-href><![CDATA[index.php?app={?app_short_name?}&amp;command=pillory]]></anchor-href>
+                                       </anchor>
+                               </entry>
                        </entry-list>
+
                        <block-footer>
                                <footer-id><![CDATA[law_menu_footer]]></footer-id>
                                <footer-class><![CDATA[menu_footer]]></footer-class>
diff --git a/core b/core
index b2f9b3f98dad63c32b07b891f3e19135398090ad..c00f2069057fcaa301bb045f5801e8bc0ff7c658 160000 (submodule)
--- a/core
+++ b/core
@@ -1 +1 @@
-Subproject commit b2f9b3f98dad63c32b07b891f3e19135398090ad
+Subproject commit c00f2069057fcaa301bb045f5801e8bc0ff7c658