Project

General

Profile

Bug(バグ) #1859

The community category is not considered a sort of parent categories (コミュニティカテゴリが大カテゴリのソートを考慮していない)

Added by Masato Nagasawa almost 9 years ago. Updated over 2 years ago.

Status:
Won't fix(対応せず)
Priority:
Normal(通常)
Assignee:
Target version:
Start date:
2010-12-21
Due date:
% Done:

0%

3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

Description

Overview (現象)

管理画面でカテゴリ関係を下記のように定義したとする.

  • A
    • a
    • b
  • B
    • c
    • d
    • e

これを下記の順番にしたとする.

  1. B
    1. c
    2. d
    3. e
  2. A
    1. a
    2. b

このときに,フロントエンド側のコミュニティ新規作成画面などでコミュニティカテゴリを選択する際に表示される select タグの option の項目が c d e a b と表示されるべきだが,a b c d e と表示されてしまう.

Causes (原因)

大カテゴリを考慮して小カテゴリのソートを行っていない。

Way to fix (修正内容)

小カテゴリと大カテゴリを別々のクエリで取得後、PHP 側でソート処理を行う。
(2系ではJOINを使用して1クエリで取得していたが、Doctrineを使用した場合テーブルの構造上の問題で同じ方法は使えない)
この結果を Doctrine_Collection で返すメソッドを CommunityCategoryTable に追加し、
既存のカテゴリ表示を行っている箇所をすべて置換する。


Related issues

Related to OpenPNE 3 - Enhancement(機能追加・改善) #1591: support to the sorting order change of the community categories (コミュニティカテゴリのソート順を変更できるようにする) Won't fix(対応せず) 2010-09-14
Related to OpenPNE 3 - Bug(バグ) #1796: 2系から3系へアップデートでコミュニティカテゴリの管理画面でのソート順の対処がされていない [3.6系限定] Fixed(完了) 2010-11-17
Copied to OpenPNE 3 - Backport(バックポート) #3635: The community category is not considered a sort of parent categories (コミュニティカテゴリが大カテゴリのソートを考慮していない) Fixed(完了) 2010-12-21
Copied to OpenPNE 3 - Backport(バックポート) #3660: The community category is not considered a sort of parent categories (コミュニティカテゴリが大カテゴリのソートを考慮していない) Fixed(完了) 2014-07-15

Associated revisions

Revision 37f8eb13 (diff)
Added by Masato Nagasawa almost 9 years ago

