25 March 2011

WebSVNのShiftJIS対応、ユーザ名消去、ダウンロード対応化

WebSVN(http://www.websvn.info/)を使いやすいようにカスタマイズする。 使っているWebSVNのバージョンは2.3.2 (2010/12/10)。

■ ShiftJIS (SJIS) や JIS, EUCに対応させる

include/command.php 26行目あたり

// command.php
//
// External command handling

function detectCharacterEncoding($str) {
// $list = array(/*'ASCII',*/ 'UTF-8', 'ISO-8859-1');
$list = array('UTF-8', 'SJIS', 'JIS', 'EUC-JP', 'ISO-8859-1');
if (function_exists('mb_detect_encoding')) {
// @see http://de3.php.net/manual/en/function.mb-detect-encoding.php#81936
// why appending an 'a' and specifying an encoding list is necessary
return mb_detect_encoding($str.'a', $list);

} else if (function_exists('iconv')) {
foreach ($list as $item) {
$encstr = iconv($item, $item.'//TRANSLIT//IGNORE', $str);
if (md5($encstr) == md5($str)) return $item;
}
}

return null;
}


■ ユーザ名消去
ファイルリストやログ表示で「修正者」の所に表示されるユーザ名を消去、または適当な文字列に差し替える。

include/svnlook.php 283行目と402行目あたり

case 'AUTHOR':
if ($debugxml) print 'Author: '.$data."\n";
if ($data === false || $data === '') return;
if (function_exists('mb_detect_encoding') && function_exists('mb_convert_encoding'))
$data = mb_convert_encoding($data, 'UTF-8', mb_detect_encoding($data));
// $curList->curEntry->author .= $data;
$curList->curEntry->author = 'user';
break;

■ 拡張子 cgi を perl 構文として着色する

include/setup.php 283行目と402行目あたり

'.cc' => 'cpp',
'.cgi' => 'perl',
'.cpp' => 'cpp',


'matlab' => array('m'),
'perl' => array('pl', 'pm', 'cgi'),
'php' => array('php', 'php3', 'php4', 'php5', 'phps', 'phtml'),


■ ダウンロードの有効化
ダウンロード機能を強制的に有効化する

include/configclass.php 230行目あたり

// Local configuration options must start off unset

var $allowDownload = true;
var $minDownloadLevel = 0;
var $allowedExceptions = array();
var $disallowedExceptions = array();

この変更で、function isDownloadAllowed($path) が true を返すようになり、listing.php の150行目あたりの if ($rep->isDownloadAllowed($path.$file)) を通過できるようになる。 (解決方法として、もしかして間違ってるかも…)


■ 更新日時を○○日○○時間前から、20XX-XX-XX 00:00:00 形式へ変更

リポジトリ一覧での表示変更

index.php 75行目あたり

if (isset($log->entries[0])) {
$head = $log->entries[0];
$listing[$i]['revision'] = $head->rev;
$listing[$i]['date'] = $head->date;
// $listing[$i]['age'] = datetimeFormatDuration(time() - strtotime($head->date));
$listing[$i]['age'] = $head->date;
$listing[$i]['author'] = $head->author;
} else {

ファイル一覧での表示変更

listing.php 146行目あたり

// $listing[$index]['age'] = $entry->age;
$listing[$index]['age'] = $entry->date;
$listing[$index]['date'] = $entry->date;