aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorplegall <plg@piwigo.org>2012-04-29 07:34:44 +0000
committerplegall <plg@piwigo.org>2012-04-29 07:34:44 +0000
commit5884b956f88bc8b602a7179d9e59f1c737ad99fc (patch)
tree64ebfc3e6741a45a097dde8e061a6567a5082be7
parent7c25cf9b781dab5183649b1216d51bf91326d257 (diff)
feature 2626: new design for the watermark configuration screen (tab in the "config > options")
TODO: the detection of derivatives that need to be updated is not working. git-svn-id: http://piwigo.org/svn/trunk@14512 68402e56-0260-453c-a942-63ccdbb3a9ee
-rw-r--r--admin/configuration.php75
-rw-r--r--admin/include/configuration_watermark_process.inc.php172
-rw-r--r--admin/themes/default/template/configuration.tpl89
-rw-r--r--admin/themes/default/theme.css36
4 files changed, 370 insertions, 2 deletions
diff --git a/admin/configuration.php b/admin/configuration.php
index 0de99e40f..0fbe113d6 100644
--- a/admin/configuration.php
+++ b/admin/configuration.php
@@ -173,6 +173,11 @@ if (isset($_POST['submit']))
}
break;
}
+ case 'watermark' :
+ {
+ include(PHPWG_ROOT_PATH.'admin/include/configuration_watermark_process.inc.php');
+ break;
+ }
case 'sizes' :
{
include(PHPWG_ROOT_PATH.'admin/include/configuration_sizes_process.inc.php');
@@ -270,6 +275,7 @@ $tabsheet = new tabsheet();
// TabSheet initialization
$tabsheet->add('main', l10n('Main'), $conf_link.'main');
$tabsheet->add('sizes', l10n('Photo sizes'), $conf_link.'sizes');
+$tabsheet->add('watermark', l10n('Watermark'), $conf_link.'watermark');
$tabsheet->add('display', l10n('Display'), $conf_link.'display');
$tabsheet->add('comments', l10n('Comments'), $conf_link.'comments');
$tabsheet->add('default', l10n('Guest Settings'), $conf_link.'default');
@@ -495,6 +501,75 @@ switch ($page['section'])
break;
}
+ case 'watermark' :
+ {
+ $watermark_files = array();
+ foreach (glob(PHPWG_ROOT_PATH.'themes/default/watermarks/*.png') as $file)
+ {
+ $watermark_files[] = substr($file, strlen(PHPWG_ROOT_PATH));
+ }
+ foreach (glob(PHPWG_ROOT_PATH.PWG_LOCAL_DIR.'watermarks/*.png') as $file)
+ {
+ $watermark_files[] = substr($file, strlen(PHPWG_ROOT_PATH));
+ }
+ $watermark_filemap = array( '' => '---' );
+ foreach( $watermark_files as $file)
+ {
+ $display = basename($file);
+ $watermark_filemap[$file] = $display;
+ }
+ $template->assign('watermark_files', $watermark_filemap);
+
+ $wm = ImageStdParams::get_watermark();
+
+ $position = 'custom';
+ if ($wm->xpos == 0 and $wm->ypos == 0)
+ {
+ $position = 'topleft';
+ }
+ if ($wm->xpos == 100 and $wm->ypos == 0)
+ {
+ $position = 'topright';
+ }
+ if ($wm->xpos == 50 and $wm->ypos == 50)
+ {
+ $position = 'middle';
+ }
+ if ($wm->xpos == 0 and $wm->ypos == 100)
+ {
+ $position = 'bottomleft';
+ }
+ if ($wm->xpos == 100 and $wm->ypos == 100)
+ {
+ $position = 'bottomright';
+ }
+
+ if ($wm->xrepeat != 0)
+ {
+ $position = 'custom';
+ }
+
+ $template->assign(
+ 'watermark',
+ array(
+ 'file' => $wm->file,
+ 'minw' => $wm->min_size[0],
+ 'minh' => $wm->min_size[1],
+ 'xpos' => $wm->xpos,
+ 'ypos' => $wm->ypos,
+ 'xrepeat' => $wm->xrepeat,
+ 'opacity' => $wm->opacity,
+ 'position' => $position,
+ )
+ );
+
+ $template->append(
+ 'watermark',
+ array(),
+ true
+ );
+ break;
+ }
}
//----------------------------------------------------------- sending html code
diff --git a/admin/include/configuration_watermark_process.inc.php b/admin/include/configuration_watermark_process.inc.php
new file mode 100644
index 000000000..d3dcc0f67
--- /dev/null
+++ b/admin/include/configuration_watermark_process.inc.php
@@ -0,0 +1,172 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | Piwigo - a PHP based photo gallery |
+// +-----------------------------------------------------------------------+
+// | Copyright(C) 2008-2012 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
+// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
+// +-----------------------------------------------------------------------+
+// | 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 |
+// | |
+// | 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA. |
+// +-----------------------------------------------------------------------+
+
+if( !defined("PHPWG_ROOT_PATH") )
+{
+ die ("Hacking attempt!");
+}
+
+$errors = array();
+$pwatermark = $_POST['w'];
+
+// step 1 - sanitize HTML input
+switch ($pwatermark['position'])
+{
+ case 'topleft':
+ {
+ $pwatermark['xpos'] = 0;
+ $pwatermark['ypos'] = 0;
+ break;
+ }
+ case 'topright':
+ {
+ $pwatermark['xpos'] = 100;
+ $pwatermark['ypos'] = 0;
+ break;
+ }
+ case 'middle':
+ {
+ $pwatermark['xpos'] = 50;
+ $pwatermark['ypos'] = 50;
+ break;
+ }
+ case 'bottomleft':
+ {
+ $pwatermark['xpos'] = 0;
+ $pwatermark['ypos'] = 100;
+ break;
+ }
+ case 'bottomright':
+ {
+ $pwatermark['xpos'] = 100;
+ $pwatermark['ypos'] = 100;
+ break;
+ }
+}
+
+// step 2 - check validity
+$v = intval($pwatermark['xpos']);
+if ($v < 0 or $v > 100)
+{
+ $errors['watermark']['xpos'] = '[0..100]';
+}
+
+$v = intval($pwatermark['ypos']);
+if ($v < 0 or $v > 100)
+{
+ $errors['watermark']['ypos'] = '[0..100]';
+}
+
+$v = intval($pwatermark['opacity']);
+if ($v <= 0 or $v > 100)
+{
+ $errors['watermark']['opacity'] = '(0..100]';
+}
+
+// step 3 - save data
+if (count($errors)==0)
+{
+ $watermark = new WatermarkParams();
+ $watermark->file = $pwatermark['file'];
+ $watermark->xpos = intval($pwatermark['xpos']);
+ $watermark->ypos = intval($pwatermark['ypos']);
+ $watermark->xrepeat = intval($pwatermark['xrepeat']);
+ $watermark->opacity = intval($pwatermark['opacity']);
+ $watermark->min_size = array(intval($pwatermark['minw']),intval($pwatermark['minh']));
+
+ $old_watermark = ImageStdParams::get_watermark();
+ $watermark_changed =
+ $watermark->file != $old_watermark->file
+ || $watermark->xpos != $old_watermark->xpos
+ || $watermark->ypos != $old_watermark->ypos
+ || $watermark->xrepeat != $old_watermark->xrepeat
+ || $watermark->opacity != $old_watermark->opacity;
+
+ // do we have to regenerate the derivatives?
+ $old_enabled = ImageStdParams::get_defined_type_map();
+ // $disabled = @unserialize( @$conf['disabled_derivatives'] );
+ // if ($disabled===false)
+ // {
+ // $disabled = array();
+ // }
+
+ // save the new watermark configuration
+ ImageStdParams::set_watermark($watermark);
+
+ $new_enabled = ImageStdParams::get_defined_type_map();
+
+ $changed_types = array();
+
+ foreach(ImageStdParams::get_all_types() as $type)
+ {
+ if (isset($old_enabled[$type]))
+ {
+ $old_params = $old_enabled[$type];
+ // echo '<pre>old '.$type."\n"; print_r($old_params); echo '</pre>';
+
+ $new_params = $new_enabled[$type];
+ ImageStdParams::apply_global($new_params);
+ // echo '<pre>new '.$type."\n"; print_r($old_params); echo '</pre>';
+
+ $same = true;
+
+ if ($new_params->use_watermark != $old_params->use_watermark
+ or $new_params->use_watermark and $watermark_changed)
+ {
+ $same = false;
+ }
+
+ if (!$same)
+ {
+ $new_params->last_mod_time = time();
+ $changed_types[] = $type;
+ }
+ else
+ {
+ $new_params->last_mod_time = $old_params->last_mod_time;
+ }
+ $new_enabled[$type] = $new_params;
+ }
+ }
+
+ $enabled_by = array(); // keys ordered by all types
+ foreach(ImageStdParams::get_all_types() as $type)
+ {
+ if (isset($new_enabled[$type]))
+ {
+ $enabled_by[$type] = $new_enabled[$type];
+ }
+ }
+ ImageStdParams::set_and_save($enabled_by);
+
+ if (count($changed_types))
+ {
+ clear_derivative_cache($changed_types);
+ }
+}
+else
+{
+ $template->assign('watermark', $pwatermark);
+ $template->assign('ferrors', $errors);
+}
+?> \ No newline at end of file
diff --git a/admin/themes/default/template/configuration.tpl b/admin/themes/default/template/configuration.tpl
index 631423d3a..288e9f9ff 100644
--- a/admin/themes/default/template/configuration.tpl
+++ b/admin/themes/default/template/configuration.tpl
@@ -450,6 +450,95 @@ input[type="text"].dError {border-color:#ff7070; background-color:#FFe5e5;}
</fieldset>
{/if}
+{if isset($watermark)}
+
+{footer_script}{literal}
+jQuery(document).ready(function() {
+
+ if (jQuery("input[name='w[position]']:checked").val() == 'custom') {
+ jQuery("#positionCustomDetails").show();
+ }
+
+ jQuery("input[name='w[position]']").change(function(){
+ if (jQuery(this).val() == 'custom') {
+ jQuery("#positionCustomDetails").show();
+ }
+ else {
+ jQuery("#positionCustomDetails").hide();
+ }
+ });
+});
+{/literal}{/footer_script}
+
+
+<fieldset id="watermarkConf">
+ <legend></legend>
+ <ul>
+ <li>
+ <label>{'Select a file'|@translate}</label>
+ <select name="w[file]" id="wSelect">
+ {html_options options=$watermark_files selected=$watermark.file}
+ </select>
+ <br>{'... or '|@translate}<a href="#" class="addWatermarkOpen" title="{'add a new watermark'|@translate}">{'add a new watermark'|@translate}</a>
+ </li>
+
+{*
+<p><img id="wImg"></img></p>
+*}
+
+ <li>
+ <label>
+ {'Apply watermark if width is bigger than'|@translate}
+ <input size="4" maxlength="4" type="text" name="w[minw]" value="{$watermark.minw}"{if isset($ferrors.watermark.minw)}class="dError"{/if}>
+ </label>
+ {'pixels'|@translate}
+ </li>
+
+ <li>
+ <label>
+ {'Apply watermark if height is bigger than'|@translate}
+ <input size="4" maxlength="4" type="text" name="w[minh]" value="{$watermark.minh}"{if isset($ferrors.watermark.minh)}class="dError"{/if}>
+ </label>
+ {'pixels'|@translate}
+ </li>
+
+ <li>
+ <label>{'Position'|@translate}</label>
+ <br>
+ <div id="watermarkPositionBox">
+ <label class="right">{'top right corner'|@translate} <input name="w[position]" type="radio" value="topright"{if $watermark.position eq 'topright'} checked="checked"{/if}></label>
+ <label><input name="w[position]" type="radio" value="topleft"{if $watermark.position eq 'topleft'} checked="checked"{/if}> {'top left corner'|@translate}</label>
+ <label class="middle"><input name="w[position]" type="radio" value="middle"{if $watermark.position eq 'middle'} checked="checked"{/if}> {'middle'|@translate}</label>
+ <label class="right">{'bottom right corner'|@translate} <input name="w[position]" type="radio" value="bottomright"{if $watermark.position eq 'bottomright'} checked="checked"{/if}></label>
+ <label><input name="w[position]" type="radio" value="bottomleft"{if $watermark.position eq 'bottomleft'} checked="checked"{/if}> {'bottom left corner'|@translate}</label>
+ </div>
+ <label style="display:block;margin-top:10px;font-weight:normal;"><input name="w[position]" type="radio" value="custom"{if $watermark.position eq 'custom'} checked="checked"{/if}> {'custom'|@translate}</label>
+ <div id="positionCustomDetails">
+ <label>{'X Position'|@translate}
+ <input size="3" maxlength="3" type="text" name="w[xpos]" value="{$watermark.xpos}"{if isset($ferrors.watermark.xpos)}class="dError"{/if}>%
+ </label>
+
+ <br>
+ <label>{'Y Position'|@translate}
+ <input size="3" maxlength="3" type="text" name="w[ypos]" value="{$watermark.ypos}"{if isset($ferrors.watermark.ypos)}class="dError"{/if}>%
+ </label>
+
+ <br>
+ <label>{'X Repeat'|@translate}
+ <input size="3" maxlength="3" type="text" name="w[xrepeat]" value="{$watermark.xrepeat}"{if isset($ferrors.watermark.xrepeat)}class="dError"{/if}>
+ </label>
+ </div>
+ </li>
+
+ <li>
+ <label>{'Opacity'|@translate}</label>
+ <input size="3" maxlength="3" type="text" name="w[opacity]" value="{$watermark.opacity}"{if isset($ferrors.watermark.opacity)}class="dError"{/if}> %
+ </li>
+ </ul>
+</fieldset>
+
+{/if} {* end of watermark section *}
+
{if isset($display)}
<fieldset id="indexDisplayConf">
<legend>{'Main Page'|@translate}</legend>
diff --git a/admin/themes/default/theme.css b/admin/themes/default/theme.css
index da92075c5..bf9013184 100644
--- a/admin/themes/default/theme.css
+++ b/admin/themes/default/theme.css
@@ -471,7 +471,7 @@ FORM.properties SPAN.property {
padding: 0 0.5em 0 0;
}
-#mainConf, #historyConf, #commentsConf {border:none}
+#mainConf, #historyConf, #commentsConf, #watermarkConf {border:none}
#configContent label {
font-weight: bold;
@@ -1075,4 +1075,36 @@ FORM#categoryOrdering .categoryLi:hover p.albumActions {visibility:visible;}
#autoOrder p.actionButtons, #createAlbum p.actionButtons {margin-bottom:0;}
#ftpPage p {text-align:left;margin:1em;}
-#ftpPage fieldset p {margin:0;} \ No newline at end of file
+#ftpPage fieldset p {margin:0;}
+
+/* watermark configuration screen */
+#watermarkPositionBox {
+ border:2px solid #ccc;
+ width:500px;
+ padding:5px;
+ background-color:#e5e5e5;
+}
+
+#watermarkPositionBox label {
+ font-weight:normal;
+ display:block;
+ color:#444;
+}
+
+#watermarkPositionBox label.middle {
+ margin:50px;
+ text-align:center;
+}
+
+#watermarkPositionBox label.right {
+ float:right;
+}
+
+#positionCustomDetails {
+ margin-left:20px;
+ display:none;
+}
+
+#positionCustomDetails label {
+ font-weight:normal;
+} \ No newline at end of file