From 220c7ec1c79ababa0b030b7716a17d06b48d55a9 Mon Sep 17 00:00:00 2001
From: Thomas Lange <code@nerdmind.de>
Date: Sun, 9 Sep 2018 22:12:54 +0200
Subject: Update example post

---
 database.sql | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'database.sql')

diff --git a/database.sql b/database.sql
index 63c9765..734dce7 100644
--- a/database.sql
+++ b/database.sql
@@ -48,7 +48,7 @@ CREATE TABLE `user` (
 INSERT INTO `page` (`id`, `time_insert`, `time_update`, `user`, `slug`, `name`, `body`, `argv`) VALUES
 (1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 1, 'example-page', 'Example Page', 'OK. You discovered that there is also a page functionality. But what is the difference between a **page** and a **post**? This is simple: There is not really much difference. But you can style posts and pages within the templates CSS completely independent from each other. For example, use **pages** for things like your imprint, your terms of use, your FAQ or other stuff. And **posts** for your main blog posts. A **page** (and also a **user**) has exactly the same functionality as already described within the [first post]({POST[1]})! 8)', NULL);
 INSERT INTO `post` (`id`, `time_insert`, `time_update`, `user`, `slug`, `name`, `body`, `argv`) VALUES
-(1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 1, 'hello-world', 'Hello World!', 'Hello! This is the automatically generated first post on your new blog installation. You can type [Markdown](https://daringfireball.net/projects/markdown/) plaintext into the editor to format your content as you want. In this post you can see several examples to [format your content with Markdown](https://daringfireball.net/projects/markdown/syntax) and with the special features provided by this blog application. After you are familiar with the text formatting and done with the exploration of your new blog application, you can delete this post and create your own. Have fun! :)\r\n\r\n![Demo image: Computer Guy (Public Domain)]({FILE[\"image/content/computer-guy-public-domain.svg\"]})\r\n\r\n## Parsing emoticons (if `POST.EMOTICONS` is `TRUE` within your `configuration.php`)\r\n> You can insert one or more of the following emoticons into your posts by typing the emoticon as simple ASCII text. The emoticon parser will convert your ASCII emoticon to the HTML multibyte unicode equivalent. Each emoticon comes with an further explanation if you just hold your mouse over a emoticons face:  \r\n> :) :( :D :P :O ;) ;( :| :X :/ 8) :S xD ^^\r\n\r\n## Dynamic internal URLs for items\r\nIf you want to link an item, please do not put the URL to the item hardcoded into your content! What if you want to change your site address (or the base directory) in the future? Then you have to change all links in your content. This is not cool! Thus, you can use the following code **without spaces between the braces** by knowing the ID of an item to link it dynamically:\r\n\r\n1. Example: `{ POST[1] }`  \r\n{POST[1]}\r\n\r\n2. Example: `{ PAGE[1] }`  \r\n{PAGE[1]}\r\n\r\n3. Example: `{ USER[1] }`  \r\n{USER[1]}\r\n\r\n## Dynamic internal URLs for other resources\r\nThis also applies to any other resource that exists in the blog system and that you want to link to! You can link any other resource dynamically either relative to your base directory or relative to your resource directory for static content:\r\n\r\n* Example: `{ BASE[\"foo/bar/\"] }`  \r\n{BASE[\"foo/bar/\"]}\r\n\r\n* Example: `{ FILE[\"foo/bar/\"] }`  \r\n{FILE[\"foo/bar/\"]}\r\n\r\n### Anywhere …\r\nYou can use these codes anywhere in your markdown plaintext. This codes will be pre-parsed before the markdown parser gets the content. If the markdown parser begins then all codes already have been converted into the URLs.', NULL);
+(1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 1, 'hello-world', 'Hello World!', 'Hello! This is the automatically generated first post on your new blog installation. You can type [Markdown](https://daringfireball.net/projects/markdown/) plaintext into the editor to format your content like you want.\r\n\r\nIn this post you can see several examples to [format your content with Markdown](https://daringfireball.net/projects/markdown/syntax) and with the *special codes* provided by this blog application. After you are familiar with the text formatting and done with the exploration of your new blog application, you can delete this post and create your own one. 😃\r\n\r\n![Demo image: Computer Guy (Public Domain)]({FILE[\"image/content/computer-guy-public-domain.svg\"]})\r\n\r\n## Dynamic internal URLs for items\r\nIf you want to link an item, please do not put the URL to the item hardcoded into your content! What if you want to change your sites address (or the base directory) in the future? Then you have to change all internal links in your content. This is not cool!\r\n\r\nTherefore, you can use the following code **without spaces between the braces** by knowing the unique ID of an item to link it dynamically:\r\n\r\n1. Example: `{ POST[1] }`  \r\n{POST[1]}\r\n\r\n2. Example: `{ PAGE[1] }`  \r\n{PAGE[1]}\r\n\r\n3. Example: `{ USER[1] }`  \r\n{USER[1]}\r\n\r\n## Dynamic internal URLs for other resources\r\nThis also applies to any other resource that exists in the blog system and that you want to link to! You can link any other resource dynamically either relative to your base directory or relative to your resource directory (`/rsrc/`) for static files:\r\n\r\n* Example: `{ BASE[\"foo/bar/\"] }`  \r\n{BASE[\"foo/bar/\"]}\r\n\r\n* Example: `{ FILE[\"foo/bar/\"] }`  \r\n{FILE[\"foo/bar/\"]}', NULL);
 INSERT INTO `user` (`id`, `time_insert`, `time_update`, `slug`, `username`, `password`, `fullname`, `mailaddr`, `body`, `argv`) VALUES
 (1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'change-me', 'ChangeMe', '$2y$10$jH48L1K1y9dB303aI2biN.ob0biZDuUbMxPKadi3wDqOIxj6yNT6K', 'John Doe', 'mail@example.org', 'Describe yourself.', NULL);
 
-- 
cgit v1.2.3


From afcfaeb2bc7bbe1b278dab78e92d06026b4726e1 Mon Sep 17 00:00:00 2001
From: Thomas Lange <code@nerdmind.de>
Date: Fri, 26 Apr 2019 21:10:33 +0200
Subject: Replace term "template" with "theme"

---
 database.sql | 2 +-
 readme.md    | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

(limited to 'database.sql')

diff --git a/database.sql b/database.sql
index 734dce7..3ff1063 100644
--- a/database.sql
+++ b/database.sql
@@ -46,7 +46,7 @@ CREATE TABLE `user` (
 -- Insert demo page, post and user
 -- =============================================================================
 INSERT INTO `page` (`id`, `time_insert`, `time_update`, `user`, `slug`, `name`, `body`, `argv`) VALUES
-(1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 1, 'example-page', 'Example Page', 'OK. You discovered that there is also a page functionality. But what is the difference between a **page** and a **post**? This is simple: There is not really much difference. But you can style posts and pages within the templates CSS completely independent from each other. For example, use **pages** for things like your imprint, your terms of use, your FAQ or other stuff. And **posts** for your main blog posts. A **page** (and also a **user**) has exactly the same functionality as already described within the [first post]({POST[1]})! 8)', NULL);
+(1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 1, 'example-page', 'Example Page', 'OK. You discovered that there is also a page functionality. But what is the difference between a **page** and a **post**? This is simple: There is not really much difference. But you can style posts and pages within the themes CSS completely independent from each other. For example, use **pages** for things like your imprint, your terms of use, your FAQ or other stuff. And **posts** for your main blog posts. A **page** (and also a **user**) has exactly the same functionality as already described within the [first post]({POST[1]})! 8)', NULL);
 INSERT INTO `post` (`id`, `time_insert`, `time_update`, `user`, `slug`, `name`, `body`, `argv`) VALUES
 (1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 1, 'hello-world', 'Hello World!', 'Hello! This is the automatically generated first post on your new blog installation. You can type [Markdown](https://daringfireball.net/projects/markdown/) plaintext into the editor to format your content like you want.\r\n\r\nIn this post you can see several examples to [format your content with Markdown](https://daringfireball.net/projects/markdown/syntax) and with the *special codes* provided by this blog application. After you are familiar with the text formatting and done with the exploration of your new blog application, you can delete this post and create your own one. 😃\r\n\r\n![Demo image: Computer Guy (Public Domain)]({FILE[\"image/content/computer-guy-public-domain.svg\"]})\r\n\r\n## Dynamic internal URLs for items\r\nIf you want to link an item, please do not put the URL to the item hardcoded into your content! What if you want to change your sites address (or the base directory) in the future? Then you have to change all internal links in your content. This is not cool!\r\n\r\nTherefore, you can use the following code **without spaces between the braces** by knowing the unique ID of an item to link it dynamically:\r\n\r\n1. Example: `{ POST[1] }`  \r\n{POST[1]}\r\n\r\n2. Example: `{ PAGE[1] }`  \r\n{PAGE[1]}\r\n\r\n3. Example: `{ USER[1] }`  \r\n{USER[1]}\r\n\r\n## Dynamic internal URLs for other resources\r\nThis also applies to any other resource that exists in the blog system and that you want to link to! You can link any other resource dynamically either relative to your base directory or relative to your resource directory (`/rsrc/`) for static files:\r\n\r\n* Example: `{ BASE[\"foo/bar/\"] }`  \r\n{BASE[\"foo/bar/\"]}\r\n\r\n* Example: `{ FILE[\"foo/bar/\"] }`  \r\n{FILE[\"foo/bar/\"]}', NULL);
 INSERT INTO `user` (`id`, `time_insert`, `time_update`, `slug`, `username`, `password`, `fullname`, `mailaddr`, `body`, `argv`) VALUES
diff --git a/readme.md b/readme.md
index 61a687b..54a4ea6 100644
--- a/readme.md
+++ b/readme.md
@@ -1,7 +1,7 @@
 # PHP7 blogging application
-Easy blogging application written with PHP7! The application comes with a fulltext search functionality for posts and with customizable templates and languages. You can build your own template if the default template does not satisfy you.
+Easy blogging application written with PHP7! The application comes with a fulltext search functionality for posts and with customizable themes and languages. You can build your own theme if the default theme does not satisfy you.
 
-![Default template](https://nmnd.de/file/p/github-blog/default-template.png)
+![Default theme](https://nmnd.de/file/p/github-blog/default-theme.png)
 
 ## Administration interface
 ![Administration interface](https://nmnd.de/file/p/github-blog/admin-template-2.png)
-- 
cgit v1.2.3


From cd17efc82a5ed560a50b8a1619e4e724098eb209 Mon Sep 17 00:00:00 2001
From: Thomas Lange <code@nerdmind.de>
Date: Tue, 29 Oct 2019 01:37:57 +0100
Subject: Remove PHP closing tags and add LF to text files

Remove the unnecessary PHP closing tags and ensure that *all* text files ending with a LF character.
---
 .gitignore                                       | 2 +-
 .ht-nginx                                        | 2 +-
 .htaccess                                        | 2 +-
 403.php                                          | 1 -
 404.php                                          | 1 -
 admin/auth.php                                   | 1 -
 admin/database.php                               | 1 -
 admin/index.php                                  | 1 -
 admin/page/delete.php                            | 1 -
 admin/page/index.php                             | 1 -
 admin/page/insert.php                            | 1 -
 admin/page/search.php                            | 1 -
 admin/page/update.php                            | 1 -
 admin/post/delete.php                            | 1 -
 admin/post/index.php                             | 1 -
 admin/post/insert.php                            | 1 -
 admin/post/search.php                            | 1 -
 admin/post/update.php                            | 1 -
 admin/user/delete.php                            | 1 -
 admin/user/index.php                             | 1 -
 admin/user/insert.php                            | 1 -
 admin/user/update.php                            | 1 -
 core/application.php                             | 1 -
 core/configuration-example.php                   | 1 -
 core/functions.php                               | 1 -
 core/include/feed/main.php                       | 1 -
 core/include/home.php                            | 1 -
 core/include/page/list.php                       | 1 -
 core/include/page/main.php                       | 1 -
 core/include/post/list.php                       | 1 -
 core/include/post/main.php                       | 1 -
 core/include/search/main.php                     | 1 -
 core/include/user/list.php                       | 1 -
 core/include/user/main.php                       | 1 -
 core/language/de.php                             | 1 -
 core/language/en.php                             | 1 -
 core/namespace/Application.php                   | 1 -
 core/namespace/Attribute.php                     | 1 -
 core/namespace/AttributeInterface.php            | 1 -
 core/namespace/Database.php                      | 1 -
 core/namespace/Factory.php                       | 1 -
 core/namespace/FactoryInterface.php              | 1 -
 core/namespace/HTTP.php                          | 1 -
 core/namespace/Item.php                          | 1 -
 core/namespace/ItemFactory.php                   | 1 -
 core/namespace/ItemInterface.php                 | 1 -
 core/namespace/Language.php                      | 1 -
 core/namespace/Page/Attribute.php                | 1 -
 core/namespace/Page/Exception.php                | 1 -
 core/namespace/Page/Factory.php                  | 1 -
 core/namespace/Page/Item.php                     | 1 -
 core/namespace/Post/Attribute.php                | 1 -
 core/namespace/Post/Exception.php                | 1 -
 core/namespace/Post/Factory.php                  | 1 -
 core/namespace/Post/Item.php                     | 1 -
 core/namespace/Router.php                        | 1 -
 core/namespace/Template/Exception.php            | 1 -
 core/namespace/Template/Factory.php              | 1 -
 core/namespace/Template/Template.php             | 1 -
 database.sql                                     | 2 +-
 index.php                                        | 1 -
 license.md                                       | 2 +-
 readme.md                                        | 2 +-
 theme/admin/html/403.php                         | 2 +-
 theme/admin/html/404.php                         | 2 +-
 theme/admin/html/auth.php                        | 2 +-
 theme/admin/html/database.php                    | 2 +-
 theme/admin/html/home.php                        | 3 ++-
 theme/admin/html/main.php                        | 2 +-
 theme/admin/html/pagination.php                  | 2 +-
 theme/admin/lang/de.php                          | 1 -
 theme/admin/lang/en.php                          | 1 -
 theme/admin/rsrc/font/font-awesome-fontello.json | 2 +-
 theme/admin/rsrc/icon-public-domain.svg          | 2 +-
 theme/admin/rsrc/main.css                        | 2 +-
 theme/admin/rsrc/main.js                         | 2 +-
 theme/default/html/403.php                       | 2 +-
 theme/default/html/404.php                       | 2 +-
 theme/default/html/feed/item_page.php            | 2 +-
 theme/default/html/feed/item_post.php            | 2 +-
 theme/default/html/feed/main.php                 | 2 +-
 theme/default/html/home.php                      | 3 ++-
 theme/default/html/main.php                      | 2 +-
 theme/default/html/page/item.php                 | 2 +-
 theme/default/html/page/list.php                 | 2 +-
 theme/default/html/page/main.php                 | 2 +-
 theme/default/html/pagination.php                | 2 +-
 theme/default/html/post/item.php                 | 2 +-
 theme/default/html/post/list.php                 | 2 +-
 theme/default/html/post/main.php                 | 2 +-
 theme/default/html/search/main.php               | 2 +-
 theme/default/html/search/result.php             | 2 +-
 theme/default/html/user/item.php                 | 2 +-
 theme/default/html/user/list.php                 | 2 +-
 theme/default/html/user/main.php                 | 2 +-
 theme/default/lang/de.php                        | 1 -
 theme/default/lang/en.php                        | 1 -
 theme/default/rsrc/main.css                      | 2 +-
 theme/default/rsrc/main.js                       | 2 +-
 99 files changed, 40 insertions(+), 99 deletions(-)

(limited to 'database.sql')

diff --git a/.gitignore b/.gitignore
index c0cee83..ce3523a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,2 @@
 .idea/
-core/configuration.php
\ No newline at end of file
+core/configuration.php
diff --git a/.ht-nginx b/.ht-nginx
index 9f85d41..ff6b459 100644
--- a/.ht-nginx
+++ b/.ht-nginx
@@ -27,4 +27,4 @@ location ~ ^/(core|theme/([^/]+)/(html|lang)/) {
 #===============================================================================
 if (!-e $request_filename) {
 	rewrite ^(.*)$ /index.php break;
-}
\ No newline at end of file
+}
diff --git a/.htaccess b/.htaccess
index f42f718..bbf32d9 100644
--- a/.htaccess
+++ b/.htaccess
@@ -31,4 +31,4 @@ RewriteRule ^(core|theme/([^/]+)/(html|lang)/) - [F]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 
-RewriteRule ^(.*)$ index.php [L]
\ No newline at end of file
+RewriteRule ^(.*)$ index.php [L]
diff --git a/403.php b/403.php
index 54f01ba..4fbe789 100644
--- a/403.php
+++ b/403.php
@@ -27,4 +27,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/404.php b/404.php
index f3c76de..544246d 100644
--- a/404.php
+++ b/404.php
@@ -27,4 +27,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/admin/auth.php b/admin/auth.php
index e2e1b57..cec8867 100644
--- a/admin/auth.php
+++ b/admin/auth.php
@@ -75,4 +75,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/admin/database.php b/admin/database.php
index d37e158..14f34e1 100644
--- a/admin/database.php
+++ b/admin/database.php
@@ -49,4 +49,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/admin/index.php b/admin/index.php
index 1f8d9f6..6170021 100644
--- a/admin/index.php
+++ b/admin/index.php
@@ -89,4 +89,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/admin/page/delete.php b/admin/page/delete.php
index d23089c..111910b 100644
--- a/admin/page/delete.php
+++ b/admin/page/delete.php
@@ -63,4 +63,3 @@ try {
 catch(Page\Exception $Exception) {
 	Application::error404();
 }
-?>
\ No newline at end of file
diff --git a/admin/page/index.php b/admin/page/index.php
index c14bf13..090b31c 100644
--- a/admin/page/index.php
+++ b/admin/page/index.php
@@ -76,4 +76,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/admin/page/insert.php b/admin/page/insert.php
index d95a33d..4fc4d8b 100644
--- a/admin/page/insert.php
+++ b/admin/page/insert.php
@@ -76,4 +76,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/admin/page/search.php b/admin/page/search.php
index d97370d..e71a8b8 100644
--- a/admin/page/search.php
+++ b/admin/page/search.php
@@ -49,4 +49,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/admin/page/update.php b/admin/page/update.php
index f0bef1e..a7c9cd0 100644
--- a/admin/page/update.php
+++ b/admin/page/update.php
@@ -86,4 +86,3 @@ try {
 catch(Page\Exception $Exception) {
 	Application::error404();
 }
-?>
\ No newline at end of file
diff --git a/admin/post/delete.php b/admin/post/delete.php
index 78fdf6e..792b958 100644
--- a/admin/post/delete.php
+++ b/admin/post/delete.php
@@ -63,4 +63,3 @@ try {
 catch(Post\Exception $Exception) {
 	Application::error404();
 }
-?>
\ No newline at end of file
diff --git a/admin/post/index.php b/admin/post/index.php
index 57b19e9..15e2c17 100644
--- a/admin/post/index.php
+++ b/admin/post/index.php
@@ -76,4 +76,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/admin/post/insert.php b/admin/post/insert.php
index d35d527..6916a61 100644
--- a/admin/post/insert.php
+++ b/admin/post/insert.php
@@ -76,4 +76,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/admin/post/search.php b/admin/post/search.php
index c2c83ca..cd28322 100644
--- a/admin/post/search.php
+++ b/admin/post/search.php
@@ -49,4 +49,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/admin/post/update.php b/admin/post/update.php
index d2cf979..7b82bf4 100644
--- a/admin/post/update.php
+++ b/admin/post/update.php
@@ -86,4 +86,3 @@ try {
 catch(Post\Exception $Exception) {
 	Application::error404();
 }
-?>
\ No newline at end of file
diff --git a/admin/user/delete.php b/admin/user/delete.php
index 16f0d76..92aed0d 100644
--- a/admin/user/delete.php
+++ b/admin/user/delete.php
@@ -63,4 +63,3 @@ try {
 catch(User\Exception $Exception) {
 	Application::error404();
 }
-?>
\ No newline at end of file
diff --git a/admin/user/index.php b/admin/user/index.php
index b474fc8..6b3d726 100644
--- a/admin/user/index.php
+++ b/admin/user/index.php
@@ -72,4 +72,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/admin/user/insert.php b/admin/user/insert.php
index 53d35df..0a50927 100644
--- a/admin/user/insert.php
+++ b/admin/user/insert.php
@@ -66,4 +66,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/admin/user/update.php b/admin/user/update.php
index 50643aa..49ec335 100644
--- a/admin/user/update.php
+++ b/admin/user/update.php
@@ -76,4 +76,3 @@ try {
 catch(User\Exception $Exception) {
 	Application::error404();
 }
-?>
\ No newline at end of file
diff --git a/core/application.php b/core/application.php
index a9850aa..7179369 100644
--- a/core/application.php
+++ b/core/application.php
@@ -186,4 +186,3 @@ if(Application::get('CORE.SEND_304') === TRUE AND !defined('ADMINISTRATION')) {
 		}
 	}
 }
-?>
\ No newline at end of file
diff --git a/core/configuration-example.php b/core/configuration-example.php
index f87117b..f99d130 100644
--- a/core/configuration-example.php
+++ b/core/configuration-example.php
@@ -27,4 +27,3 @@ Application::set('DATABASE.PASSWORD', '');
 Application::set('TEMPLATE.NAME', 'default');
 Application::set('TEMPLATE.LANG', Application::get('CORE.LANGUAGE'));
 Application::set('ADMIN.LANGUAGE', Application::get('CORE.LANGUAGE'));
-?>
\ No newline at end of file
diff --git a/core/functions.php b/core/functions.php
index ac4478f..ef2814a 100644
--- a/core/functions.php
+++ b/core/functions.php
@@ -331,4 +331,3 @@ function USER(int $id): array {
 		return [];
 	}
 }
-?>
\ No newline at end of file
diff --git a/core/include/feed/main.php b/core/include/feed/main.php
index b8e03dc..cd53fa0 100644
--- a/core/include/feed/main.php
+++ b/core/include/feed/main.php
@@ -80,4 +80,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/core/include/home.php b/core/include/home.php
index ce91558..bb96837 100644
--- a/core/include/home.php
+++ b/core/include/home.php
@@ -52,4 +52,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/core/include/page/list.php b/core/include/page/list.php
index 022478e..6bda9cf 100644
--- a/core/include/page/list.php
+++ b/core/include/page/list.php
@@ -75,4 +75,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/core/include/page/main.php b/core/include/page/main.php
index 7f1aa02..6086345 100644
--- a/core/include/page/main.php
+++ b/core/include/page/main.php
@@ -93,4 +93,3 @@ catch(Page\Exception $Exception) {
 catch(User\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/core/include/post/list.php b/core/include/post/list.php
index 3ba2dba..e3b37c3 100644
--- a/core/include/post/list.php
+++ b/core/include/post/list.php
@@ -75,4 +75,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/core/include/post/main.php b/core/include/post/main.php
index aa5dc50..d891416 100644
--- a/core/include/post/main.php
+++ b/core/include/post/main.php
@@ -93,4 +93,3 @@ catch(Post\Exception $Exception) {
 catch(User\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/core/include/search/main.php b/core/include/search/main.php
index 8854b79..db9a77a 100644
--- a/core/include/search/main.php
+++ b/core/include/search/main.php
@@ -87,4 +87,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/core/include/user/list.php b/core/include/user/list.php
index 4ce9fc8..f715a55 100644
--- a/core/include/user/list.php
+++ b/core/include/user/list.php
@@ -71,4 +71,3 @@ try {
 catch(Template\Exception $Exception) {
 	Application::exit($Exception->getMessage());
 }
-?>
\ No newline at end of file
diff --git a/core/include/user/main.php b/core/include/user/main.php
index 4f30020..ee1fa76 100644
--- a/core/include/user/main.php
+++ b/core/include/user/main.php
@@ -100,4 +100,3 @@ catch(User\Exception $Exception) {
 		Application::error404();
 	}
 }
-?>
\ No newline at end of file
diff --git a/core/language/de.php b/core/language/de.php
index 5d29d5d..2f008da 100644
--- a/core/language/de.php
+++ b/core/language/de.php
@@ -210,4 +210,3 @@ $LANGUAGE['title_search_results'] = 'Ergebnisse für "%s"';
 $LANGUAGE['feed_name_items'] = '%s [alle Inhalte]';
 $LANGUAGE['feed_name_pages'] = '%s [nur Seiten]';
 $LANGUAGE['feed_name_posts'] = '%s [nur Beiträge]';
-?>
\ No newline at end of file
diff --git a/core/language/en.php b/core/language/en.php
index dc70154..eeec0a9 100644
--- a/core/language/en.php
+++ b/core/language/en.php
@@ -210,4 +210,3 @@ $LANGUAGE['title_search_results'] = 'Results for "%s"';
 $LANGUAGE['feed_name_items'] = '%s [all content]';
 $LANGUAGE['feed_name_pages'] = '%s [only pages]';
 $LANGUAGE['feed_name_posts'] = '%s [only posts]';
-?>
\ No newline at end of file
diff --git a/core/namespace/Application.php b/core/namespace/Application.php
index a45e1e8..64e562d 100644
--- a/core/namespace/Application.php
+++ b/core/namespace/Application.php
@@ -163,4 +163,3 @@ class Application {
 		exit();
 	}
 }
-?>
\ No newline at end of file
diff --git a/core/namespace/Attribute.php b/core/namespace/Attribute.php
index 32cfa0a..505a4cd 100644
--- a/core/namespace/Attribute.php
+++ b/core/namespace/Attribute.php
@@ -82,4 +82,3 @@ abstract class Attribute implements AttributeInterface {
 		return $Statement->execute([$this->get('id')]);
 	}
 }
-?>
\ No newline at end of file
diff --git a/core/namespace/AttributeInterface.php b/core/namespace/AttributeInterface.php
index 74cd1f1..7a7c38c 100644
--- a/core/namespace/AttributeInterface.php
+++ b/core/namespace/AttributeInterface.php
@@ -4,4 +4,3 @@ interface AttributeInterface {
 	public function databaseUPDATE(\Database $Database);
 	public function databaseDELETE(\Database $Database);
 }
-?>
\ No newline at end of file
diff --git a/core/namespace/Database.php b/core/namespace/Database.php
index ae233f4..54fb36b 100644
--- a/core/namespace/Database.php
+++ b/core/namespace/Database.php
@@ -4,4 +4,3 @@ class Database extends \PDO {
 		parent::__construct("mysql:host={$hostname};dbname={$basename};charset=utf8mb4;", $username, $password);
 	}
 }
-?>
\ No newline at end of file
diff --git a/core/namespace/Factory.php b/core/namespace/Factory.php
index 38be666..779b890 100644
--- a/core/namespace/Factory.php
+++ b/core/namespace/Factory.php
@@ -16,4 +16,3 @@ abstract class Factory implements FactoryInterface {
 		return self::$storage[get_called_class()][$identifier] ?? FALSE;
 	}
 }
-?>
\ No newline at end of file
diff --git a/core/namespace/FactoryInterface.php b/core/namespace/FactoryInterface.php
index 54a115b..e9017d6 100644
--- a/core/namespace/FactoryInterface.php
+++ b/core/namespace/FactoryInterface.php
@@ -2,4 +2,3 @@
 interface FactoryInterface {
 	public static function build($identifier);
 }
-?>
\ No newline at end of file
diff --git a/core/namespace/HTTP.php b/core/namespace/HTTP.php
index c8aea27..9145539 100644
--- a/core/namespace/HTTP.php
+++ b/core/namespace/HTTP.php
@@ -228,4 +228,3 @@ class HTTP {
 		}
 	}
 }
-?>
\ No newline at end of file
diff --git a/core/namespace/Item.php b/core/namespace/Item.php
index c009740..02de382 100644
--- a/core/namespace/Item.php
+++ b/core/namespace/Item.php
@@ -169,4 +169,3 @@ abstract class Item implements ItemInterface {
 		return 0;
 	}
 }
-?>
\ No newline at end of file
diff --git a/core/namespace/ItemFactory.php b/core/namespace/ItemFactory.php
index dec136f..d81ff9f 100644
--- a/core/namespace/ItemFactory.php
+++ b/core/namespace/ItemFactory.php
@@ -21,4 +21,3 @@ abstract class ItemFactory extends Factory {
 		return self::build($Item::getIDByField('slug', $slug, \Application::getDatabase()));
 	}
 }
-?>
\ No newline at end of file
diff --git a/core/namespace/ItemInterface.php b/core/namespace/ItemInterface.php
index e7ccb6a..efee734 100644
--- a/core/namespace/ItemInterface.php
+++ b/core/namespace/ItemInterface.php
@@ -2,4 +2,3 @@
 interface ItemInterface {
 	public function __construct($itemID, \Database $Database);
 }
-?>
\ No newline at end of file
diff --git a/core/namespace/Language.php b/core/namespace/Language.php
index fdaf104..f082b37 100644
--- a/core/namespace/Language.php
+++ b/core/namespace/Language.php
@@ -49,4 +49,3 @@ class Language {
 		return $this->text($name, $params);
 	}
 }
-?>
\ No newline at end of file
diff --git a/core/namespace/Page/Attribute.php b/core/namespace/Page/Attribute.php
index b1c4e01..05eaa33 100644
--- a/core/namespace/Page/Attribute.php
+++ b/core/namespace/Page/Attribute.php
@@ -20,4 +20,3 @@ class Attribute extends \Attribute {
 	#===============================================================================
 	const TABLE = 'page';
 }
-?>
\ No newline at end of file
diff --git a/core/namespace/Page/Exception.php b/core/namespace/Page/Exception.php
index d4794b7..c41bddc 100644
--- a/core/namespace/Page/Exception.php
+++ b/core/namespace/Page/Exception.php
@@ -2,4 +2,3 @@
 namespace Page;
 
 class Exception extends \Exception {}
-?>
\ No newline at end of file
diff --git a/core/namespace/Page/Factory.php b/core/namespace/Page/Factory.php
index 4b8d390..2fcc361 100644
--- a/core/namespace/Page/Factory.php
+++ b/core/namespace/Page/Factory.php
@@ -2,4 +2,3 @@
 namespace Page;
 
 class Factory extends \ItemFactory {}
-?>
\ No newline at end of file
diff --git a/core/namespace/Page/Item.php b/core/namespace/Page/Item.php
index e3bf6a3..d559b81 100644
--- a/core/namespace/Page/Item.php
+++ b/core/namespace/Page/Item.php
@@ -40,4 +40,3 @@ class Item extends \Item {
 		return [];
 	}
 }
-?>
\ No newline at end of file
diff --git a/core/namespace/Post/Attribute.php b/core/namespace/Post/Attribute.php
index 73af3a2..20aafae 100644
--- a/core/namespace/Post/Attribute.php
+++ b/core/namespace/Post/Attribute.php
@@ -20,4 +20,3 @@ class Attribute extends \Attribute {
 	#===============================================================================
 	const TABLE = 'post';
 }
-?>
\ No newline at end of file
diff --git a/core/namespace/Post/Exception.php b/core/namespace/Post/Exception.php
index 516ddbe..29b9345 100644
--- a/core/namespace/Post/Exception.php
+++ b/core/namespace/Post/Exception.php
@@ -2,4 +2,3 @@
 namespace Post;
 
 class Exception extends \Exception {}
-?>
\ No newline at end of file
diff --git a/core/namespace/Post/Factory.php b/core/namespace/Post/Factory.php
index 4ad8ac8..20b29cc 100644
--- a/core/namespace/Post/Factory.php
+++ b/core/namespace/Post/Factory.php
@@ -2,4 +2,3 @@
 namespace Post;
 
 class Factory extends \ItemFactory {}
-?>
\ No newline at end of file
diff --git a/core/namespace/Post/Item.php b/core/namespace/Post/Item.php
index a269ce4..0f2c6a5 100644
--- a/core/namespace/Post/Item.php
+++ b/core/namespace/Post/Item.php
@@ -47,4 +47,3 @@ class Item extends \Item {
 		return [];
 	}
 }
-?>
\ No newline at end of file
diff --git a/core/namespace/Router.php b/core/namespace/Router.php
index b6221d1..803a8e0 100644
--- a/core/namespace/Router.php
+++ b/core/namespace/Router.php
@@ -61,4 +61,3 @@ class Router {
 		}
 	}
 }
