diff --git a/modules/keeporiginal/helpers/graphics.php b/modules/keeporiginal/helpers/graphics.php deleted file mode 100644 index 6f22d23e..00000000 --- a/modules/keeporiginal/helpers/graphics.php +++ /dev/null @@ -1,423 +0,0 @@ - 200, "height" => 200, "master" => Image::AUTO), 100); - * - * Specifies that "gallery" is adding a rule to resize thumbnails down to a max of 200px on - * the longest side. The gallery module adds default rules at a priority of 100. You can set - * higher and lower priorities to perform operations before or after this fires. - * - * @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 array $args arguments to the operation - * @param integer $priority the priority for this rule (lower priorities are run first) - */ - static function add_rule($module_name, $target, $operation, $args, $priority) { - $rule = ORM::factory("graphics_rule"); - $rule->module_name = $module_name; - $rule->target = $target; - $rule->operation = $operation; - $rule->priority = $priority; - $rule->args = serialize($args); - $rule->active = true; - $rule->save(); - - self::mark_dirty($target == "thumb", $target == "resize"); - } - - /** - * 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 - */ - static function remove_rule($module_name, $target, $operation) { - ORM::factory("graphics_rule") - ->where("module_name", $module_name) - ->where("target", $target) - ->where("operation", $operation) - ->delete_all(); - - self::mark_dirty($target == "thumb", $target == "resize"); - } - - /** - * Remove all rules for this module - * @param string $module_name - */ - static function remove_rules($module_name) { - $status = Database::instance()->delete("graphics_rules", array("module_name" => $module_name)); - if (count($status)) { - self::mark_dirty(true, true); - } - } - - /** - * Activate the rules for this module, typically done when the module itself is deactivated. - * Note that this does not mark images as dirty so that if you deactivate and reactivate a - * module it won't cause all of your images to suddenly require a rebuild. - */ - static function activate_rules($module_name) { - Database::instance() - ->update("graphics_rules",array("active" => true), array("module_name" => $module_name)); - } - - /** - * Deactivate the rules for this module, typically done when the module itself is deactivated. - * Note that this does not mark images as dirty so that if you deactivate and reactivate a - * module it won't cause all of your images to suddenly require a rebuild. - */ - static function deactivate_rules($module_name) { - Database::instance() - ->update("graphics_rules",array("active" => false), array("module_name" => $module_name)); - } - - /** - * Rebuild the thumb and resize for the given item. - * @param Item_Model $item - * @return true on successful generation - */ - static function generate($item) { - if ($item->is_album()) { - if (!$cover = $item->album_cover()) { - return false; - } - $input_file = $cover->file_path(); - $input_item = $cover; - } else { - $input_file = $item->file_path(); - $input_item = $item; - } - - if ($item->thumb_dirty) { - $ops["thumb"] = $item->thumb_path(); - } - if ($item->resize_dirty && !$item->is_album() && !$item->is_movie()) { - $ops["resize"] = $item->resize_path(); - } - - if (empty($ops)) { - $item->thumb_dirty = 0; - $item->resize_dirty = 0; - $item->save(); - return true; - } - - try { - foreach ($ops as $target => $output_file) { - if ($input_item->is_movie()) { - // Convert the movie to a JPG first - $output_file = preg_replace("/...$/", "jpg", $output_file); - try { - movie::extract_frame($input_file, $output_file); - } catch (Exception $e) { - // Assuming this is MISSING_FFMPEG for now - copy(MODPATH . "gallery/images/missing_movie.png", $output_file); - } - $working_file = $output_file; - } else { - $working_file = $input_file; - } - - foreach (ORM::factory("graphics_rule") - ->where("target", $target) - ->where("active", true) - ->orderby("priority", "asc") - ->find_all() as $rule) { - $args = array($working_file, $output_file, unserialize($rule->args)); - call_user_func_array(array("graphics", $rule->operation), $args); - $working_file = $output_file; - } - } - - if (!empty($ops["thumb"])) { - $dims = getimagesize($item->thumb_path()); - $item->thumb_width = $dims[0]; - $item->thumb_height = $dims[1]; - $item->thumb_dirty = 0; - } - - if (!empty($ops["resize"])) { - $dims = getimagesize($item->resize_path()); - $item->resize_width = $dims[0]; - $item->resize_height = $dims[1]; - $item->resize_dirty = 0; - } - $item->save(); - } catch (Exception $e) { - // Something went wrong rebuilding the image. Leave it dirty and move on. - // @todo we should handle this better. - Kohana::log("error", "Caught exception rebuilding image: {$item->title}\n" . - $e->getMessage() . "\n" . $e->getTraceAsString()); - return false; - } - - return true; - } - - /** - * Resize an image. Valid options are width, height and master. Master is one of the Image - * master dimension constants. - * - * @param string $input_file - * @param string $output_file - * @param array $options - */ - static function resize($input_file, $output_file, $options) { - if (!self::$init) { - self::init_toolkit(); - } - - if (@filesize($input_file) == 0) { - throw new Exception("@todo EMPTY_INPUT_FILE"); - } - - $dims = getimagesize($input_file); - if (max($dims[0], $dims[1]) < min($options["width"], $options["height"])) { - // Image would get upscaled; do nothing - copy($input_file, $output_file); - } else { - Image::factory($input_file) - ->resize($options["width"], $options["height"], $options["master"]) - ->quality(module::get_var("gallery", "image_quality")) - ->save($output_file); - } - } - - /** - * Rotate an image. Valid options are degrees - * - * @param string $input_file - * @param string $output_file - * @param array $options - */ - static function rotate($input_file, $output_file, $options) { - if (!self::$init) { - self::init_toolkit(); - } - - // BEGIN rWatcher MOD: - // If $input_file is located in VARPATH/albums/ then assume its a fullsize photo. - if (strncmp($input_file, VARPATH . "albums/", strlen(VARPATH . "albums/")) == 0) { - // Figure out where the original copy should be stashed at. - $temp_path = str_replace(VARPATH . "albums/", "", $input_file); - $original_image = VARPATH . "original/" . $temp_path; - $individual_dirs = split("[/\]", $temp_path); - // If any original file does not already exist, then create a folder structure - // similar to that found in VARPATH/albums/ and copy the photo over before - // rotating it. - if (!file_exists($original_image)) { - $new_img_path = VARPATH . "original/"; - for($i = 0; $i < count($individual_dirs)-1; $i++) { - $new_img_path = $new_img_path . "/" . $individual_dirs[$i]; - if(!file_exists($new_img_path)) { - @mkdir($new_img_path); - } - } - copy($input_file, $original_image); - } - } - // END rWatcher MOD. - - Image::factory($input_file) - ->quality(module::get_var("gallery", "image_quality")) - ->rotate($options["degrees"]) - ->save($output_file); - } - - /** - * 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) { - if (!self::$init) { - self::init_toolkit(); - } - - 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); - } - - /** - * Return a query result that locates all items with dirty images. - * @return Database_Result Query result - */ - static function find_dirty_images_query() { - return Database::instance()->query( - "SELECT `id` FROM {items} " . - "WHERE ((`thumb_dirty` = 1 AND (`type` <> 'album' OR `album_cover_item_id` IS NOT NULL))" . - " OR (`resize_dirty` = 1 AND `type` = 'photo')) " . - " AND `id` != 1"); - } - - /** - * Mark thumbnails and resizes as dirty. They will have to be rebuilt. - */ - static function mark_dirty($thumbs, $resizes) { - if ($thumbs || $resizes) { - $db = Database::instance(); - $fields = array(); - if ($thumbs) { - $fields["thumb_dirty"] = 1; - } - if ($resizes) { - $fields["resize_dirty"] = 1; - } - $db->update("items", $fields, true); - } - - $count = self::find_dirty_images_query()->count(); - if ($count) { - site_status::warning( - t2("One of your photos is out of date. Click here to fix it", - "%count of your photos are out of date. Click here to fix them", - $count, - array("attrs" => sprintf( - 'href="%s" class="gDialogLink"', - url::site("admin/maintenance/start/gallery_task::rebuild_dirty_images?csrf=__CSRF__")))), - "graphics_dirty"); - } - } - - /** - * Detect which graphics toolkits are available on this system. Return an array of key value - * pairs where the key is one of gd, imagemagick, graphicsmagick and the value is information - * about that toolkit. For GD we return the version string, and for ImageMagick and - * GraphicsMagick we return the path to the directory containing the appropriate binaries. - */ - static function detect_toolkits() { - $gd = function_exists("gd_info") ? gd_info() : array(); - $exec = function_exists("exec"); - if (!isset($gd["GD Version"])) { - $gd["GD Version"] = false; - } - putenv("PATH=" . getenv("PATH") . ":/usr/local/bin:/opt/local/bin:/opt/bin"); - return array("gd" => $gd, - "imagemagick" => $exec ? dirname(exec("which convert")) : false, - "graphicsmagick" => $exec ? dirname(exec("which gm")) : false); - } - - /** - * This needs to be run once, after the initial install, to choose a graphics toolkit. - */ - static function choose_default_toolkit() { - // Detect a graphics toolkit - $toolkits = graphics::detect_toolkits(); - foreach (array("imagemagick", "graphicsmagick", "gd") as $tk) { - if ($toolkits[$tk]) { - module::set_var("gallery", "graphics_toolkit", $tk); - module::set_var("gallery", "graphics_toolkit_path", $tk == "gd" ? "" : $toolkits[$tk]); - break; - } - } - if (!module::get_var("gallery", "graphics_toolkit")) { - site_status::warning( - t("Graphics toolkit missing! Please choose a toolkit", - array("url" => url::site("admin/graphics"))), - "missing_graphics_toolkit"); - } - } - - /** - * Choose which driver the Kohana Image library uses. - */ - static function init_toolkit() { - switch(module::get_var("gallery", "graphics_toolkit")) { - case "gd": - Kohana::config_set("image.driver", "GD"); - break; - - case "imagemagick": - Kohana::config_set("image.driver", "ImageMagick"); - Kohana::config_set( - "image.params.directory", module::get_var("gallery", "graphics_toolkit_path")); - break; - - case "graphicsmagick": - Kohana::config_set("image.driver", "GraphicsMagick"); - Kohana::config_set( - "image.params.directory", module::get_var("gallery", "graphics_toolkit_path")); - break; - } - - self::$init = 1; - } - - /** - * Verify that a specific graphics function is available with the active toolkit. - * @param string $func (eg rotate, resize) - * @return boolean - */ - static function can($func) { - if (module::get_var("gallery", "graphics_toolkit") == "gd" && - $func == "rotate" && - !function_exists("imagerotate")) { - return false; - } - - return true; - } -} diff --git a/modules/keeporiginal/helpers/keeporiginal_event.php b/modules/keeporiginal/helpers/keeporiginal_event.php index 3228c6f2..1d9647da 100644 --- a/modules/keeporiginal/helpers/keeporiginal_event.php +++ b/modules/keeporiginal/helpers/keeporiginal_event.php @@ -18,6 +18,31 @@ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ class keeporiginal_event_Core { + static function graphics_rotate($input_file, $output_file, $options) { + // Make a copy of the original fullsized image before rotating it. + + // If $input_file is located in VARPATH/albums/ then assume its a fullsize photo. + if (strncmp($input_file, VARPATH . "albums/", strlen(VARPATH . "albums/")) == 0) { + // Figure out where the original copy should be stashed at. + $temp_path = str_replace(VARPATH . "albums/", "", $input_file); + $original_image = VARPATH . "original/" . $temp_path; + $individual_dirs = split("[/\]", $temp_path); + // If any original file does not already exist, then create a folder structure + // similar to that found in VARPATH/albums/ and copy the photo over before + // rotating it. + if (!file_exists($original_image)) { + $new_img_path = VARPATH . "original/"; + for($i = 0; $i < count($individual_dirs)-1; $i++) { + $new_img_path = $new_img_path . "/" . $individual_dirs[$i]; + if(!file_exists($new_img_path)) { + @mkdir($new_img_path); + } + } + copy($input_file, $original_image); + } + } + } + static function item_before_delete($item) { // If deleting a photo, make sure the original is deleted as well, if it exists. if ($item->is_photo()) { diff --git a/modules/metadescription/views/metadescription_block.html.php b/modules/metadescription/views/metadescription_block.html.php index 665eb9dc..c4a5cb87 100644 --- a/modules/metadescription/views/metadescription_block.html.php +++ b/modules/metadescription/views/metadescription_block.html.php @@ -11,6 +11,19 @@ } } } + + $metaDescription = ""; + $metaDescription = trim(nl2br(p::purify($item->description))); + // If description is empty, use title instead. + if ($metaDescription == "") { + $metaDescription = p::clean($item->title); + } + // Strip HTML + $metaDescription = strip_tags($metaDescription); + // Strip Line Breaks + $metaDescription = str_replace("\n", " ", $metaDescription); + // Limit Description to 150 characters. + $metaDescription = substr($metaDescription, 0,150); ?> - +