Bug(バグ) #1859
The community category is not considered a sort of parent categories (コミュニティカテゴリが大カテゴリのソートを考慮していない)
0%
Description
Overview (現象)¶
管理画面でカテゴリ関係を下記のように定義したとする.
- A
- a
- b
- B
- c
- d
- e
これを下記の順番にしたとする.
- B
- c
- d
- e
- A
- a
- 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
Associated revisions
fixed sortable of the community categories (fixes #1859)
History
#1
Updated by Masato Nagasawa about 12 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 about 12 years ago
- Subject changed from コミュニティカテゴリが大カテゴリのソートを考慮していない to The community category is not considered a sort of parent categories (コミュニティカテゴリが大カテゴリのソートを考慮していない)
#3
Updated by Masato Nagasawa about 12 years ago
- Status changed from Accepted(着手) to Pending Review(レビュー待ち)
- % Done changed from 0 to 50
更新履歴 37f8eb131767a730a46328d1eebba5d802f3036b で適用されました。
#4
Updated by Shouta Kashiwagi almost 11 years ago
- Target version changed from OpenPNE 3.7.0 to 252
#5
Updated by Yuma Sakata almost 11 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 almost 11 years ago
- Target version changed from OpenPNE 3.8beta1 to OpenPNE 3.8RC1
#7
Updated by Yuya Watanabe almost 11 years ago
- Target version changed from OpenPNE 3.8RC1 to OpenPNE 3.9.0-old
#8
Updated by Yuya Watanabe almost 11 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 almost 11 years ago
- Description updated (diff)
#10
Updated by Yuya Watanabe almost 11 years ago
- Description updated (diff)
#11
Updated by Shinichi Urabe over 8 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 8 years ago
- Copied to Backport(バックポート) #3635: The community category is not considered a sort of parent categories (コミュニティカテゴリが大カテゴリのソートを考慮していない) added
#13
Updated by 誠二 天重 over 8 years ago
- Target version changed from OpenPNE 3.8.12 to OpenPNE 3.9.0-old
#14
Updated by Shinichi Urabe over 8 years ago
- Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
- % Done changed from 50 to 70
レビューOKです
パフォーマンスの改善については #3650 のチケットでの課題とします
#15
Updated by isao sano over 8 years ago
- Copied to Backport(バックポート) #3660: The community category is not considered a sort of parent categories (コミュニティカテゴリが大カテゴリのソートを考慮していない) added
#17
Updated by isao sano almost 6 years ago
- Status changed from Pending Testing(テスト待ち) to Won't fix(対応せず)
- % Done changed from 70 to 0
OpenPNE 3.8.12 にて対応済みであったため、対応せずとします。