-?>
\ No newline at end of file
diff --git a/core/namespace/Template/Exception.php b/core/namespace/Template/Exception.php
index a38ee1d..3bfbf63 100644
--- a/core/namespace/Template/Exception.php
+++ b/core/namespace/Template/Exception.php
@@ -2,4 +2,3 @@
 namespace Template;
 
 class Exception extends \Exception {}
-?>
\ No newline at end of file
diff --git a/core/namespace/Template/Factory.php b/core/namespace/Template/Factory.php
index 3b40998..7e56a79 100644
--- a/core/namespace/Template/Factory.php
+++ b/core/namespace/Template/Factory.php
@@ -15,4 +15,3 @@ class Factory extends \Factory implements \FactoryInterface {
 		return $Template;
 	}
 }
-?>
\ No newline at end of file
diff --git a/core/namespace/Template/Template.php b/core/namespace/Template/Template.php
index 16459fb..25034a2 100644
--- a/core/namespace/Template/Template.php
+++ b/core/namespace/Template/Template.php
@@ -41,4 +41,3 @@ class Template {
 		return ob_get_clean();
 	}
 }
-?>
\ No newline at end of file
diff --git a/database.sql b/database.sql
index 3ff1063..3f77a3b 100644
--- a/database.sql
+++ b/database.sql
@@ -76,4 +76,4 @@ ALTER TABLE `user` MODIFY `id` tinyint(4)  NOT NULL AUTO_INCREMENT;
 -- Add foreign keys for data integrity
 -- =============================================================================
 ALTER TABLE `page` ADD CONSTRAINT `page_user` FOREIGN KEY (`user`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-ALTER TABLE `post` ADD CONSTRAINT `post_user` FOREIGN KEY (`user`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
\ No newline at end of file
+ALTER TABLE `post` ADD CONSTRAINT `post_user` FOREIGN KEY (`user`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/index.php b/index.php
index 842da61..70cd831 100644
--- a/index.php
+++ b/index.php
@@ -79,4 +79,3 @@ Router::addRedirect('favicon.ico', Application::getTemplateURL('rsrc/favicon.ico
 # Execute router and route requests
 #===============================================================================
 Router::execute(parse_url(HTTP::requestURI(), PHP_URL_PATH));
-?>
\ No newline at end of file
diff --git a/license.md b/license.md
index 444ae6d..ca0fcb0 100644
--- a/license.md
+++ b/license.md
@@ -6,4 +6,4 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of
 
 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/readme.md b/readme.md
index 6a6e93c..e113c0a 100644
--- a/readme.md
+++ b/readme.md
@@ -22,4 +22,4 @@ This project is currently **not in active development**, but the *master* branch
 You can find more information about the configuration and customization in the wiki:
 
 * [GitHub](https://github.com/Nerdmind/Blog/wiki)
-* [Mirror](https://code.nerdmind.de/blog/wiki/)
\ No newline at end of file
+* [Mirror](https://code.nerdmind.de/blog/wiki/)
diff --git a/theme/admin/html/403.php b/theme/admin/html/403.php
index 6fb3d16..f9a0afd 100644
--- a/theme/admin/html/403.php
+++ b/theme/admin/html/403.php
@@ -1,2 +1,2 @@
 <h1><i class="fa fa-exclamation-triangle"></i><?=$Language->text('403_heading_text')?></h1>
-<p><?=$Language->text('403_heading_desc')?></p>
\ No newline at end of file
+<p><?=$Language->text('403_heading_desc')?></p>
diff --git a/theme/admin/html/404.php b/theme/admin/html/404.php
index aa264cd..d53d1bc 100644
--- a/theme/admin/html/404.php
+++ b/theme/admin/html/404.php
@@ -1,2 +1,2 @@
 <h1><i class="fa fa-exclamation-triangle"></i><?=$Language->text('404_heading_text')?></h1>
-<p><?=$Language->text('404_heading_desc')?></p>
\ No newline at end of file
+<p><?=$Language->text('404_heading_desc')?></p>
diff --git a/theme/admin/html/auth.php b/theme/admin/html/auth.php
index e6bfb1e..ebb7a2a 100644
--- a/theme/admin/html/auth.php
+++ b/theme/admin/html/auth.php
@@ -31,4 +31,4 @@
 	<div class="flex flex-padding background">
 		<input type="submit" name="auth" value="<?=$Language->text('login')?>" />
 	</div>
-</form>
\ No newline at end of file
+</form>
diff --git a/theme/admin/html/database.php b/theme/admin/html/database.php
index 983dee7..21701bd 100644
--- a/theme/admin/html/database.php
+++ b/theme/admin/html/database.php
@@ -27,4 +27,4 @@
 	<div class="flex flex-padding background">
 		<input id="insert-button" type="submit" name="execute" value="Execute" />
 	</div>
-</form>
\ No newline at end of file
+</form>
diff --git a/theme/admin/html/home.php b/theme/admin/html/home.php
index a8b003e..083ae30 100644
--- a/theme/admin/html/home.php
+++ b/theme/admin/html/home.php
@@ -42,4 +42,5 @@
 	</div>
 <?php else: ?>
 	<p><em><?=$Language->text('home_no_users')?></em></p>
-<?php endif; ?>
\ No newline at end of file
+<?php endif; ?>
+
diff --git a/theme/admin/html/main.php b/theme/admin/html/main.php
index 6002bdf..51f00e4 100644
--- a/theme/admin/html/main.php
+++ b/theme/admin/html/main.php
@@ -49,4 +49,4 @@
 		</ul>
 	</footer>
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/theme/admin/html/pagination.php b/theme/admin/html/pagination.php
index 42eb378..70720b6 100644
--- a/theme/admin/html/pagination.php
+++ b/theme/admin/html/pagination.php
@@ -27,4 +27,4 @@
 	<?php else: ?>
 		<div><a class="disabled"><i class="fa fa-arrow-right"></i></a></div>
 	<?php endif; ?>
-</div>
\ No newline at end of file
+</div>
diff --git a/theme/admin/lang/de.php b/theme/admin/lang/de.php
index 5fabdc3..0a848a6 100644
--- a/theme/admin/lang/de.php
+++ b/theme/admin/lang/de.php
@@ -143,4 +143,3 @@ $LANGUAGE['markdown_code'] = 'Codeblock';
 $LANGUAGE['markdown_quote'] = 'Zitat';
 $LANGUAGE['markdown_list_ul'] = 'Liste [ungeordnet]';
 $LANGUAGE['markdown_list_ol'] = 'Liste [geordnet]';
-?>
\ No newline at end of file
diff --git a/theme/admin/lang/en.php b/theme/admin/lang/en.php
index b082cca..174a1d7 100644
--- a/theme/admin/lang/en.php
+++ b/theme/admin/lang/en.php
@@ -143,4 +143,3 @@ $LANGUAGE['markdown_code'] = 'Code block';
 $LANGUAGE['markdown_quote'] = 'Quote';
 $LANGUAGE['markdown_list_ul'] = 'List [unordered]';
 $LANGUAGE['markdown_list_ol'] = 'List [ordered]';
-?>
\ No newline at end of file
diff --git a/theme/admin/rsrc/font/font-awesome-fontello.json b/theme/admin/rsrc/font/font-awesome-fontello.json
index 515e8a7..599f149 100644
--- a/theme/admin/rsrc/font/font-awesome-fontello.json
+++ b/theme/admin/rsrc/font/font-awesome-fontello.json
@@ -193,4 +193,4 @@
       "src": "fontawesome"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/theme/admin/rsrc/icon-public-domain.svg b/theme/admin/rsrc/icon-public-domain.svg
index e0f0b0f..88f7227 100644
--- a/theme/admin/rsrc/icon-public-domain.svg
+++ b/theme/admin/rsrc/icon-public-domain.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 53.869999 53.509998" version="1" width="53.87" height="53.51"><rect rx="2" width="50.745" y="1.563" x="1.563" height="50.385" fill="#b3b3b3" fill-rule="evenodd" stroke="#333" stroke-width="3.125" stroke-linejoin="round"/><g transform="translate(-3.116 -3.554)" fill-rule="evenodd" stroke="#333" stroke-linecap="round" stroke-linejoin="round"><path d="M25.96 22.992c-2.403 1.28-3.964 3.706-4.993 6.316h18.198c-.944-2.547-2.39-4.947-4.593-6.316-2.478-.108-5.595 0-8.612 0z" fill="#7f7f7f" stroke-width="1.87471319"/><circle transform="matrix(.6206 0 0 .6206 17.702 3.554)" cx="19.524" cy="22.301" r="12.326" fill="#bfbfbf" stroke-width="3.021"/></g><path d="M12.76 27.584c-.84 0-1.513.674-1.513 1.512v18.116h31.72V29.096c0-.838-.674-1.512-1.51-1.512H12.758z" fill="#999" fill-rule="evenodd" stroke="#333" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.55 29.705l-9.617-13.27 5.385-2.694" fill="none" stroke="#333" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/><circle cx="13.934" cy="13.741" r="2.308" fill="#7f7f7f" fill-rule="evenodd" stroke="#333" stroke-width="1.25"/><rect rx="2.267" height="4.616" width="36.929" y="24.705" x="8.548" fill="#4c4c4c" fill-rule="evenodd" stroke="#333" stroke-width="2.5" stroke-linejoin="round"/><path d="M18.29 45.03c2.917-1.836 6.143-2.33 7.4-2.043.14-1.242 2.07-3.303 5.54-5.486-4.107 1.048-4.96 1.32-6.74 3.745-3.04.3-3.913 1.192-6.2 3.785zM25.543 36.904c2.02-1.27 4.253-1.612 5.122-1.415.098-.86 1.434-2.287 3.835-3.797-2.842.724-3.433.912-4.664 2.59-2.105.208-2.71.826-4.293 2.62z" fill="#4c4c4c" fill-rule="evenodd" stroke="#333" stroke-width=".625" stroke-linecap="round" stroke-linejoin="round"/></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 53.869999 53.509998" version="1" width="53.87" height="53.51"><rect rx="2" width="50.745" y="1.563" x="1.563" height="50.385" fill="#b3b3b3" fill-rule="evenodd" stroke="#333" stroke-width="3.125" stroke-linejoin="round"/><g transform="translate(-3.116 -3.554)" fill-rule="evenodd" stroke="#333" stroke-linecap="round" stroke-linejoin="round"><path d="M25.96 22.992c-2.403 1.28-3.964 3.706-4.993 6.316h18.198c-.944-2.547-2.39-4.947-4.593-6.316-2.478-.108-5.595 0-8.612 0z" fill="#7f7f7f" stroke-width="1.87471319"/><circle transform="matrix(.6206 0 0 .6206 17.702 3.554)" cx="19.524" cy="22.301" r="12.326" fill="#bfbfbf" stroke-width="3.021"/></g><path d="M12.76 27.584c-.84 0-1.513.674-1.513 1.512v18.116h31.72V29.096c0-.838-.674-1.512-1.51-1.512H12.758z" fill="#999" fill-rule="evenodd" stroke="#333" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.55 29.705l-9.617-13.27 5.385-2.694" fill="none" stroke="#333" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/><circle cx="13.934" cy="13.741" r="2.308" fill="#7f7f7f" fill-rule="evenodd" stroke="#333" stroke-width="1.25"/><rect rx="2.267" height="4.616" width="36.929" y="24.705" x="8.548" fill="#4c4c4c" fill-rule="evenodd" stroke="#333" stroke-width="2.5" stroke-linejoin="round"/><path d="M18.29 45.03c2.917-1.836 6.143-2.33 7.4-2.043.14-1.242 2.07-3.303 5.54-5.486-4.107 1.048-4.96 1.32-6.74 3.745-3.04.3-3.913 1.192-6.2 3.785zM25.543 36.904c2.02-1.27 4.253-1.612 5.122-1.415.098-.86 1.434-2.287 3.835-3.797-2.842.724-3.433.912-4.664 2.59-2.105.208-2.71.826-4.293 2.62z" fill="#4c4c4c" fill-rule="evenodd" stroke="#333" stroke-width=".625" stroke-linecap="round" stroke-linejoin="round"/></svg>
diff --git a/theme/admin/rsrc/main.css b/theme/admin/rsrc/main.css
index dbb1dce..f9560e9 100644
--- a/theme/admin/rsrc/main.css
+++ b/theme/admin/rsrc/main.css
@@ -976,4 +976,4 @@ label:after {
 	font-family: Ruda;
 	font-weight: 700;
 	src: url("font/ruda-n-700.woff2") format("woff2");
-}
\ No newline at end of file
+}
diff --git a/theme/admin/rsrc/main.js b/theme/admin/rsrc/main.js
index 46880f2..842ef47 100644
--- a/theme/admin/rsrc/main.js
+++ b/theme/admin/rsrc/main.js
@@ -157,4 +157,4 @@ if(document.getElementById("delete-button")) {
 			};
 		}
 	}
-})();
\ No newline at end of file
+})();
diff --git a/theme/default/html/403.php b/theme/default/html/403.php
index 337dd44..1e78316 100644
--- a/theme/default/html/403.php
+++ b/theme/default/html/403.php
@@ -8,4 +8,4 @@
 #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
 ?>
 <h1><i class="fa fa-exclamation-triangle"></i><?=$Language->text('403_heading_text')?></h1>
-<p><?=$Language->text('403_heading_desc')?></p>
\ No newline at end of file
+<p><?=$Language->text('403_heading_desc')?></p>
diff --git a/theme/default/html/404.php b/theme/default/html/404.php
index 54866a4..9495944 100644
--- a/theme/default/html/404.php
+++ b/theme/default/html/404.php
@@ -8,4 +8,4 @@
 #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
 ?>
 <h1><i class="fa fa-exclamation-triangle"></i><?=$Language->text('404_heading_text')?></h1>
-<p><?=$Language->text('404_heading_desc')?></p>
\ No newline at end of file
+<p><?=$Language->text('404_heading_desc')?></p>
diff --git a/theme/default/html/feed/item_page.php b/theme/default/html/feed/item_page.php
index ff9f209..82568a1 100644
--- a/theme/default/html/feed/item_page.php
+++ b/theme/default/html/feed/item_page.php
@@ -24,4 +24,4 @@ $HTML = $PAGE['BODY']['HTML']();
 	<?php foreach($PAGE['FILE']['LIST'] as $fileURL): ?>
 		<media:content url="<?=$fileURL?>" medium="image"></media:content>
 	<?php endforeach; ?>
-</item>
\ No newline at end of file
+</item>
diff --git a/theme/default/html/feed/item_post.php b/theme/default/html/feed/item_post.php
index 07d400d..0bf23fc 100644
--- a/theme/default/html/feed/item_post.php
+++ b/theme/default/html/feed/item_post.php
@@ -24,4 +24,4 @@ $HTML = $POST['BODY']['HTML']();
 	<?php foreach($POST['FILE']['LIST'] as $fileURL): ?>
 		<media:content url="<?=$fileURL?>" medium="image"></media:content>
 	<?php endforeach; ?>
-</item>
\ No newline at end of file
+</item>
diff --git a/theme/default/html/feed/main.php b/theme/default/html/feed/main.php
index 588ee02..317bd31 100644
--- a/theme/default/html/feed/main.php
+++ b/theme/default/html/feed/main.php
@@ -49,4 +49,4 @@ switch($FEED['TYPE']) {
 			<?php echo $item ?>
 		<?php endforeach; ?>
 	</channel>
-</rss>
\ No newline at end of file
+</rss>
diff --git a/theme/default/html/home.php b/theme/default/html/home.php
index 3f6ba47..b412f22 100644
--- a/theme/default/html/home.php
+++ b/theme/default/html/home.php
@@ -16,4 +16,5 @@
 	<?php endforeach; ?>
 </div>
 
-<?=$PAGINATION['HTML']?>
\ No newline at end of file
+<?=$PAGINATION['HTML']?>
+
diff --git a/theme/default/html/main.php b/theme/default/html/main.php
index 46f4f09..5d9284a 100644
--- a/theme/default/html/main.php
+++ b/theme/default/html/main.php
@@ -99,4 +99,4 @@ $BLOGMETA_DESC = escapeHTML($BLOGMETA['DESC']);
 		</footer>
 	</div>
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/theme/default/html/page/item.php b/theme/default/html/page/item.php
index 00da4c2..20937b9 100644
--- a/theme/default/html/page/item.php
+++ b/theme/default/html/page/item.php
@@ -17,4 +17,4 @@
 	<blockquote cite="<?=$PAGE['URL']?>">
 		<p><?=excerpt($PAGE['BODY']['HTML'](), 600)?></p>
 	</blockquote>
-</article>
\ No newline at end of file
+</article>
diff --git a/theme/default/html/page/list.php b/theme/default/html/page/list.php
index c4a04b2..665301e 100644
--- a/theme/default/html/page/list.php
+++ b/theme/default/html/page/list.php
@@ -16,4 +16,4 @@
 	<?php endforeach; ?>
 </div>
 
-<?=$PAGINATION['HTML']?>
\ No newline at end of file
+<?=$PAGINATION['HTML']?>
diff --git a/theme/default/html/page/main.php b/theme/default/html/page/main.php
index 1f8e140..7e37805 100644
--- a/theme/default/html/page/main.php
+++ b/theme/default/html/page/main.php
@@ -31,4 +31,4 @@ $time = "<time datetime=\"{$PAGE['ATTR']['TIME_INSERT']}\" title=\"".parseDateti
 		<div><a class="disabled"><i class="fa fa-arrow-right"></i></a></div>
 	<?php endif; ?>
 
-</section>
\ No newline at end of file
+</section>
diff --git a/theme/default/html/pagination.php b/theme/default/html/pagination.php
index 48e353f..012c891 100644
--- a/theme/default/html/pagination.php
+++ b/theme/default/html/pagination.php
@@ -36,4 +36,4 @@
 	<?php else: ?>
 		<div><a class="disabled"><i class="fa fa-arrow-right"></i></a></div>
 	<?php endif; ?>
-</div>
\ No newline at end of file
+</div>
diff --git a/theme/default/html/post/item.php b/theme/default/html/post/item.php
index e0d49bd..6f68d79 100644
--- a/theme/default/html/post/item.php
+++ b/theme/default/html/post/item.php
@@ -17,4 +17,4 @@
 	<blockquote cite="<?=$POST['URL']?>">
 		<?=$POST['BODY']['HTML']()?>
 	</blockquote>
-</article>
\ No newline at end of file
+</article>
diff --git a/theme/default/html/post/list.php b/theme/default/html/post/list.php
index f16fd52..37fca86 100644
--- a/theme/default/html/post/list.php
+++ b/theme/default/html/post/list.php
@@ -16,4 +16,4 @@
 	<?php endforeach; ?>
 </div>
 
-<?=$PAGINATION['HTML']?>
\ No newline at end of file
+<?=$PAGINATION['HTML']?>
diff --git a/theme/default/html/post/main.php b/theme/default/html/post/main.php
index b84fc63..4b84ed9 100644
--- a/theme/default/html/post/main.php
+++ b/theme/default/html/post/main.php
@@ -31,4 +31,4 @@ $time = "<time datetime=\"{$POST['ATTR']['TIME_INSERT']}\" title=\"".parseDateti
 		<div><a class="disabled"><i class="fa fa-arrow-right"></i></a></div>
 	<?php endif; ?>
 
-</section>
\ No newline at end of file
+</section>
diff --git a/theme/default/html/search/main.php b/theme/default/html/search/main.php
index 61bd6a5..e7522ff 100644
--- a/theme/default/html/search/main.php
+++ b/theme/default/html/search/main.php
@@ -31,4 +31,4 @@
 	</select>
 
 	<input type="submit" value="<?=$Language->text('search')?>" />
-</form>
\ No newline at end of file
+</form>
diff --git a/theme/default/html/search/result.php b/theme/default/html/search/result.php
index 044afe1..2dac0ec 100644
--- a/theme/default/html/search/result.php
+++ b/theme/default/html/search/result.php
@@ -33,4 +33,4 @@
 	<?php foreach($RESULT['LIST'] as $post): ?>
 		<?php echo $post; ?>
 	<?php endforeach; ?>
-</div>
\ No newline at end of file
+</div>
diff --git a/theme/default/html/user/item.php b/theme/default/html/user/item.php
index d03d330..7d2c36b 100644
--- a/theme/default/html/user/item.php
+++ b/theme/default/html/user/item.php
@@ -17,4 +17,4 @@
 	<blockquote cite="<?=$USER['URL']?>">
 		<?=$USER['BODY']['HTML']()?>
 	</blockquote>
-</article>
\ No newline at end of file
+</article>
diff --git a/theme/default/html/user/list.php b/theme/default/html/user/list.php
index 98fa840..59bc5ee 100644
--- a/theme/default/html/user/list.php
+++ b/theme/default/html/user/list.php
@@ -16,4 +16,4 @@
 	<?php endforeach; ?>
 </div>
 
-<?=$PAGINATION['HTML']?>
\ No newline at end of file
+<?=$PAGINATION['HTML']?>
diff --git a/theme/default/html/user/main.php b/theme/default/html/user/main.php
index 7c19b96..5b4e2d7 100644
--- a/theme/default/html/user/main.php
+++ b/theme/default/html/user/main.php
@@ -28,4 +28,4 @@
 		<div><a class="disabled"><i class="fa fa-arrow-right"></i></a></div>
 	<?php endif; ?>
 
-</section>
\ No newline at end of file
+</section>
diff --git a/theme/default/lang/de.php b/theme/default/lang/de.php
index bf1b3a4..221322c 100644
--- a/theme/default/lang/de.php
+++ b/theme/default/lang/de.php
@@ -69,4 +69,3 @@ $LANGUAGE['403_heading_desc'] = 'Der Zugriff auf diese Ressource wurde dir verwe
 #===============================================================================
 $LANGUAGE['404_heading_text'] = 'Nicht gefunden';
 $LANGUAGE['404_heading_desc'] = 'Die angeforderte Ressource konnte nicht gefunden werden.';
-?>
\ No newline at end of file
diff --git a/theme/default/lang/en.php b/theme/default/lang/en.php
index 0c7f557..644d364 100644
--- a/theme/default/lang/en.php
+++ b/theme/default/lang/en.php
@@ -69,4 +69,3 @@ $LANGUAGE['403_heading_desc'] = 'You are denied to access this resource because
 #===============================================================================
 $LANGUAGE['404_heading_text'] = 'Not found';
 $LANGUAGE['404_heading_desc'] = 'The requested resource could not be found.';
-?>
\ No newline at end of file
diff --git a/theme/default/rsrc/main.css b/theme/default/rsrc/main.css
index a736b18..83e729e 100644
--- a/theme/default/rsrc/main.css
+++ b/theme/default/rsrc/main.css
@@ -570,4 +570,4 @@ thead > tr > td, th > td {
 	font-family: Ruda;
 	font-weight: 700;
 	src: url("font/ruda-n-700.woff2") format("woff2");
-}
\ No newline at end of file
+}
diff --git a/theme/default/rsrc/main.js b/theme/default/rsrc/main.js
index f73d061..164c50f 100644
--- a/theme/default/rsrc/main.js
+++ b/theme/default/rsrc/main.js
@@ -12,4 +12,4 @@ document.addEventListener("keyup", function(e) {
 		(e.keyCode === 37 && prev) && (window.location.href = prev.getAttribute("href"));
 		(e.keyCode === 39 && next) && (window.location.href = next.getAttribute("href"));
 	}
-}, false);
\ No newline at end of file
+}, false);
-- 
cgit v1.2.3


