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;