mirror of
https://github.com/Pathduck/gallery3.git
synced 2026-07-14 02:50:13 -04:00
Merge branch 'master' of github.com:gallery/gallery3
This commit is contained in:
@@ -88,8 +88,8 @@ CREATE TABLE {graphics_rules} (
|
||||
PRIMARY KEY (`id`)
|
||||
) AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
INSERT INTO {graphics_rules} VALUES (1,1,'a:3:{s:5:\"width\";i:200;s:6:\"height\";i:200;s:6:\"master\";i:2;}','gallery','resize',100,'thumb');
|
||||
INSERT INTO {graphics_rules} VALUES (2,1,'a:3:{s:5:\"width\";i:640;s:6:\"height\";i:480;s:6:\"master\";i:2;}','gallery','resize',100,'resize');
|
||||
INSERT INTO {graphics_rules} VALUES (1,1,'a:3:{s:5:\"width\";i:200;s:6:\"height\";i:200;s:6:\"master\";i:2;}','gallery','gallery_graphics::resize',100,'thumb');
|
||||
INSERT INTO {graphics_rules} VALUES (2,1,'a:3:{s:5:\"width\";i:640;s:6:\"height\";i:480;s:6:\"master\";i:2;}','gallery','gallery_graphics::resize',100,'resize');
|
||||
DROP TABLE IF EXISTS {groups};
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
@@ -228,7 +228,7 @@ CREATE TABLE {modules} (
|
||||
UNIQUE KEY `name` (`name`)
|
||||
) AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
INSERT INTO {modules} VALUES (1,1,'gallery',12);
|
||||
INSERT INTO {modules} VALUES (1,1,'gallery',14);
|
||||
INSERT INTO {modules} VALUES (2,1,'user',1);
|
||||
INSERT INTO {modules} VALUES (3,1,'comment',2);
|
||||
INSERT INTO {modules} VALUES (4,1,'organize',1);
|
||||
@@ -331,8 +331,8 @@ CREATE TABLE {themes} (
|
||||
UNIQUE KEY `name` (`name`)
|
||||
) AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
INSERT INTO {themes} VALUES (1,'default',1);
|
||||
INSERT INTO {themes} VALUES (2,'admin_default',1);
|
||||
INSERT INTO {themes} VALUES (1,'wind',1);
|
||||
INSERT INTO {themes} VALUES (2,'admin_wind',1);
|
||||
DROP TABLE IF EXISTS {users};
|
||||
SET @saved_cs_client = @@character_set_client;
|
||||
SET character_set_client = utf8;
|
||||
@@ -368,8 +368,8 @@ CREATE TABLE {vars} (
|
||||
UNIQUE KEY `module_name` (`module_name`,`name`)
|
||||
) AUTO_INCREMENT=28 DEFAULT CHARSET=utf8;
|
||||
SET character_set_client = @saved_cs_client;
|
||||
INSERT INTO {vars} VALUES (1,'gallery','active_site_theme','default');
|
||||
INSERT INTO {vars} VALUES (2,'gallery','active_admin_theme','admin_default');
|
||||
INSERT INTO {vars} VALUES (1,'gallery','active_site_theme','wind');
|
||||
INSERT INTO {vars} VALUES (2,'gallery','active_admin_theme','admin_wind');
|
||||
INSERT INTO {vars} VALUES (3,'gallery','page_size','9');
|
||||
INSERT INTO {vars} VALUES (4,'gallery','thumb_size','200');
|
||||
INSERT INTO {vars} VALUES (5,'gallery','resize_size','640');
|
||||
|
||||
@@ -35,9 +35,9 @@ class Admin_Theme_Options_Controller extends Admin_Controller {
|
||||
$thumb_size = $form->edit_theme->thumb_size->value;
|
||||
$thumb_dirty = false;
|
||||
if (module::get_var("gallery", "thumb_size") != $thumb_size) {
|
||||
graphics::remove_rule("gallery", "thumb", "resize");
|
||||
graphics::remove_rule("gallery", "thumb", "gallery_graphics::resize");
|
||||
graphics::add_rule(
|
||||
"gallery", "thumb", "resize",
|
||||
"gallery", "thumb", "gallery_graphics::resize",
|
||||
array("width" => $thumb_size, "height" => $thumb_size, "master" => Image::AUTO),
|
||||
100);
|
||||
module::set_var("gallery", "thumb_size", $thumb_size);
|
||||
@@ -46,9 +46,9 @@ class Admin_Theme_Options_Controller extends Admin_Controller {
|
||||
$resize_size = $form->edit_theme->resize_size->value;
|
||||
$resize_dirty = false;
|
||||
if (module::get_var("gallery", "resize_size") != $resize_size) {
|
||||
graphics::remove_rule("gallery", "resize", "resize");
|
||||
graphics::remove_rule("gallery", "resize", "gallery_graphics::resize");
|
||||
graphics::add_rule(
|
||||
"gallery", "resize", "resize",
|
||||
"gallery", "resize", "gallery_graphics::resize",
|
||||
array("width" => $resize_size, "height" => $resize_size, "master" => Image::AUTO),
|
||||
100);
|
||||
module::set_var("gallery", "resize_size", $resize_size);
|
||||
|
||||
@@ -51,4 +51,59 @@ class gallery_graphics_Core {
|
||||
|
||||
module::event("graphics_resize_completed", $input_file, $output_file, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Overlay an image on top of the input file.
|
||||
*
|
||||
* Valid options are: file, mime_type, position, transparency_percent, padding
|
||||
*
|
||||
* Valid positions: northwest, north, northeast,
|
||||
* west, center, east,
|
||||
* southwest, south, southeast
|
||||
*
|
||||
* padding is in pixels
|
||||
*
|
||||
* @param string $input_file
|
||||
* @param string $output_file
|
||||
* @param array $options
|
||||
*/
|
||||
static function composite($input_file, $output_file, $options) {
|
||||
try {
|
||||
graphics::init_toolkit();
|
||||
|
||||
module::event("graphics_composite", $input_file, $output_file, $options);
|
||||
|
||||
list ($width, $height) = getimagesize($input_file);
|
||||
list ($w_width, $w_height) = getimagesize($options["file"]);
|
||||
|
||||
$pad = isset($options["padding"]) ? $options["padding"] : 10;
|
||||
$top = $pad;
|
||||
$left = $pad;
|
||||
$y_center = max($height / 2 - $w_height / 2, $pad);
|
||||
$x_center = max($width / 2 - $w_width / 2, $pad);
|
||||
$bottom = max($height - $w_height - $pad, $pad);
|
||||
$right = max($width - $w_width - $pad, $pad);
|
||||
|
||||
switch ($options["position"]) {
|
||||
case "northwest": $x = $left; $y = $top; break;
|
||||
case "north": $x = $x_center; $y = $top; break;
|
||||
case "northeast": $x = $right; $y = $top; break;
|
||||
case "west": $x = $left; $y = $y_center; break;
|
||||
case "center": $x = $x_center; $y = $y_center; break;
|
||||
case "east": $x = $right; $y = $y_center; break;
|
||||
case "southwest": $x = $left; $y = $bottom; break;
|
||||
case "south": $x = $x_center; $y = $bottom; break;
|
||||
case "southeast": $x = $right; $y = $bottom; break;
|
||||
}
|
||||
|
||||
Image::factory($input_file)
|
||||
->composite($options["file"], $x, $y, $options["transparency"])
|
||||
->quality(module::get_var("gallery", "image_quality"))
|
||||
->save($output_file);
|
||||
|
||||
module::event("graphics_composite_completed", $input_file, $output_file, $options);
|
||||
} catch (ErrorException $e) {
|
||||
Kohana::log("error", $e->get_message());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -235,16 +235,16 @@ class gallery_installer {
|
||||
|
||||
// Add rules for generating our thumbnails and resizes
|
||||
graphics::add_rule(
|
||||
"gallery", "thumb", "resize",
|
||||
"gallery", "thumb", "gallery_graphics::resize",
|
||||
array("width" => 200, "height" => 200, "master" => Image::AUTO),
|
||||
100);
|
||||
graphics::add_rule(
|
||||
"gallery", "resize", "resize",
|
||||
"gallery", "resize", "gallery_graphics::resize",
|
||||
array("width" => 640, "height" => 480, "master" => Image::AUTO),
|
||||
100);
|
||||
|
||||
// Instantiate default themes (site and admin)
|
||||
foreach (array("default", "admin_default") as $theme_name) {
|
||||
foreach (array("wind", "admin_wind") as $theme_name) {
|
||||
$theme_info = new ArrayObject(parse_ini_file(THEMEPATH . $theme_name . "/theme.info"),
|
||||
ArrayObject::ARRAY_AS_PROPS);
|
||||
$theme = ORM::factory("theme");
|
||||
@@ -268,7 +268,7 @@ class gallery_installer {
|
||||
module::set_var("gallery", "show_credits", 1);
|
||||
// @todo this string needs to be picked up by l10n_scanner
|
||||
module::set_var("gallery", "credits", "Powered by <a href=\"%url\">Gallery %version</a>");
|
||||
module::set_version("gallery", 13);
|
||||
module::set_version("gallery", 14);
|
||||
}
|
||||
|
||||
static function upgrade($version) {
|
||||
@@ -375,6 +375,13 @@ class gallery_installer {
|
||||
module::set_version("gallery", $version = 13);
|
||||
}
|
||||
|
||||
if ($version == 13) {
|
||||
// Add rules for generating our thumbnails and resizes
|
||||
Database::instance()->query("update g3_graphics_rules g
|
||||
set operation=concat(\"gallery_graphics::\", g.operation);");
|
||||
module::set_version("gallery", $version = 14);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static function uninstall() {
|
||||
|
||||
@@ -48,11 +48,13 @@ class gallery_task_Core {
|
||||
$errors = array();
|
||||
try {
|
||||
$result = graphics::find_dirty_images_query();
|
||||
$total_count = $task->get("total_count", -1);
|
||||
if ($total_count < 0) {
|
||||
$total_count = $result->count();
|
||||
$total_count = $task->get("total_count", $result->count());
|
||||
$mode = $task->get("mode", "init");
|
||||
if ($mode == "init") {
|
||||
$task->set("total_count", $total_count);
|
||||
$task->get("mode", "process");
|
||||
}
|
||||
|
||||
$completed = $task->get("completed", 0);
|
||||
$ignored = $task->get("ignored", array());
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
*/
|
||||
class graphics_Core {
|
||||
private static $init;
|
||||
private static $_rules_cache = array();
|
||||
|
||||
/**
|
||||
* Add a new graphics rule.
|
||||
@@ -26,7 +27,7 @@ class graphics_Core {
|
||||
* Rules are applied to targets (thumbnails and resizes) in priority order. Rules are functions
|
||||
* in the graphics class. So for example, the following rule:
|
||||
*
|
||||
* graphics::add_rule("gallery", "thumb", "resize",
|
||||
* graphics::add_rule("gallery", "thumb", "gallery_graphics::resize",
|
||||
* array("width" => 200, "height" => 200, "master" => Image::AUTO), 100);
|
||||
*
|
||||
* Specifies that "gallery" is adding a rule to resize thumbnails down to a max of 200px on
|
||||
@@ -35,7 +36,7 @@ class graphics_Core {
|
||||
*
|
||||
* @param string $module_name the module that added the rule
|
||||
* @param string $target the target for this operation ("thumb" or "resize")
|
||||
* @param string $operation the name of the operation
|
||||
* @param string $operation the name of the operation (<defining class>::method)
|
||||
* @param array $args arguments to the operation
|
||||
* @param integer $priority the priority for this rule (lower priorities are run first)
|
||||
*/
|
||||
@@ -56,7 +57,7 @@ class graphics_Core {
|
||||
* Remove any matching graphics rules
|
||||
* @param string $module_name the module that added the rule
|
||||
* @param string $target the target for this operation ("thumb" or "resize")
|
||||
* @param string $operation the name of the operation
|
||||
* @param string $operation the name of the operation(<defining class>::method)
|
||||
*/
|
||||
static function remove_rule($module_name, $target, $operation) {
|
||||
ORM::factory("graphics_rule")
|
||||
@@ -146,13 +147,9 @@ class graphics_Core {
|
||||
$working_file = $input_file;
|
||||
}
|
||||
|
||||
foreach (ORM::factory("graphics_rule")
|
||||
->where("target", $target)
|
||||
->where("active", true)
|
||||
->orderby("priority", "asc")
|
||||
->find_all() as $rule) {
|
||||
foreach (self::_get_rules($target) as $rule) {
|
||||
$args = array($working_file, $output_file, unserialize($rule->args));
|
||||
call_user_func_array(array("{$rule->module_name}_graphics", $rule->operation), $args);
|
||||
call_user_func_array($rule->operation, $args);
|
||||
$working_file = $output_file;
|
||||
}
|
||||
}
|
||||
@@ -180,6 +177,21 @@ class graphics_Core {
|
||||
}
|
||||
}
|
||||
|
||||
private static function _get_rules($target) {
|
||||
if (empty(self::$_rules_cache[$target])) {
|
||||
$rules = array();
|
||||
foreach (ORM::factory("graphics_rule")
|
||||
->where("target", $target)
|
||||
->where("active", true)
|
||||
->orderby("priority", "asc")
|
||||
->find_all() as $rule) {
|
||||
$rules[] = (object)$rule->as_array();
|
||||
}
|
||||
self::$_rules_cache[$target] = $rules;
|
||||
}
|
||||
return self::$_rules_cache[$target];
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotate an image. Valid options are degrees
|
||||
*
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
name = "Gallery 3"
|
||||
description = "Gallery core application"
|
||||
version = 13
|
||||
version = 14
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
</ul>
|
||||
|
||||
<div id="g-uploadqueue-infobar">
|
||||
<?= t("Upload Queue") ?>
|
||||
<?= t("Upload Queue") ?>
|
||||
<span id="g-uploadstatus"></span>
|
||||
<a id="g-cancelupload" title="<?= t("Cancel all the pending uploads")->for_html_attr() ?>" onclick="swfu.cancelQueue();"><?= t("cancel") ?></a>
|
||||
</div>
|
||||
@@ -40,7 +40,7 @@
|
||||
<div id="gAddPhotosQueue"></div>
|
||||
<div id="gEditPhotosQueue"></div>
|
||||
</div>
|
||||
<span id="gChooseFilesButtonPlaceholder"></span>
|
||||
<span id="gChooseFilesButtonPlaceholder"></span>
|
||||
|
||||
<!-- Proxy the done request back to our form, since its been ajaxified -->
|
||||
<button class="ui-state-default ui-corner-all" onclick="$('#gAddPhotosForm').submit()">
|
||||
@@ -72,7 +72,7 @@
|
||||
button_text: <?= json_encode('<span class="swfUploadFont">' . t("Select photos...") . '</span>') ?>,
|
||||
button_text_style: ".swfUploadFont { color: #2E6E9E; font-size: 16px; font-family: Lucida Grande,Lucida Sans,Arial,sans-serif; font-weight: bold; }",
|
||||
button_text_left_padding: 30,
|
||||
button_text_right_padding: 30,
|
||||
button_text_right_padding: 30,
|
||||
button_text_top_padding: 10,
|
||||
|
||||
// The event handler functions are defined in handlers.js
|
||||
@@ -164,11 +164,11 @@
|
||||
fp.title.html(file.name);
|
||||
fp.set_status("uploading", <?= t("Uploading...")->for_js() ?>);
|
||||
$("#gAddPhotosCanvas").scrollTo(fp.box, 1000);
|
||||
|
||||
// move file select button
|
||||
$("#SWFUpload_0").css({'left': '0', 'top': '0'});
|
||||
swfu.setButtonText(<?= json_encode('<span class="swfUploadFont">' . t("Select more photos...") . '</span>') ?>);
|
||||
|
||||
|
||||
// move file select button
|
||||
$("#SWFUpload_0").css({'left': '0', 'top': '0'});
|
||||
swfu.setButtonText(<?= json_encode('<span class="swfUploadFont">' . t("Select more photos...") . '</span>') ?>);
|
||||
|
||||
return true;
|
||||
// @todo add cancel button to call this.cancelUpload(file.id)
|
||||
}
|
||||
|
||||
@@ -138,7 +138,7 @@ class Admin_Watermarks_Controller extends Admin_Controller {
|
||||
if ($name = module::get_var("watermark", "name")) {
|
||||
foreach (array("thumb", "resize") as $target) {
|
||||
graphics::add_rule(
|
||||
"watermark", $target, "composite",
|
||||
"watermark", $target, "gallery_graphics::composite",
|
||||
array("file" => VARPATH . "modules/watermark/$name",
|
||||
"width" => module::get_var("watermark", "width"),
|
||||
"height" => module::get_var("watermark", "height"),
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
<?php defined("SYSPATH") or die("No direct script access.");
|
||||
/**
|
||||
* Gallery - a web based photo album viewer and editor
|
||||
* Copyright (C) 2000-2009 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 watermark_graphics_Core {
|
||||
/**
|
||||
* Overlay an image on top of the input file.
|
||||
*
|
||||
* Valid options are: file, mime_type, position, transparency_percent, padding
|
||||
*
|
||||
* Valid positions: northwest, north, northeast,
|
||||
* west, center, east,
|
||||
* southwest, south, southeast
|
||||
*
|
||||
* padding is in pixels
|
||||
*
|
||||
* @param string $input_file
|
||||
* @param string $output_file
|
||||
* @param array $options
|
||||
*/
|
||||
static function composite($input_file, $output_file, $options) {
|
||||
try {
|
||||
graphics::init_toolkit();
|
||||
|
||||
module::event("graphics_composite", $input_file, $output_file, $options);
|
||||
|
||||
list ($width, $height) = getimagesize($input_file);
|
||||
list ($w_width, $w_height) = getimagesize($options["file"]);
|
||||
|
||||
$pad = isset($options["padding"]) ? $options["padding"] : 10;
|
||||
$top = $pad;
|
||||
$left = $pad;
|
||||
$y_center = max($height / 2 - $w_height / 2, $pad);
|
||||
$x_center = max($width / 2 - $w_width / 2, $pad);
|
||||
$bottom = max($height - $w_height - $pad, $pad);
|
||||
$right = max($width - $w_width - $pad, $pad);
|
||||
|
||||
switch ($options["position"]) {
|
||||
case "northwest": $x = $left; $y = $top; break;
|
||||
case "north": $x = $x_center; $y = $top; break;
|
||||
case "northeast": $x = $right; $y = $top; break;
|
||||
case "west": $x = $left; $y = $y_center; break;
|
||||
case "center": $x = $x_center; $y = $y_center; break;
|
||||
case "east": $x = $right; $y = $y_center; break;
|
||||
case "southwest": $x = $left; $y = $bottom; break;
|
||||
case "south": $x = $x_center; $y = $bottom; break;
|
||||
case "southeast": $x = $right; $y = $bottom; break;
|
||||
}
|
||||
|
||||
Image::factory($input_file)
|
||||
->composite($options["file"], $x, $y, $options["transparency"])
|
||||
->quality(module::get_var("gallery", "image_quality"))
|
||||
->save($output_file);
|
||||
|
||||
module::event("graphics_composite_completed", $input_file, $output_file, $options);
|
||||
} catch (ErrorException $e) {
|
||||
Kohana::log("error", $e->get_message());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,3 @@
|
||||
name = "Watermarks"
|
||||
description = "Allows users to watermark their photos"
|
||||
version = 1
|
||||
version = 2
|
||||
|
||||
Reference in New Issue
Block a user