何が起きるか
フォルダの中にある公開中のページをゴミ箱に入れ、ゴミ箱から「元に戻す」と、次のようになります。
| ゴミ箱に入れる前 | 元に戻したあと | |
|---|---|---|
| 置き場所 | フォルダ「サービス」の中 | サイト直下 |
| URL | /service/service1 |
/service1 |
| 公開状態 | 公開 | 非公開 |
| 訪問者が開くと | 表示される | 元の URL も新しい URL も 404 |
画面には「ゴミ箱『サービス1』を戻しました。」とだけ表示され、場所・URL・公開状態が変わったことは知らされません。
なぜ問題か(どんな被害があるか)
ユーザーマニュアル(p25)は、ゴミ箱について「ゴミ箱から元に戻すことで復元できます」と案内しています。運営者はこれを信じて、誤って消したページをゴミ箱から戻します。
- 戻したのに、訪問者からは見えないままになる 公開中だったページが、戻したあとも非公開で、しかも別の URL に置かれます。元の URL は 404 のままです。
- 外部からのリンクがすべて切れる URL が変わるので、他のサイトからのリンク、ブックマーク、検索エンジンの結果、SNS で共有した URL が、すべて 404 になります。
- 運営者は気づけない 「戻しました」と表示されるので、運営者は復旧できたと考えます。場所や URL が変わったことを知らせる表示はありません。
- 直すには、元の場所を覚えている必要がある ゴミ箱の一覧には、そのページが元どのフォルダにあったかが表示されません。復旧するには、運営者が元の場所を覚えていて、ページの編集画面でフォルダを選び直し、公開に切り替えて保存する必要があります。
「誤って消したページを元に戻す」という、ゴミ箱の本来の用途そのものが果たせていない状態です。
再現手順
- 管理画面にログインする
- フォルダの中にある公開中の固定ページを用意する(初期データの「サービス」フォルダ内の「サービス1」を使いました)
- 公開サイトで、そのページの URL(
/service/service1)が表示されることを確認する - そのページの編集画面を開き、「ゴミ箱」ボタンでゴミ箱に入れる
- 「ゴミ箱」を開き、そのページを右クリックして「元に戻す」を選ぶ
- 「ゴミ箱『サービス1』を戻しました。」と表示される
- コンテンツ一覧で、そのページが「サービス」フォルダの中ではなくサイト直下にあることを確認する
- 公開サイトで、元の URL(
/service/service1)と、新しい URL(/service1)がどちらも 404 になることを確認する - そのページの編集画面で、フォルダが「サイト直下」、公開状態が「非公開」になっていることを確認する
期待する動き
「元に戻す」で、ゴミ箱に入れる前の場所・URL・公開状態に戻ること。 元のフォルダがすでに無いなどの理由で元の場所に戻せない場合は、どこに戻したか、公開状態がどうなったかを画面で知らせてほしいです。
環境
- baserCMS 5.4.0(公式の docker-compose で起動し、インストーラーで初期データ
BcThemeSampleを入れた状態) - PHP 8.5.7 / MySQL 8.0
補足(原因と思われる箇所)
- ゴミ箱に入れる時点で、
contentsのparent_idが NULL、urlが空、status/self_statusが 0 に書き換えられ、元の場所と公開状態が残っていません ContentsService::restore()は、戻すときにparent_idを常にサイトのルート(getSiteRoot())にしています
固定ページで確かめましたが、ブログやメールフォームでも同じ動きになりました(ゴミ箱の処理が共通のため)。 既存の Issue を検索しましたが、同じ内容は見当たりませんでした。





