Skip to content

m0370/pukiwiki_draft

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2,577 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PukiWiki 下書き機能

PukiWikiに下書き機能を追加しました。ページの編集中に内容を一時保存し、後で編集を再開できます。

機能概要

1. 下書き保存

編集中のページを下書きとして保存できます。本文には影響しません。

2. 下書きから復帰

保存した下書きを読み込んで、編集を再開できます。

3. 下書き管理

すべての下書きを一覧表示し、編集・公開・削除ができます。

使い方

下書きを保存する

  1. ページの編集画面を開きます
  2. 内容を編集します
  3. 下書き保存」ボタンをクリックします
  4. 「下書きを保存しました」と表示されます

既に下書きがある場合は、確認ダイアログが表示されます。「OK」を選択すると上書き保存されます。

下書きから復帰する

方法1: 編集画面から

  1. 下書きがあるページの編集画面を開きます
  2. 画面上部に「下書きが保存されています」と表示されます
  3. 下書きから復帰」ボタンをクリックします
  4. 下書きの内容が読み込まれます

方法2: 下書き一覧から

  1. ?cmd=draft にアクセスして下書き一覧を開きます
  2. 編集したい下書きの「編集」リンクをクリックします
  3. 下書きの内容が展開された状態で編集画面が開きます

下書きを公開する

  1. ?cmd=draft にアクセスして下書き一覧を開きます
  2. 公開したい下書きの「公開」リンクをクリックします
  3. 確認ダイアログで「OK」をクリックします
  4. 下書きが本文として公開され、下書きは削除されます

下書きを削除する

  1. ?cmd=draft にアクセスして下書き一覧を開きます
  2. 削除したい下書きの「削除」リンクをクリックします
  3. 確認ダイアログで「OK」をクリックします
  4. 下書きが削除されます

変更されたファイル

オリジナルのPukiWikiと比べて、以下のファイルが追加・変更されています。

新規追加されたファイル

ファイル 説明
draft/ 下書きデータを保存するディレクトリ
lib/draft.php 下書き操作関数のライブラリ
plugin/draft.inc.php 下書き管理プラグイン(一覧・公開・削除)
DRAFT_FEATURE.md 下書き機能の詳細ドキュメント(英語)

変更されたファイル

ファイル 変更内容
pukiwiki.ini.php DRAFT_DIR定義を追加
lib/init.php DRAFT_DIRのチェック処理を追加
lib/html.php 編集フォームに下書きボタンと通知を追加
plugin/edit.inc.php 下書き保存・読み込み処理を追加

技術仕様

データ保存場所

draft/[ページ名の16進数エンコード].txt

例: FrontPage の下書き → draft/46726F6E7450616765.txt

ファイル形式

#draft_saved:2025-11-15T12:00:00+09:00
ページの内容...

1行目がメタデータ(保存日時)、2行目以降が下書き本文です。

権限管理

  • 下書きの操作には、対象ページの編集権限が必要です
  • ページ編集権限のチェックと同じ仕組みを使用しています

セットアップ

1. draftディレクトリのパーミッション設定

下書き機能を使用するには、draft/ ディレクトリが書き込み可能である必要があります。

chmod 777 draft/

2. 動作確認

  1. 任意のページの編集画面を開く
  2. 「下書き保存」ボタンが表示されることを確認
  3. 内容を入力して「下書き保存」をクリック
  4. 「下書きを保存しました」と表示されればOK

アクセス制限

下書き一覧(?cmd=draft)へのアクセスは以下の条件で制限されています。

1. 読み取り専用モード

PukiWikiが読み取り専用モード(PKWK_READONLY = 1)の場合、下書き一覧にアクセスできません。

// pukiwiki.ini.php
define('PKWK_READONLY', 1); // 読み取り専用モード

この場合、?cmd=draft にアクセスすると以下のエラーが表示されます:

Prohibited by admin (READONLY mode)

