トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BugTrack-plugin/407

ページの作成や編集にはユーザ登録が必要です。

FSWiki の操作性をちょっとだけ向上するプラグイン

  • 投稿者: ぐうます
  • カテゴリ: 新規
  • 優先度: 低
  • 状態: 提案
  • 日時: 2009年08月18日 20時45分58秒

 内容

FSWiki の操作性をちょっとだけ向上するプラグインです。

機能

  • ページ閲覧:
    • ページ閲覧開始時にページの参照権限が無い場合には、ログインフォームを表示してログインを促します。そしてログインに成功したら、そのままそのページを表示します。
  • 新規ページ作成:
    • 新規ページ入力開始時に編集権限が無い場合は、ログインフォームを表示してログインを促します。そしてログインに成功したら、そのまま新規ページ名入力フォームを表示します。
    • テンプレートページ Template/* が存在する場合には、新規ページ名の入力と同時にテンプレートを選択することができます。
    • 与えられた新規ページ名に問題がある場合には、ページ名の再入力を促します。
  • ページ編集:
    • ページ編集開始時にページの編集権限が無い場合には、ログインフォームを表示してログインを促します。そしてログインに成功したら、そのままそのページの編集フォームを表示します。
  • ページ保存:
    • ページ保存時にセッションタイムアウトによってページの編集権限を失っていた場合には、ログインフォームを表示してログインを促します。そしてログインに成功したら、保存できなかった Wiki ソースを再確認するための編集フォームを表示します。
    • ページ保存時に同時更新による衝突によってページを保存できなかった場合には、最新のページ内容、及び保存できなかった Wiki ソースを表示し、マージ作業のための編集フォームを表示します。
  • Wiki メニュー
    • ログイン中の場合、従来のメニュー項目「ログイン」を「管理」と表示するようにしました(実装方法は異なりますが、FSWiki 3.6.4 相当の機能です)。
    • ログイン中の場合、新たなメニュー項目「ログアウト」を追加表示するようにしました。クリックするとログアウトします。
    • 管理者ログイン中に一般ページ閲覧した場合、新たなメニュー項目「公開」/「非公開」/「凍結」/「凍結解除」を追加表示するようにしました。
      • メニュー項目「公開」:非ログインユーザが閲覧できないページの場合のみ表示されます。クリックすると、そのページは非ログインユーザが閲覧できるようになります。
      • メニュー項目「非公開」:非ログインユーザが閲覧できるページの場合のみ表示されます。クリックすると、そのページはログインユーザ以上のみ閲覧できるようになります。
      • メニュー項目「凍結」:凍結されていないページの場合のみ表示されます。クリックすると、そのページを凍結します。
      • メニュー項目「凍結解除」:凍結されているページの場合のみ表示されます。クリックすると、そのページを凍結を解除します。

由来と動機

上記機能を見てお分かりの通り、BugTrack-plugin/69:権限がなく参照/編集できなかったページにログイン後移動するパッチのコードを基にしていますが、実装はかなり変更しています。BugTrack-plugin/69 では、cgi パラメータを用いてログイン前後のデータの受け渡しを行うために、ログイン直後にリダイレクトしない方式をとっているので、高速化関連のキャッシュを追加するたびにそのクリア処理を追加する改造を行う必要があります。これに対し、標準の FSWiki と同じようにログイン直後に必ずリダイレクトする方式に変更すれば、リダイレクトにより自動的にキャッシュがクリアされるので、追加改造の必要がありません。そこで本プラグインは、キャッシュクリア処理に関する追加改造を不要にするために BugTrack-plugin/69 を書き直すことを最初の目的として作成を開始したものあり、ログイン後にリダイレクトを行うため session パラメータを用いてログイン前後のデータの受け渡しを行うように BugTrack-plugin/69 から大幅に変更を加えた内容になっています。

本プラグインパッケージの構成とインストール

  • 構成:添付ファイル ezop.20090916.zip(739) に含まれるファイルは、次の 7 つです。
    • plugin/ezop/Install.pm
    • plugin/ezop/ShowPage.pm
    • plugin/ezop/NewPage.pm
    • plugin/ezop/EditPage.pm
    • plugin/ezop/Login.pm
    • plugin/ezop/PermissionForm.pm (2009-09-16 版以降)
    • plugin/ezop/Include.pm (2009-09-16 版以降)
  • インストール:
    1. BugTrack-plugin/69 を適用済みの場合には、パッチ対象ファイルをパッチ適用前の状態に戻して下さい。
    2. ezop.20090916.zip(739) をダウンロードし、FSWiki の動作しているサーバに展開して下さい。
    3. 管理メニューのプラグイン設定ページから、ezop プラグインパッケージを有効にしてください。

適用可能な FSWiki バージョン

  • FSWiki 3.6.3.1 で動作確認しています。
  • しばらく前まで FSWiki 3.6.2 の環境が手元にあったのですが、3.6.2 で少し前の版の本プラグインが動作していたので、今回投稿する版についても多分 3.6.2 では動くのではないかと考えています。
  • BugTrack-plugin/224:Wiki書式挿入編集ボタンを適用している場合、していない場合の両方に対応しています。

制限事項

  • BugTrack-plugin/69 を適用済みの場合には、パッチ対象ファイルをパッチ適用前の状態に戻して下さい。そうしないと、パッチと本プラグインの同等機能がバッティングして正しい動作を得られない可能性が大きいです。
  • 新規ページ作成時、ページ名の日本語コードが EUC であることをチェックしていますので、内部処理の日本語コードを utf-8 対応に改造した FSWiki ではそのままでは動作しません。動作させるには、下記コメント欄に投稿された たったさんのコメント(2010年01月21日 20時10分58秒)にしたがって、該当チェック処理をコメントアウトすることが必要条件となります。(2010-01-22 追記)

注意

本プラグインはまだ発展途上と考えておりますので、もしかすると今後大きな仕様変更を行う可能性があります。

更新履歴

2009-09-16 版:ezop.20090916.zip(739)
次の変更を実施しました。
  • バグ修正:「凍結中のページが管理者以外のユーザでも編集できる」というバグを修正。
  • 機能改善:include プラグインで読み込んでいるページの参照権限が無いときにもログインフォームを表示するようにした。
  • 機能追加:Wiki メニューに次の機能を追加。
    • ログイン中の場合、従来のメニュー項目「ログイン」を「管理」と表示するようにした(実装方法は異なるが、FSWiki 3.6.4 相当の機能)。
    • ログイン中の場合、新たなメニュー項目「ログアウト」を追加表示するようにした。
    • 管理者ログイン中に一般ページ閲覧した場合、新たなメニュー項目「公開」/「非公開」/「凍結」/「凍結解除」を追加表示するようにした。
2009-08-23 版:ezop.20090823.zip
次の変更を実施しました。
  • バグ修正:「入力フォーム(comment プラグイン等)が存在するページの編集中にプレビューを行うと、不正な位置にH2要素『ページ編集フォーム』が挿入される」というバグを修正。
2009-08-18 版:ezop.20090818.zip
初版公開

ライセンス

GPL

謝辞

作者のあがたさんをはじめとして、BugTrack-plugin/69 にコードを提供して下さいました全開発者の皆さんに、厚く御礼申し上げます。

 コメント

  • 適用してみました。編集画面で、H2要素「ページ編集フォーム」が挿入されると思いますが、これが実際の編集フォームではない位置に挿入されました。コメントプラグインを使用している位置に挿入されてしまっています。 - kuwa (2009年08月21日 00時02分26秒)
  • すみません、↑の症状はプレビュー画面での話でした。 - kuwa (2009年08月21日 00時17分57秒)
  • 宛 kuwa さん:ご報告ありがとうございます。「入力フォーム(comment プラグイン等)が存在するページの編集中にプレビューを行うと、不正な位置にH2要素『ページ編集フォーム』が挿入される」というカッコ悪い不具合の再現を確認しました。これから対策を考えます。 - ぐうます (2009年08月21日 12時51分58秒)
  • 不具合を修正した新版 ezop.20090823.zip を添付しました。 - ぐうます (2009年08月23日 14時15分11秒)
  • とても便利ですね!操作性がちょっとどころかかなり改善された気がします。 - Masanori (2009年08月25日 08時57分06秒)
  • ほしかったプラグインをありがとうございました。BugTrack-plugin/69:権限がなく参照/編集できなかったページにログイン後移動するパッチを何度も挑戦してエミ他のですが、パッチの当て方がわからず、あきらめかけていたときでした。新しい使い方ができるようになったので、たいへん感謝しています。ありがとうございまいた。 - タマ (2009年08月27日 00時10分48秒)
  • さっそく使わせていただいて、気がついたことなのですが、Aというページの参照権を設定しておいて、そのページにアクセスすると、ログイン画面が出るのはいいのですが、Aというページを別のページにインクルードプラグインで埋め込んでおくとAのところログイン画面が出ず、参照権がないというメッセージのみ出ます。このへん、なんとかならないでしょうか? - タマ (2009年08月27日 14時33分15秒)
  • 宛 Masanori さん:コメントありがとうございます。使用される中で気になる点などありましたらどんどんご指摘下さい。よろしくお願い致します。 - ぐうます (2009年08月29日 11時53分09秒)
  • 宛 タマさん:なるほど、その点については気付いておりませんでした。ご指摘ありがとうございます。念のため確認なのですが、タマさんご要望の動作は次のような仕様でよろしいでしょうか? ご確認をお願い致します。 - ぐうます (2009年08月29日 11時54分08秒)
    • 条件 1:あるページ A が存在し、そのページ A 自体の閲覧権限は「非ログインユーザ閲覧不可」。
    • 条件 2:あるページ B が存在し、そのページ B 自体の閲覧権限は「非ログインユーザ閲覧可」。
    • 条件 3:ページ B は、include プラグインでページ A を読み込んでいる。
    • 条件 1〜3 であるとき、ページ B はあたかも「非ログインユーザ閲覧不可」であるものとして扱う。すなわち、非ログインユーザがページ B の閲覧を試みた際には閲覧権限エラーとログインフォームを表示する。
  • レス、ありがとうございます。「条件 1〜3 であるとき、ページ B はあたかも「非ログインユーザ閲覧不可」であるものとして扱う。」が考えていたのとは違います。Bは一般公開されているページだからそのまま閲覧できます。しかし、Bの一部分にインクルードしてあるAの部分には、「ページの参照権限がありません。」というメッセージだけが出ます。ここにログイン画面も表示して、合っていれば、インクルードされたAがBの中に表示されるようにできないか、どうかということです。 - タマ (2009年08月30日 01時51分30秒)
  • 了解致しました。実現可能かどうか、検討してみます。 - ぐうます (2009年08月30日 23時12分13秒)
  • このプラグインをインストールすると、「凍結」しているページが誰でも編集可能になります。インストールしていない状態(FSwikiデフォルト)ではログインしないと編集できないのですが、本プラグイン仕様上の制限でしょうか。 - MRB (2009年09月16日 15時05分25秒)
  • 宛 MRB さん:ご指摘の件、バグでしたので修正版を添付しました。ご報告ありがとうございました。 - ぐうます (2009年09月16日 18時10分11秒)
  • というわけで、最新版 ezop.20090916.zip(739) を添付しました。従来版には「凍結中のページが管理者以外のユーザでも編集できる」という重大なバグがありますので、お手数のところ申し訳ありませんが、従来版をご使用中の方は速やかに最新版に置き換えいただきますようお願い致します。なお、バグ修正以外の変更点につきましては、更新履歴をご参照下さい。 - ぐうます (2009年09月16日 18時18分05秒)
  • 最新版、ダウンロードして使わせていただいています。リクエストをした機能も実現されていて、そして、その他メニューが追加されたのもとても便利になりました。ありがとうございました。 - タマ (2009年09月18日 19時20分48秒)
  • mod_perl 環境特有なのかもしれませんが、編集後の redirect が正常に動作しませんでした。redirectURL() ではなく、redirect() wo - kidak (2009年12月18日 12時33分38秒)
  • redirect() を使うのが正しかったりしないでしょうか?こちらでは $wiki->redirectURL($url); を $wiki->redirect($pagename); にすることで正常に動作するようになりました。 - kidak (2009年12月18日 12時34分43秒)
  • 宛 kidak さん:ご報告ありがとうございます。ご指摘の件ですが、$wiki->redirect($pagename); に変更してしまうと FSWiki 標準と同じ動作になってしまうので、それはこのプラグインで実現しようとしている機能と異なります。直近対策としてはそれでしのいでいただきつつ、もしよろしければ、下記質問にご回答いただけないでしょうか。 - ぐうます (2009年12月18日 17時30分23秒)
    • kidak さんのコメントに、「編集後の redirect が正常に動作しませんでした。」とありますが、そのとき発生した不具合現象を具体的にお教え下さい。エラーが出たのであれば、そのエラーメッセージを(可能ならコピーペーストで)コメント投稿お願い致します。
    • お使いの、サーバ OS, Apache, perl, FSWiki, ブラウザ, のそれぞれについて、種類/バージョンをお教え下さい。
  • 以上、よろしくお願い致します。こちらでも、いろいろ調査してみます。 - ぐうます (2009年12月18日 17時33分01秒)
  • Apache 2.2.14/mod_perl 2.0.4/FSWiki 3.6.3-1/Firefoxなど - kidak (2009年12月19日 00時26分07秒)
  • 内容としては Content-Type が二度 Apache に渡されているらしく、ブラウザ側に (HTTPプロトコルヘッダ or HTMLとして) Content-Type が渡されています。 - kidak (2009年12月19日 00時27分44秒)
  • その結果、ブラウザによっては plain text として扱われ、redirect されずに meta タグのリダイレクトの html 文そのものが表示されます(設定が meta タグによるリダイレクトです) - kidak (2009年12月19日 00時29分32秒)
  • (なんだか説明が下手でごめんなさい。)一度目の Content-Type は Apache に処理され、二度目の Content-Type はブラウザに処理され、ブラウザによってはそのまま text として表示してしまうため、meta http-equiv="Refresh"〜〜 などがそのまま source として表示されます。 - kidak (2009年12月19日 00時32分26秒)
  • 詳細なご説明、ありがとうございます。つまり、$wiki->redirectURL($url); のままだと「HTTP プロトコルヘッダが 2 重になる」ということですね。過去に同様の事例としては、「BBS-サポート掲示板/178:Apache2のMOD_PERLでの動作」、「BBS-サポート掲示板/789:mod_perl化したらヘッダが正しく出力されない」などがありますが、解決に至っていないようですし、本件は「一部のリダイレクトのときだけ発生する」ということから、ちょっと状況が異なるのかもしれませんね。 - ぐうます (2009年12月19日 15時20分12秒)
  • しかし、「$wiki->redirect($pagename); に変更すると問題なくなる」というのがうまく説明できません。結局のところ、$wiki->redirect($pagename); は、$wiki->redirectURL($wiki->create_url({page=>$pagename})); と等価なので、リダイレクトを発生させる処理としてはどちらも $wiki->redirectURL() を使用しているんですよね。何故、元の $wiki->redirectURL($url); ではだめなのか、今のところ見当もつきません。 - ぐうます (2009年12月19日 15時20分43秒)
  • さて、とりあえずの回避策ですが、「管理者メニュー」→「環境設定」→「リダイレクト時の処理」で 「Location ヘッダでリダイレクト」を選択すると回避できたりはしないでしょうか? - ぐうます (2009年12月19日 15時21分00秒)
  • Location ヘッダでのリダイレクトを設定すると、Location: http://〜〜 だけがブラウザに表示されます。(meta でリダイレクトだと、IE とかはゴミ Content-Type を無視して redirect してくれます) - kidak (2009年12月21日 17時43分50秒)
  • こちらもそれなりに source を追ったのですが、結局わかっていません。mod_perl2 が備える、mod_perl1 との後方互換設定である、PerlModule Apache2::compat などを入れてもだめのようです。 - kidak (2009年12月21日 17時46分11秒)
  • 現状、Meta でのリダイレクトと redirect($page) 以外は動作できない状況です。(この状態であっても、未ログインから編集リンク→ID&パスワードなどができるので便利なのは間違いないのです) - kidak (2009年12月21日 17時57分43秒)
  • @INC に lib を静的に登録してもダメなので、変数の上書きじゃないかな、と考えています。(利用しているサブルーチンの変数が別のアクセスで変更されうる実装の可能性) とはいえ、これ以上は時間を避けないので、こちらではこの辺で手を打ちます。ご迷惑をおかけしました。 - kidak (2009年12月21日 18時01分08秒)
  • 了解致しました。$wiki->redirectURL($url); を $wiki->redirect($pagename); に変更した場合の影響範囲は下記の通りです。 - ぐうます (2009年12月21日 20時13分38秒)
    • 編集フォームの「適用」ボタンの機能:
      • 変更前:編集中のページを保存した後、そのページを再度編集。
      • 変更後:編集中のページを保存した後、そのページを通常閲覧(「保存」ボタンと同じ)。
    • パート編集した場合の「保存」ボタンを押した後の閲覧時の挙動:
      • 変更前:編集したページの編集したパートから閲覧(パートアンカーへジャンプ)。
      • 変更後:編集したページの先頭から閲覧(FSWiki 標準と同じ)。
  • 時間ができてしまったので(汗)、自作ライブラリとかで検証したところ、$| (autoflush) の値が 0 以外のとき、Apache 側に正しく Content-Type がわたらないのが問題のようです。 - kidak (2009年12月22日 16時02分51秒)
  • mod_perl の bug とも仕様ともいえる微妙なラインが本質の原因のようです。対策として、Content-Type を出力しているすべての部分(sub ルーチン全体、ないしは、{} でスコープを区切って、local $|=0; を加えることで解決しました。 - kidak (2009年12月22日 16時08分14秒)
  • 今件は、この plugin 特有の問題ではなく、wiki 本体の問題であるので、別途、作者の方に報告しておきます。 - kidak (2009年12月22日 16時09分23秒)
  • BugTrack-wiki/336 にて報告しておきました。現在はぐうますさん作成の ezop のまま動作するようになっています。 - kidak (2009年12月22日 16時47分34秒)
  • いえ。勘違いでした。local $| = 0; は別の不具合で、やはり META による redirect しか期待通りに動作しません。 Location や redirectURL がかかわるものはすべからくダメのようです。なぞです。。。 - kidak (2009年12月24日 11時22分33秒)
  • 原因がわかりました。前述の Content-Type の問題にくわえ、sendmail で(パイプを使うとまずい?)メールを送る設定だからでした。Net::SMTP で送るように setup.dat を変更することで解決しました。今件はこのプラグインとは関係ないので、kidak がかかわるコメント欄は全部消してくださっても問題ありません。移行の話は BugTrack-wiki/336 でします。 - kidak (2009年12月26日 18時01分13秒)
  • charset=UTF-8で出力されたページでページを新規作成しようと試みたのですが「ページ名の日本語コードは、EUC でなければなりません。」とエラーになってしまいます。 この場合、ezop/EditPage.pmの下記箇所
#    if ($pagename !~ m{^(?:$AsciiOrEUC)*$}) {
#        $error .= qq|ページ名の日本語コードは、EUC でなければなりません。\n|;
#        $pagename = q{};
#    }

をコメントアウトする事でutf8版3_6_3_1にて動作確認出来ました。 - たった (2010年01月21日 20時10分58秒)

  • fswiki(Ver 3.6.4)で便利に使わせていただいております、非常に良い感じです。本日、3.6.5で予定されていると思われる「編集画面で差分を確認できる」機能をSVNからいれてみたのですが、プレビューボタンが二つになって差分のボタンが現れないのですが、使用方法が悪いのでしょうか?それとも 3.6.5に ezopを対応させないといけないのでしょうか?- - takes (2011年11月08日 13時53分33秒)
  • 宛 takes さん:ご指摘の不具合の件、ezop を FSWiki 3.6.5 に対応させる必要があると思います。FSWiki 3.6.5 では、編集ページなどで新機能がたくさん盛り込まれているようですね。なので、それらの新機能を考慮していない現バージョンの ezop を適用すると、ご指摘の点以外にもおそらく不具合が発生するものと思われます。まだまだ新機能が取り込まれている最中の FSWiki 3.6.5 に、投稿プラグインである ezop がその都度追従するのは難しく、また、当方の手元で FSWiki 3.6.5 環境を今すぐに立ち上げるのも困難なので、申し訳ありませんが短期間での FSWiki 3.6.5 対応はご容赦いただきたく。とはいえ、基本的には時間の許す範囲内で追従したいとは思いますので、他にも不具合に気付かれましたらこちらにコメントいただけると助かります。なお、今回ご指摘の件に関しては、「編集フォームに適用ボタンを追加する」という ezop の機能を無効にすれば問題無くなるのではないかと思いますので、その部分をコメントアウトした EditPage.pm を EditPage.no_apply_button.20111109.pm(291) として添付しました。こちらでよろしければ、ダウンロードして EditPage.pm にリネーム後、./plugin/ezop/EditPage.pm と差し替えてご利用下さい。 - ぐうます (2011年11月09日 23時10分25秒)
  • 宛 ぐうますさん:迅速な対策版の提供ありがとうございました。早速、使用させていただいております。今のところ問題の発生は無く、適用ボタンをあまり使用していなかったこともあり、以前と同様快適です。また、何かありましたら、よろしくお願いします。 - takes (2011年11月10日 09時41分49秒)
  • BBS-サポート掲示板/973 のご要望に対応する暫定版の Install.pm を Install.forBBSSK973.pm(271) として添付しました。編集権限の有無にかかわらず、Wikiメニューに常に「編集」リンクを表示します。こちらでよろしければ、ダウンロードして Install.pm にリネーム後、./plugin/ezop/Install.pm と差し替えてご利用下さい。 - ぐうます (2013年05月08日 18時49分38秒)
  • 上記要望を出させていただいた者です。早速ご対応いただきありがとうございます。返信遅くなりまして申し訳ありません。次週に適用の上、動作を確認させていただきたいと思います。 - 名無しさん (2013年05月11日 23時38分31秒)
  • 適用後、確認させていただきました。特に問題なく動作しております。ありがとうございました。暫定版ということですが、もし本体に入れていただくことが可能であれば, - 名無しさん (2013年05月13日 10時33分13秒)
  • パート編集時の編集リンクと新規作成リンクも同様のご対応をいただければありがたいです。とは言いつつご対応いただいた機能が要望の大半を占めますので、無理は申しません。途中送信失礼しました。 - 名無しさん (2013年05月13日 10時38分14秒)
お名前: コメント: