summaryrefslogtreecommitdiff
path: root/modules/watermark/controllers/admin_watermarks.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules/watermark/controllers/admin_watermarks.php')
-rw-r--r--modules/watermark/controllers/admin_watermarks.php158
1 files changed, 158 insertions, 0 deletions
diff --git a/modules/watermark/controllers/admin_watermarks.php b/modules/watermark/controllers/admin_watermarks.php
new file mode 100644
index 0000000..222279e
--- /dev/null
+++ b/modules/watermark/controllers/admin_watermarks.php
@@ -0,0 +1,158 @@
+<?php defined("SYSPATH") or die("No direct script access.");
+/**
+ * Gallery - a web based photo album viewer and editor
+ * Copyright (C) 2000-2013 Bharat Mediratta
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+class Admin_Watermarks_Controller extends Admin_Controller {
+ public function index() {
+ $name = module::get_var("watermark", "name");
+
+ $view = new Admin_View("admin.html");
+ $view->page_title = t("Watermarks");
+ $view->content = new View("admin_watermarks.html");
+ if ($name) {
+ $view->content->name = module::get_var("watermark", "name");
+ $view->content->url = url::file("var/modules/watermark/$name");
+ $view->content->width = module::get_var("watermark", "width");
+ $view->content->height = module::get_var("watermark", "height");
+ $view->content->position = module::get_var("watermark", "position");
+ }
+ print $view;
+ }
+
+ public function form_edit() {
+ print watermark::get_edit_form();
+ }
+
+ public function edit() {
+ access::verify_csrf();
+
+ $form = watermark::get_edit_form();
+ if ($form->validate()) {
+ module::set_var("watermark", "position", $form->edit_watermark->position->value);
+ module::set_var("watermark", "transparency", $form->edit_watermark->transparency->value);
+ $this->_update_graphics_rules();
+
+ log::success("watermark", t("Watermark changed"));
+ message::success(t("Watermark changed"));
+ json::reply(
+ array("result" => "success",
+ "location" => url::site("admin/watermarks")));
+ } else {
+ json::reply(array("result" => "error", "html" => (string)$form));
+ }
+ }
+
+ public function form_delete() {
+ print watermark::get_delete_form();
+ }
+
+ public function delete() {
+ access::verify_csrf();
+
+ $form = watermark::get_delete_form();
+ if ($form->validate()) {
+ if ($name = basename(module::get_var("watermark", "name"))) {
+ system::delete_later(VARPATH . "modules/watermark/$name");
+
+ module::clear_var("watermark", "name");
+ module::clear_var("watermark", "width");
+ module::clear_var("watermark", "height");
+ module::clear_var("watermark", "mime_type");
+ module::clear_var("watermark", "position");
+ $this->_update_graphics_rules();
+
+ log::success("watermark", t("Watermark deleted"));
+ message::success(t("Watermark deleted"));
+ }
+ json::reply(array("result" => "success", "location" => url::site("admin/watermarks")));
+ } else {
+ json::reply(array("result" => "error", "html" => (string)$form));
+ }
+ }
+
+ public function form_add() {
+ print watermark::get_add_form();
+ }
+
+ public function add() {
+ access::verify_csrf();
+
+ $form = watermark::get_add_form();
+ // For TEST_MODE, we want to simulate a file upload. Because this is not a true upload, Forge's
+ // validation logic will correctly reject it. So, we skip validation when we're running tests.
+ if (TEST_MODE || $form->validate()) {
+ $file = $_POST["file"];
+ // Forge prefixes files with "uploadfile-xxxxxxx" for uniqueness
+ $name = preg_replace("/uploadfile-[^-]+-(.*)/", '$1', basename($file));
+
+ try {
+ list ($width, $height, $mime_type, $extension) = photo::get_file_metadata($file);
+ // Sanitize filename, which ensures a valid extension. This renaming prevents the issues
+ // addressed in ticket #1855, where an image that looked valid (header said jpg) with a
+ // php extension was previously accepted without changing its extension.
+ $name = legal_file::sanitize_filename($name, $extension, "photo");
+ } catch (Exception $e) {
+ message::error(t("Invalid or unidentifiable image file"));
+ system::delete_later($file);
+ return;
+ }
+
+ rename($file, VARPATH . "modules/watermark/$name");
+ module::set_var("watermark", "name", $name);
+ module::set_var("watermark", "width", $width);
+ module::set_var("watermark", "height", $height);
+ module::set_var("watermark", "mime_type", $mime_type);
+ module::set_var("watermark", "position", $form->add_watermark->position->value);
+ module::set_var("watermark", "transparency", $form->add_watermark->transparency->value);
+ $this->_update_graphics_rules();
+ system::delete_later($file);
+
+ message::success(t("Watermark saved"));
+ log::success("watermark", t("Watermark saved"));
+ json::reply(array("result" => "success", "location" => url::site("admin/watermarks")));
+ } else {
+ // rawurlencode the results because the JS code that uploads the file buffers it in an
+ // iframe which entitizes the HTML and makes it difficult for the JS to process. If we url
+ // encode it now, it passes through cleanly. See ticket #797.
+ json::reply(array("result" => "error", "html" => rawurlencode((string)$form)));
+ }
+
+ // Override the application/json mime type. The dialog based HTML uploader uses an iframe to
+ // buffer the reply, and on some browsers (Firefox 3.6) it does not know what to do with the
+ // JSON that it gets back so it puts up a dialog asking the user what to do with it. So force
+ // the encoding type back to HTML for the iframe.
+ // See: http://jquery.malsup.com/form/#file-upload
+ header("Content-Type: text/html; charset=" . Kohana::CHARSET);
+ }
+
+ private function _update_graphics_rules() {
+ graphics::remove_rules("watermark");
+ if ($name = module::get_var("watermark", "name")) {
+ foreach (array("thumb", "resize") as $target) {
+ graphics::add_rule(
+ "watermark", $target, "gallery_graphics::composite",
+ array("file" => VARPATH . "modules/watermark/$name",
+ "width" => module::get_var("watermark", "width"),
+ "height" => module::get_var("watermark", "height"),
+ "position" => module::get_var("watermark", "position"),
+ "transparency" => 101 - module::get_var("watermark", "transparency")),
+ 1000);
+ }
+ }
+ }
+} \ No newline at end of file