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);
}
-?>
-
-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
+ ));
}
-?>
-
-
-
- Words
- Description
-
- Options
-
-
-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): ?>
-
-
-
-
-
-
- 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;
- ?>
-
-
-
-
-
- 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
+
+
+
+
+
+
+
+
\ 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 @@
+
\ 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
+
+
+
+
+
+
+
+
+
\ 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 %}
+
+
+
+
+
{{ 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 %}
+
+{% endfor %}
\ No newline at end of file