From b62ce7ec6f68331311ab53ca64bd03124f311b5c Mon Sep 17 00:00:00 2001 From: slawkens Date: Mon, 28 Aug 2017 16:27:38 +0200 Subject: [PATCH] * added administration panel for screenshots management with auto thumbnail generator * moved commands & screenshots html code to twig template files * minimum PHP version to install the MyAAC is now 5.2.0 cause of pathinfo (extension) function --- common.php | 2 + install/steps/requirements.php | 2 +- system/init.php | 5 + system/pages/commands.php | 103 ++------- system/pages/screenshots.php | 309 +++++++++++++++++++++---- system/templates/commands.form.html | 26 +++ system/templates/commands.html | 40 ++++ system/templates/screenshots.form.html | 32 +++ system/templates/screenshots.get.html | 16 ++ system/templates/screenshots.html | 38 +++ 10 files changed, 452 insertions(+), 121 deletions(-) create mode 100644 system/templates/commands.form.html create mode 100644 system/templates/commands.html create mode 100644 system/templates/screenshots.form.html create mode 100644 system/templates/screenshots.get.html create mode 100644 system/templates/screenshots.html diff --git a/common.php b/common.php index 27b69bad..1a3104a4 100644 --- a/common.php +++ b/common.php @@ -43,6 +43,8 @@ define('FLAG_CONTENT_FORUM', 32); define('FLAG_CONTENT_COMMANDS', 64); define('FLAG_CONTENT_SPELLS', 128); define('FLAG_CONTENT_MONSTERS', 256); +define('FLAG_CONTENT_SCREENSHOTS', 512); +define('FLAG_CONTENT_MOVIES', 1024); // news define('NEWS', 1); diff --git a/install/steps/requirements.php b/install/steps/requirements.php index a5864188..cd83aa74 100644 --- a/install/steps/requirements.php +++ b/install/steps/requirements.php @@ -22,7 +22,7 @@ function version_check($name, $ok, $info = '', $warning = false) $failed = false; // start validating -version_check($locale['step_requirements_php_version'], (PHP_VERSION_ID >= 50102), PHP_VERSION); +version_check($locale['step_requirements_php_version'], (PHP_VERSION_ID >= 50200), PHP_VERSION); foreach(array('config.local.php', 'images/guilds', 'images/houses', 'images/screenshots') as $value) { $perms = (int) substr(decoct(fileperms(BASE . $value)), 2); diff --git a/system/init.php b/system/init.php index 6b2436ec..e4e7d748 100644 --- a/system/init.php +++ b/system/init.php @@ -35,6 +35,11 @@ $twig = new Twig_Environment($loader, array( 'cache' => CACHE . 'twig/', )); +$function = new Twig_SimpleFunction('getStyle', function ($i) { + return getStyle($i); +}); +$twig->addFunction($function); + // trim values we receive if(isset($_POST)) { diff --git a/system/pages/commands.php b/system/pages/commands.php index da5c29eb..7de4c9c7 100644 --- a/system/pages/commands.php +++ b/system/pages/commands.php @@ -71,88 +71,33 @@ if($canEdit) if(!empty($errors)) output_errors($errors); } -?> -
- - - - - - - - - - -
command
- - - - - - - - - - -
Words:
Description:
-
-
-
-render('commands.form.html', array( + 'link' => getPageLink('commands', ($action == 'edit' ? 'edit' : 'add')), + 'action' => $action, + 'id' => isset($id) ? $id : null, + 'vdarkborder' => $config['vdarkborder'], + 'darkborder' => $config['darkborder'], + 'words' => isset($words) ? $words : null, + 'description' => isset($description) ? $description : null + )); } -?> - - - - - - - - - -query('SELECT ' . $db->fieldName('id') . ', ' . $db->fieldName('words') . ', ' . $db->fieldName('description') . - ($canEdit ? ', ' . $db->fieldName('hidden') . ', ' . $db->fieldName('ordering') : '') . - ' FROM ' . $db->tableName(TABLE_PREFIX . 'commands') . - (!$canEdit ? ' WHERE ' . $db->fieldName('hidden') . ' != 1' : '') . - ' ORDER BY ' . $db->fieldName('ordering')); + $db->query('SELECT `id`, `words`, `description`' . + ($canEdit ? ', `hidden`, `ordering`' : '') . + ' FROM `' . TABLE_PREFIX . 'commands`' . + (!$canEdit ? ' WHERE `hidden` != 1' : '') . + ' ORDER BY `ordering`;'); $last = $commands->rowCount(); -$i = 0; -foreach($commands as $command): ?> - - - - - - - - -
WordsDescriptionOptions
- - Edit - - - Delete - - - - - - - Move up - - - - - Move down - - -
+echo $twig->render('commands.html', array( + 'commands' => $commands, + 'last' => $last, + 'canEdit' => $canEdit, + 'vdarkborder' => $config['vdarkborder'] +)); -select(TABLE_PREFIX . 'commands', array('id' => $id)) !== false) + if(self::get($id) !== false) $db->delete(TABLE_PREFIX . 'commands', array('id' => $id)); else $errors[] = 'Command with id ' . $id . ' does not exists.'; @@ -218,7 +163,7 @@ class Commands global $db; if(isset($id)) { - $query = $db->select(TABLE_PREFIX . 'commands', array('id' => $id)); + $query = self::get($id); if($query !== false) $db->update(TABLE_PREFIX . 'commands', array('hidden' => ($query['hidden'] == 1 ? 0 : 1)), array('id' => $id)); else @@ -233,7 +178,7 @@ class Commands static public function move($id, $i, &$errors) { global $db; - $query = $db->select(TABLE_PREFIX . 'commands', array('id' => $id)); + $query = self::get($id); if($query !== false) { $ordering = $query['ordering'] + $i; diff --git a/system/pages/screenshots.php b/system/pages/screenshots.php index b058f2d9..80400fd2 100644 --- a/system/pages/screenshots.php +++ b/system/pages/screenshots.php @@ -3,7 +3,6 @@ * Screenshots * * @package MyAAC - * @author Gesior * @author Slawkens * @copyright 2017 MyAAC * @version 0.2.4 @@ -12,9 +11,69 @@ defined('MYAAC') or die('Direct access not allowed!'); $title = 'Screenshots'; +$canEdit = hasFlag(FLAG_CONTENT_SCREENSHOTS) || superAdmin(); +if($canEdit) { + if(function_exists('imagecreatefrompng')) { + if (!empty($action)) { + if ($action == 'delete' || $action == 'edit' || $action == 'hide' || $action == 'moveup' || $action == 'movedown') + $id = $_REQUEST['id']; + + if (isset($_REQUEST['comment'])) + $comment = stripslashes($_REQUEST['comment']); + + if (isset($_REQUEST['image'])) + $image = $_REQUEST['image']; + + if (isset($_REQUEST['author'])) + $author = $_REQUEST['author']; + + $errors = array(); + + if ($action == 'add') { + if (Screenshots::add($comment, $image, $author, $errors)) + $comment = $image = $author = ''; + } else if ($action == 'delete') { + Screenshots::delete($id, $errors); + } else if ($action == 'edit') { + if (isset($id) && !isset($name)) { + $screenshot = Screenshots::get($id); + $comment = $screenshot['comment']; + $image = $screenshot['image']; + $author = $screenshot['author']; + } else { + Screenshots::update($id, $comment, $image, $author); + $action = $comment = $image = $author = ''; + } + } else if ($action == 'hide') { + Screenshots::toggleHidden($id, $errors); + } else if ($action == 'moveup') { + Screenshots::move($id, -1, $errors); + } else if ($action == 'movedown') { + Screenshots::move($id, 1, $errors); + } + + if (!empty($errors)) + output_errors($errors); + } + + echo $twig->render('screenshots.form.html', array( + 'link' => getPageLink('screenshots', ($action == 'edit' ? 'edit' : 'add')), + 'action' => $action, + 'id' => isset($id) ? $id : null, + 'vdarkborder' => $config['vdarkborder'], + 'darkborder' => $config['darkborder'], + 'comment' => isset($comment) ? $comment : null, + 'image' => isset($image) ? $image : null, + 'author' => isset($author) ? $author : null + )); + } + else + echo 'You cannot edit/add screenshots as it seems your PHP installation doesnt have GD support enabled. Visit PHP Manual for more info.'; +} + if(isset($_GET['screenshot'])) { - $screenshot = $db->query('SELECT * FROM ' . $db->tableName(TABLE_PREFIX . 'screenshots') . ' WHERE ' . $db->fieldName('name') . ' = ' . $db->quote($_GET['screenshot']) . ' ORDER by ordering LIMIT 1;'); + $screenshot = $db->query('SELECT * FROM `' . TABLE_PREFIX . 'screenshots` WHERE `id` = ' . $db->quote($_GET['screenshot']) . ' ORDER by `ordering` LIMIT 1;'); if($screenshot->rowCount() == 1) $screenshot = $screenshot->fetch(); else @@ -23,66 +82,234 @@ if(isset($_GET['screenshot'])) return; } - $previous_screenshot = $db->query('SELECT * FROM ' . $db->tableName(TABLE_PREFIX . 'screenshots') . ' WHERE `id` = ' . $db->quote($screenshot['id'] - 1) . ' ORDER by ordering;'); + $previous_screenshot = $db->query('SELECT * FROM `' . TABLE_PREFIX . 'screenshots` WHERE `id` = ' . $db->quote($screenshot['id'] - 1) . ' ORDER by `ordering`;'); if($previous_screenshot->rowCount() == 1) $previous_screenshot = $previous_screenshot->fetch(); else $previous_screenshot = NULL; - $next_screenshot = $db->query('SELECT * FROM ' . $db->tableName(TABLE_PREFIX . 'screenshots') . ' WHERE `id` = ' . $db->quote($screenshot['id'] + 1) . ' ORDER by ordering;'); + $next_screenshot = $db->query('SELECT * FROM `' . TABLE_PREFIX . 'screenshots` WHERE `id` = ' . $db->quote($screenshot['id'] + 1) . ' ORDER by `ordering`;'); if($next_screenshot->rowCount() == 1) $next_screenshot = $next_screenshot->fetch(); else $next_screenshot = NULL; - ?> -
- - next - - previous - -
- back -
-
-
- -
-
- render('screenshots.get.html', array( + 'previous' => $previous_screenshot ? $previous_screenshot['id'] : null, + 'next' => $next_screenshot ? $next_screenshot['id'] : null, + 'screenshot' => $screenshot + )); return; } -$screenshots = $db->query('SELECT * FROM ' . $db->tableName(TABLE_PREFIX . 'screenshots') . ' ORDER BY ' . $db->fieldName('ordering')); -if(!$screenshots->rowCount()) +$screenshots = + $db->query('SELECT `id`, `comment`, `image`, `author`, `thumb`' . + ($canEdit ? ', `hidden`, `ordering`' : '') . + ' FROM `' . TABLE_PREFIX . 'screenshots`' . + (!$canEdit ? ' WHERE `hidden` != 1' : '') . + ' ORDER BY `ordering`;'); + +$last = $screenshots->rowCount(); +if(!$last) { ?> There are no screenshots added to gallery yet. -Click on the image to enlarge.

- - - - - - -
- - - -
-render('screenshots.html', array( + 'screenshots' => $screenshots, + 'last' => $last, + 'canEdit' => $canEdit +)); class Screenshots { - - + static public function add($comment, $image, $author, &$errors) + { + global $db; + if(isset($comment[0]) && isset($image[0]) && isset($author[0])) + { + $query = + $db->query( + 'SELECT `ordering`' . + ' FROM `' . TABLE_PREFIX . 'screenshots`' . + ' ORDER BY `ordering`' . ' DESC LIMIT 1' + ); + + $ordering = 0; + if($query->rowCount() > 0) { + $query = $query->fetch(); + $ordering = $query['ordering'] + 1; + } + + $pathinfo = pathinfo($image); + $extension = strtolower($pathinfo['extension']); + $thumb_filename = 'images/screenshots/' . $pathinfo['filename'] . '_thumb.' . $extension; + $filename = 'images/screenshots/' . $pathinfo['filename'] . '.' . $extension; + if($db->insert(TABLE_PREFIX . 'screenshots', array( + 'comment' => $comment, + 'image' => $filename, 'author' => $author, + 'thumb' => $thumb_filename, + 'ordering' => $ordering))) { + if(self::generateThumb($db->lastInsertId(), $image, $errors)) + self::resize($image, 650, 500, $filename, $errors); + } + } + else + $errors[] = 'Please fill all inputs.'; + + return !count($errors); + } + + static public function get($id) { + global $db; + return $db->select(TABLE_PREFIX . 'screenshots', array('id' => $id)); + } + + static public function update($id, $comment, $image, $author) { + global $db; + + $pathinfo = pathinfo($image); + $extension = strtolower($pathinfo['extension']); + $filename = 'images/screenshots/' . $pathinfo['filename'] . '.' . $extension; + + if($db->update(TABLE_PREFIX . 'screenshots', array( + 'comment' => $comment, + 'image' => $filename, 'author' => $author), + array('id' => $id) + )) { + if(self::generateThumb($id, $image, $errors)) + self::resize($image, 650, 500, $filename, $errors); + } + } + + static public function delete($id, &$errors) + { + global $db; + if(isset($id)) + { + if(self::get($id) !== false) + $db->delete(TABLE_PREFIX . 'screenshots', array('id' => $id)); + else + $errors[] = 'Screenshot with id ' . $id . ' does not exists.'; + } + else + $errors[] = 'id not set'; + + return !count($errors); + } + + static public function toggleHidden($id, &$errors) + { + global $db; + if(isset($id)) + { + $query = self::get($id); + if($query !== false) + $db->update(TABLE_PREFIX . 'screenshots', array('hidden' => ($query['hidden'] == 1 ? 0 : 1)), array('id' => $id)); + else + $errors[] = 'Screenshot with id ' . $id . ' does not exists.'; + } + else + $errors[] = 'id not set'; + + return !count($errors); + } + + static public function move($id, $i, &$errors) + { + global $db; + $query = self::get($id); + if($query !== false) + { + $ordering = $query['ordering'] + $i; + $old_record = $db->select(TABLE_PREFIX . 'screenshots', array('ordering' => $ordering)); + if($old_record !== false) + $db->update(TABLE_PREFIX . 'screenshots', array('ordering' => $query['ordering']), array('ordering' => $ordering)); + + $db->update(TABLE_PREFIX . 'screenshots', array('ordering' => $ordering), array('id' => $id)); + } + else + $errors[] = 'Screenshot with id ' . $id . ' does not exists.'; + + return !count($errors); + } + + static public function resize($file, $new_width, $new_height, $new_file, &$errors) + { + $pathinfo = pathinfo($file); + $extension = strtolower($pathinfo['extension']); + + switch ($extension) + { + case 'gif': // GIF + $image = imagecreatefromgif($file); + break; + case 'jpg': // JPEG + case 'jpeg': + $image = imagecreatefromjpeg($file); + break; + case 'png': // PNG + $image = imagecreatefrompng($file); + break; + default: + $errors[] = 'Unsupported file format.'; + return false; + } + + $width = imagesx($image); + $height = imagesy($image); + + // create a new temporary image + $tmp_img = imagecreatetruecolor($new_width, $new_height); + + // copy and resize old image into new image + imagecopyresized($tmp_img, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); + + // save thumbnail into a file + switch($extension) + { + case 'gif': + imagegif($tmp_img, $new_file); + break; + + case 'jpg': + case 'jpeg': + imagejpeg($tmp_img, $new_file); + break; + + case 'png': + imagepng($tmp_img, $new_file); + break; + } + + return true; + } + + static public function generateThumb($id, $file, &$errors) + { + $pathinfo = pathinfo($file); + $extension = strtolower($pathinfo['extension']); + $thumb_filename = 'images/screenshots/' . $pathinfo['filename'] . '_thumb.' . $extension; + + if(!self::resize($file, 170, 110, $thumb_filename, $errors)) + return false; + + global $db; + if(isset($id)) + { + $query = self::get($id); + if($query !== false) + $db->update(TABLE_PREFIX . 'screenshots', array('thumb' => $thumb_filename), array('id' => $id)); + else + $errors[] = 'Screenshot with id ' . $id . ' does not exists.'; + } + else + $errors[] = 'id not set'; + + return !count($errors); + } } ?> diff --git a/system/templates/commands.form.html b/system/templates/commands.form.html new file mode 100644 index 00000000..f6ba72be --- /dev/null +++ b/system/templates/commands.form.html @@ -0,0 +1,26 @@ +
+ {% if action == 'edit' %} + + {% endif %} + + + + + + + +
{% if action == 'edit' %}Edit{% else %}Add{% endif %} command
+ + + + + + + + + + +
Words:
Description:
+
+
+
\ No newline at end of file diff --git a/system/templates/commands.html b/system/templates/commands.html new file mode 100644 index 00000000..7922e891 --- /dev/null +++ b/system/templates/commands.html @@ -0,0 +1,40 @@ + + + + + {% if canEdit %} + + {% endif %} + + {% set i = 0 %} + {% for command in commands %} + {% set i = i + 1 %} + + + + {% if canEdit %} + + {% endif %} + + {% endfor %} +
WordsDescriptionOptions
{{ command.words }}{{ command.description }} + + Edit + + + Delete + + + {% if command.hidden != 1 %}Hide{% else %}Show{% endif %} + + {% if i != 1 %} + + Move up + + {% endif %} + {% if i != last %} + + Move down + + {% endif %} +
\ No newline at end of file diff --git a/system/templates/screenshots.form.html b/system/templates/screenshots.form.html new file mode 100644 index 00000000..0ff77e49 --- /dev/null +++ b/system/templates/screenshots.form.html @@ -0,0 +1,32 @@ +
+ {% if action == 'edit' %} + + {% endif %} + + + + + + + +
{% if action == 'edit' %}Edit{% else %}Add{% endif %} screenshot
+ + + + + + + + + + + + + + + +
Comment:
Image URL:
Author:
+
+
+
+

\ No newline at end of file diff --git a/system/templates/screenshots.get.html b/system/templates/screenshots.get.html new file mode 100644 index 00000000..d3f7c80d --- /dev/null +++ b/system/templates/screenshots.get.html @@ -0,0 +1,16 @@ +
+ + {% if next is not null %} + next + {% endif %} + {% if previous is not null %} + previous + {% endif %} +
+ back +
+
+
+ +
{{ screenshot.comment }}
+
\ No newline at end of file diff --git a/system/templates/screenshots.html b/system/templates/screenshots.html new file mode 100644 index 00000000..c3374dfd --- /dev/null +++ b/system/templates/screenshots.html @@ -0,0 +1,38 @@ +Click on the image to enlarge.

+{% set i = 0 %} +{% for screenshot in screenshots %} + {% set i = i + 1 %} + + + + + {% if canEdit %} + + {% endif %} + +
+ + + + {{ screenshot.comment }} + + Edit + + + Delete + + + {% if screenshot.hidden != 1 %}Hide{% else %}Show{% endif %} + + {% if i != 1 %} + + Move up + + {% endif %} + {% if i != last %} + + Move down + + {% endif %} +
+{% endfor %} \ No newline at end of file