変更点

インストール

  • パーミッション設定 _setmod.sh
      0
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
    
    #!/bin/bash
    for d in attach backup cache counter diff trackback wiki log/browse log/check log/download log/update
    do
      echo $d
      chmod 777 $d
      chmod 666 $d/*
    done
    for d in doc extend image init lib locale plugin skin tools
    do
      echo $d
      find $d -type d | xargs chmod 755
      find $d -type f | xargs chmod 644
    done
    find . -name "*.php" | xargs chmod 644
    find . -name "index.html" | xargs chmod 755
    find . -name ".htaccess" | xargs chmod 755
  • wiki のディレクトリに SELinux の書き込み許可を与える。
    chcon -R -t httpd_cache_t attach backup cache counter diff trackback wiki

Digest 認証設定

  1. Digest 認証使用フラグをセットする。(auth_api.ini.php)
    (省略)
    $auth_api = array(
    	// Basic or Digest
    	'plus'	=> array(
    		'use'		=> 1,
    		'displayname'	=> 'Normal',
    	),
    (省略)
  2. passwd プラグインを adminpass パラメータ付きで呼び出し、管理用パスワードのハッシュを生成する。(auth.ini.php)
    • $adminpass
      (自分のサイトのURL)?plugin=passwd&adminpass
      パスワード管理者用パスワード
      暗号鍵任意の文字列
      CalculateMD5を選択
    • $auth_type
      // Authentication Type
      // 1: basic
      // 2: digest
      $auth_type = 2;
    • $realm
      // Authentication Parameter REALM
      $realm = '(サイト固有の名前)';
  3. passwd プラグインを呼び出し、暫定管理者(admin)用パスワードのハッシュを生成する。(auth_users.ini.php)
    (自分のサイトのURL)?plugin=passwd
    ユーザ名admin(固定)
    パスワード一時作業用パスワード
    暗号鍵任意の文字列
    CalculateMD5(固定)
    <?php
    $auth_users = array(
      'admin' => array( '(計算結果をコピー&ペースト)', 2 ),
    );
    ?>
  4. 暫定管理者(admin)としてログイン
    (自分のサイトのURL)?plugin=login
    ユーザ名admin(固定)
    パスワード一時作業用パスワード
  5. ユーザ追加作業のため、init/passwd.ini.php を新規作成。
    <?php
      define('USE_PKWK_WRITE_FUNC', TRUE);
    ?>
  6. auth_users.ini.php に書き込めるように権限変更。
    chown apache:apache auth_users.ini.php
    chmod 664 auth_users.ini.php
  7. 追加ユーザを作成する。
    (自分のサイトのURL)?plugin=passwd
    ユーザ名ユーザ名, 任意
    パスワードこのユーザ用パスワード
    暗号鍵管理用パスワード(一時作業用パスワードではない)
    役割認証者/コンテンツ管理者/サイト管理者から選択
    CalculateMD5(固定)
  8. ユーザ追加作業が終わったら init/passwd.ini.php を修正し追加できないようにする。
    <?php
      define('USE_PKWK_WRITE_FUNC', FALSE);
    ?>
  9. auth_users.ini.php の admin をコメントアウト。

pukiwiki.ini.php

変更項目変更前変更後
$page_titlePukiWikiTake's Wiki
$script//$script = 'http://example.com/pukiwiki/';
//$script = './';
//$script = 'http://example.com/pukiwiki/';
$script = './';
$modifieranonymoustake
$nowikiname01
$notimeupdate10
$lastmod01

auth.ini.php

変更項目変更前変更後
$adminpassXXXXxxxx
$auth_method_typecontentspagename
$edit_auth01
$edit_auth_pagesXXXX#^.*$#

default.css

変更項目変更前変更後
tdfont-size: 84%;font-size: 100%;
h1font-size: 20px;font-size: 144%;
h1.titlefont-size: 30px;font-size: 160%;

pukiwiki.css.php

変更項目変更前変更後
URIからテーマパス名, テーマ名を得る// Default CSS

// Send header
// Default CSS

$theme_path = dirname( $_SERVER['SCRIPT_NAME'] );
$theme_name = basename( $theme_path );

// Send header
bodyfont-size: 90%;font-size: 100%;
background-image: url("<?php echo $theme_path ?>/back.png");
background-repeat: no-repeat;
background-position: center;
td.menubarwidth: 9em;width: 12em;
div#menubarwidth: 9em;width: 12em;
span.noexistsbackground-color:#FFFACC;background-color:#FFEEAA;

pukiwiki.skin.php

変更項目変更前変更後参照
メニューを常に表示<?php if (arg_check('read') && exist_plugin_convert('menu')) { ?><?php if (exist_plugin_convert('menu')) { ?>pukiwiki:FAQ/43
タイトルの下にURLではなくトピックパスを表示define( 'SKIN_DEFAULT_DISABLE_TOPICPATH', 1 );define( 'SKIN_DEFAULT_DISABLE_TOPICPATH', 0 );pukiwiki:質問箱3/257

default.skin.php

変更項目変更前変更後参照
トピックパスの場所を変更<div id="header">
<a href="<?php echo $modifierlink ?>"><img id="logo" src="<?php echo IMAGE_URI; ?>TakeAsh.png" width="80" height="80" alt="[TakeAsh.net]" title="[TakeAsh.net]" /></a>
<h1 class="title"><?php echo(($newtitle!='' && $is_read)?$newtitle:$page) ?></h1>
</div>
<div id="header">
<a href="<?php echo $modifierlink ?>"><img id="logo" src="<?php echo IMAGE_URI; ?>TakeAsh.png" width="80" height="80" alt="[TakeAsh.net]" title="[TakeAsh.net]" /></a>
<h1 class="title"><?php echo( ($newtitle!='' && $is_read)?$newtitle:$page) ?></h1>
<?php if ($is_page and exist_plugin_convert('topicpath')) { echo do_plugin_convert('topicpath'); } ?>
</div>
みこ:質問箱/253
<td class="ctable" valign="top">
<?php if ($is_page and exist_plugin_convert('topicpath')) { echo do_plugin_convert('topicpath'); } ?>
<div id="body"><?php echo $body ?></div>
</td>
<td class="ctable" valign="top">
<div id="body"><?php echo $body ?></div>
</td>

make_link.php

変更項目変更前変更後
?plugin=から始まるリンクもURLとみなす(?:(?:https?|ftp|news):\/\/|mailto:)[\w\/\@\$()!?&%#:;.,~'=*+-]+(?:(?:https?|ftp|news):\/\/|mailto:|\?plugin=)[\w\/\@\$()!?&%#:;.,~'=*+-]+

plugin.php

変更項目変更前変更後
プラグイン呼び出し回数制限define('PKWK_PLUGIN_CALL_TIME_LIMIT', 768);define('PKWK_PLUGIN_CALL_TIME_LIMIT', 1000);

attach.inc.php

変更項目変更前変更後参照
アップロードできるファイルの最大値を増やすdefine( "MAX_FILESIZE", 1024 * 1024);define( "MAX_FILESIZE", 50 * 1024 * 1024);pukiwiki:Q&A/プラグイン/attachプラグイン
PHP自体の設定変更も必要
zipがtgzに再圧縮されないようにする'zip' => 0, // zip'zip' => 0, // zip
'x-zip' => 0, // zip

calendar_viewer.inc.php

変更項目変更前変更後参照
見出しを<h1>から<h2>に変更$head = '<h1>' . $link . '</h1>' . "\n";$head = '<h2>' . $link . '</h2>' . "\n";pukiwiki:欲しいプラグイン/107

new.inc.php

変更項目変更前変更後参照
PHP-5.1 以降で、new プラグインが正常動作しない。pukiwiki.dev:BugTrack2/120

tracker.inc.php

tracker.inc.php, v1.34

	function Tracker_list($page,$refer,&$config,$list)
		...
		$pattern = join('',plugin_tracker_get_source($config->page.'/page'));

+		// "/page"の内容が長すぎるとpreg_match()が失敗するバグ(?)があるので
+		// "//////////"までをマッチ対象とさせる
+		$pattern_endpos = strpos($pattern, "//////////");
+		if($pattern_endpos > 0){
+			$pattern = substr($pattern, 0, $pattern_endpos);
+		}

		// ブロックプラグインをフィールドに置換
	function add($page,$name)
		...
		$source = join('',preg_replace('/^(\*{1,3}.*)\[#[A-Za-z][\w-]+\](.*)$/','$1$2',$source));

+		// "/page"の内容が長すぎるとpreg_match()が失敗するバグ(?)があるので
+		// "//////////"までをマッチ対象とさせる
+		$pattern_endpos = strpos($source, "//////////");
+		if($pattern_endpos > 0){
+			$source = substr($source, 0, $pattern_endpos);
+		}

		// デフォルト値

フォームからページを作成する際にプロキシページを自動作成

  • tracker プラグインの第3引数にページ名として使用する項目を指定する。
    #tracker(User/form,User,linkname)
  • linkname = 'UserA' だったとすると、'UserA' というページが自動的に作成され、作成されたページが include される。
    #include(User/1,notitle)
  • tracker.inc.php 1.123.13 用
    --- tracker.inc.2010-10-07.php  2010-10-07 01:27:45 +0900
    +++ tracker.inc.php     2015-08-26 13:34:38 +0900
    @@ -24,7 +24,7 @@
     // ----
     // Basic interface and strategy
    
    -define('PLUGIN_TRACKER_USAGE',      '#tracker([config[/form][,basepage]])');
    +define('PLUGIN_TRACKER_USAGE',      '#tracker([config[/form][,basepage[,createProxy]]])');
     define('PLUGIN_TRACKER_LIST_USAGE', '#tracker_list([config[/list]][[,base][,field:sort[;field:sort ...][,limit]]])');
    
     // $refer  : Where the plugin had been set / Where to return back to
    @@ -70,14 +70,18 @@
    
            $args = func_get_args();
            $argc = count($args);
    -       if ($argc > 2) return PLUGIN_TRACKER_USAGE . '<br />';
    +       if ($argc > 3) return PLUGIN_TRACKER_USAGE . '<br />';
    
            $base   = isset($vars['page']) ? $vars['page'] : '';
            $refer  = '';
            $config = '';
            $form   = '';
            $rel    = '';
    +       $createProxy = '';
            switch ($argc) {
    +       case 3:
    +               $createProxy = $args[2];
    +               /*FALLTHROUGH*/
            case 2:
                    $rel = $args[1];
                    /*FALLTHROUGH*/
    @@ -92,7 +96,7 @@
            unset($args, $argc, $arg);
    
            $tracker_form = & new Tracker_form();
    -       if (! $tracker_form->init($base, $refer, $config, $rel)) {
    +       if (! $tracker_form->init($base, $refer, $config, $rel, $createProxy)) {
                    return '#tracker: ' . htmlspecialchars($tracker_form->error) . '<br />';
            }
    
    @@ -151,6 +155,7 @@
    
            $base  = isset($post['_base'])  ? $post['_base']  : '';
            $refer = isset($post['_refer']) ? $post['_refer'] : '';
    +       $createProxy = isset($post['_createProxy']) ? $post['_createProxy'] : '';
    
            // $page name to add will be decided here
            $num  = 0;
    @@ -168,6 +173,7 @@
            }
    
            $config = isset($post['_config']) ? $post['_config'] : '';
    +       $createProxy = isset($post['_createProxy']) ? $post['_createProxy'] : '';
    
            // Petit SPAM Check (Client(Browser)-Server Ticket Check)
            $spam = FALSE;
    @@ -277,6 +283,11 @@
            // Write $template, without touch
            page_write($page, join('', $template));
    
    +       // Create proxy page
    +       if ($createProxy && ($proxyPage = isset($_post[$createProxy]) ? $_post[$createProxy] : '')) {
    +               page_write($proxyPage, '#include(' . $page . ',notitle)');
    +       }
    +
            pkwk_headers_sent();
            header('Location: ' . get_page_location_uri($page));
            exit;
    @@ -294,13 +305,16 @@
            var $raw_fields;
            var $fields = array();
    
    +       var $createProxy;
    +
            var $error  = '';       // Error message
    
    -       function init($base, $refer = '', $config = NULL, $relative = '')
    +       function init($base, $refer = '', $config = NULL, $relative = '', $createProxy = '')
            {
                    $base     = trim($base);
                    $refer    = trim($refer);
                    $relative = trim($relative);
    +               $createProxy = trim($createProxy);
    
                    if ($refer  == '') $refer  = $base;
                    if ($base   == '') $base   = $refer;    // Compat
    @@ -318,6 +332,7 @@
    
                    $this->base  = $base;
                    $this->refer = $refer;
    +               $this->createProxy = $createProxy;
    
                    if ($config !== NULL && ! $this->loadConfig($config)) {
                            return FALSE;
    @@ -856,6 +871,7 @@
                    $s_base   = htmlspecialchars($form->base);
                    $s_refer  = htmlspecialchars($form->refer);
                    $s_config = htmlspecialchars($form->config_name);
    +               $s_createProxy = htmlspecialchars($form->createProxy);
    
                    return <<<EOD
     <input type="submit" value="$s_title" />
    @@ -863,6 +879,7 @@
     <input type="hidden" name="_refer"  value="$s_refer" />
     <input type="hidden" name="_base"   value="$s_base" />
     <input type="hidden" name="_config" value="$s_config" />
    +<input type="hidden" name="_createProxy" value="$s_createProxy" />
     EOD;
            }
     }

