Bug(バグ) #4260
完了opTimelinePlugin 携帯版プロフィール画面のSNSメンバーのタイムラインガジェット Web公開していない投稿がWeb公開されてしまう
100%
説明
Overview (現象)¶
携帯版プロフィール画面ガジェット設定で、SNSメンバーのタイムラインガジェットを「Web全体に公開」に設定した場合、
タイムラインへの投稿時に「全員に公開」で設定した投稿が、携帯版プロフィール画面でWeb全体に公開される。
再現手順¶
- 管理画面→上級者向け設定(3.6.x の場合はSNS設定)→メンバーのプロフィールページ公開範囲設定 を 「メンバーの設定を許可する」もしくは「メンバーの設定を許可しない(Web全体に公開)」に設定
- 管理画面→デザイン設定→ガジェット設定→携帯版プロフィール画面ガジェット設定→ガジェット追加 にて SNSメンバーのタイムライン を追加し、設定変更ボタンを押下
- SNSメンバーのタイムラインの設定画面を開き公開範囲を「Web全体に公開」に変更し submit ボタンを押下
- メンバーAのアカウントでSNSメンバー画面にログインし、タイムラインにて「全員に公開」で投稿
- 携帯端末にてログインしていない状態で、「/member/{メンバーAのID}」を確認
Causes (原因)¶
プロフィールページの公開範囲及びガジェットの公開範囲を考慮していないため
Way to fix (修正内容)¶
修正内容を記入
--
補足¶
opTimlinePlugin のがジェット設定により発生するが、修正は Core のソースが対象のため、opTimlinePlugin の修正はありません。
kaoru n さんが5年以上前に更新
github にてプルリクエスト作成しました
3.6.x: 対象外
3.8.x: https://github.com/openpne/OpenPNE3/pull/518
master: https://github.com/openpne/OpenPNE3/pull/517
Rimpei Ogawa さんが5年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Rejected(差し戻し) に変更
https://redmine.openpne.jp/issues/4188#note-10
と同様に、 viewerId
が空の場合は PUBLIC_FLAG_OPEN
だけに絞り込むという対応で十分ではないかと思います。
elseif (!$this->viewerId)
{
$subQuery[] = $this->buildMemberQuery($query->createSubquery(), $id, ActivityDataTable::PUBLIC_FLAG_OPEN);
}
kaoru n さんが5年以上前に更新
- ステータス を Rejected(差し戻し) から Pending Review(レビュー待ち) に変更
プルリクエスト修正しました
3.6.x: 対象外
3.8.x: https://github.com/openpne/OpenPNE3/pull/518
master: https://github.com/openpne/OpenPNE3/pull/517
Rimpei Ogawa さんが5年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
レビューOKです。
Chiharu Nakajima さんが5年以上前に更新
以下のエラーが発生するため、現在試験不可です(原因は現在調査中)。
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
kaoru n さんが5年以上前に更新
- ステータス を Pending Testing(テスト待ち) から Rejected(差し戻し) に変更
- 進捗率 を 70 から 50 に変更
#4260-9 のエラーは、今回の修正適用前にタイムライン投稿が存在する場合に、修正適用後に発生します。
※ 修正適用前にタイムライン投稿した場合
1. OpenPNE-3.8.30 + opTimelinePlugin-1.2.7 をインストール後、タイムライン投稿を行う。
2. https://github.com/openpne/OpenPNE3/pull/518 のブランチをチェックアウトし、 $ ./symfony cc 実行後、 /member/1 に未ログイン状態でアクセスした際にエラー発生
※ 修正適用後のブランチでインストールした場合
(1) https://github.com/openpne/OpenPNE3/pull/518 のブランチ + opTimelinePlugin-1.2.7 をインストール後、タイムライン投稿を行う。
(2) /member/1 に未ログイン状態でアクセスすると正常に表示される
kaoru n さんが5年以上前に更新
エラーが発生しているのは、下記の箇所
https://github.com/tejimaya/opTimelinePlugin/blob/master/apps/mobile_frontend/modules/timeline/actions/components.class.php#L41-L43
$this->activities = $query
->andWhere('in_reply_to_activity_id IS NULL')
->execute();
ログ
4月 11 20:05:48 symfony [info] {Doctrine_Connection_Statement} execute : SELECT a.id AS a__id, a.member_id AS a__member_id, a.in_reply_to_activity_id AS a__in_reply_to_activity_id, a.body AS a__body, a.uri AS a__uri, a.public_flag AS a__public_flag, a.is_pc AS a__is_pc, a.is_mobile AS a__is_mobile, a.source AS a__source, a.source_uri AS a__source_uri, a.foreign_table AS a__foreign_table, a.foreign_id AS a__foreign_id, a.template AS a__template, a.template_param AS a__template_param, a.created_at AS a__created_at, a.updated_at AS a__updated_at, m.id AS m__id, m.name AS m__name, m.invite_member_id AS m__invite_member_id, m.is_login_rejected AS m__is_login_rejected, m.created_at AS m__created_at, m.updated_at AS m__updated_at, m.is_active AS m__is_active FROM activity_data a LEFT JOIN member m ON a.member_id = m.id WHERE (a.member_id = ? AND a.public_flag IN (?, ?)) AND (a.foreign_table IS NULL OR a.foreign_table <> "community") AND a.in_reply_to_activity_id IS NULL AND (m.is_active = ? OR m.is_active IS NULL) ORDER BY a.id DESC LIMIT 20 - (1, 0, 1) 4月 11 20:05:48 symfony [err] {Doctrine_Connection_Mysql_Exception} SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
パラメータ数が合わない。
->andWhere('in_reply_to_activity_id IS NULL')
を削除すると4月 11 20:25:59 symfony [info] {Doctrine_Connection_Statement} execute : SELECT a.id AS a__id, a.member_id AS a__member_id, a.in_reply_to_activity_id AS a__in_reply_to_activity_id, a.body AS a__body, a.uri AS a__uri, a.public_flag AS a__public_flag, a.is_pc AS a__is_pc, a.is_mobile AS a__is_mobile, a.source AS a__source, a.source_uri AS a__source_uri, a.foreign_table AS a__foreign_table, a.foreign_id AS a__foreign_id, a.template AS a__template, a.template_param AS a__template_param, a.created_at AS a__created_at, a.updated_at AS a__updated_at, m.id AS m__id, m.name AS m__name, m.invite_member_id AS m__invite_member_id, m.is_login_rejected AS m__is_login_rejected, m.created_at AS m__created_at, m.updated_at AS m__updated_at, m.is_active AS m__is_active FROM activity_data a LEFT JOIN member m ON a.member_id = m.id WHERE (a.member_id = ? AND a.public_flag IN (?)) AND (a.foreign_table IS NULL OR a.foreign_table <> "community") AND (m.is_active = ? OR m.is_active IS NULL) ORDER BY a.id DESC LIMIT 20 - (1, 0, 1)
public_flag IN (?) が変わる。なぜ?
kaoru n さんが5年以上前に更新
参照: https://redmine.openpne.jp/issues/3135#note-1
同じ箇所のエラーの話
kaoru n さんが5年以上前に更新
- 関連している Bug(バグ) #3273: activity/search.json?member_id=? で特定メンバーのアクティビティを取得すると500エラーとなる を追加