is_photo()) { $path = $photo->file_path(); $size = getimagesize($photo->file_path(), $info); if (is_array($info) && !empty($info["APP13"])) { $iptc = iptcparse($info["APP13"]); if (!empty($iptc["2#025"])) { foreach($iptc["2#025"] as $tag) { $tag = str_replace("\0", "", $tag); foreach (explode(",", $tag) as $word) { $word = trim($word); $word = encoding::convert_to_utf8($word); $tags[$word] = 1; } } } } } // @todo figure out how to read the keywords from xmp foreach(array_keys($tags) as $tag) { try { tag::add($photo, $tag); } catch (Exception $e) { Kohana_Log::add("error", "Error adding tag: $tag\n" . $e->getMessage() . "\n" . $e->getTraceAsString()); } } return; } static function item_deleted($item) { tag::clear_all($item); if (!batch::in_progress()) { tag::compact(); } } static function batch_complete() { tag::compact(); } static function item_edit_form($item, $form) { $tag_names = array(); foreach (tag::item_tags($item) as $tag) { $tag_names[] = $tag->name; } $form->edit_item->input("tags")->label(t("Tags (comma separated)")) ->value(implode(", ", $tag_names)); $form->script("")->text(self::_get_autocomplete_js()); } static function item_edit_form_completed($item, $form) { tag::clear_all($item); foreach (explode(",", $form->edit_item->tags->value) as $tag_name) { if ($tag_name) { tag::add($item, trim($tag_name)); } } module::event("item_related_update", $item); tag::compact(); } static function admin_menu($menu, $theme) { $menu->get("content_menu") ->append(Menu::factory("link") ->id("tags") ->label(t("Tags")) ->url(url::site("admin/tags"))); } static function item_index_data($item, $data) { foreach (tag::item_tags($item) as $tag) { $data[] = $tag->name; } } static function add_photos_form($album, $form) { $group = $form->add_photos; $group->input("tags") ->label(t("Add tags to all uploaded files")) ->value(""); $group->script("")->text(self::_get_autocomplete_js()); } static function add_photos_form_completed($item, $form) { $group = $form->add_photos; foreach (explode(",", $group->tags->value) as $tag_name) { $tag_name = trim($tag_name); if ($tag_name) { $tag = tag::add($item, $tag_name); } } } static function info_block_get_metadata($block, $item) { $tags = array(); foreach (tag::item_tags($item) as $tag) { $tags[] = "url()}\">" . html::clean($tag->name) . ""; } if ($tags) { $info = $block->content->metadata; $info["tags"] = array( "label" => t("Tags:"), "value" => implode(", ", $tags) ); $block->content->metadata = $info; } } private static function _get_autocomplete_js() { $url = url::site("tags/autocomplete"); return "$('input[name=\"tags\"]').gallery_autocomplete('$url', {multiple: true});"; } }