aboutsummaryrefslogtreecommitdiffstats
path: root/theme/admin/html
diff options
context:
space:
mode:
authorThomas Lange <code@nerdmind.de>2021-06-17 22:00:39 +0200
committerThomas Lange <code@nerdmind.de>2021-06-17 22:00:39 +0200
commit5555624546ea48d6327700f32b80848e0662dc90 (patch)
tree47d61fb756a6cb008aaf33586d292fcfe43da2a1 /theme/admin/html
parent91d8a28c664afa5378735bcd0efe068dd74d589f (diff)
parent0a2614cb69fc732c2115ef2f0c356f39f602d311 (diff)
downloadblog-5555624546ea48d6327700f32b80848e0662dc90.tar.gz
blog-5555624546ea48d6327700f32b80848e0662dc90.tar.xz
blog-5555624546ea48d6327700f32b80848e0662dc90.zip
Merge branch 'master' into 'optimization'optimization
Diffstat (limited to 'theme/admin/html')
-rw-r--r--theme/admin/html/403.php4
-rw-r--r--theme/admin/html/404.php4
-rw-r--r--theme/admin/html/auth.php38
-rw-r--r--theme/admin/html/database.php32
-rw-r--r--theme/admin/html/home.php47
-rw-r--r--theme/admin/html/main.php52
-rw-r--r--theme/admin/html/page/delete.php6
-rw-r--r--theme/admin/html/page/form.php104
-rw-r--r--theme/admin/html/page/index.php16
-rw-r--r--theme/admin/html/page/insert.php6
-rw-r--r--theme/admin/html/page/item.php32
-rw-r--r--theme/admin/html/page/search.php19
-rw-r--r--theme/admin/html/page/update.php6
-rw-r--r--theme/admin/html/pagination.php30
-rw-r--r--theme/admin/html/post/delete.php6
-rw-r--r--theme/admin/html/post/form.php104
-rw-r--r--theme/admin/html/post/index.php16
-rw-r--r--theme/admin/html/post/insert.php6
-rw-r--r--theme/admin/html/post/item.php32
-rw-r--r--theme/admin/html/post/search.php19
-rw-r--r--theme/admin/html/post/update.php6
-rw-r--r--theme/admin/html/user/delete.php8
-rw-r--r--theme/admin/html/user/form.php114
-rw-r--r--theme/admin/html/user/index.php15
-rw-r--r--theme/admin/html/user/insert.php6
-rw-r--r--theme/admin/html/user/item.php31
-rw-r--r--theme/admin/html/user/update.php6
27 files changed, 765 insertions, 0 deletions
diff --git a/theme/admin/html/403.php b/theme/admin/html/403.php
new file mode 100644
index 0000000..7f23212
--- /dev/null
+++ b/theme/admin/html/403.php
@@ -0,0 +1,4 @@
+<main id="main-content">
+<h1><i class="fa fa-exclamation-triangle"></i><?=$Language->text('403_heading_text')?></h1>
+<p><?=$Language->text('403_heading_desc')?></p>
+</main>
diff --git a/theme/admin/html/404.php b/theme/admin/html/404.php
new file mode 100644
index 0000000..7fb06d8
--- /dev/null
+++ b/theme/admin/html/404.php
@@ -0,0 +1,4 @@
+<main id="main-content">
+<h1><i class="fa fa-exclamation-triangle"></i><?=$Language->text('404_heading_text')?></h1>
+<p><?=$Language->text('404_heading_desc')?></p>
+</main>
diff --git a/theme/admin/html/auth.php b/theme/admin/html/auth.php
new file mode 100644
index 0000000..45b7e14
--- /dev/null
+++ b/theme/admin/html/auth.php
@@ -0,0 +1,38 @@
+<main id="main-content">
+<h1><i class="fa fa-sign-in"></i><?=$Language->text('authentication_text')?></h1>
+<p><?=$Language->text('authentication_desc')?></p>
+
+<?php if($FORM['INFO']): ?>
+ <div id="message-list-wrapper">
+ <ul id="message-list">
+ <?php foreach($FORM['INFO'] as $message): ?>
+ <li><?=$message?></li>
+ <?php endforeach ?>
+ </ul>
+ </div>
+<?php endif ?>
+
+<form action="" method="POST">
+ <input type="hidden" name="token" value="<?=$FORM['TOKEN']?>" />
+
+ <div class="form-grid two-columns">
+ <label for="form_username">
+ <i class="fa fa-user-secret"></i><?=$Language->text('label_username')?></label>
+
+ <div class="form-grid-item">
+ <input id="form_username" name="username" value="<?=escapeHTML($FORM['DATA']['USERNAME'])?>" />
+ </div>
+
+ <label for="form_password">
+ <i class="fa fa-key"></i><?=$Language->text('label_password')?></label>
+
+ <div class="form-grid-item">
+ <input type="password" id="form_password" name="password" />
+ </div>
+ </div>
+
+ <div class="form-border-box background padding nobordertop">
+ <input type="submit" name="auth" value="<?=$Language->text('login')?>" />
+ </div>
+</form>
+</main>
diff --git a/theme/admin/html/database.php b/theme/admin/html/database.php
new file mode 100644
index 0000000..da41e68
--- /dev/null
+++ b/theme/admin/html/database.php
@@ -0,0 +1,32 @@
+<main id="main-content">
+<h1><i class="fa fa-database"></i><?=$Language->text('overview_database_text')?></h1>
+<p><?=$Language->text('overview_database_desc')?></p>
+
+<?php if($FORM['INFO']): ?>
+ <div id="message-list-wrapper">
+ <ul id="message-list">
+ <?php foreach($FORM['INFO'] as $message): ?>
+ <li><?=$message?></li>
+ <?php endforeach ?>
+ </ul>
+ </div>
+<?php endif ?>
+
+<form action="" method="POST">
+ <input type="hidden" name="token" value="<?=$FORM['TOKEN']?>" />
+
+ <div class="form-border-box">
+ <textarea id="content-editor" placeholder="<?=$Language->text('database_warning')?>" name="command"><?=escapeHTML($FORM['COMMAND'])?></textarea>
+ </div>
+
+<?php if($FORM['RESULT']): ?>
+ <div class="form-border-box background padding">
+ <pre id="database-result"><?=escapeHTML($FORM['RESULT'])?></pre>
+ </div>
+<?php endif; ?>
+
+ <div class="form-border-box background padding">
+ <input id="insert-button" type="submit" name="execute" value="Execute" />
+ </div>
+</form>
+</main>
diff --git a/theme/admin/html/home.php b/theme/admin/html/home.php
new file mode 100644
index 0000000..5331fa8
--- /dev/null
+++ b/theme/admin/html/home.php
@@ -0,0 +1,47 @@
+<main id="main-content">
+<h1><i class="fa fa-dashboard"></i><?=$Language->text('overview_dashboard_text')?></h1>
+<p><?=$Language->text('overview_dashboard_desc')?></p>
+
+<h2><i class="fa fa-newspaper-o"></i><?=$Language->text('last_post')?></h2>
+<p>
+ <strong><?=$Language->text('posts')?>:</strong> <?=$COUNT['POST']?>
+ | <a href="<?=Application::getAdminURL('post/insert.php')?>"><?=$Language->text('insert')?></a>
+ | <a href="<?=Application::getAdminURL('post/search.php')?>"><?=$Language->text('search')?></a>
+</p>
+<?php if(!empty($LAST['POST'])): ?>
+ <div class="item-container post">
+ <?=$LAST['POST']?>
+ </div>
+<?php else: ?>
+ <p><em><?=$Language->text('home_no_posts')?></em></p>
+<?php endif; ?>
+
+<h2><i class="fa fa-file-text-o"></i><?=$Language->text('last_page')?></h2>
+<p>
+ <strong><?=$Language->text('pages')?>:</strong> <?=$COUNT['PAGE']?>
+ | <a href="<?=Application::getAdminURL('page/insert.php')?>"><?=$Language->text('insert')?></a>
+ | <a href="<?=Application::getAdminURL('page/search.php')?>"><?=$Language->text('search')?></a>
+</p>
+
+<?php if(!empty($LAST['PAGE'])): ?>
+ <div class="item-container page">
+ <?=$LAST['PAGE']?>
+ </div>
+<?php else: ?>
+ <p><em><?=$Language->text('home_no_pages')?></em></p>
+<?php endif; ?>
+
+<h2><i class="fa fa-user"></i><?=$Language->text('last_user')?></h2>
+<p>
+ <strong><?=$Language->text('users')?>:</strong> <?=$COUNT['USER']?>
+ | <a href="<?=Application::getAdminURL('user/insert.php')?>"><?=$Language->text('insert')?></a>
+</p>
+
+<?php if(!empty($LAST['USER'])): ?>
+ <div class="item-container user">
+ <?=$LAST['USER']?>
+ </div>
+<?php else: ?>
+ <p><em><?=$Language->text('home_no_users')?></em></p>
+<?php endif; ?>
+</main>
diff --git a/theme/admin/html/main.php b/theme/admin/html/main.php
new file mode 100644
index 0000000..699a742
--- /dev/null
+++ b/theme/admin/html/main.php
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<html lang="<?=$BLOGMETA['LANG']?>">
+<head>
+ <meta charset="UTF-8" />
+ <meta name="referrer" content="origin-when-crossorigin" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="stylesheet" href="<?=Application::getTemplateURL('rsrc/css/main.css')?>" />
+ <script defer src="<?=Application::getTemplateURL('rsrc/main.js')?>"></script>
+ <title><?=escapeHTML($NAME)?> | Administration</title>
+</head>
+<body>
+ <header id="main-header">
+ <div class="header-line">
+ <div class="header-content">
+ <a href="<?=Application::getURL()?>">
+ <img id="header-logo" src="<?=Application::getTemplateURL('rsrc/icon-public-domain.svg')?>" alt="Administration" />
+ </a>
+ <div id="header-text">Administration</div>
+ <div id="header-desc">PHP7 blogging application by <span>Nerdmind</span>!</div>
+ </div>
+ </div>
+ <div class="header-line">
+ <div class="header-content">
+ <nav id="main-navi">
+ <ul>
+ <?php if(Application::isAuthenticated()): ?>
+ <li><a href="<?=Application::getAdminURL()?>" title="<?=$Language->text('overview_dashboard_text')?>"><i class="fa fa-dashboard"></i><span>Dashboard</span></a></li>
+ <li><a href="<?=Application::getAdminURL('post/')?>" title="<?=$Language->text('post_overview')?>"><i class="fa fa-newspaper-o"></i><span><?=$Language->text('posts')?></span></a></li>
+ <li><a href="<?=Application::getAdminURL('page/')?>" title="<?=$Language->text('page_overview')?>"><i class="fa fa-file-text-o"></i><span><?=$Language->text('pages')?></span></a></li>
+ <li><a href="<?=Application::getAdminURL('user/')?>" title="<?=$Language->text('user_overview')?>"><i class="fa fa-user"></i><span><?=$Language->text('users')?></span></a></li>
+ <li><a href="<?=Application::getAdminURL('database.php')?>" title="<?=$Language->text('overview_database_text')?>"><i class="fa fa-database"></i><span><?=$Language->text('overview_database_text')?></span></a></li>
+ <li><a href="<?=Application::getAdminURL('auth.php?action=logout&amp;token='.Application::getSecurityToken())?>"><i class="fa fa-sign-out"></i><span><?=$Language->text('logout')?></span></a></li>
+ <?php else: ?>
+ <li><a href="<?=Application::getAdminURL('auth.php')?>"><i class="fa fa-sign-in"></i><span><?=$Language->text('login')?></span></a></li>
+ <?php endif; ?>
+ </ul>
+ </nav>
+ </div>
+ </div>
+ </header>
+
+ <?=$HTML?>
+
+ <footer id="main-footer">
+ <ul>
+ <li><i class="fa fa-github-square"></i><a href="https://github.com/Nerdmind/Blog/releases" target="_blank">Releases</a></li>
+ <li><i class="fa fa-book"></i><a href="https://github.com/Nerdmind/Blog/wiki" target="_blank">Documentation</a></li>
+ <li><i class="fa fa-bug"></i><a href="https://github.com/Nerdmind/Blog/issues">Bugreport</a></li>
+ </ul>
+ </footer>
+</body>
+</html>
diff --git a/theme/admin/html/page/delete.php b/theme/admin/html/page/delete.php
new file mode 100644
index 0000000..006090e
--- /dev/null
+++ b/theme/admin/html/page/delete.php
@@ -0,0 +1,6 @@
+<main id="main-content">
+<h1><i class="fa fa-trash-o"></i><?=$Language->text('delete_page')?></h1>
+<p><?=$Language->text('delete_page_desc')?></p>
+
+<?=$HTML?>
+</main>
diff --git a/theme/admin/html/page/form.php b/theme/admin/html/page/form.php
new file mode 100644
index 0000000..eee61bf
--- /dev/null
+++ b/theme/admin/html/page/form.php
@@ -0,0 +1,104 @@
+<?php if($FORM['INFO']): ?>
+ <div id="message-list-wrapper">
+ <ul id="message-list">
+ <?php foreach($FORM['INFO'] as $message): ?>
+ <li><?=$message?></li>
+ <?php endforeach ?>
+ </ul>
+ </div>
+<?php endif ?>
+
+<form action="" method="POST">
+ <input type="hidden" name="token" value="<?=$FORM['TOKEN']?>" />
+
+<?php if($FORM['TYPE'] !== 'DELETE'): ?>
+ <div class="form-grid">
+ <label for="form_id">
+ <i class="fa fa-database"></i>ID</label>
+
+ <div class="form-grid-item">
+ <input<?=($FORM['TYPE'] === 'UPDATE') ? ' disabled="disabled"' : '';?> id="form_id" name="id" type="number" placeholder="AUTO_INCREMENT" value="<?=escapeHTML($FORM['DATA']['ID'])?>" />
+ </div>
+
+ <label for="form_user">
+ <i class="fa fa-user"></i><?=$Language->text('label_user')?></label>
+
+ <div class="form-grid-item">
+ <select id="form_user" name="user">
+ <?php foreach($FORM['USER_LIST'] as $user): ?>
+ <option value="<?=$user['ID']?>"<?=($FORM['DATA']['USER'] === $user['ID']) ? ' selected' : '' ?>><?=escapeHTML($user['FULLNAME'])?> [<?=$user['USERNAME']?>]</option>
+ <?php endforeach; ?>
+ </select>
+ </div>
+
+ <label for="form_name">
+ <i class="fa fa-file-text-o"></i><?=$Language->text('label_name')?></label>
+
+ <div class="form-grid-item">
+ <input id="form_name" name="name" value="<?=escapeHTML($FORM['DATA']['NAME'])?>" />
+ </div>
+
+ <label for="form_slug">
+ <i class="fa fa-link"></i><?=$Language->text('label_slug')?></label>
+
+ <div class="form-grid-item">
+ <input id="form_slug" name="slug" value="<?=escapeHTML($FORM['DATA']['SLUG'])?>" />
+ </div>
+
+ <label for="form_time_insert">
+ <i class="fa fa-clock-o"></i><?=$Language->text('label_insert')?></label>
+
+ <div class="form-grid-item">
+ <input id="form_time_insert" name="time_insert" placeholder="YYYY-MM-DD HH:II:SS" value="<?=escapeHTML($FORM['DATA']['TIME_INSERT'])?>" />
+ </div>
+
+ <label for="form_time_update">
+ <i class="fa fa-clock-o"></i><?=$Language->text('label_update')?></label>
+
+ <div class="form-grid-item">
+ <input id="form_time_update" name="time_update" placeholder="<?=escapeHTML($FORM['DATA']['TIME_UPDATE'] ? $FORM['DATA']['TIME_UPDATE'] : 'CURRENT_TIMESTAMP')?>" value="" />
+ </div>
+ </div>
+
+ <div id="content-editor-wrapper" class="form-border-box">
+ <div id="button-list-wrapper">
+ <ul id="markdown-list" class="button-list markdown">
+ <li data-markdown="bold" class="fa fa-bold" title="<?=$Language->text('markdown_bold')?>"></li>
+ <li data-markdown="italic" class="fa fa-italic" title="<?=$Language->text('markdown_italic')?>"></li>
+ <li data-markdown="heading" class="fa fa-header" title="<?=$Language->text('markdown_heading')?>"></li>
+ <li data-markdown="link" class="fa fa-link" title="<?=$Language->text('markdown_link')?>"></li>
+ <li data-markdown="image" class="fa fa-picture-o" title="<?=$Language->text('markdown_image')?>"></li>
+ <li data-markdown="code" class="fa fa-code" title="<?=$Language->text('markdown_code')?>"></li>
+ <li data-markdown="quote" class="fa fa-quote-right" title="<?=$Language->text('markdown_quote')?>"></li>
+ <li data-markdown="list_ul" class="fa fa-list-ul" title="<?=$Language->text('markdown_list_ul')?>"></li>
+ <li data-markdown="list_ol" class="fa fa-list-ol" title="<?=$Language->text('markdown_list_ol')?>"></li>
+ </ul>
+ </div>
+ <textarea id="content-editor" name="body" placeholder="[…]"><?=escapeHTML($FORM['DATA']['BODY'])?></textarea>
+ </div>
+ <div id="emoticon-list-wrapper" class="form-border-box background padding">
+ <ul id="emoticon-list" class="button-list emoticons">
+ <?php foreach(getUnicodeEmoticons() as $emoticon => $explanation):?>
+ <li data-emoticon="<?=$emoticon?>" title="<?=$explanation?>"><?=$emoticon?></li>
+ <?php endforeach; ?>
+ </ul>
+ </div>
+ <div class="form-border-box background padding">
+ <input id="form_argv" name="argv" maxlength="250" placeholder="[ARGUMENT_ONE=foo|ARGUMENT_TWO=bar …]" value="<?=escapeHTML($FORM['DATA']['ARGV'])?>" />
+ </div>
+<?php else: ?>
+ <div class="form-border-box background padding">
+ <?=$HTML?>
+ </div>
+<?php endif; ?>
+
+ <div class="form-border-box background padding">
+ <?php if($FORM['TYPE'] === 'INSERT'): ?>
+ <input id="insert-button" type="submit" name="insert" value="<?=$Language->text('insert')?>" />
+ <?php elseif($FORM['TYPE'] === 'UPDATE'): ?>
+ <input id="update-button" type="submit" name="update" value="<?=$Language->text('update')?>" />
+ <?php elseif($FORM['TYPE'] === 'DELETE'): ?>
+ <input id="delete-button" type="submit" name="delete" value="<?=$Language->text('delete')?>" data-text="<?=$Language->text('sure')?>" />
+ <?php endif; ?>
+ </div>
+</form>
diff --git a/theme/admin/html/page/index.php b/theme/admin/html/page/index.php
new file mode 100644
index 0000000..bdc7f94
--- /dev/null
+++ b/theme/admin/html/page/index.php
@@ -0,0 +1,16 @@
+<main id="main-content" class="wide">
+<h1><i class="fa fa-file-text-o"></i><?=$Language->text('page_overview')?></h1>
+<p class="actions-before"><?=$Language->text('overview_page_desc')?></p>
+<ul class="actions">
+ <li><a href="<?=Application::getAdminURL('page/insert.php')?>" title="<?=$Language->text('insert_page')?>"><i class="fa fa-pencil-square-o"></i><?=$Language->text('insert')?></a></li>
+ <li><a href="<?=Application::getAdminURL('page/search.php')?>" title="<?=$Language->text('search_page')?>"><i class="fa fa-search"></i><?=$Language->text('search')?></a></li>
+</ul>
+
+<div class="item-container page grid">
+ <?php foreach($LIST['PAGES'] as $page): ?>
+ <?php echo $page; ?>
+ <?php endforeach; ?>
+</div>
+
+<?=$PAGINATION['HTML']?>
+</main>
diff --git a/theme/admin/html/page/insert.php b/theme/admin/html/page/insert.php
new file mode 100644
index 0000000..a77e47f
--- /dev/null
+++ b/theme/admin/html/page/insert.php
@@ -0,0 +1,6 @@
+<main id="main-content">
+<h1><i class="fa fa-pencil-square-o"></i><?=$Language->text('insert_page')?></h1>
+<p><?=$Language->text('insert_page_desc')?></p>
+
+<?=$HTML?>
+</main>
diff --git a/theme/admin/html/page/item.php b/theme/admin/html/page/item.php
new file mode 100644
index 0000000..c61984c
--- /dev/null
+++ b/theme/admin/html/page/item.php
@@ -0,0 +1,32 @@
+<article class="item">
+ <header>
+ <h2><i class="fa fa-file-text-o"></i><?=escapeHTML($PAGE['ATTR']['NAME'])?></h2>
+ <div>
+ <span class="brackets item-id">#<?=$PAGE['ATTR']['ID']?></span>
+ <a class="brackets" href="<?=Application::getAdminURL("user/update.php?id={$USER['ATTR']['ID']}")?>" title="<?=$Language->text('update_user')?>"><?=escapeHTML($USER['ATTR']['FULLNAME'])?></a>
+ <time class="brackets" datetime="<?=$PAGE['ATTR']['TIME_INSERT']?>"><?=parseDatetime($PAGE['ATTR']['TIME_INSERT'], $Language->text('date_format'))?></time>
+ </div>
+ </header>
+ <blockquote cite="<?=$PAGE['URL']?>">
+ <?php if(isset($PAGE['FILE']['LIST'][0])): ?>
+ <img class="item-image" src="<?=$PAGE['FILE']['LIST'][0]?>" alt="" />
+ <?php endif; ?>
+ <p><?=excerpt($PAGE['BODY']['HTML']())?></p>
+ </blockquote>
+
+ <?php if($PAGE['ARGV']): ?>
+ <ul class="arguments">
+ <?php foreach($PAGE['ARGV'] as $argument => $value): ?>
+ <li><strong><?=$argument?>:</strong> <span><?=escapeHTML($value)?></span></li>
+ <?php endforeach; ?>
+ </ul>
+ <?php endif; ?>
+
+ <footer>
+ <ul>
+ <li><a href="<?=$PAGE['URL']?>" target="_blank" title="<?=$Language->text('select_page')?>"><i class="fa fa-external-link"></i><span class="hidden"><?=$Language->text('select_page')?></span></a></li>
+ <li><a href="<?=Application::getAdminURL("page/update.php?id={$PAGE['ATTR']['ID']}")?>" title="<?=$Language->text('update_page')?>"><i class="fa fa-pencil-square-o"></i><span class="hidden"><?=$Language->text('update_page')?></span></a></li>
+ <li><a href="<?=Application::getAdminURL("page/delete.php?id={$PAGE['ATTR']['ID']}")?>" title="<?=$Language->text('delete_page')?>"><i class="fa fa-trash-o"></i><span class="hidden"><?=$Language->text('delete_page')?></span></a></li>
+ </ul>
+ </footer>
+</article>
diff --git a/theme/admin/html/page/search.php b/theme/admin/html/page/search.php
new file mode 100644
index 0000000..145b0f9
--- /dev/null
+++ b/theme/admin/html/page/search.php
@@ -0,0 +1,19 @@
+<main id="main-content" <?=!$PAGES ?: 'class="wide"'?>>
+<h1><i class="fa fa-search"></i><?=$Language->text('title_page_search')?></h1>
+<p><?=$Language->text('search_page_desc')?></p>
+
+<form id="search-form" method="GET">
+ <div class="form-border-box background padding">
+ <input id="search-text" type="search" name="q" placeholder="<?=$Language->text('placeholder_search')?>" value="<?=escapeHTML($QUERY)?>" />
+ </div>
+ <div class="form-border-box background padding">
+ <input id="update-button" type="submit" value="<?=$Language->text('search')?>" />
+ </div>
+</form>
+
+<div class="item-container post grid">
+ <?php foreach($PAGES as $page): ?>
+ <?php echo $page; ?>
+ <?php endforeach; ?>
+</div>
+</main>
diff --git a/theme/admin/html/page/update.php b/theme/admin/html/page/update.php
new file mode 100644
index 0000000..ce51d2a
--- /dev/null
+++ b/theme/admin/html/page/update.php
@@ -0,0 +1,6 @@
+<main id="main-content">
+<h1><i class="fa fa-pencil-square-o"></i><?=$Language->text('update_page')?></h1>
+<p><?=$Language->text('update_page_desc')?></p>
+
+<?=$HTML?>
+</main>
diff --git a/theme/admin/html/pagination.php b/theme/admin/html/pagination.php
new file mode 100644
index 0000000..70720b6
--- /dev/null
+++ b/theme/admin/html/pagination.php
@@ -0,0 +1,30 @@
+<div id="site-navi">
+ <?php if($THIS > 1): ?>
+ <div><a id="prev-site" href="<?=sprintf($HREF, $THIS-1)?>"><i class="fa fa-arrow-left"></i></a></div>
+ <?php else: ?>
+ <div><a class="disabled"><i class="fa fa-arrow-left"></i></a></div>
+ <?php endif; ?>
+
+ <div>
+ <ol>
+ <?php
+ for($current = 1; $current <= $LAST; ++$current) {
+ $class = '';
+ $href = sprintf($HREF, $current);
+
+ if($current === $THIS) {
+ $class = ' class="active"';
+ }
+
+ echo "<li{$class}><a href=\"{$href}\">{$current}</a></li>";
+ }
+ ?>
+ </ol>
+ </div>
+
+ <?php if($THIS < $LAST): ?>
+ <div><a id="next-site" href="<?=sprintf($HREF, $THIS+1)?>"><i class="fa fa-arrow-right"></i></a></div>
+ <?php else: ?>
+ <div><a class="disabled"><i class="fa fa-arrow-right"></i></a></div>
+ <?php endif; ?>
+</div>
diff --git a/theme/admin/html/post/delete.php b/theme/admin/html/post/delete.php
new file mode 100644
index 0000000..ed82197
--- /dev/null
+++ b/theme/admin/html/post/delete.php
@@ -0,0 +1,6 @@
+<main id="main-content">
+<h1><i class="fa fa-trash-o"></i><?=$Language->text('delete_post')?></h1>
+<p><?=$Language->text('delete_post_desc')?></p>
+
+<?=$HTML?>
+</main>
diff --git a/theme/admin/html/post/form.php b/theme/admin/html/post/form.php
new file mode 100644
index 0000000..58ac122
--- /dev/null
+++ b/theme/admin/html/post/form.php
@@ -0,0 +1,104 @@
+<?php if($FORM['INFO']): ?>
+ <div id="message-list-wrapper">
+ <ul id="message-list">
+ <?php foreach($FORM['INFO'] as $message): ?>
+ <li><?=$message?></li>
+ <?php endforeach ?>
+ </ul>
+ </div>
+<?php endif ?>
+
+<form action="" method="POST">
+ <input type="hidden" name="token" value="<?=$FORM['TOKEN']?>" />
+
+<?php if($FORM['TYPE'] !== 'DELETE'): ?>
+ <div class="form-grid">
+ <label for="form_id">
+ <i class="fa fa-database"></i>ID</label>
+
+ <div class="form-grid-item">
+ <input<?=($FORM['TYPE'] === 'UPDATE') ? ' disabled="disabled"' : '';?> id="form_id" name="id" type="number" placeholder="AUTO_INCREMENT" value="<?=escapeHTML($FORM['DATA']['ID'])?>" />
+ </div>
+
+ <label for="form_user">
+ <i class="fa fa-user"></i><?=$Language->text('label_user')?></label>
+
+ <div class="form-grid-item">
+ <select id="form_user" name="user">
+ <?php foreach($FORM['USER_LIST'] as $user): ?>
+ <option value="<?=$user['ID']?>"<?=($FORM['DATA']['USER'] === $user['ID']) ? ' selected' : '' ?>><?=escapeHTML($user['FULLNAME'])?> [<?=$user['USERNAME']?>]</option>
+ <?php endforeach; ?>
+ </select>
+ </div>
+
+ <label for="form_name">
+ <i class="fa fa-newspaper-o"></i><?=$Language->text('label_name')?></label>
+
+ <div class="form-grid-item">
+ <input id="form_name" name="name" value="<?=escapeHTML($FORM['DATA']['NAME'])?>" />
+ </div>
+
+ <label for="form_slug">
+ <i class="fa fa-link"></i><?=$Language->text('label_slug')?></label>
+
+ <div class="form-grid-item">
+ <input id="form_slug" name="slug" value="<?=escapeHTML($FORM['DATA']['SLUG'])?>" />
+ </div>
+
+ <label for="form_time_insert">
+ <i class="fa fa-clock-o"></i><?=$Language->text('label_insert')?></label>
+
+ <div class="form-grid-item">
+ <input id="form_time_insert" name="time_insert" placeholder="YYYY-MM-DD HH:II:SS" value="<?=escapeHTML($FORM['DATA']['TIME_INSERT'])?>" />
+ </div>
+
+ <label for="form_time_update">
+ <i class="fa fa-clock-o"></i><?=$Language->text('label_update')?></label>
+
+ <div class="form-grid-item">
+ <input id="form_time_update" name="time_update" placeholder="<?=escapeHTML($FORM['DATA']['TIME_UPDATE'] ? $FORM['DATA']['TIME_UPDATE'] : 'CURRENT_TIMESTAMP')?>" value="" />
+ </div>
+ </div>
+
+ <div id="content-editor-wrapper" class="form-border-box">
+ <div id="button-list-wrapper">
+ <ul id="markdown-list" class="button-list markdown">
+ <li data-markdown="bold" class="fa fa-bold" title="<?=$Language->text('markdown_bold')?>"></li>
+ <li data-markdown="italic" class="fa fa-italic" title="<?=$Language->text('markdown_italic')?>"></li>
+ <li data-markdown="heading" class="fa fa-header" title="<?=$Language->text('markdown_heading')?>"></li>
+ <li data-markdown="link" class="fa fa-link" title="<?=$Language->text('markdown_link')?>"></li>
+ <li data-markdown="image" class="fa fa-picture-o" title="<?=$Language->text('markdown_image')?>"></li>
+ <li data-markdown="code" class="fa fa-code" title="<?=$Language->text('markdown_code')?>"></li>
+ <li data-markdown="quote" class="fa fa-quote-right" title="<?=$Language->text('markdown_quote')?>"></li>
+ <li data-markdown="list_ul" class="fa fa-list-ul" title="<?=$Language->text('markdown_list_ul')?>"></li>
+ <li data-markdown="list_ol" class="fa fa-list-ol" title="<?=$Language->text('markdown_list_ol')?>"></li>
+ </ul>
+ </div>
+ <textarea id="content-editor" name="body" placeholder="[…]"><?=escapeHTML($FORM['DATA']['BODY'])?></textarea>
+ </div>
+ <div id="emoticon-list-wrapper" class="form-border-box background padding">
+ <ul id="emoticon-list" class="button-list emoticons">
+ <?php foreach(getUnicodeEmoticons() as $emoticon => $explanation):?>
+ <li data-emoticon="<?=$emoticon?>" title="<?=$explanation?>"><?=$emoticon?></li>
+ <?php endforeach; ?>
+ </ul>
+ </div>
+ <div class="form-border-box background padding">
+ <input id="form_argv" name="argv" maxlength="250" placeholder="[ARGUMENT_ONE=foo|ARGUMENT_TWO=bar …]" value="<?=escapeHTML($FORM['DATA']['ARGV'])?>" />
+ </div>
+<?php else: ?>
+ <div class="form-border-box background padding">
+ <?=$HTML?>
+ </div>
+<?php endif; ?>
+
+ <div class="form-border-box background padding">
+ <?php if($FORM['TYPE'] === 'INSERT'): ?>
+ <input id="insert-button" type="submit" name="insert" value="<?=$Language->text('insert')?>" />
+ <?php elseif($FORM['TYPE'] === 'UPDATE'): ?>
+ <input id="update-button" type="submit" name="update" value="<?=$Language->text('update')?>" />
+ <?php elseif($FORM['TYPE'] === 'DELETE'): ?>
+ <input id="delete-button" type="submit" name="delete" value="<?=$Language->text('delete')?>" data-text="<?=$Language->text('sure')?>" />
+ <?php endif; ?>
+ </div>
+</form>
diff --git a/theme/admin/html/post/index.php b/theme/admin/html/post/index.php
new file mode 100644
index 0000000..83dd5dc
--- /dev/null
+++ b/theme/admin/html/post/index.php
@@ -0,0 +1,16 @@
+<main id="main-content" class="wide">
+<h1><i class="fa fa-newspaper-o"></i><?=$Language->text('post_overview')?></h1>
+<p class="actions-before"><?=$Language->text('overview_post_desc')?></p>
+<ul class="actions">
+ <li><a href="<?=Application::getAdminURL('post/insert.php')?>" title="<?=$Language->text('insert_post')?>"><i class="fa fa-pencil-square-o"></i><?=$Language->text('insert')?></a></li>
+ <li><a href="<?=Application::getAdminURL('post/search.php')?>" title="<?=$Language->text('search_post')?>"><i class="fa fa-search"></i><?=$Language->text('search')?></a></li>
+</ul>
+
+<div class="item-container post grid">
+ <?php foreach($LIST['POSTS'] as $post): ?>
+ <?php echo $post; ?>
+ <?php endforeach; ?>
+</div>
+
+<?=$PAGINATION['HTML']?>
+</main>
diff --git a/theme/admin/html/post/insert.php b/theme/admin/html/post/insert.php
new file mode 100644
index 0000000..9b7c588
--- /dev/null
+++ b/theme/admin/html/post/insert.php
@@ -0,0 +1,6 @@
+<main id="main-content">
+<h1><i class="fa fa-pencil-square-o"></i><?=$Language->text('insert_post')?></h1>
+<p><?=$Language->text('insert_post_desc')?></p>
+
+<?=$HTML?>
+</main>
diff --git a/theme/admin/html/post/item.php b/theme/admin/html/post/item.php
new file mode 100644
index 0000000..ae06752
--- /dev/null
+++ b/theme/admin/html/post/item.php
@@ -0,0 +1,32 @@
+<article class="item">
+ <header>
+ <h2><i class="fa fa-newspaper-o"></i><?=escapeHTML($POST['ATTR']['NAME'])?></h2>
+ <div>
+ <span class="brackets item-id">#<?=$POST['ATTR']['ID']?></span>
+ <a class="brackets" href="<?=Application::getAdminURL("user/update.php?id={$USER['ATTR']['ID']}")?>" title="<?=$Language->text('update_user')?>"><?=escapeHTML($USER['ATTR']['FULLNAME'])?></a>
+ <time class="brackets" datetime="<?=$POST['ATTR']['TIME_INSERT']?>"><?=parseDatetime($POST['ATTR']['TIME_INSERT'], $Language->text('date_format'))?></time>
+ </div>
+ </header>
+ <blockquote cite="<?=$POST['URL']?>">
+ <?php if(isset($POST['FILE']['LIST'][0])): ?>
+ <img class="item-image" src="<?=$POST['FILE']['LIST'][0]?>" alt="" />
+ <?php endif; ?>
+ <p><?=excerpt($POST['BODY']['HTML']())?></p>
+ </blockquote>
+
+ <?php if($POST['ARGV']): ?>
+ <ul class="arguments">
+ <?php foreach($POST['ARGV'] as $argument => $value): ?>
+ <li><strong><?=$argument?>:</strong> <span><?=escapeHTML($value)?></span></li>
+ <?php endforeach; ?>
+ </ul>
+ <?php endif; ?>
+
+ <footer>
+ <ul>
+ <li><a href="<?=$POST['URL']?>" target="_blank" title="<?=$Language->text('select_post')?>"><i class="fa fa-external-link"></i><span class="hidden"><?=$Language->text('select_post')?></span></a></li>
+ <li><a href="<?=Application::getAdminURL("post/update.php?id={$POST['ATTR']['ID']}")?>" title="<?=$Language->text('update_post')?>"><i class="fa fa-pencil-square-o"></i><span class="hidden"><?=$Language->text('update_post')?></span></a></li>
+ <li><a href="<?=Application::getAdminURL("post/delete.php?id={$POST['ATTR']['ID']}")?>" title="<?=$Language->text('delete_post')?>"><i class="fa fa-trash-o"></i><span class="hidden"><?=$Language->text('delete_post')?></span></a></li>
+ </ul>
+ </footer>
+</article>
diff --git a/theme/admin/html/post/search.php b/theme/admin/html/post/search.php
new file mode 100644
index 0000000..00bd016
--- /dev/null
+++ b/theme/admin/html/post/search.php
@@ -0,0 +1,19 @@
+<main id="main-content" <?=!$POSTS ?: 'class="wide"'?>>
+<h1><i class="fa fa-search"></i><?=$Language->text('title_post_search')?></h1>
+<p><?=$Language->text('search_post_desc')?></p>
+
+<form id="search-form" method="GET">
+ <div class="form-border-box background padding">
+ <input id="search-text" type="search" name="q" placeholder="<?=$Language->text('placeholder_search')?>" value="<?=escapeHTML($QUERY)?>" />
+ </div>
+ <div class="form-border-box background padding">
+ <input id="update-button" type="submit" value="<?=$Language->text('search')?>" />
+ </div>
+</form>
+
+<div class="item-container post grid">
+ <?php foreach($POSTS as $post): ?>
+ <?php echo $post; ?>
+ <?php endforeach; ?>
+</div>
+</main>
diff --git a/theme/admin/html/post/update.php b/theme/admin/html/post/update.php
new file mode 100644
index 0000000..aa3835d
--- /dev/null
+++ b/theme/admin/html/post/update.php
@@ -0,0 +1,6 @@
+<main id="main-content">
+<h1><i class="fa fa-pencil-square-o"></i><?=$Language->text('update_post')?></h1>
+<p><?=$Language->text('update_post_desc')?></p>
+
+<?=$HTML?>
+</main>
diff --git a/theme/admin/html/user/delete.php b/theme/admin/html/user/delete.php
new file mode 100644
index 0000000..b500a12
--- /dev/null
+++ b/theme/admin/html/user/delete.php
@@ -0,0 +1,8 @@
+<main id="main-content">
+<h1><i class="fa fa-trash-o"></i><?=$Language->text('delete_user')?></h1>
+<p><?=$Language->text('delete_user_desc')?></p>
+
+<p class="red"><?=$Language->text('delete_user_warning')?></p>
+
+<?=$HTML?>
+</main>
diff --git a/theme/admin/html/user/form.php b/theme/admin/html/user/form.php
new file mode 100644
index 0000000..7e370e5
--- /dev/null
+++ b/theme/admin/html/user/form.php
@@ -0,0 +1,114 @@
+<?php if($FORM['INFO']): ?>
+ <div id="message-list-wrapper">
+ <ul id="message-list">
+ <?php foreach($FORM['INFO'] as $message): ?>
+ <li><?=$message?></li>
+ <?php endforeach ?>
+ </ul>
+ </div>
+<?php endif ?>
+
+<form action="" method="POST">
+ <input type="hidden" name="token" value="<?=$FORM['TOKEN']?>" />
+
+<?php if($FORM['TYPE'] !== 'DELETE'): ?>
+ <div class="form-grid">
+ <label for="form_id">
+ <i class="fa fa-database"></i>ID</label>
+
+ <div class="form-grid-item">
+ <input<?=($FORM['TYPE'] === 'UPDATE') ? ' disabled="disabled"' : '';?> id="form_id" name="id" type="number" placeholder="AUTO_INCREMENT" value="<?=escapeHTML($FORM['DATA']['ID'])?>" />
+ </div>
+
+ <label for="form_password">
+ <i class="fa fa-key"></i><?=$Language->text('label_password')?></label>
+
+ <div class="form-grid-item">
+ <input id="form_password" name="password" placeholder="NO CHANGE" type="password" />
+ </div>
+
+ <label for="form_fullname">
+ <i class="fa fa-user"></i><?=$Language->text('label_fullname')?></label>
+
+ <div class="form-grid-item">
+ <input id="form_fullname" name="fullname" value="<?=escapeHTML($FORM['DATA']['FULLNAME'])?>" />
+ </div>
+
+ <label for="form_mailaddr">
+ <i class="fa fa-envelope-o"></i><?=$Language->text('label_mailaddr')?></label>
+
+ <div class="form-grid-item">
+ <input id="form_mailaddr" name="mailaddr" value="<?=escapeHTML($FORM['DATA']['MAILADDR'])?>" />
+ </div>
+
+ <label for="form_username">
+ <i class="fa fa-user-secret"></i><?=$Language->text('label_username')?></label>
+
+ <div class="form-grid-item">
+ <input id="form_username" name="username" value="<?=escapeHTML($FORM['DATA']['USERNAME'])?>" />
+ </div>
+
+ <label for="form_slug">
+ <i class="fa fa-link"></i><?=$Language->text('label_slug')?></label>
+
+ <div class="form-grid-item">
+ <input id="form_slug" name="slug" value="<?=escapeHTML($FORM['DATA']['SLUG'])?>" />
+ </div>
+
+ <label for="form_time_insert">
+ <i class="fa fa-clock-o"></i><?=$Language->text('label_insert')?></label>
+
+ <div class="form-grid-item">
+ <input id="form_time_insert" name="time_insert" placeholder="YYYY-MM-DD HH:II:SS" value="<?=escapeHTML($FORM['DATA']['TIME_INSERT'])?>" />
+ </div>
+
+ <label for="form_time_update">
+ <i class="fa fa-clock-o"></i><?=$Language->text('label_update')?></label>
+
+ <div class="form-grid-item">
+ <input id="form_time_update" name="time_update" placeholder="<?=escapeHTML($FORM['DATA']['TIME_UPDATE'] ? $FORM['DATA']['TIME_UPDATE'] : 'CURRENT_TIMESTAMP')?>" value="" />
+ </div>
+ </div>
+
+ <div id="content-editor-wrapper" class="form-border-box">
+ <div id="button-list-wrapper">
+ <ul id="markdown-list" class="button-list markdown">
+ <li data-markdown="bold" class="fa fa-bold" title="<?=$Language->text('markdown_bold')?>"></li>
+ <li data-markdown="italic" class="fa fa-italic" title="<?=$Language->text('markdown_italic')?>"></li>
+ <li data-markdown="heading" class="fa fa-header" title="<?=$Language->text('markdown_heading')?>"></li>
+ <li data-markdown="link" class="fa fa-link" title="<?=$Language->text('markdown_link')?>"></li>
+ <li data-markdown="image" class="fa fa-picture-o" title="<?=$Language->text('markdown_image')?>"></li>
+ <li data-markdown="code" class="fa fa-code" title="<?=$Language->text('markdown_code')?>"></li>
+ <li data-markdown="quote" class="fa fa-quote-right" title="<?=$Language->text('markdown_quote')?>"></li>
+ <li data-markdown="list_ul" class="fa fa-list-ul" title="<?=$Language->text('markdown_list_ul')?>"></li>
+ <li data-markdown="list_ol" class="fa fa-list-ol" title="<?=$Language->text('markdown_list_ol')?>"></li>
+ </ul>
+ </div>
+ <textarea id="content-editor" name="body" placeholder="[…]"><?=escapeHTML($FORM['DATA']['BODY'])?></textarea>
+ </div>
+ <div id="emoticon-list-wrapper" class="form-border-box background padding">
+ <ul id="emoticon-list" class="button-list emoticons">
+ <?php foreach(getUnicodeEmoticons() as $emoticon => $explanation):?>
+ <li data-emoticon="<?=$emoticon?>" title="<?=$explanation?>"><?=$emoticon?></li>
+ <?php endforeach; ?>
+ </ul>
+ </div>
+ <div class="form-border-box background padding">
+ <input id="form_argv" name="argv" maxlength="250" placeholder="[ARGUMENT_ONE=foo|ARGUMENT_TWO=bar …]" value="<?=escapeHTML($FORM['DATA']['ARGV'])?>" />
+ </div>
+<?php else: ?>
+ <div class="form-border-box background padding">
+ <?=$HTML?>
+ </div>
+<?php endif; ?>
+
+ <div class="form-border-box background padding">
+ <?php if($FORM['TYPE'] === 'INSERT'): ?>
+ <input id="insert-button" type="submit" name="insert" value="<?=$Language->text('insert')?>" />
+ <?php elseif($FORM['TYPE'] === 'UPDATE'): ?>
+ <input id="update-button" type="submit" name="update" value="<?=$Language->text('update')?>" />
+ <?php elseif($FORM['TYPE'] === 'DELETE'): ?>
+ <input id="delete-button" type="submit" name="delete" value="<?=$Language->text('delete')?>" data-text="<?=$Language->text('sure')?>" />
+ <?php endif; ?>
+ </div>
+</form>
diff --git a/theme/admin/html/user/index.php b/theme/admin/html/user/index.php
new file mode 100644
index 0000000..7e1d794
--- /dev/null
+++ b/theme/admin/html/user/index.php
@@ -0,0 +1,15 @@
+<main id="main-content">
+<h1><i class="fa fa-user"></i><?=$Language->text('user_overview')?></h1>
+<p class="actions-before"><?=$Language->text('overview_user_desc')?></p>
+<ul class="actions">
+ <li><a href="<?=Application::getAdminURL('user/insert.php')?>" title="<?=$Language->text('insert_user')?>"><i class="fa fa-pencil-square-o"></i><?=$Language->text('insert')?></a></li>
+</ul>
+
+<div class="item-container user">
+ <?php foreach($LIST['USERS'] as $user): ?>
+ <?php echo $user; ?>
+ <?php endforeach; ?>
+</div>
+
+<?=$PAGINATION['HTML']?>
+</main>
diff --git a/theme/admin/html/user/insert.php b/theme/admin/html/user/insert.php
new file mode 100644
index 0000000..7c7aba2
--- /dev/null
+++ b/theme/admin/html/user/insert.php
@@ -0,0 +1,6 @@
+<main id="main-content">
+<h1><i class="fa fa-pencil-square-o"></i><?=$Language->text('insert_user')?></h1>
+<p><?=$Language->text('insert_user_desc')?></p>
+
+<?=$HTML?>
+</main>
diff --git a/theme/admin/html/user/item.php b/theme/admin/html/user/item.php
new file mode 100644
index 0000000..ae16637
--- /dev/null
+++ b/theme/admin/html/user/item.php
@@ -0,0 +1,31 @@
+<article class="item">
+ <header>
+ <h2><i class="fa fa-user"></i><?=escapeHTML($USER['ATTR']['FULLNAME'])?></h2>
+ <div>
+ <span class="brackets item-id">#<?=$USER['ATTR']['ID']?></span>
+ <time class="brackets" datetime="<?=$USER['ATTR']['TIME_INSERT']?>"><?=parseDatetime($USER['ATTR']['TIME_INSERT'], $Language->text('date_format'))?></time>
+ </div>
+ </header>
+ <blockquote cite="<?=$USER['URL']?>">
+ <?php if(isset($USER['FILE']['LIST'][0])): ?>
+ <img class="item-image" src="<?=$USER['FILE']['LIST'][0]?>" alt="" />
+ <?php endif; ?>
+ <p><?=excerpt($USER['BODY']['HTML']())?></p>
+ </blockquote>
+
+ <?php if($USER['ARGV']): ?>
+ <ul class="arguments">
+ <?php foreach($USER['ARGV'] as $argument => $value): ?>
+ <li><strong><?=$argument?>:</strong> <span><?=escapeHTML($value)?></span></li>
+ <?php endforeach; ?>
+ </ul>
+ <?php endif; ?>
+
+ <footer>
+ <ul>
+ <li><a href="<?=$USER['URL']?>" target="_blank" title="<?=$Language->text('select_user')?>"><i class="fa fa-external-link"></i><span class="hidden"><?=$Language->text('select_user')?></span></a></li>
+ <li><a href="<?=Application::getAdminURL("user/update.php?id={$USER['ATTR']['ID']}")?>" title="<?=$Language->text('update_user')?>"><i class="fa fa-pencil-square-o"></i><span class="hidden"><?=$Language->text('update_user')?></span></a></li>
+ <li><a href="<?=Application::getAdminURL("user/delete.php?id={$USER['ATTR']['ID']}")?>" title="<?=$Language->text('delete_user')?>"><i class="fa fa-trash-o"></i><span class="hidden"><?=$Language->text('delete_user')?></span></a></li>
+ </ul>
+ </footer>
+</article>
diff --git a/theme/admin/html/user/update.php b/theme/admin/html/user/update.php
new file mode 100644
index 0000000..ad12677
--- /dev/null
+++ b/theme/admin/html/user/update.php
@@ -0,0 +1,6 @@
+<main id="main-content">
+<h1><i class="fa fa-pencil-square-o"></i><?=$Language->text('update_user')?></h1>
+<p><?=$Language->text('update_user_desc')?></p>
+
+<?=$HTML?>
+</main>