From 85d6e75d4c77d13f6f5c0c7bc75f6ed48ee6df6c Mon Sep 17 00:00:00 2001
From: Thomas Lange <code@nerdmind.de>
Date: Wed, 16 Jun 2021 22:11:30 +0200
Subject: Add migration table to database.sql

This commit adds a new table called "migration" to the database which
will contain information used for database schema migrations.

The current schema version is 5 because 5 modifications (migrations)
have been applied to the database schema since the initial release.
---
 database.sql | 7 +++++++
 1 file changed, 7 insertions(+)

(limited to 'database.sql')

diff --git a/database.sql b/database.sql
index 3f77a3b..ae61034 100644
--- a/database.sql
+++ b/database.sql
@@ -1,3 +1,10 @@
+-- =============================================================================
+-- Internal information table for migrations
+-- =============================================================================
+CREATE TABLE `migration` (`schema_version` smallint(4) NOT NULL)
+	ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+INSERT INTO `migration` (`schema_version`) VALUES (5);
+
 -- =============================================================================
 -- Table structure for page items
 -- =============================================================================
-- 
cgit v1.2.3


From 1c03652fa244d76ac15760b33a36711b23a3ef22 Mon Sep 17 00:00:00 2001
From: Thomas Lange <code@nerdmind.de>
Date: Thu, 17 Jun 2021 00:26:29 +0200
Subject: Move database.sql to core/db/

