From 7efb4b4cdfba4c0280b18d1980cd8ad011360b87 Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Mon, 27 Jul 2009 15:17:14 -0700 Subject: Remove the unnecessary ORDER BY on $this->sort_column in get_position(), and instead apply an ORDER BY on `id` in the 2nd query so that we have stability among the equal elements. This should result in cheaper (and more sensible) queries. --- modules/gallery/models/item.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'modules') diff --git a/modules/gallery/models/item.php b/modules/gallery/models/item.php index 038e11fb..dcbee991 100644 --- a/modules/gallery/models/item.php +++ b/modules/gallery/models/item.php @@ -399,10 +399,10 @@ class Item_Model extends ORM_MPTT { $db = Database::instance(); $position = $db->query(" SELECT COUNT(*) AS position FROM {items} - WHERE parent_id = {$this->id} + WHERE `parent_id` = {$this->id} AND `{$this->sort_column}` $comp (SELECT `{$this->sort_column}` - FROM {items} WHERE id = $child_id) - ORDER BY `{$this->sort_column}` {$this->sort_order}")->current()->position; + FROM {items} WHERE `id` = $child_id)") + ->current()->position; // We stopped short of our target value in the sort (notice that we're using a < comparator // above) because it's possible that we have duplicate values in the sort column. An @@ -414,9 +414,10 @@ class Item_Model extends ORM_MPTT { // our base value. $result = $db->query(" SELECT id FROM {items} - WHERE parent_id = {$this->id} + WHERE `parent_id` = {$this->id} AND `{$this->sort_column}` = (SELECT `{$this->sort_column}` - FROM {items} WHERE id = $child_id)"); + FROM {items} WHERE `id` = $child_id) + ORDER BY `id` ASC"); foreach ($result as $row) { $position++; if ($row->id == $child_id) { -- cgit v1.2.3 From ecc9203c2352bdfa3738998f27268293345ec0e9 Mon Sep 17 00:00:00 2001 From: Tim Almdal Date: Tue, 28 Jul 2009 04:54:20 +0800 Subject: Standardize the specification of tags. With this patch a comma(,) is the only valid tag separator. Spaces are allowed in tags and phrases no longer need to be specified with a dot. Signed-off-by: Tim Almdal --- modules/g2_import/helpers/g2_import.php | 2 +- modules/tag/controllers/tags.php | 6 +++--- modules/tag/helpers/tag_event.php | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) (limited to 'modules') diff --git a/modules/g2_import/helpers/g2_import.php b/modules/g2_import/helpers/g2_import.php index 134edcff..436cef52 100644 --- a/modules/g2_import/helpers/g2_import.php +++ b/modules/g2_import/helpers/g2_import.php @@ -616,7 +616,7 @@ class g2_import_Core { // Multiword tags have the space changed to dots.s foreach ($tag_names as $tag_name) { $tags .= (strlen($tags) ? ", " : "") . - tag::add($g3_item, preg_replace('/\s+/', '.', $tag_name)); + tag::add($g3_item, $tag_name); } // Tag operations are idempotent so we don't need to map them. Which is good because we don't diff --git a/modules/tag/controllers/tags.php b/modules/tag/controllers/tags.php index a600ea1a..69178925 100644 --- a/modules/tag/controllers/tags.php +++ b/modules/tag/controllers/tags.php @@ -53,10 +53,10 @@ class Tags_Controller extends REST_Controller { $form = tag::get_add_form($item); if ($form->validate()) { - foreach (split("[\,\;]", $form->add_tag->inputs["name"]->value) as $tag_name) { + foreach (split(",", $form->add_tag->inputs["name"]->value) as $tag_name) { $tag_name = trim($tag_name); if ($tag_name) { - $tag = tag::add($item, str_replace(" ", ".", $tag_name)); + $tag = tag::add($item, $tag_name); } } @@ -81,7 +81,7 @@ class Tags_Controller extends REST_Controller { public function autocomplete() { $tags = array(); - $tag_parts = preg_split("#[,\s;]+# ", $this->input->get("q")); + $tag_parts = preg_split("#[,\s]+# ", $this->input->get("q")); $limit = $this->input->get("limit"); $tag_part = end($tag_parts); $tag_list = ORM::factory("tag") diff --git a/modules/tag/helpers/tag_event.php b/modules/tag/helpers/tag_event.php index bf60978d..7becf36f 100644 --- a/modules/tag/helpers/tag_event.php +++ b/modules/tag/helpers/tag_event.php @@ -34,8 +34,8 @@ class tag_event_Core { if (!empty($iptc["2#025"])) { foreach($iptc["2#025"] as $tag) { $tag = str_replace("\0", "", $tag); - foreach (preg_split("/[,;]/", $tag) as $word) { - $word = preg_replace('/\s+/', '.', trim($word)); + foreach (preg_split("/,/", $tag) as $word) { + $word = trim($word); if (function_exists("mb_detect_encoding") && mb_detect_encoding($word) != "UTF-8") { $word = utf8_encode($word); } @@ -71,16 +71,16 @@ class tag_event_Core { '$url', {max: 30, formatResult: formatTagAutoCompleteResult} ); });"; - $tag_value = implode("; ", tag::item_tags($item)); - $view->form->edit_item->input("tags")->label(t("Tags (comma or semicolon separated)")) + $tag_value = implode(", ", tag::item_tags($item)); + $view->form->edit_item->input("tags")->label(t("Tags (comma separated)")) ->value($tag_value); } static function item_edit_form_completed($item, $form) { tag::clear_all($item); - foreach (preg_split("/[,;]/", $form->edit_item->tags->value) as $tag_name) { + foreach (preg_split("/,/", $form->edit_item->tags->value) as $tag_name) { if ($tag_name) { - tag::add($item, str_replace(" ", ".", $tag_name)); + tag::add($item, trim($tag_name)); } } tag::compact(); -- cgit v1.2.3