2. 認証が有効な場合

編集認証が有効($edit_auth = 1)な場合、ログインユーザーのみが下書き一覧にアクセスできます。

// pukiwiki.ini.php
$edit_auth = 1; // 編集認証を有効化

ログインしていない場合のアクセス:

Authentication required to view draft list

ログイン済みの場合

  • 下書き一覧にアクセス可能
  • 自分の下書きだけでなく、すべての下書きが表示されます

3. 認証が無効な場合

編集認証が無効($edit_auth = 0、デフォルト)な場合:

  • 誰でも下書き一覧にアクセスできます
  • すべての下書きが表示されます

セキュリティに関する注意

  • 認証を有効にすることを推奨します
  • 認証が無効な場合、誰でも下書きを閲覧・編集・削除できます

トラブルシューティング

下書きが保存できない

原因: draft/ ディレクトリのパーミッションが不足している

解決方法:

chmod 777 draft/

下書きから復帰できない

原因: JavaScriptが無効になっている、またはブラウザの互換性の問題

解決方法:

  1. ブラウザのJavaScriptを有効にする
  2. 下書き一覧(?cmd=draft)から「編集」リンクをクリックして復帰する

確認ダイアログが表示されない

原因: ブラウザがJavaScriptのconfirm()をブロックしている

解決方法:

  1. ブラウザの設定でポップアップを許可する
  2. または、ダイアログが表示されなくてもそのまま進めてOK

下書き一覧にアクセスできない

原因1: 読み取り専用モードが有効になっている

解決方法:

// pukiwiki.ini.php
define('PKWK_READONLY', 0); // 読み取り専用モードを無効化

原因2: 認証が有効だがログインしていない

解決方法:

  1. ログインする(認証情報が必要)
  2. または、認証を無効にする(推奨しません)
    // pukiwiki.ini.php
    $edit_auth = 0; // 編集認証を無効化

ライセンス

GPL v2 or later (PukiWiki本体と同じライセンス)

開発者情報

  • 実装日: 2025年11月15日
  • 対応バージョン: PukiWiki 1.5.4
  • 下書き機能バージョン: 1.1.0

バージョン履歴

1.1.0 (2025-11-15)

  • アクセス制御機能を追加
    • 読み取り専用モード(PKWK_READONLY)でのアクセス制限
    • 編集認証($edit_auth)有効時のログインユーザー制限

1.0.0 (2025-11-15)

  • 初回リリース
    • 下書き保存・読み込み機能
    • 下書き一覧・管理機能
    • 下書き公開・削除機能
  • 下書き機能バージョン: 1.0.0

詳細ドキュメント

より詳細な技術情報や開発関連ドキュメントは、.claude/docs/ ディレクトリを参照してください。


開発者向け情報

PukiWikiアーキテクチャ概要

PukiWikiはPHP製のWikiエンジンで、以下の構造を持ちます。

ディレクトリ構成

pukiwiki_draft2/
├── index.php           # エントリーポイント
├── pukiwiki.ini.php    # 設定ファイル
├── lib/                # コアライブラリ
│   ├── pukiwiki.php    # メイン処理
│   ├── init.php        # 初期化処理
│   ├── html.php        # HTML生成
│   ├── func.php        # 共通関数
│   ├── file.php        # ファイル操作
│   ├── auth.php        # 認証・権限
│   ├── draft.php       # 【追加】下書き操作
│   └── ...
├── plugin/             # プラグイン
│   ├── edit.inc.php    # ページ編集【変更】
│   ├── draft.inc.php   # 【追加】下書き管理
│   └── ...
├── skin/               # スキン(テーマ)
│   ├── pukiwiki.skin.php
│   └── js/
│       └── autosave.js # 【追加】自動保存機能
├── wiki/               # ページデータ(テキスト形式)
├── draft/              # 【追加】下書きデータ
├── attach/             # 添付ファイル
└── backup/             # バックアップデータ