---
 core/db/database.sql | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 database.sql         | 86 ----------------------------------------------------
 readme.md            |  2 +-
 3 files changed, 87 insertions(+), 87 deletions(-)
 create mode 100644 core/db/database.sql
 delete mode 100644 database.sql

(limited to 'database.sql')

diff --git a/core/db/database.sql b/core/db/database.sql
new file mode 100644
index 0000000..ae61034
--- /dev/null
+++ b/core/db/database.sql
@@ -0,0 +1,86 @@
+-- =============================================================================
+-- Internal information table for migrations
+-- =============================================================================
+CREATE TABLE `migration` (`schema_version` smallint(4) NOT NULL)
+	ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+INSERT INTO `migration` (`schema_version`) VALUES (5);
+
+-- =============================================================================
+-- Table structure for page items
+-- =============================================================================
+CREATE TABLE `page` (
+	`id` smallint(6) NOT NULL,
+	`time_insert` datetime NOT NULL,
+	`time_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+	`user` tinyint(4) NOT NULL,
+	`slug` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
+	`name` varchar(100) NOT NULL,
+	`body` text NOT NULL,
+	`argv` varchar(250) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- =============================================================================
+-- Table structure for post items
+-- =============================================================================
+CREATE TABLE `post` (
+	`id` smallint(6) NOT NULL,
+	`time_insert` datetime NOT NULL,
+	`time_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+	`user` tinyint(4) NOT NULL,
+	`slug` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
+	`name` varchar(100) NOT NULL,
+	`body` text NOT NULL,
+	`argv` varchar(250) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- =============================================================================
+-- Table structure for user items
+-- =============================================================================
+CREATE TABLE `user` (
+	`id` tinyint(4) NOT NULL,
+	`time_insert` datetime NOT NULL,
+	`time_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+	`slug` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
+	`username` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
+	`password` char(64) CHARACTER SET latin1 DEFAULT NULL,
+	`fullname` varchar(40) NOT NULL,
+	`mailaddr` varchar(60) NOT NULL,
+	`body` text NOT NULL,
+	`argv` varchar(250) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- =============================================================================
+-- Insert demo page, post and user
+-- =============================================================================
+INSERT INTO `page` (`id`, `time_insert`, `time_update`, `user`, `slug`, `name`, `body`, `argv`) VALUES
+(1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 1, 'example-page', 'Example Page', 'OK. You discovered that there is also a page functionality. But what is the difference between a **page** and a **post**? This is simple: There is not really much difference. But you can style posts and pages within the themes CSS completely independent from each other. For example, use **pages** for things like your imprint, your terms of use, your FAQ or other stuff. And **posts** for your main blog posts. A **page** (and also a **user**) has exactly the same functionality as already described within the [first post]({POST[1]})! 8)', NULL);
+INSERT INTO `post` (`id`, `time_insert`, `time_update`, `user`, `slug`, `name`, `body`, `argv`) VALUES
+(1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 1, 'hello-world', 'Hello World!', 'Hello! This is the automatically generated first post on your new blog installation. You can type [Markdown](https://daringfireball.net/projects/markdown/) plaintext into the editor to format your content like you want.\r\n\r\nIn this post you can see several examples to [format your content with Markdown](https://daringfireball.net/projects/markdown/syntax) and with the *special codes* provided by this blog application. After you are familiar with the text formatting and done with the exploration of your new blog application, you can delete this post and create your own one. 😃\r\n\r\n![Demo image: Computer Guy (Public Domain)]({FILE[\"image/content/computer-guy-public-domain.svg\"]})\r\n\r\n## Dynamic internal URLs for items\r\nIf you want to link an item, please do not put the URL to the item hardcoded into your content! What if you want to change your sites address (or the base directory) in the future? Then you have to change all internal links in your content. This is not cool!\r\n\r\nTherefore, you can use the following code **without spaces between the braces** by knowing the unique ID of an item to link it dynamically:\r\n\r\n1. Example: `{ POST[1] }`  \r\n{POST[1]}\r\n\r\n2. Example: `{ PAGE[1] }`  \r\n{PAGE[1]}\r\n\r\n3. Example: `{ USER[1] }`  \r\n{USER[1]}\r\n\r\n## Dynamic internal URLs for other resources\r\nThis also applies to any other resource that exists in the blog system and that you want to link to! You can link any other resource dynamically either relative to your base directory or relative to your resource directory (`/rsrc/`) for static files:\r\n\r\n* Example: `{ BASE[\"foo/bar/\"] }`  \r\n{BASE[\"foo/bar/\"]}\r\n\r\n* Example: `{ FILE[\"foo/bar/\"] }`  \r\n{FILE[\"foo/bar/\"]}', NULL);
+INSERT INTO `user` (`id`, `time_insert`, `time_update`, `slug`, `username`, `password`, `fullname`, `mailaddr`, `body`, `argv`) VALUES
+(1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'change-me', 'ChangeMe', '$2y$10$jH48L1K1y9dB303aI2biN.ob0biZDuUbMxPKadi3wDqOIxj6yNT6K', 'John Doe', 'mail@example.org', 'Describe yourself.', NULL);
+
+-- =============================================================================
+-- Add keys for table columns
+-- =============================================================================
+ALTER TABLE `page` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `time_insert` (`time_insert`), ADD UNIQUE KEY `slug` (`slug`), ADD KEY `page_user` (`user`);
+ALTER TABLE `post` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `time_insert` (`time_insert`), ADD UNIQUE KEY `slug` (`slug`), ADD KEY `post_user` (`user`);
+ALTER TABLE `user` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `time_insert` (`time_insert`), ADD UNIQUE KEY `slug` (`slug`), ADD UNIQUE KEY `username` (`username`);
+
+-- =============================================================================
+-- Add FULLTEXT indexes for table columns
+-- =============================================================================
+ALTER TABLE `page` ADD FULLTEXT KEY `search` (`name`, `body`);
+ALTER TABLE `post` ADD FULLTEXT KEY `search` (`name`, `body`);
+
+-- =============================================================================
+-- Add AUTO_INCREMENT for primary keys
+-- =============================================================================
+ALTER TABLE `page` MODIFY `id` smallint(6) NOT NULL AUTO_INCREMENT;
+ALTER TABLE `post` MODIFY `id` smallint(6) NOT NULL AUTO_INCREMENT;
+ALTER TABLE `user` MODIFY `id` tinyint(4)  NOT NULL AUTO_INCREMENT;
+
+-- =============================================================================
+-- Add foreign keys for data integrity
+-- =============================================================================
+ALTER TABLE `page` ADD CONSTRAINT `page_user` FOREIGN KEY (`user`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE `post` ADD CONSTRAINT `post_user` FOREIGN KEY (`user`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/database.sql b/database.sql
deleted file mode 100644
index ae61034..0000000
--- a/database.sql
+++ /dev/null
@@ -1,86 +0,0 @@
--- =============================================================================
--- Internal information table for migrations
--- =============================================================================
-CREATE TABLE `migration` (`schema_version` smallint(4) NOT NULL)
-	ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-INSERT INTO `migration` (`schema_version`) VALUES (5);
-
--- =============================================================================
--- Table structure for page items
--- =============================================================================
-CREATE TABLE `page` (
-	`id` smallint(6) NOT NULL,
-	`time_insert` datetime NOT NULL,
-	`time_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-	`user` tinyint(4) NOT NULL,
-	`slug` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-	`name` varchar(100) NOT NULL,
-	`body` text NOT NULL,
-	`argv` varchar(250) DEFAULT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
--- =============================================================================
--- Table structure for post items
--- =============================================================================
-CREATE TABLE `post` (
-	`id` smallint(6) NOT NULL,
-	`time_insert` datetime NOT NULL,
-	`time_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-	`user` tinyint(4) NOT NULL,
-	`slug` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-	`name` varchar(100) NOT NULL,
-	`body` text NOT NULL,
-	`argv` varchar(250) DEFAULT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
--- =============================================================================
--- Table structure for user items
--- =============================================================================
-CREATE TABLE `user` (
-	`id` tinyint(4) NOT NULL,
-	`time_insert` datetime NOT NULL,
-	`time_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-	`slug` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-	`username` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
-	`password` char(64) CHARACTER SET latin1 DEFAULT NULL,
-	`fullname` varchar(40) NOT NULL,
-	`mailaddr` varchar(60) NOT NULL,
-	`body` text NOT NULL,
-	`argv` varchar(250) DEFAULT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
--- =============================================================================
--- Insert demo page, post and user
--- =============================================================================
-INSERT INTO `page` (`id`, `time_insert`, `time_update`, `user`, `slug`, `name`, `body`, `argv`) VALUES
-(1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 1, 'example-page', 'Example Page', 'OK. You discovered that there is also a page functionality. But what is the difference between a **page** and a **post**? This is simple: There is not really much difference. But you can style posts and pages within the themes CSS completely independent from each other. For example, use **pages** for things like your imprint, your terms of use, your FAQ or other stuff. And **posts** for your main blog posts. A **page** (and also a **user**) has exactly the same functionality as already described within the [first post]({POST[1]})! 8)', NULL);
-INSERT INTO `post` (`id`, `time_insert`, `time_update`, `user`, `slug`, `name`, `body`, `argv`) VALUES
-(1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 1, 'hello-world', 'Hello World!', 'Hello! This is the automatically generated first post on your new blog installation. You can type [Markdown](https://daringfireball.net/projects/markdown/) plaintext into the editor to format your content like you want.\r\n\r\nIn this post you can see several examples to [format your content with Markdown](https://daringfireball.net/projects/markdown/syntax) and with the *special codes* provided by this blog application. After you are familiar with the text formatting and done with the exploration of your new blog application, you can delete this post and create your own one. 😃\r\n\r\n![Demo image: Computer Guy (Public Domain)]({FILE[\"image/content/computer-guy-public-domain.svg\"]})\r\n\r\n## Dynamic internal URLs for items\r\nIf you want to link an item, please do not put the URL to the item hardcoded into your content! What if you want to change your sites address (or the base directory) in the future? Then you have to change all internal links in your content. This is not cool!\r\n\r\nTherefore, you can use the following code **without spaces between the braces** by knowing the unique ID of an item to link it dynamically:\r\n\r\n1. Example: `{ POST[1] }`  \r\n{POST[1]}\r\n\r\n2. Example: `{ PAGE[1] }`  \r\n{PAGE[1]}\r\n\r\n3. Example: `{ USER[1] }`  \r\n{USER[1]}\r\n\r\n## Dynamic internal URLs for other resources\r\nThis also applies to any other resource that exists in the blog system and that you want to link to! You can link any other resource dynamically either relative to your base directory or relative to your resource directory (`/rsrc/`) for static files:\r\n\r\n* Example: `{ BASE[\"foo/bar/\"] }`  \r\n{BASE[\"foo/bar/\"]}\r\n\r\n* Example: `{ FILE[\"foo/bar/\"] }`  \r\n{FILE[\"foo/bar/\"]}', NULL);
-INSERT INTO `user` (`id`, `time_insert`, `time_update`, `slug`, `username`, `password`, `fullname`, `mailaddr`, `body`, `argv`) VALUES
-(1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'change-me', 'ChangeMe', '$2y$10$jH48L1K1y9dB303aI2biN.ob0biZDuUbMxPKadi3wDqOIxj6yNT6K', 'John Doe', 'mail@example.org', 'Describe yourself.', NULL);
-
--- =============================================================================
--- Add keys for table columns
--- =============================================================================
-ALTER TABLE `page` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `time_insert` (`time_insert`), ADD UNIQUE KEY `slug` (`slug`), ADD KEY `page_user` (`user`);
-ALTER TABLE `post` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `time_insert` (`time_insert`), ADD UNIQUE KEY `slug` (`slug`), ADD KEY `post_user` (`user`);
-ALTER TABLE `user` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `time_insert` (`time_insert`), ADD UNIQUE KEY `slug` (`slug`), ADD UNIQUE KEY `username` (`username`);
-
--- =============================================================================
--- Add FULLTEXT indexes for table columns
--- =============================================================================
-ALTER TABLE `page` ADD FULLTEXT KEY `search` (`name`, `body`);
-ALTER TABLE `post` ADD FULLTEXT KEY `search` (`name`, `body`);
-
--- =============================================================================
--- Add AUTO_INCREMENT for primary keys
--- =============================================================================
-ALTER TABLE `page` MODIFY `id` smallint(6) NOT NULL AUTO_INCREMENT;
-ALTER TABLE `post` MODIFY `id` smallint(6) NOT NULL AUTO_INCREMENT;
-ALTER TABLE `user` MODIFY `id` tinyint(4)  NOT NULL AUTO_INCREMENT;
-
--- =============================================================================
--- Add foreign keys for data integrity
--- =============================================================================
-ALTER TABLE `page` ADD CONSTRAINT `page_user` FOREIGN KEY (`user`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-ALTER TABLE `post` ADD CONSTRAINT `post_user` FOREIGN KEY (`user`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/readme.md b/readme.md
index 632d6a1..48d8b07 100644
--- a/readme.md
+++ b/readme.md
@@ -11,7 +11,7 @@ Easy blogging application written with PHP7! The application comes with a fullte
 
 ## Installation
 1. Download the repository and extract it to the target directory where it should be installed.
-2. Create your MySQL database and import the `database.sql` file.
+2. Create your MySQL database and import the `core/db/database.sql` file.
 3. Rename `core/configuration-example.php` to `core/configuration.php` and customize the configuration and set in any case the settings for the database connection.
 4. Navigate your browser to `/admin/auth.php` and authenticate with the default username `ChangeMe` and the password `changeme` (please note that the username is case-sensitive).
 
-- 
cgit v1.2.3