fixed sortable of the community categories (fixes #1859)

History

#1 Updated by Masato Nagasawa almost 9 years ago

  • Status changed from New(新規) to Accepted(着手)
  • Assignee set to Masato Nagasawa
  • Target version set to OpenPNE 3.7.0
  • 3.6 で発生するか set to Yes

テスト

以下のデータを作成してテストを実施する。

  • カテゴリA
    • A1
    • A2
    • A3
  • カテゴリB
    • B1
    • B2
    • B3
下記のようにソートする。
  • カテゴリB
    • B3
    • B2
    • B1
  • カテゴリA
    • A3
    • A2
    • A1

テスト結果

画面 区分1 区分2 期待結果 結果
PCユーザー画面 検索フォーム 表示が正しいか 小カテゴリが大カテゴリの順に並んでいる
PCユーザー画面 検索フォーム 選択したカテゴリで検索 選択したカテゴリで検索される
PCユーザー画面 検索フォーム すべてのカテゴリで検索 すべてのカテゴリが検索対象となっている
PCユーザー画面 コミュニティ作成 初期選択が空白であるか 空白が選択されている
PCユーザー画面 コミュニティ作成 表示が正しいか 小カテゴリが大カテゴリの順に並んでいる
PCユーザー画面 コミュニティ作成 選択したカテゴリで登録されるか 選択したカテゴリで登録される
PCユーザー画面 コミュニティ作成 空白で登録されているか カテゴリが存在しないコミュニティが作成される
PCユーザー画面 コミュニティ編集 表示が正しいか 小カテゴリが大カテゴリの順に並んでいる
PCユーザー画面 コミュニティ編集 選択したカテゴリで登録されるか 選択したカテゴリで登録される
携帯ユーザー画面 検索フォーム 表示が正しいか 小カテゴリが大カテゴリの順に並んでいる
携帯ユーザー画面 検索フォーム 選択したカテゴリで検索 選択したカテゴリで検索される
携帯ユーザー画面 検索フォーム すべてのカテゴリで検索 すべてのカテゴリが検索対象となっている
携帯ユーザー画面 コミュニティ作成 初期選択が空白であるか 空白が選択されている
携帯ユーザー画面 コミュニティ作成 表示が正しいか 小カテゴリが大カテゴリの順に並んでいる
携帯ユーザー画面 コミュニティ作成 選択したカテゴリで登録されるか 選択したカテゴリで登録される
携帯ユーザー画面 コミュニティ作成 空白で登録されているか カテゴリが存在しないコミュニティが作成される
携帯ユーザー画面 コミュニティ編集 表示が正しいか 小カテゴリが大カテゴリの順に並んでいる
携帯ユーザー画面 コミュニティ編集 選択したカテゴリで登録されるか 選択したカテゴリで登録される
携帯ユーザー画面 コミュニティ検索カテゴリリスト 表示が正しいか 小カテゴリが大カテゴリの順に並んでいる
携帯ユーザー画面 コミュニティ検索カテゴリリスト リンクが正しいか 対象のカテゴリで検索されるか
管理画面 コミュニティリスト 表示が正しいか 小カテゴリが大カテゴリの順に並んでいる
管理画面 コミュニティリスト 選択したカテゴリで検索 選択したカテゴリで検索される
管理画面 コミュニティリスト すべてのカテゴリで検索 すべてのカテゴリが検索対象となっている

#2 Updated by Masato Nagasawa almost 9 years ago

  • Subject changed from コミュニティカテゴリが大カテゴリのソートを考慮していない to The community category is not considered a sort of parent categories (コミュニティカテゴリが大カテゴリのソートを考慮していない)

#3 Updated by Masato Nagasawa almost 9 years ago

  • Status changed from Accepted(着手) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

更新履歴 37f8eb131767a730a46328d1eebba5d802f3036b で適用されました。

#4 Updated by Shouta Kashiwagi over 7 years ago

  • Target version changed from OpenPNE 3.7.0 to 252

#5 Updated by Yuma Sakata over 7 years ago

  • Target version changed from 252 to OpenPNE 3.8beta1
  • 3.6 で発生するか changed from Yes to Unknown (未調査)
  • 3.4 で発生するか set to Unknown (未調査)

#6 Updated by Yuya Watanabe over 7 years ago

  • Target version changed from OpenPNE 3.8beta1 to OpenPNE 3.8RC1

#7 Updated by Yuya Watanabe over 7 years ago

  • Target version changed from OpenPNE 3.8RC1 to OpenPNE 3.9.0-old

#8 Updated by Yuya Watanabe over 7 years ago

  • Status changed from Pending Review(レビュー待ち) to Rejected(差し戻し)
  • Assignee changed from Masato Nagasawa to Shouta Kashiwagi

このあたりが非効率な気がしました.
一旦ルートとその子供をそれぞれ取る必要はなく,ソートされた状態のルートから ソートされた子供が取得できるため,これを順番に配列に追加してゆけば問題ないのではないかと思います.

パフォーマンスについては,DB 接続やソートのオーダーを無視したとして,下記のものだと 子供の数 m と 親の数 n としたときにビックオー記法で O(n+m) となります.これはおそらく O(m) になるものと思います.実際に測定しないと効果がわからいませんが,コード上ではここに記述したとおりの解釈となると思います.

lib/model/doctrine/CommunityCategoryTable.class.php

 52   public function getAllChildren($checkIsAllowMemberCommunity = false)
 53   {
 54     $roots = $this->retrieveAllRoots();
 55     $children = $this->retrieveAllChildren();
 56 
 57     // sort by root category
 58     $temp = array();
 59     foreach ($children as $child)
 60     {
 61       if ($checkIsAllowMemberCommunity && !$child->getIsAllowMemberCommunity())
 62       {
 63         continue;
 64       }
 65       $temp[$child->getTreeKey()][] = $child;
 66     }
 67 
 68     $data = array();
 69     foreach ($roots as $root)
 70     {
 71       if (isset($temp[$root->getId()]))
 72       {
 73         $data = array_merge($data, $temp[$root->getId()]);
 74       }
 75     }
 76 
 77     $collection = new Doctrine_Collection($this);
 78     $collection->setData($data);
 79 
 80     return $collection;
 81   }

#9 Updated by Yuya Watanabe over 7 years ago

  • Description updated (diff)

#10 Updated by Yuya Watanabe over 7 years ago

  • Description updated (diff)

#11 Updated by Shinichi Urabe over 5 years ago

  • Status changed from Rejected(差し戻し) to Pending Review(レビュー待ち)
  • Assignee changed from Shouta Kashiwagi to 誠二 天重
  • Target version changed from OpenPNE 3.9.0-old to OpenPNE 3.8.12
  • 3.8 で発生するか set to Unknown (未調査)

現状 master に取り込まれている修正です
パフォーマンスに問題があれば別チケットで対応でもよいかと考えます
レビュー待ちにして、対応を進めます

#12 Updated by 誠二 天重 over 5 years ago

  • Copied to Backport(バックポート) #3635: The community category is not considered a sort of parent categories (コミュニティカテゴリが大カテゴリのソートを考慮していない) added

#13 Updated by 誠二 天重 over 5 years ago

  • Target version changed from OpenPNE 3.8.12 to OpenPNE 3.9.0-old

#14 Updated by Shinichi Urabe over 5 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

レビューOKです
パフォーマンスの改善については #3650 のチケットでの課題とします

#15 Updated by isao sano over 5 years ago

  • Copied to Backport(バックポート) #3660: The community category is not considered a sort of parent categories (コミュニティカテゴリが大カテゴリのソートを考慮していない) added

#17 Updated by isao sano over 2 years ago

  • Status changed from Pending Testing(テスト待ち) to Won't fix(対応せず)
  • % Done changed from 70 to 0

OpenPNE 3.8.12 にて対応済みであったため、対応せずとします。

Also available in: Atom PDF