リクエスト処理フロー

  1. index.phplib/pukiwiki.php を呼び出し
  2. lib/init.php で初期化(設定読み込み、ディレクトリチェックなど)
  3. ?cmd=xxx パラメータに基づいてプラグインを実行
    • 例: ?cmd=editplugin/edit.inc.phpplugin_edit_action() を実行
  4. プラグインが HTML を生成して返す
  5. lib/html.php でページ全体のレイアウトを構築
  6. レスポンスを出力

プラグインシステム

  • プラグイン命名規則: plugin/xxx.inc.phpplugin_xxx_action() 関数
  • アクションプラグイン: plugin_xxx_action() - ページ全体を生成
  • ブロックプラグイン: plugin_xxx_convert() - Wiki記法内で使用
  • インラインプラグイン: plugin_xxx_inline() - 行内で使用

下書き機能の実装箇所

  • lib/draft.php: 下書き操作の中核ライブラリ(保存・読み込み・削除)
    • has_draft() - 下書き存在確認
    • get_draft() - 下書き取得
    • draft_write() - 下書き保存
    • draft_delete() - 下書き削除
    • get_draft_list() - 下書き一覧取得
  • plugin/draft.inc.php: 下書き一覧・管理UI(?cmd=draft
    • plugin_draft_action() - メイン処理
    • plugin_draft_list() - 一覧表示
    • plugin_draft_delete() - 削除処理
    • plugin_draft_publish() - 公開処理
  • plugin/edit.inc.php: 編集画面への下書き保存・復帰機能の追加
    • plugin_edit_draft_save() - 下書き保存処理
    • plugin_edit_load_draft() - 下書き読み込み処理
  • lib/html.php: 編集フォームへの下書きボタン・通知の追加
  • skin/js/autosave.js: 自動保存機能のJavaScript(30秒間隔で自動保存)

ローカル開発環境セットアップ

前提条件

  • PHP 8.3 または 8.4 がインストールされている
  • ファイルシステムの書き込み権限がある

開発サーバー起動

# PHPビルトインサーバーを起動
php -S localhost:8080

# ブラウザで http://localhost:8080 にアクセス

ディレクトリパーミッション設定

# 下書き機能に必要なパーミッション設定
chmod 777 draft/
chmod 777 wiki/
chmod 777 attach/
chmod 777 backup/
chmod 777 counter/
chmod 777 diff/

動作確認

# PHP構文チェック(変更したファイルを確認)
php -l lib/draft.php
php -l plugin/draft.inc.php
php -l plugin/edit.inc.php

# PHPバージョン確認
php -v

セキュリティ対策

下書き機能では以下のセキュリティ対策を実装しています:

  • CSRF対策: 全ての状態変更操作にトークンチェックを実装
  • XSS対策: 出力時は必ず htmlsc() でエスケープ
  • 権限チェック: 全ての下書き操作で check_editable() を使用
  • ファイル操作: encode() でファイル名を安全化
  • アクセス制限: 読み取り専用モードと認証機能に対応

コーディング規約

PukiWikiの既存コーディングスタイルに準拠しています:

  • 関数命名: plugin_draft_*(), draft_*()パターン
  • エラー抑制演算子(@)の使用は既存コードと同様に許容
  • 型宣言: PukiWiki本体が使用していない場合は無理に追加しない
  • PHP 8.3/8.4での動作を確保、PHP 9.0も視野

参考にすべきPukiWikiコード

  • plugin/edit.inc.php - 編集・保存処理のパターン
  • lib/file.php - ファイル操作のパターン
  • lib/auth.php - 認証・権限チェック
  • plugin/freeze.inc.php - CSRF対策の実装例

注意: この下書き機能は、PukiWikiのオリジナル機能ではありません。カスタマイズとして追加されたものです。

About

Mirror repository for pukiwiki_draft

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 89.1%
  • JavaScript 8.2%
  • CSS 2.7%