replace_tak.inc.php

commnet.inc.php / pcomment.inc.php

amazon.inc.php

codehighlight.inc.php

auth.cls.php

  • function http_digest_parse() 内の正規表現から「+」外してるのは何故なんだろう?
    半角空白がマッチしないせいで、AND/OR検索ができなくなると思うんだけど…。
  • 同じ正規表現でも半角空白受け付ける場合もあるな。環境依存は面倒だな。

:config/plugin/attach/mime-type

変更項目変更前変更後
hqxをアップロードできるようにする|application/x-stuffit|sit|stuff it 圧縮ファイル||application/x-stuffit|sit hqx|stuff it 圧縮ファイル|
jsをアップロードできるようにする(新規追加)|application/x-javascript|js|JavaScript ファイル|
 

スキン自作

  • fileTakeAsh.skin.zip
  • スキン名の指定 (index.php)
    define('PLUS_THEME', 'MySkin');
  • ファイルは下記フォルダに専用ディレクトリを作成し配置する。
    extend/skin/theme/MySkin/MySkin.skin.php
    extend/skin/theme/MySkin/MySkin.css.php
    image/site/MySkin/
  • extend/.htaccess を編集し、アクセスを許可する。
    #Order allow,deny
    #Deny from all

添付ファイル: fileTakeAsh.skin.zip 369件 [詳細] filekeyword.apache.zip 361件 [詳細] filereplace_tak.inc.php.txt 523件 [詳細]

リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Sat, 29 Aug 2015 08:58:18 JST (818d)