プロジェクト

全般

プロフィール

Bug(バグ) #1859

完了

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

Masato Nagasawa さんがほぼ14年前に追加. 7年以上前に更新.

ステータス:
Won't fix(対応せず)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2010-12-21
期日:
進捗率:

0%

予定工数:
3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

説明

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 に追加し、
既存のカテゴリ表示を行っている箇所をすべて置換する。


関連するチケット 4 (0件未完了4件完了)

関連している OpenPNE 3 - Enhancement(機能追加・改善) #1591: support to the sorting order change of the community categories (コミュニティカテゴリのソート順を変更できるようにする)Won't fix(対応せず)Shouta Kashiwagi2010-09-14

操作
関連している OpenPNE 3 - Bug(バグ) #1796: 2系から3系へアップデートでコミュニティカテゴリの管理画面でのソート順の対処がされていない [3.6系限定]Fixed(完了)Shinichi Urabe2010-11-17

操作
コピー先 OpenPNE 3 - Backport(バックポート) #3635: The community category is not considered a sort of parent categories (コミュニティカテゴリが大カテゴリのソートを考慮していない)Fixed(完了)isao sano2010-12-21

操作
コピー先 OpenPNE 3 - Backport(バックポート) #3660: The community category is not considered a sort of parent categories (コミュニティカテゴリが大カテゴリのソートを考慮していない)Fixed(完了)誠二 天重2014-07-15

操作

Masato Nagasawa さんがほぼ14年前に更新

  • ステータスNew(新規) から Accepted(着手) に変更
  • 担当者Masato Nagasawa にセット
  • 対象バージョンOpenPNE 3.7.0 にセット
  • 3.6 で発生するか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ユーザー画面 コミュニティ編集 選択したカテゴリで登録されるか 選択したカテゴリで登録される
携帯ユーザー画面 検索フォーム 表示が正しいか 小カテゴリが大カテゴリの順に並んでいる
携帯ユーザー画面 検索フォーム 選択したカテゴリで検索 選択したカテゴリで検索される
携帯ユーザー画面 検索フォーム すべてのカテゴリで検索 すべてのカテゴリが検索対象となっている
携帯ユーザー画面 コミュニティ作成 初期選択が空白であるか 空白が選択されている
携帯ユーザー画面 コミュニティ作成 表示が正しいか 小カテゴリが大カテゴリの順に並んでいる
携帯ユーザー画面 コミュニティ作成 選択したカテゴリで登録されるか 選択したカテゴリで登録される
携帯ユーザー画面 コミュニティ作成 空白で登録されているか カテゴリが存在しないコミュニティが作成される
携帯ユーザー画面 コミュニティ編集 表示が正しいか 小カテゴリが大カテゴリの順に並んでいる
携帯ユーザー画面 コミュニティ編集 選択したカテゴリで登録されるか 選択したカテゴリで登録される
携帯ユーザー画面 コミュニティ検索カテゴリリスト 表示が正しいか 小カテゴリが大カテゴリの順に並んでいる
携帯ユーザー画面 コミュニティ検索カテゴリリスト リンクが正しいか 対象のカテゴリで検索されるか
管理画面 コミュニティリスト 表示が正しいか 小カテゴリが大カテゴリの順に並んでいる
管理画面 コミュニティリスト 選択したカテゴリで検索 選択したカテゴリで検索される
管理画面 コミュニティリスト すべてのカテゴリで検索 すべてのカテゴリが検索対象となっている

Masato Nagasawa さんがほぼ14年前に更新

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

Masato Nagasawa さんがほぼ14年前に更新

  • ステータスAccepted(着手) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

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

Shouta Kashiwagi さんが12年以上前に更新

  • 対象バージョンOpenPNE 3.7.0 から 252 に変更

Yuma Sakata さんが12年以上前に更新

  • 対象バージョン252 から OpenPNE 3.8beta1 に変更
  • 3.6 で発生するかYes から Unknown (未調査) に変更
  • 3.4 で発生するかUnknown (未調査) にセット

Yuya Watanabe さんが12年以上前に更新

  • 対象バージョンOpenPNE 3.8beta1 から OpenPNE 3.8RC1 に変更

Yuya Watanabe さんが12年以上前に更新

  • 対象バージョンOpenPNE 3.8RC1 から OpenPNE 3.9.0-old に変更

Yuya Watanabe さんが12年以上前に更新

  • ステータスPending Review(レビュー待ち) から Rejected(差し戻し) に変更
  • 担当者Masato Nagasawa から 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   }

Yuya Watanabe さんが12年以上前に更新

Yuya Watanabe さんが12年以上前に更新

Shinichi Urabe さんが10年以上前に更新

  • ステータスRejected(差し戻し) から Pending Review(レビュー待ち) に変更
  • 担当者Shouta Kashiwagi から 誠二 天重 に変更
  • 対象バージョンOpenPNE 3.9.0-old から OpenPNE 3.8.12 に変更
  • 3.8 で発生するかUnknown (未調査) にセット

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

誠二 天重 さんが10年以上前に更新

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

誠二 天重 さんが10年以上前に更新

  • 対象バージョンOpenPNE 3.8.12 から OpenPNE 3.9.0-old に変更

Shinichi Urabe さんが10年以上前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

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

isao sano さんが10年以上前に更新

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

isao sano さんが7年以上前に更新

  • ステータスPending Testing(テスト待ち) から Won't fix(対応せず) に変更
  • 進捗率70 から 0 に変更

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

他の形式にエクスポート: Atom PDF